diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 000000000..7ef222611 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,41 @@ +name: Tests + +on: + pull_request: + push: + +jobs: + fast-tests: + name: Fast Tests (py${{ matrix.python-version }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.11", "3.12"] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: uv sync --all-extras + + - name: Run fast test lane + env: + RUN_INTEGRATION: "1" + RUN_LIVE_API: "0" + RUN_EXPENSIVE: "0" + RUN_DOCKER: "0" + run: > + uv run pytest massgen/tests + -m "not live_api and not docker and not expensive" + -k "not test_timeline_snapshot_final_presentation_lock_mode and not test_timeline_snapshot_real_tui_final_presentation_lock_mode" + -q --tb=no diff --git a/.gitignore b/.gitignore index db4723969..5e7fc32c0 100644 --- a/.gitignore +++ b/.gitignore @@ -232,3 +232,6 @@ webui/mockups/ node_modules/ .sandbox_test/ +.playwright* +.serena/ +.specify/ \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2aef3151e..bce002ffb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,6 +16,7 @@ repos: - id: fix-encoding-pragma - id: detect-private-key - id: trailing-whitespace + exclude: ^massgen/tests/frontend/__snapshots__/.*\.svg$ - repo: https://github.com/asottile/add-trailing-comma rev: v3.1.0 hooks: @@ -116,6 +117,19 @@ repos: args: [.] - repo: local hooks: + - id: run-non-api-tests-on-push + name: Run non-API test lane before push + entry: sh -c 'uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no' + language: system + pass_filenames: false + always_run: true + stages: [pre-push] + - id: sync-agent-instructions + name: Keep CLAUDE.md and AGENTS.md synchronized + entry: python scripts/precommit_sync_agent_instructions.py + language: system + files: ^(CLAUDE|AGENTS)\.md$ + pass_filenames: false # Need to fix locally # - id: validate-configs # name: Validate MassGen configuration files @@ -152,4 +166,4 @@ repos: # done' -- # language: system # files: ^massgen/.*\.py$ - # pass_filenames: true \ No newline at end of file + # pass_filenames: true diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..c0ed5fff2 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,428 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + + +# OpenSpec Instructions + +These instructions are for AI assistants working in this project. + +Always open `@/openspec/AGENTS.md` when the request: +- Mentions planning or proposals (words like proposal, spec, change, plan) +- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work +- Sounds ambiguous and you need the authoritative spec before coding + +Use `@/openspec/AGENTS.md` to learn: +- How to create and apply change proposals +- Spec format and conventions +- Project structure and guidelines + +Keep this managed block so 'openspec update' can refresh the instructions. + + + +## Planning +When planning or creating specs, use AskUserQuestions to ensure you align with the user before creating full planning files. + +## Instruction File Parity + +`CLAUDE.md` and `AGENTS.md` are required to stay identical in this repo. + +- Pre-commit hook `sync-agent-instructions` auto-syncs them. +- If both files are edited differently in one change, resolve manually so they match exactly. + +## Debugging Assumptions + +**IMPORTANT**: When the user asks you to check logs from a MassGen run, assume they ran with the current uncommitted changes unless they explicitly say otherwise. Do NOT assume "the run used an older commit" just because the execution_metadata.yaml shows a different git commit - the user likely ran with local modifications after you suggested changes. Always debug the actual code behavior first. + +## Implementation Guidelines + +After implementing any feature that involves passing parameters through multiple layers (e.g., backend → manager → component), always verify the full wiring chain end-to-end by tracing the parameter from its origin to its final usage site. Do not rely solely on unit tests passing — add an integration smoke test or assertion that the parameter actually arrives at its destination, not just that the downstream logic works when the parameter is provided. + +## Project Overview + +MassGen is a multi-agent system that coordinates multiple AI agents to solve complex tasks through parallel processing, intelligence sharing, and consensus building. Agents work simultaneously, observe each other's progress, and vote to converge on the best solution. + +### Design Principles: The Quality Matrix + +MassGen's strength comes from two orthogonal dimensions working together: + +| | **Parallel** (same task, N agents) | **Decomposition** (subtasks, owned) | +|------------------------|------------------------------------|-------------------------------------| +| **Enforcing Refinement** | Agents iterate until quality is genuinely achieved, not just adequate | Each subtask owner refines until their piece meets quality gates | +| **Ensuring Depth in Roles** | Strong personas give agents distinct creative visions, producing diverse high-quality attempts | Persona specialization ensures deep domain fit per subtask | + +- **Enforcing refinement** (currently: checklist-gated voting, gap analysis, improvements echo) = controls *how much* agents iterate and ensures each iteration is *worth it*. Multiple agents are key here: each round's evaluator sees all agents' prior answers, can identify unique strengths across them, and synthesizes the best elements into the next attempt. Without refinement, agents settle for "good enough." +- **Ensuring depth in roles** = persona/role generation that gives agents strong opinionated visions. A bare user prompt is rarely enough for quality output — the persona fills in the creative direction. Consider using a preliminary MassGen call to generate rich personas/briefs before the main execution run. + +Neither dimension alone is sufficient. Refinement without strong roles produces polished mediocrity. Strong roles without refinement produces ambitious first drafts that never mature. + +## Essential Commands + +All commands use `uv run` prefix: + +```bash +# Run tests +uv run pytest massgen/tests/ # All tests +uv run pytest massgen/tests/test_specific.py -v # Single test file +uv run pytest massgen/tests/test_file.py::test_name -v # Single test + +# Run MassGen (ALWAYS use --automation for programmatic execution) +uv run massgen --automation --config [config.yaml] "question" + +# Build documentation +cd docs && make html # Build docs +cd docs && make livehtml # Auto-reload dev server at localhost:8000 + +# Pre-commit checks +uv run pre-commit run --all-files + +# Validate all configs +uv run python scripts/validate_all_configs.py + +# Build Web UI (required after modifying webui/src/*) +cd webui && npm run build +``` + +## Architecture Overview + +### Core Flow +```text +cli.py → orchestrator.py → chat_agent.py → backend/*.py + ↓ + coordination_tracker.py (voting, consensus) + ↓ + mcp_tools/ (tool execution) +``` + +### Key Components + +**Orchestrator** (`orchestrator.py`): Central coordinator managing parallel agent execution, voting, and consensus detection. Handles coordination phases: initial_answer → enforcement (voting) → presentation. + +**Backends** (`backend/`): Provider-specific implementations. All inherit from `base.py`. Add new backends by: +1. Create `backend/new_provider.py` inheriting from base +2. Register in `backend/__init__.py` +3. Add model mappings to `massgen/utils.py` +4. Add capabilities to `backend/capabilities.py` +5. Update `config_validator.py` + +**MCP Integration** (`mcp_tools/`): Model Context Protocol for external tools. `client.py` handles multi-server connections, `security.py` validates operations. Some tools have dual paths: SDK (in-process, for ClaudeCode) and stdio (config.toml-based, for Codex). **Stdio MCP servers run inside Docker where `massgen` is NOT installed** — never import from `massgen` in stdio servers. Pre-compute any needed values in the orchestrator and pass via JSON specs files. Also note Codex sometimes sends tool args as JSON strings instead of dicts — always add a `json.loads()` fallback. + +**Streaming Buffer** (`backend/_streaming_buffer_mixin.py`): Tracks partial responses during streaming for compression recovery. + +### Backend Hierarchy +```text +base.py (abstract interface) + └── base_with_custom_tool_and_mcp.py (tool + MCP support) + ├── response.py (OpenAI Response API) + ├── chat_completions.py (generic OpenAI-compatible) + ├── claude.py (Anthropic) + ├── claude_code.py (Claude Code SDK) + ├── gemini.py (Google) + └── grok.py (xAI) +``` + +### Agent Statelessness and Anonymity +Agents are STATELESS and ANONYMOUS across coordination rounds. Each round: +- Agent gets a fresh LLM invocation with no memory of previous rounds +- Agent does not know which agent it is (all identities are anonymous) +- Cross-agent information (answers, workspaces) is presented anonymously +- System prompts and branch names must NOT reveal agent identity or round history + +### TUI Design Principles + +**Timeline Chronology Rule**: Tool batching MUST respect chronological order. Tools should ONLY be batched when they arrive consecutively with no intervening content (thinking, text, status). When non-tool content arrives, any pending batch must be finalized before the content is added, and the next tool starts a fresh batch. + +This is enforced via `ToolBatchTracker.mark_content_arrived()` in `content_handlers.py`, which is called whenever non-tool content is added to the timeline. + +## Configuration + +YAML configs in `massgen/configs/` define agent setups. Structure: +- `basic/` - Simple single/multi-agent configs +- `tools/` - MCP, filesystem, code execution configs +- `providers/` - Provider-specific examples +- `teams/` - Pre-configured specialized teams + +When adding new YAML parameters, update **both**: +- `massgen/backend/base.py` → `get_base_excluded_config_params()` +- `massgen/api_params_handler/_api_params_handler_base.py` → `get_base_excluded_config_params()` + +## Workflow Guidelines + +1. **Prioritize specs and TDD** - Write tests before implementation for complex features +2. **Keep PR_DRAFT.md updated** - Create a PR_DRAFT.md that references each new feature with corresponding Linear (e.g., `Closes MAS-XXX`) and GitHub issue numbers. Keep this updated as new features are added. You may need to ask the user whether to overwrite or append to this file. Ensure you include test cases here as well as configs used to test them. +3. **Review PRs** with `pr-checks` skill. +4. **Git staging**: Use `git add -u .` for modified tracked files +5. **Test-first execution loop**: + - Align with the user on acceptance tests and pass/fail criteria first. + - Implement tests before implementation changes for non-trivial work. + - After tests are in place, implement code and iterate until the agreed test suite passes. + - Treat this as the default path for automation work, backend changes, TUI work, and WebUI work. + +## Documentation Requirements + +Documentation must be **consistent with implementation**, **concise**, and **usable**. + +### What to Update (per PR) + +| Change Type | Required Documentation | +|-------------|----------------------| +| New features | `docs/source/user_guide/` RST with runnable commands and expected output | +| New YAML params | `docs/source/reference/yaml_schema.rst` | +| New models | `massgen/backend/capabilities.py` + `massgen/token_manager/token_manager.py` | +| Complex/architectural | Design doc in `docs/dev_notes/` with architecture diagrams | +| New config options | Example YAML in `massgen/configs/` | +| Breaking changes | Migration guide | + +### What to Update (release PRs only) + +For release PRs on `dev/v0.1.X` branches (e.g., `dev/v0.1.33`): +- `README.md` - Recent Achievements section +- `CHANGELOG.md` - Full release notes + +### Documentation Quality Standards + +**Consistency**: Parameter names, file paths, and behavior descriptions must match actual code. Flag any discrepancies. + +**Usability**: +- Include runnable commands users can try immediately +- Provide architecture diagrams for complex features +- Show expected output so users know what to expect + +**Conciseness**: +- Avoid bloated prose and over-documentation +- One clear explanation beats multiple redundant ones +- Remove filler text and unnecessary verbosity + +### File Locations + +- **Internal** (not published): `docs/dev_notes/[feature-name]_design.md` +- **User guides**: `docs/source/user_guide/` +- **Reference**: `docs/source/reference/` +- **API docs**: Auto-generate from Google-style docstrings + +## Registry Updates + +### When Adding New Models + +1. **Always update** `massgen/backend/capabilities.py`: + - Add to `models` list (newest first) + - Add to `model_release_dates` + - Update `supported_capabilities` if new features + +2. **Check LiteLLM first** before adding to `token_manager.py`: + - If model is in LiteLLM database, no pricing update needed + - Only add to `PROVIDER_PRICING` if missing from LiteLLM + - Use correct provider casing: `"OpenAI"`, `"Anthropic"`, `"Google"`, `"xAI"` + +3. **Regenerate docs**: `uv run python docs/scripts/generate_backend_tables.py` + +### When Adding New YAML Parameters + +Update **both** files to exclude from API passthrough: +- `massgen/backend/base.py` → `get_base_excluded_config_params()` +- `massgen/api_params_handler/_api_params_handler_base.py` → `get_base_excluded_config_params()` + +## CodeRabbit Integration + +This project uses CodeRabbit for automated PR reviews. Configuration: `.coderabbit.yaml` + +### Claude Code CLI Integration + +CodeRabbit integrates directly with Claude Code via CLI. After implementing a feature, run: + +```bash +coderabbit --prompt-only +``` + +This provides token-efficient review output. Claude Code will create a task list from detected issues and can apply fixes systematically. + +**Options**: +- `--type uncommitted` - Review only uncommitted changes +- `--type committed` - Review only committed changes +- `--base develop` - Specify comparison branch + +**Workflow example**: Ask Claude to implement and review together: +> "Implement the new config option and then run coderabbit --prompt-only" + +### PR Commands (GitHub/GitLab) + +In PR comments: +- `@coderabbitai review` - Trigger incremental review +- `@coderabbitai resolve` - Mark all comments as resolved +- `@coderabbitai summary` - Regenerate PR summary + +### Applying Suggestions + +- **Committable suggestions**: Click "Commit suggestion" button on GitHub +- **Complex fixes**: Hand off to Claude Code or address manually + +## Custom Tools + +Tools in `massgen/tool/` require `TOOL.md` with YAML frontmatter: +```yaml +--- +name: tool-name +description: One-line description +category: primary-category +requires_api_keys: [OPENAI_API_KEY] # or [] +tasks: + - "Task this tool can perform" +keywords: [keyword1, keyword2] +--- +``` + +Docker execution mode auto-excludes tools missing required API keys. + +## Testing Notes + +- Mark expensive API tests with `@pytest.mark.expensive` +- Use `@pytest.mark.docker` for Docker-dependent tests +- Async tests use `@pytest.mark.asyncio` +- **API Keys**: Use `python-dotenv` to load API keys from `.env` file in test scripts: + ```python + from dotenv import load_dotenv + load_dotenv() # Load before importing os.getenv() + ``` + +### Integration Testing Across Backends + +When creating integration tests that involve backend functionality (hooks, tool execution, streaming, compression, etc.), **test across all 5 standard backends**: + +| Backend | Type | Model | API Style | +|---------|------|-------|-----------| +| Claude | `claude` | `claude-haiku-4-5-20251001` | anthropic | +| OpenAI | `openai` | `gpt-4o-mini` | openai | +| Gemini | `gemini` | `gemini-3-flash-preview` | gemini | +| OpenRouter | `chatcompletion` | `openai/gpt-4o-mini` | openai | +| Grok | `grok` | `grok-3-mini` | openai | + +**Reference scripts**: +- `scripts/test_hook_backends.py` - Hook framework integration tests +- `scripts/test_compression_backends.py` - Context compression tests + +**Integration test pattern**: +```python +BACKEND_CONFIGS = { + "claude": {"type": "claude", "model": "claude-haiku-4-5-20251001"}, + "openai": {"type": "openai", "model": "gpt-4o-mini"}, + "gemini": {"type": "gemini", "model": "gemini-3-flash-preview"}, + "openrouter": {"type": "chatcompletion", "model": "openai/gpt-4o-mini", "base_url": "..."}, + "grok": {"type": "grok", "model": "grok-3-mini"}, +} +``` + +Use `--verbose` flag to show detailed output (injection content, message formats, etc.). + +## Key Files for New Contributors + +- Entry point: `massgen/cli.py` +- Coordination logic: `massgen/orchestrator.py` +- Agent implementation: `massgen/chat_agent.py` +- Backend interface: `massgen/backend/base.py` +- Config validation: `massgen/config_validator.py` +- Model registry: `massgen/utils.py` + +## Module Documentation + +Detailed documentation for specific modules lives in `docs/modules/`. **Always check these before working on a module, and update them when making changes.** + +- `docs/modules/subagents.md` - Subagent spawning, logging architecture, TUI integration +- `docs/modules/interactive_mode.md` - Interactive mode architecture, launch_run MCP, system prompts, project workspace +- `docs/modules/testing.md` - Testing strategy, TDD contract, CI gates, TUI/WebUI test architecture +- `docs/modules/worktrees.md` - Worktree lifecycle, branch naming, scratch archives, system prompt integration + +## MassGen Skills + +MassGen includes specialized skills in `massgen/skills/` for common workflows (log analysis, running experiments, creating configs, etc.). + +### Enabling Skill Discovery + +If MassGen skills aren't being discovered, symlink them to `.claude/skills/`: + +```bash +mkdir -p .claude/skills +for skill in massgen/skills/*/; do + ln -sf "../../$skill" ".claude/skills/$(basename "$skill")" +done + +# Also symlink the skill-creator for creating new skills +ln -sf "../.agent/skills/skill-creator" ".claude/skills/skill-creator" +``` + +Once symlinked, Claude Code will automatically discover and use these skills when relevant. + +### Creating New Skills + +When you notice a repeatable workflow emerging (e.g., same sequence of steps done multiple times), suggest creating a new skill for it. Use the `skill-creator` skill to help structure and create new skills in `massgen/skills/`. + +### Improving Existing Skills +After you finish a workflow using a skill, it is a good idea to improve it, especially if a human has guided you through new workflows or you found other errors or inefficiencies. You should edit the file in `massgen/skills/` to improve it and have the human approve it. + +## Linear Integration + +This project uses Linear for issue tracking. + +### Setup (if Linear tools unavailable) + +If `mcp__linear-server__*` tools aren't available: + +```bash +claude mcp add --transport http linear-server https://mcp.linear.app/mcp +``` + +### Feature Workflow + +1. **Create Linear issue first** → `mcp__linear-server__create_issue` +2. **For significant changes** → Create OpenSpec proposal referencing the issue +3. **Implement** → Reference issue ID in commits +4. **Update status** → `mcp__linear-server__update_issue` + +This ensures features are tracked in Linear and spec'd via OpenSpec before implementation. + +*Note*: When using Linear, ensure you use the MassGen project and prepend '[FEATURE]', '[DOCS]', '[BUG]', or '[ROADMAP]' to the issue name. By default, set issues as 'Todo'. + +## Release Workflow + +### Automated (GitHub Actions) + +| Trigger | Action | Workflow | +|---------|--------|----------| +| Git tag push | GitHub Release created | `auto-release.yml` | +| GitHub Release published | PyPI publish | `pypi-publish.yml` | +| Git tag push | Docker images built | `docker-publish.yml` | +| Git tag push | Docs validated | `release-docs-automation.yml` | + +### Release Preparation + +Use the `release-prep` skill to automate release documentation: + +```bash +release-prep v0.1.34 +``` + +This will: +1. Archive previous announcement → `docs/announcements/archive/` +2. Generate CHANGELOG.md entry draft +3. Create `docs/announcements/current-release.md` +4. Validate documentation is updated +5. Check LinkedIn character count (~3000 limit) + +### Announcement Files + +```text +docs/announcements/ +├── feature-highlights.md # Long-lived feature list (update for major features) +├── current-release.md # Active announcement (copy to LinkedIn/X) +└── archive/ # Past announcements +``` + +### Full Release Process + +1. **Merge release PR** to main +2. **Run `release-prep v0.1.34`** - generates CHANGELOG, announcement +3. **Review and commit** announcement files +4. **Create git tag**: `git tag v0.1.34 && git push origin v0.1.34` +5. **Publish GitHub Release** - triggers PyPI publish automatically +6. **Post to LinkedIn/X** - copy from `docs/announcements/current-release.md` + `feature-highlights.md` +7. **Update links** in `current-release.md` after posting diff --git a/CLAUDE.md b/CLAUDE.md index e2a749812..c0ed5fff2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,6 +24,13 @@ Keep this managed block so 'openspec update' can refresh the instructions. ## Planning When planning or creating specs, use AskUserQuestions to ensure you align with the user before creating full planning files. +## Instruction File Parity + +`CLAUDE.md` and `AGENTS.md` are required to stay identical in this repo. + +- Pre-commit hook `sync-agent-instructions` auto-syncs them. +- If both files are edited differently in one change, resolve manually so they match exactly. + ## Debugging Assumptions **IMPORTANT**: When the user asks you to check logs from a MassGen run, assume they ran with the current uncommitted changes unless they explicitly say otherwise. Do NOT assume "the run used an older commit" just because the execution_metadata.yaml shows a different git commit - the user likely ran with local modifications after you suggested changes. Always debug the actual code behavior first. @@ -36,6 +43,20 @@ After implementing any feature that involves passing parameters through multiple MassGen is a multi-agent system that coordinates multiple AI agents to solve complex tasks through parallel processing, intelligence sharing, and consensus building. Agents work simultaneously, observe each other's progress, and vote to converge on the best solution. +### Design Principles: The Quality Matrix + +MassGen's strength comes from two orthogonal dimensions working together: + +| | **Parallel** (same task, N agents) | **Decomposition** (subtasks, owned) | +|------------------------|------------------------------------|-------------------------------------| +| **Enforcing Refinement** | Agents iterate until quality is genuinely achieved, not just adequate | Each subtask owner refines until their piece meets quality gates | +| **Ensuring Depth in Roles** | Strong personas give agents distinct creative visions, producing diverse high-quality attempts | Persona specialization ensures deep domain fit per subtask | + +- **Enforcing refinement** (currently: checklist-gated voting, gap analysis, improvements echo) = controls *how much* agents iterate and ensures each iteration is *worth it*. Multiple agents are key here: each round's evaluator sees all agents' prior answers, can identify unique strengths across them, and synthesizes the best elements into the next attempt. Without refinement, agents settle for "good enough." +- **Ensuring depth in roles** = persona/role generation that gives agents strong opinionated visions. A bare user prompt is rarely enough for quality output — the persona fills in the creative direction. Consider using a preliminary MassGen call to generate rich personas/briefs before the main execution run. + +Neither dimension alone is sufficient. Refinement without strong roles produces polished mediocrity. Strong roles without refinement produces ambitious first drafts that never mature. + ## Essential Commands All commands use `uv run` prefix: @@ -85,7 +106,7 @@ cli.py → orchestrator.py → chat_agent.py → backend/*.py 4. Add capabilities to `backend/capabilities.py` 5. Update `config_validator.py` -**MCP Integration** (`mcp_tools/`): Model Context Protocol for external tools. `client.py` handles multi-server connections, `security.py` validates operations. +**MCP Integration** (`mcp_tools/`): Model Context Protocol for external tools. `client.py` handles multi-server connections, `security.py` validates operations. Some tools have dual paths: SDK (in-process, for ClaudeCode) and stdio (config.toml-based, for Codex). **Stdio MCP servers run inside Docker where `massgen` is NOT installed** — never import from `massgen` in stdio servers. Pre-compute any needed values in the orchestrator and pass via JSON specs files. Also note Codex sometimes sends tool args as JSON strings instead of dicts — always add a `json.loads()` fallback. **Streaming Buffer** (`backend/_streaming_buffer_mixin.py`): Tracks partial responses during streaming for compression recovery. @@ -132,6 +153,11 @@ When adding new YAML parameters, update **both**: 2. **Keep PR_DRAFT.md updated** - Create a PR_DRAFT.md that references each new feature with corresponding Linear (e.g., `Closes MAS-XXX`) and GitHub issue numbers. Keep this updated as new features are added. You may need to ask the user whether to overwrite or append to this file. Ensure you include test cases here as well as configs used to test them. 3. **Review PRs** with `pr-checks` skill. 4. **Git staging**: Use `git add -u .` for modified tracked files +5. **Test-first execution loop**: + - Align with the user on acceptance tests and pass/fail criteria first. + - Implement tests before implementation changes for non-trivial work. + - After tests are in place, implement code and iterate until the agreed test suite passes. + - Treat this as the default path for automation work, backend changes, TUI work, and WebUI work. ## Documentation Requirements @@ -303,6 +329,7 @@ Detailed documentation for specific modules lives in `docs/modules/`. **Always c - `docs/modules/subagents.md` - Subagent spawning, logging architecture, TUI integration - `docs/modules/interactive_mode.md` - Interactive mode architecture, launch_run MCP, system prompts, project workspace +- `docs/modules/testing.md` - Testing strategy, TDD contract, CI gates, TUI/WebUI test architecture - `docs/modules/worktrees.md` - Worktree lifecycle, branch naming, scratch archives, system prompt integration ## MassGen Skills @@ -398,4 +425,4 @@ docs/announcements/ 4. **Create git tag**: `git tag v0.1.34 && git push origin v0.1.34` 5. **Publish GitHub Release** - triggers PyPI publish automatically 6. **Post to LinkedIn/X** - copy from `docs/announcements/current-release.md` + `feature-highlights.md` -7. **Update links** in `current-release.md` after posting \ No newline at end of file +7. **Update links** in `current-release.md` after posting diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d2dac1339..c3ecc2840 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -348,6 +348,9 @@ Pre-commit hooks ensure code quality and consistency. Install them with: ```bash # Install pre-commit hooks pre-commit install + +# Install pre-push hooks (runs non-API test lane before push) +pre-commit install --hook-type pre-push ``` ### 4. Environment Configuration @@ -418,8 +421,14 @@ pre-commit run --all-files ### 4. Testing ```bash -# Default test command (skips slow/API-dependent tests) -uv run pytest -x -q -m "not expensive and not integration and not docker" --tb=no +# Default fast lane (recommended) +make test-fast + +# Equivalent direct command +uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no + +# Non-API push gate (used by pre-push hook) +uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no # Run specific test file uv run pytest massgen/tests/test_specific.py @@ -427,12 +436,14 @@ uv run pytest massgen/tests/test_specific.py # Run with coverage uv run pytest --cov=massgen massgen/tests/ -# Run integration tests (requires API keys, makes real API calls) +# Run integration-scope tests (non-API + API, depending on markers) uv run pytest --run-integration +# Run live API tests (requires API keys, may incur cost) +uv run pytest --run-integration --run-live-api -m "integration and live_api" + # Run all tests (integration, expensive, and docker) -# Not recommended for now -RUN_INTEGRATION=1 RUN_EXPENSIVE=1 RUN_DOCKER=1 uv run pytest +make test-all # Test with different configurations massgen --config @examples/basic/single/single_agent "Test question" @@ -442,7 +453,8 @@ massgen --config @examples/basic/single/single_agent "Test question" | Marker | When to Use | Example | |--------|-------------|---------| -| `@pytest.mark.integration` | Test makes real API calls (OpenAI, Claude, etc.) | Testing actual model responses | +| `@pytest.mark.integration` | Multi-component integration behavior (scope marker) | Orchestrator + agent + tracker coordination | +| `@pytest.mark.live_api` | Test calls real external provider APIs | Testing actual model responses | | `@pytest.mark.expensive` | Test is slow (>10s) or costs money | Large-scale coordination tests | | `@pytest.mark.docker` | Test requires Docker to be running | Container execution tests | @@ -461,8 +473,8 @@ def test_recording(): **Best practices:** - Unit tests should NOT require API keys or external services - Mock external dependencies when possible -- Use markers to separate fast unit tests from slow integration tests -- All marked tests are skipped by default in CI +- Use markers to separate scope (`integration`) from cost/runtime gates (`live_api`, `expensive`, `docker`) +- `integration`, `live_api`, `expensive`, and `docker` tests are skipped by default unless explicitly enabled ### 5. Commit Your Changes @@ -527,6 +539,10 @@ Our pre-commit configuration includes: ### Package Quality - **pyroma**: Check package metadata quality +### Test Gate +- **run-non-api-tests-on-push** (`pre-push`): Runs the non-API lane before push: + - `uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no` + ## 🎯 How to Find Where to Contribute MassGen development is organized into **tracks** - focused areas with dedicated owners who can guide your contributions. @@ -906,4 +922,4 @@ By contributing, you agree that your contributions will be licensed under the sa --- -Thank you for contributing to MassGen! 🚀 \ No newline at end of file +Thank you for contributing to MassGen! 🚀 diff --git a/Makefile b/Makefile index 15cd4c115..bacc1e107 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # MassGen Makefile # Convenience commands for common development tasks -.PHONY: help docs-check docs-build docs-serve docs-clean docs-validate docs-duplication all-checks +.PHONY: help docs-check docs-build docs-serve docs-clean docs-validate docs-duplication all-checks test test-fast test-all # Default target - show help help: @@ -17,7 +17,9 @@ help: @echo "" @echo "Quick Commands:" @echo " make check Run all checks (docs + tests)" - @echo " make test Run test suite" + @echo " make test Run fast default test lane" + @echo " make test-fast Run fast unit/default lane (CI-safe)" + @echo " make test-all Run integration + expensive + docker tests" @echo " make format Format code with black and isort" @echo " make lint Run linting checks" @echo "" @@ -83,11 +85,18 @@ check: docs-check test @echo "" @echo "✅ All checks passed!" -# Run tests -test: - @echo "🧪 Running tests..." - @uv run pytest massgen/tests/ - @echo "✓ Tests passed" +# Run fast default tests (includes deterministic integration; excludes live_api/expensive/docker) +test: test-fast + +test-fast: + @echo "🧪 Running fast test lane..." + @uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no + @echo "✓ Fast test lane passed" + +test-all: + @echo "🧪 Running full test lane (integration + expensive + docker)..." + @RUN_INTEGRATION=1 RUN_LIVE_API=1 RUN_EXPENSIVE=1 RUN_DOCKER=1 uv run pytest massgen/tests -v + @echo "✓ Full test lane passed" # Format code format: diff --git a/README.md b/README.md index c70aa6e50..a8f999236 100644 --- a/README.md +++ b/README.md @@ -258,13 +258,14 @@ uv run massgen --quickstart The `--setup` command will: - Configure your API keys (OpenAI, Anthropic, Google, xAI) - Offer to set up Docker images for code execution -- Offer to install skills (openskills, Anthropic collection) +- Offer to install skills (openskills, Anthropic/OpenAI/Vercel collections, Agent Browser skill, Crawl4AI) The `--quickstart` command will: - Ask how many agents you want (1-5, default 3) - Ask which backend/model for each agent - For GPT-5x models, ask for `reasoning.effort` (`low|medium|high`; Codex GPT-5 models also include `xhigh`) - Auto-detect Docker availability and configure execution mode +- If Docker mode is selected, show a Skills step where you can choose package(s) (`openskills`-based Anthropic/OpenAI/Vercel/Agent Browser plus Crawl4AI) and install them in-place with live status - Create a ready-to-use config and launch into interactive TUI mode **🖥️ Textual TUI (Default Display Mode):** diff --git a/README_PYPI.md b/README_PYPI.md index 2934dc7c5..2e12d7932 100644 --- a/README_PYPI.md +++ b/README_PYPI.md @@ -257,13 +257,14 @@ uv run massgen --quickstart The `--setup` command will: - Configure your API keys (OpenAI, Anthropic, Google, xAI) - Offer to set up Docker images for code execution -- Offer to install skills (openskills, Anthropic collection) +- Offer to install skills (openskills, Anthropic/OpenAI/Vercel collections, Agent Browser skill, Crawl4AI) The `--quickstart` command will: - Ask how many agents you want (1-5, default 3) - Ask which backend/model for each agent - For GPT-5x models, ask for `reasoning.effort` (`low|medium|high`; Codex GPT-5 models also include `xhigh`) - Auto-detect Docker availability and configure execution mode +- If Docker mode is selected, show a Skills step where you can choose package(s) (`openskills`-based Anthropic/OpenAI/Vercel/Agent Browser plus Crawl4AI) and install them in-place with live status - Create a ready-to-use config and launch into interactive TUI mode **🖥️ Textual TUI (Default Display Mode):** diff --git a/docs/modules/testing.md b/docs/modules/testing.md new file mode 100644 index 000000000..518d5758e --- /dev/null +++ b/docs/modules/testing.md @@ -0,0 +1,257 @@ +# Testing Module + +## Goal + +Build a fully automated testing system for MassGen across: + +- Core Python orchestration and backends +- TUI event/rendering behavior +- WebUI stores/components/E2E flows +- Integration and nightly real-provider checks + +The target workflow is test-first: agree on tests with the user, implement tests, then implement code until tests pass. + +## Baseline (Validated on 2026-02-07) + +- `102` Python test files in `massgen/tests/` +- `198` `Test*` classes in `massgen/tests/` +- `0` active xfail registry entries in `massgen/tests/xfail_registry.yml` +- CI runs `pytest` on push/PR via `.github/workflows/tests.yml` +- No first-party WebUI test files in `webui/src/` +- Frontend unit coverage has started in `massgen/tests/frontend/`: + - `test_tool_batch_tracker.py` + - `test_content_processor.py` + - `test_content_handlers_helpers.py` + - `test_timeline_event_recorder.py` + - `test_timeline_section_widget.py` + - `test_timeline_transcript_golden.py` + - Golden transcript fixtures in `massgen/tests/frontend/golden/` + - `test_timeline_snapshot_scaffold.py` + - SVG snapshot fixtures in `massgen/tests/frontend/__snapshots__/` + - Includes both widget-scoped snapshots and full runtime app snapshots (`TextualApp` layout) +- Deterministic non-API integration coverage has started in `massgen/tests/integration/`: + - `test_orchestrator_voting.py` + - `test_orchestrator_consensus.py` + - `test_orchestrator_stream_enforcement.py` + - `test_orchestrator_timeout_selection.py` + - `test_orchestrator_restart_and_external_tools.py` + - `test_orchestrator_hooks_broadcast_subagents.py` + - `test_orchestrator_final_presentation_matrix.py` + +## Marker Model + +MassGen test selection now uses two separate axes: + +- `integration`: test scope (multi-component integration behavior). +- `live_api`: real external provider calls (requires API keys, may incur cost). +- `expensive`: high-cost subset of tests (typically also `live_api`). +- `docker`: requires Docker runtime. + +Default policy is to skip gated categories unless explicitly enabled. + +- `--run-integration` or `RUN_INTEGRATION=1` +- `--run-live-api` or `RUN_LIVE_API=1` +- `--run-expensive` or `RUN_EXPENSIVE=1` +- `--run-docker` or `RUN_DOCKER=1` + +## Testing Strategy +See `specs/002-testing-strategy/testing-strategy.md` for full information. + +### P0: PR-Gated Fast Automation + +1. Add `pytest` workflow in `.github/workflows/tests.yml` for every push/PR. +2. Keep gated tests off by default (`RUN_INTEGRATION=0`, `RUN_LIVE_API=0`, `RUN_EXPENSIVE=0`, `RUN_DOCKER=0`). +3. Add deterministic unit tests for: + - `massgen/orchestrator.py` + - `massgen/coordination_tracker.py` + - `massgen/system_message_builder.py` + - `massgen/mcp_tools/security.py` +4. Add TUI pipeline tests using: + - `massgen/frontend/displays/timeline_event_recorder.py` + - `massgen/frontend/displays/content_handlers.py` + - `massgen/frontend/displays/content_processor.py` +5. Add WebUI tests (Vitest + Testing Library) for stores and critical components. + +### P1: Deterministic UI Regression + +1. TUI snapshot tests with `pytest-textual-snapshot`. +2. Golden transcript tests using `MASSGEN_TUI_TIMELINE_TRANSCRIPT`. +3. Playwright E2E for setup + coordination flows in WebUI. + +### P2: Nightly Deep Validation + +1. Nightly expensive tests against real providers. +2. Optional LLM-assisted visual/interaction checks for TUI and WebUI. + +## TUI Testing Layers + +1. Unit logic: `ToolBatchTracker`, helpers, normalization logic. +2. Event pipeline: `TimelineEventRecorder` with scripted `MassGenEvent` sequences. +3. Widget behavior: Textual `run_test(headless=True)` + Pilot. +4. Snapshot regression: SVG snapshots (`pytest-textual-snapshot`). +5. Transcript golden files: compare timeline structure instead of full text. + +## WebUI Testing Layers + +1. Store unit tests (`agentStore`, `wizardStore`, `workspaceStore`). +2. Utility tests (artifact detection, path normalization). +3. Component tests (cards, voting view, key workflow widgets). +4. Playwright E2E (setup gate, live coordination rendering, reconnect behavior). + +## Recommended Package Baselines (2026 Refresh) + +Python: + +- `pytest` 9.x +- `pytest-asyncio` 1.3+ +- `pytest-cov` 7.x +- `pytest-textual-snapshot` 1.1+ +- `cairosvg` 2.8+ (optional, for SVG-to-PNG vision checks) + +WebUI: + +- `vitest` 4.x +- `@testing-library/react` 16.x +- `@testing-library/dom` (required peer for React Testing Library 16) +- `@testing-library/jest-dom` 6.9+ +- `@testing-library/user-event` 14.x+ +- `jsdom` 27.x +- `@playwright/test` 1.57+ +- `msw` 2.12+ + +## LLM-Assisted Test Automation + +WebUI: + +- Prefer Playwright's native test agent workflow (`npx playwright init-agents`) for faster authoring, healing, and maintenance of E2E tests. + +TUI: + +- Keep deterministic tests as primary gate. +- Use LLM-driven terminal tools (`ht`, `agent-tui`) only as optional nightly evaluators, not PR gates. + +## TDD Execution Contract + +For non-trivial feature work, use this sequence: + +1. Align with user on acceptance tests and failure conditions. +2. Implement or update tests first. +3. Run tests and confirm they fail for the intended reason. +4. Implement code until tests pass. +5. Keep tests committed as regression protection. + +This contract applies to backend logic, TUI behavior, WebUI behavior, and integration workflows. + +## Instruction File Parity Hook + +`CLAUDE.md` and `AGENTS.md` must remain identical. This repo uses a pre-commit hook: + +- Hook id: `sync-agent-instructions` +- Script: `scripts/precommit_sync_agent_instructions.py` +- Behavior: + - If one file changes, sync it to the other. + - If both files change differently, fail and require manual merge. + +## Core Commands + +```bash +# Fast local suite +make test-fast + +# Integration/expensive (manual or nightly) +make test-all + +# Equivalent direct command for fast lane +uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no + +# Non-API push gate (includes deterministic integration, excludes live provider calls/docker/expensive) +uv run pytest massgen/tests --run-integration -m "not live_api and not docker and not expensive" -q --tb=no + +# Deterministic integration tests (non-costly) +uv run pytest massgen/tests/integration -q + +# Timeline transcript goldens (Layer 4) +uv run pytest massgen/tests/frontend/test_timeline_transcript_golden.py -q +UPDATE_GOLDENS=1 uv run pytest massgen/tests/frontend/test_timeline_transcript_golden.py -q + +# Textual SVG snapshots (Layer 3) +uv run pytest massgen/tests/frontend/test_timeline_snapshot_scaffold.py -q +uv run pytest massgen/tests/frontend/test_timeline_snapshot_scaffold.py --snapshot-update -q + +# Force HTML report location for snapshot mismatches +uv run pytest massgen/tests/frontend/test_timeline_snapshot_scaffold.py -q --snapshot-report snapshot_report.html + +# Live API integration tests (costly, explicit opt-in) +uv run pytest massgen/tests -m "integration and live_api" --run-integration --run-live-api -q + +# WebUI unit tests (after setup) +cd webui && npm run test + +# WebUI E2E (after setup) +cd webui && npx playwright test +``` + +## Viewing Snapshot Output + +1. Run snapshot tests: + - `uv run pytest massgen/tests/frontend/test_timeline_snapshot_scaffold.py -q` +2. If there is a mismatch, open the generated HTML report: + - `snapshot_report.html` (project root by default) +3. In the HTML report, use `Show difference` carefully: + - `ON`: blend-difference overlay (can look purple/black and is not raw baseline colors). + - `OFF`: raw current and historical snapshots. +4. Inspect committed baseline SVGs directly: + - `massgen/tests/frontend/__snapshots__/test_timeline_snapshot_scaffold/` +5. After intentional UI changes, regenerate baselines: + - `uv run pytest massgen/tests/frontend/test_timeline_snapshot_scaffold.py --snapshot-update -q` +6. Snapshot tests that validate runtime shell visuals force color-capable env in-test (`TERM=xterm-256color`, `COLORTERM=truecolor`, unset `NO_COLOR`) to avoid monochrome captures. +7. If your tool cannot display `svg` directly, render with a browser engine (recommended): + - `npx playwright screenshot "file:///ABS/PATH/to/snapshot.svg" /tmp/snapshot.png` + - This preserves Textual styling and avoids conversion artifacts. + - Batch helper: `uv run python scripts/render_snapshot_svgs.py --real-tui-only` +8. Avoid ImageMagick-based SVG conversion for Textual snapshots when checking typography/emoji fidelity; it can introduce mojibake-like artifacts that are not present in the source SVG. +9. For highest-fidelity UI checks, prioritize: + - `test_timeline_snapshot_real_tui_round_view.svg` + - `test_timeline_snapshot_real_tui_final_presentation_lock_mode.svg` + These are full `TextualApp` shell snapshots, not widget-only scaffold captures. + +## Synthetic TUI Demo (No API Cost) + +To visually inspect a full timeline/final-presentation flow without calling any model APIs: + +1. Lightweight replay (`--tui`): quick timeline-focused UI (not full runtime shell). + - `uv run python scripts/dump_timeline_from_events.py --tui massgen/tests/frontend/fixtures/synthetic_tui_events.jsonl agent_a` +2. Real runtime replay (`--tui-real`): boots actual `TextualApp` shell and replays synthetic events through it. + - `uv run python scripts/dump_timeline_from_events.py --tui-real massgen/tests/frontend/fixtures/synthetic_tui_events.jsonl agent_a` +3. Exit replay with `q` (or `Ctrl+D`). +4. Optional playback speed control for `--tui-real`: + - `MASSGEN_TUI_REPLAY_SPEED=8 uv run python scripts/dump_timeline_from_events.py --tui-real massgen/tests/frontend/fixtures/synthetic_tui_events.jsonl agent_a` + +Text-only replay (same events): +- `uv run python scripts/dump_timeline_from_events.py massgen/tests/frontend/fixtures/synthetic_tui_events.jsonl agent_a` + +### Parity Notes (`--tui` vs `--tui-real`) + +- `--tui` uses a minimal `EventReplayApp` around `TimelineSection` for quick debugging; layout can differ and may include extra vertical space. +- `--tui-real` runs the production `TextualApp` shell for high-fidelity visual checks without API cost. + +Remaining obstacle to perfect parity: some runtime-only orchestration state (status timers, winner/tab transitions, workspace/status metadata, animation timing) is not fully encoded in `events.jsonl`. Full equivalence for every frame requires richer replay metadata or a recorder that captures additional shell-state transitions. + +For regression gates, continue to rely on deterministic snapshot/golden tests in `massgen/tests/frontend/`. + +## Skill Candidate (Future) + +The synthetic replay workflow (`--tui` / `--tui-real`) is a strong candidate for a dedicated skill under `massgen/skills/` so contributors can quickly: + +1. replay real run logs without API cost, +2. inspect timeline/render behavior in a consistent way, +3. generate follow-up debugging artifacts for testing and docs. + +This fits best as an end-of-testing workflow for learning, debugging, and reproducing UI behavior before deciding whether to update snapshots/goldens. + +## Pre-Commit vs Fast Lane + +- `.pre-commit-config.yaml` includes a `pre-push` hook (`run-non-api-tests-on-push`) that runs the non-API lane. +- Enable it locally with: `uv run pre-commit install --hook-type pre-push`. +- The fast automation lane (`make test-fast` and `.github/workflows/tests.yml`) is where deterministic integration tests are expected to run. +- Live API tests stay opt-in behind `live_api` gating to avoid accidental paid runs. diff --git a/docs/source/quickstart/configuration.rst b/docs/source/quickstart/configuration.rst index 42de8973e..e3f84005e 100644 --- a/docs/source/quickstart/configuration.rst +++ b/docs/source/quickstart/configuration.rst @@ -512,6 +512,7 @@ Sensible defaults guidance: * Usually this is lower than fully parallel voting mode settings. * Add ``max_new_answers_global`` for deterministic total coordination budget. * Keep other answer-control parameters at defaults unless you need stricter behavior. +* Keep fairness defaults enabled (``fairness_enabled: true``, ``fairness_lead_cap_answers: 2``, ``max_midstream_injections_per_round: 2``) to prevent fast agents from repeatedly lapping slower peers and causing restart churn. Quickstart note: diff --git a/docs/source/quickstart/installation.rst b/docs/source/quickstart/installation.rst index c42e2a40f..097cf51ca 100644 --- a/docs/source/quickstart/installation.rst +++ b/docs/source/quickstart/installation.rst @@ -184,6 +184,13 @@ For advanced features like isolated code execution: These are optional - basic MassGen works without them. +.. note:: + + In ``uv run massgen --quickstart``, when Docker mode is selected the wizard includes + a Skills step where you can select package(s) and install them immediately with + on-page status updates (Anthropic/OpenAI/Vercel collections, Agent Browser skill, + and Crawl4AI). Use ``--setup-skills`` to retry or pre-install manually. + Development Installation ======================== diff --git a/docs/source/reference/yaml_schema.rst b/docs/source/reference/yaml_schema.rst index 39edf4003..6786306e1 100644 --- a/docs/source/reference/yaml_schema.rst +++ b/docs/source/reference/yaml_schema.rst @@ -575,6 +575,9 @@ Full multi-agent configuration demonstrating all 6 configuration levels: max_new_answers_per_agent: 2 # Cap new answers per agent (null=unlimited) max_new_answers_global: 8 # Cap total new answers across all agents (null=unlimited) answer_novelty_requirement: "balanced" # How different new answers must be (lenient/balanced/strict) + fairness_enabled: true # Keep coordination pacing balanced (default: true) + fairness_lead_cap_answers: 2 # Max lead in answer revisions vs slowest active peer + max_midstream_injections_per_round: 2 # Cap injected unseen source updates per round # Advanced settings skip_coordination_rounds: false # Normal coordination @@ -1038,6 +1041,8 @@ Voting and Answer Control These parameters control coordination behavior to balance quality and duration. +Fairness controls are designed to solve a common multi-agent failure mode: fast agents can repeatedly submit revisions while slower peers are still working, which creates uneven effort, restart churn, and noisy coordination loops. With fairness enabled (default), agents stay within a bounded revision lead and wait for peer updates before terminal decisions. + .. list-table:: :header-rows: 1 @@ -1061,6 +1066,18 @@ These parameters control coordination behavior to balance quality and duration. - string - No - Controls how different new answers must be from existing ones to prevent rephrasing. **Options:** ``"lenient"`` (default) - no similarity checks (fastest); ``"balanced"`` - reject if >70% token overlap, requires meaningful differences; ``"strict"`` - reject if >50% token overlap, requires substantially different solutions. + * - ``fairness_enabled`` + - boolean + - No + - Enable fairness pacing controls across both ``coordination_mode: voting`` and ``coordination_mode: decomposition``. **Default:** ``true``. + * - ``fairness_lead_cap_answers`` + - integer + - No + - Maximum allowed lead in answer revisions over the slowest active peer. When exceeded, ``new_answer`` is blocked until peers catch up. **Default:** ``2`` (set ``0`` for strict lockstep). + * - ``max_midstream_injections_per_round`` + - integer + - No + - Maximum unseen source-agent updates injected mid-stream into a single agent during one round. Helps prevent fast models from receiving runaway update fanout. **Default:** ``2``. **Example Configurations:** @@ -1073,6 +1090,9 @@ Fast but thorough (recommended for balanced evaluation): max_new_answers_per_agent: 2 # But cap at 2 tries max_new_answers_global: 8 # Stop global churn in long runs answer_novelty_requirement: "balanced" # Must actually improve + fairness_enabled: true + fairness_lead_cap_answers: 2 + max_midstream_injections_per_round: 2 Maximum quality with bounded time: @@ -1107,6 +1127,9 @@ Decomposition mode (recommended defaults): # Add a global cap for deterministic total coordination budget. max_new_answers_global: 9 answer_novelty_requirement: "balanced" + fairness_enabled: true + fairness_lead_cap_answers: 2 + max_midstream_injections_per_round: 2 Timeout Configuration ~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/user_guide/sessions/memory.rst b/docs/source/user_guide/sessions/memory.rst index a8fed1ca5..55dd3263c 100644 --- a/docs/source/user_guide/sessions/memory.rst +++ b/docs/source/user_guide/sessions/memory.rst @@ -482,7 +482,7 @@ Persistent Memory * - OpenAI - ``provider: "openai"``, ``model: "gpt-4.1-nano-2025-04-14"`` or ``"gpt-4o-mini"`` * - Anthropic - - ``provider: "anthropic"``, ``model: "claude-3-5-haiku-20241022"`` + - ``provider: "anthropic"``, ``model: "claude-haiku-4-5-20251001"`` * - Groq - ``provider: "groq"``, ``model: "llama-3.1-8b-instant"`` diff --git a/massgen/agent_config.py b/massgen/agent_config.py index f37823307..c51a2ee10 100644 --- a/massgen/agent_config.py +++ b/massgen/agent_config.py @@ -235,6 +235,9 @@ class AgentConfig: max_new_answers_per_agent: Maximum number of new answers each agent can provide (None = unlimited) max_new_answers_global: Maximum number of new answers across all agents (None = unlimited) answer_novelty_requirement: How different new answers must be from existing ones ("lenient", "balanced", "strict") + fairness_enabled: Enable fairness controls across all coordination modes (default: True) + fairness_lead_cap_answers: Maximum allowed lead in answer revisions over slowest active peer + max_midstream_injections_per_round: Maximum unseen source updates injected per agent per round """ # Core backend configuration (includes tool enablement) @@ -245,9 +248,13 @@ class AgentConfig: # Voting behavior configuration voting_sensitivity: str = "lenient" + voting_threshold: Optional[int] = None # Numeric threshold for ROI-style voting (e.g., 15 = 15% improvement required) max_new_answers_per_agent: Optional[int] = None max_new_answers_global: Optional[int] = None answer_novelty_requirement: str = "lenient" + fairness_enabled: bool = True + fairness_lead_cap_answers: int = 2 + max_midstream_injections_per_round: int = 2 # Agent customization agent_id: Optional[str] = None @@ -943,9 +950,13 @@ def to_dict(self) -> Dict[str, Any]: # Access private attribute to avoid deprecation warning "custom_system_instruction": self._custom_system_instruction, "voting_sensitivity": self.voting_sensitivity, + "voting_threshold": self.voting_threshold, "max_new_answers_per_agent": self.max_new_answers_per_agent, "max_new_answers_global": self.max_new_answers_global, "answer_novelty_requirement": self.answer_novelty_requirement, + "fairness_enabled": self.fairness_enabled, + "fairness_lead_cap_answers": self.fairness_lead_cap_answers, + "max_midstream_injections_per_round": self.max_midstream_injections_per_round, "timeout_config": { "orchestrator_timeout_seconds": self.timeout_config.orchestrator_timeout_seconds, "initial_round_timeout_seconds": self.timeout_config.initial_round_timeout_seconds, @@ -988,9 +999,13 @@ def from_dict(cls, data: Dict[str, Any]) -> "AgentConfig": agent_id = data.get("agent_id") custom_system_instruction = data.get("custom_system_instruction") voting_sensitivity = data.get("voting_sensitivity", "lenient") + voting_threshold = data.get("voting_threshold") max_new_answers_per_agent = data.get("max_new_answers_per_agent") max_new_answers_global = data.get("max_new_answers_global") answer_novelty_requirement = data.get("answer_novelty_requirement", "lenient") + fairness_enabled = data.get("fairness_enabled", True) + fairness_lead_cap_answers = data.get("fairness_lead_cap_answers", 2) + max_midstream_injections_per_round = data.get("max_midstream_injections_per_round", 2) # Handle timeout_config timeout_config = TimeoutConfig() @@ -1020,9 +1035,13 @@ def from_dict(cls, data: Dict[str, Any]) -> "AgentConfig": message_templates=message_templates, agent_id=agent_id, voting_sensitivity=voting_sensitivity, + voting_threshold=voting_threshold, max_new_answers_per_agent=max_new_answers_per_agent, max_new_answers_global=max_new_answers_global, answer_novelty_requirement=answer_novelty_requirement, + fairness_enabled=fairness_enabled, + fairness_lead_cap_answers=fairness_lead_cap_answers, + max_midstream_injections_per_round=max_midstream_injections_per_round, timeout_config=timeout_config, coordination_config=coordination_config, ) diff --git a/massgen/api_params_handler/_api_params_handler_base.py b/massgen/api_params_handler/_api_params_handler_base.py index e00c399be..cc98cce21 100644 --- a/massgen/api_params_handler/_api_params_handler_base.py +++ b/massgen/api_params_handler/_api_params_handler_base.py @@ -124,10 +124,15 @@ def get_base_excluded_params(self) -> Set[str]: "debug_delay_after_n_tools", # Per-agent voting sensitivity (coordination config, not API param) "voting_sensitivity", + "voting_threshold", # Decomposition mode parameters (handled by orchestrator, not passed to API) "coordination_mode", "presenter_agent", "subtask", + # Fairness controls (handled by orchestrator, not passed to API) + "fairness_enabled", + "fairness_lead_cap_answers", + "max_midstream_injections_per_round", } def build_base_api_params( diff --git a/massgen/backend/azure_openai.py b/massgen/backend/azure_openai.py index 148284a3b..d0ca96b0b 100644 --- a/massgen/backend/azure_openai.py +++ b/massgen/backend/azure_openai.py @@ -41,6 +41,15 @@ def __init__(self, api_key: Optional[str] = None, **kwargs): "Azure OpenAI API key is required. Set AZURE_OPENAI_API_KEY environment variable or pass api_key parameter.", ) + # Persist normalized Azure settings for introspection/tests and sensible defaults. + self.azure_endpoint = kwargs.get("azure_endpoint") or kwargs.get("base_url") or os.getenv("AZURE_OPENAI_ENDPOINT") + if self.azure_endpoint and self.azure_endpoint.endswith("/"): + self.azure_endpoint = self.azure_endpoint[:-1] + self.api_version = kwargs.get("api_version") or os.getenv( + "AZURE_OPENAI_API_VERSION", + "2024-12-01-preview", + ) + def get_provider_name(self) -> str: """Get the name of this provider.""" return "Azure OpenAI" @@ -76,11 +85,8 @@ async def stream_with_tools( # Import Azure OpenAI client from openai import AsyncAzureOpenAI, AsyncOpenAI - azure_endpoint = all_params.get("azure_endpoint") or all_params.get("base_url") or os.getenv("AZURE_OPENAI_ENDPOINT") - api_version = all_params.get("api_version") or os.getenv( - "AZURE_OPENAI_API_VERSION", - "2024-12-01-preview", - ) + azure_endpoint = all_params.get("azure_endpoint") or all_params.get("base_url") or self.azure_endpoint + api_version = all_params.get("api_version") or self.api_version # Validate required configuration if not azure_endpoint: diff --git a/massgen/backend/base.py b/massgen/backend/base.py index 205162dfc..5f91ba800 100644 --- a/massgen/backend/base.py +++ b/massgen/backend/base.py @@ -337,10 +337,15 @@ def get_base_excluded_config_params(cls) -> set: "debug_delay_after_n_tools", # Per-agent voting sensitivity (coordination config, not API param) "voting_sensitivity", + "voting_threshold", # Decomposition mode parameters (handled by orchestrator, not passed to API) "coordination_mode", "presenter_agent", "subtask", + # Fairness controls (handled by orchestrator, not passed to API) + "fairness_enabled", + "fairness_lead_cap_answers", + "max_midstream_injections_per_round", } @abstractmethod diff --git a/massgen/backend/claude_code.py b/massgen/backend/claude_code.py index 17f172d1e..8b677fddd 100644 --- a/massgen/backend/claude_code.py +++ b/massgen/backend/claude_code.py @@ -46,9 +46,11 @@ from __future__ import annotations +import asyncio import atexit import json import os +import shutil import sys import time import warnings @@ -105,6 +107,8 @@ class ClaudeCodeBackend(NativeToolBackendMixin, StreamingBufferMixin, LLMBackend - Support permission-aware tool execution (Read, Write, Bash, etc.) """ + supports_sdk_mcp = True + def __init__(self, api_key: Optional[str] = None, **kwargs): """Initialize ClaudeCodeBackend. @@ -367,7 +371,6 @@ def get_disallowed_tools(self, config: Dict[str, Any]) -> List[str]: "Bash(chown*)", # Not useful in MassGen context "Task", # we have our own version of subagents - "Skill", # we have our own version of skills "TodoWrite", "ExitPlanMode", "mcp__ide__getDiagnostics", @@ -544,12 +547,28 @@ async def reset_state(self) -> None: Reset Claude Code backend state. Properly disconnects and clears the current session and client connection to start fresh. + + Note: The Claude Agent SDK's disconnect() closes its anyio task group, which + delivers cancellation to whatever asyncio task the cancel scope was bound to. + In our architecture, anyio binds to the event loop's root task (the coordination + task), so disconnect() inadvertently cancels the entire coordination. We reverse + this by uncancelling any affected tasks after disconnect. """ if self._client is not None: try: await self._client.disconnect() + except asyncio.CancelledError: + pass # anyio cancel scope may raise CancelledError except Exception: pass # Ignore cleanup errors + + # anyio's cancel scope propagation may have called task.cancel() on + # parent tasks during disconnect(). Reverse any pending cancellations + # to prevent killing the coordination loop. + for task in asyncio.all_tasks(): + if not task.done() and task.cancelling() > 0: + task.uncancel() + self._client = None self._current_session_id = None self._tool_id_to_name.clear() @@ -651,6 +670,68 @@ def update_token_usage(self, messages: List[Dict[str, Any]], response_content: s cost = self.calculate_cost(input_tokens, output_tokens, model, result_message=None) self.token_usage.estimated_cost += cost + def _resolve_skill_source(self) -> Optional[Path]: + """Resolve the best available skills source directory, if any.""" + fm = self.filesystem_manager + if fm is not None: + docker_manager = getattr(fm, "docker_manager", None) + agent_id = getattr(self, "_current_agent_id", None) or getattr(fm, "agent_id", None) + temp_skills_dirs = getattr(docker_manager, "temp_skills_dirs", None) if docker_manager else None + if isinstance(temp_skills_dirs, dict) and agent_id in temp_skills_dirs: + source = Path(temp_skills_dirs[agent_id]) + if source.exists(): + return source + + local_skills_directory = getattr(fm, "local_skills_directory", None) + if local_skills_directory: + source = Path(local_skills_directory) + if source.exists(): + return source + + project_skills = Path(self._cwd) / ".agent" / "skills" + if project_skills.exists(): + return project_skills + + home_skills = Path.home() / ".agent" / "skills" + if home_skills.exists(): + return home_skills + + return None + + def _sync_skills_into_claude_home(self, workspace_path: Path) -> None: + """Copy discovered skills into workspace/.claude/skills for SDK discovery.""" + source = self._resolve_skill_source() + if source is None: + return + + claude_home = workspace_path / ".claude" + dest = claude_home / "skills" + dest.mkdir(parents=True, exist_ok=True) + + try: + if source.resolve() == dest.resolve(): + return + except OSError: + # Continue best-effort copy if either path cannot be resolved. + pass + + copied_entries = 0 + try: + for entry in source.iterdir(): + target = dest / entry.name + if entry.is_dir(): + shutil.copytree(entry, target, dirs_exist_ok=True) + copied_entries += 1 + elif entry.is_file(): + shutil.copy2(entry, target) + copied_entries += 1 + except OSError as e: + logger.warning(f"Claude Code skills sync failed from {source} to {dest}: {e}") + return + + if copied_entries: + logger.info(f"[ClaudeCodeBackend] Skills sync copied {copied_entries} entries from {source} to {dest}") + def get_supported_builtin_tools(self, enable_web_search: bool = False) -> List[str]: """Get list of builtin tools supported by Claude Code. @@ -666,7 +747,7 @@ def get_supported_builtin_tools(self, enable_web_search: bool = False) -> List[s List of tool names that should be enabled for Claude Code. """ tools = [ - "Task", # Subagent spawning - unique to Claude Code + "Skill", ] if enable_web_search: @@ -1261,6 +1342,12 @@ def _build_claude_options(self, **options_kwargs) -> ClaudeAgentOptions: permission_mode = options_kwargs.get("permission_mode", "acceptEdits") enable_web_search = options_kwargs.get("enable_web_search", False) allowed_tools = options_kwargs.get("allowed_tools", self.get_supported_builtin_tools(enable_web_search)) + disallowed_tools = options_kwargs.get("disallowed_tools", []) + + # Skill tool requires filesystem-backed settings discovery in the SDK. + skill_enabled = isinstance(allowed_tools, list) and "Skill" in allowed_tools + if isinstance(disallowed_tools, list) and "Skill" in disallowed_tools: + skill_enabled = False # Filter out parameters handled separately or not for ClaudeAgentOptions excluded_params = self.get_base_excluded_config_params() | { @@ -1298,6 +1385,15 @@ def _build_claude_options(self, **options_kwargs) -> ClaudeAgentOptions: cwd_option = Path(str(self.filesystem_manager.get_current_workspace())).resolve() self._cwd = str(cwd_option) + # Keep settings isolated by default; load filesystem settings only when Skill is enabled. + setting_sources = options_kwargs.get("setting_sources") + if skill_enabled: + self._sync_skills_into_claude_home(cwd_option) + if setting_sources is None: + setting_sources = ["user", "project"] + elif setting_sources is None: + setting_sources = [] + # Get hooks configuration from filesystem manager (permission hooks) permission_hooks = self.filesystem_manager.get_claude_code_hooks_config() @@ -1365,8 +1461,7 @@ def _build_claude_options(self, **options_kwargs) -> ClaudeAgentOptions: "allowed_tools": allowed_tools, "add_dirs": add_dirs if add_dirs else [], "sandbox": sandbox_settings, - # Disable loading filesystem-based settings to ensure our programmatic config takes precedence - "setting_sources": [], + "setting_sources": setting_sources, **{k: v for k, v in options_kwargs.items() if k not in excluded_params}, } @@ -1493,8 +1588,9 @@ async def stream_with_tools(self, messages: List[Dict[str, Any]], tools: List[Di if "disallowed_tools" not in all_params: all_params["disallowed_tools"] = self.get_disallowed_tools(all_params) + default_allowed_tools = all_params.get("allowed_tools", self.get_supported_builtin_tools(enable_web_search)) logger.info( - f"[ClaudeCodeBackend] Using minimal tool set: Task" f"{', WebSearch, WebFetch' if enable_web_search else ''}", + f"[ClaudeCodeBackend] Using builtin tool allowlist: {default_allowed_tools}", ) # Additional disabling when MCP command_line is enabled @@ -1795,6 +1891,32 @@ async def stream_with_tools(self, messages: List[Dict[str, Any]], tools: List[Di agent_id, ) + # Capture workflow tools called as MCP (agent confusion fallback). + # When workflow tools are text-based (not MCP), the agent may + # still try to call them as MCP tools after using submit_checklist. + # Extract the bare tool name and capture as a workflow call. + if not self._has_workflow_mcp: + from ..tool.workflow_toolkits.base import ( + WORKFLOW_TOOL_NAMES as _WF_NAMES, + ) + + _bare = block.name.rsplit("__", 1)[-1] if "__" in block.name else block.name + if _bare in _WF_NAMES: + _wf_args = block.input if isinstance(block.input, dict) else {} + workflow_tool_calls_from_mcp.append( + { + "id": f"call_{block.id}", + "type": "function", + "function": { + "name": _bare, + "arguments": json.dumps(_wf_args), + }, + }, + ) + logger.info( + f"ClaudeCode: captured workflow tool from MCP-style call: " f"{block.name} -> {_bare}", + ) + # Track tool_id -> tool_name for ToolResultBlock matching self._tool_id_to_name[block.id] = block.name self._tool_start_times[block.id] = time.time() @@ -2094,9 +2216,15 @@ async def disconnect(self): if self._client is not None: try: await self._client.disconnect() + except asyncio.CancelledError: + pass # anyio cancel scope may raise CancelledError except Exception: pass # Ignore cleanup errors finally: + # Reverse anyio cancel scope propagation (see reset_state docstring) + for task in asyncio.all_tasks(): + if not task.done() and task.cancelling() > 0: + task.uncancel() self._client = None self._current_session_id = None diff --git a/massgen/backend/codex.py b/massgen/backend/codex.py index 0f9d038f7..00d6c2a24 100644 --- a/massgen/backend/codex.py +++ b/massgen/backend/codex.py @@ -12,7 +12,8 @@ - Session persistence and resumption - JSON event stream parsing for real-time streaming - MCP tool support via project-scoped .codex/config.toml in workspace -- System prompt injection via AGENTS.md in workspace root +- System prompt injection via .codex/AGENTS.md + model_instructions_file +- Skills mirroring into .codex/skills for CODEX_HOME-scoped discovery - Full conversation context maintained across turns - Uses CODEX_HOME env var to isolate config from user's global ~/.codex/ @@ -373,6 +374,8 @@ def _write_workspace_config(self) -> None: so it reads this config instead of ~/.codex/config.toml. """ config: Dict[str, Any] = {} + config_dir = Path(self.cwd) / ".codex" + config_dir.mkdir(parents=True, exist_ok=True) # Model settings if self.model: @@ -387,7 +390,7 @@ def _write_workspace_config(self) -> None: write_tool_specs, ) - specs_path = Path(self.cwd) / ".codex" / "custom_tool_specs.json" + specs_path = config_dir / "custom_tool_specs.json" write_tool_specs(self._custom_tools_config, specs_path) self._custom_tools_specs_path = specs_path # Update the MCP server config to point to current workspace @@ -403,6 +406,26 @@ def _write_workspace_config(self) -> None: ) break + # Write checklist specs file and add stdio MCP config if checklist is active. + # The orchestrator stores _checklist_state/_checklist_items on the backend; + # we write the specs here because the workspace path is now resolved. + if hasattr(self, "_checklist_state") and hasattr(self, "_checklist_items"): + from ..mcp_tools.checklist_tools_server import ( + build_server_config as build_checklist_config, + ) + from ..mcp_tools.checklist_tools_server import write_checklist_specs + + specs_path = config_dir / "checklist_specs.json" + write_checklist_specs( + items=self._checklist_items, + state=self._checklist_state, + output_path=specs_path, + ) + checklist_mcp = build_checklist_config(specs_path) + # Replace any previous checklist entry + self.mcp_servers = [s for s in self.mcp_servers if not (isinstance(s, dict) and s.get("name") == "massgen_checklist")] + self.mcp_servers.append(checklist_mcp) + # Convert MassGen mcp_servers list to Codex config.toml format # Merge orchestrator-injected servers (self.config) with init-time servers (self.mcp_servers) # which may include custom_tools MCP added by _setup_custom_tools_mcp() @@ -414,7 +437,7 @@ def _write_workspace_config(self) -> None: if config_mcp is not None: if isinstance(config_mcp, dict): for name, srv_config in config_mcp.items(): - if isinstance(srv_config, dict): + if isinstance(srv_config, dict) and srv_config.get("type") != "sdk": srv_config["name"] = name mcp_servers.append(srv_config) elif isinstance(config_mcp, list): @@ -435,9 +458,16 @@ def _write_workspace_config(self) -> None: name = server.get("name", "") if not name: continue - entry: Dict[str, Any] = {} server_type = server.get("type", "stdio") + # Skip SDK MCP servers — they are in-process Python objects + # that cannot be serialized to config.toml. + if server_type == "sdk": + logger.info(f"Codex: skipping SDK server '{name}' (not serializable to config.toml)") + continue + + entry: Dict[str, Any] = {} + if server_type == "stdio": if server.get("command"): entry["command"] = server["command"] @@ -468,15 +498,20 @@ def _write_workspace_config(self) -> None: if mcp_section: config["mcp_servers"] = mcp_section - # Inject system prompt + workflow instructions via AGENTS.md in workspace root. - # Codex automatically reads AGENTS.md from the working directory. + # Mirror skills into CODEX_HOME/skills so Codex skill discovery can find + # project/merged skills under the same scoped home directory. + self._sync_skills_into_codex_home(config_dir) + + # Inject system prompt + workflow instructions via .codex/AGENTS.md and + # point Codex at it explicitly via model_instructions_file. full_prompt = self.system_prompt or "" pending = getattr(self, "_pending_workflow_instructions", "") if pending: full_prompt = (full_prompt + "\n" + pending) if full_prompt else pending if full_prompt: - agents_md_path = Path(self.cwd) / "AGENTS.md" + agents_md_path = config_dir / "AGENTS.md" agents_md_path.write_text(full_prompt) + config["model_instructions_file"] = str(agents_md_path) logger.info(f"Wrote Codex AGENTS.md: {agents_md_path} ({len(full_prompt)} chars)") # Configure sandbox for local (non-Docker) workspace-write mode. @@ -519,8 +554,6 @@ def _write_workspace_config(self) -> None: return # Write config - config_dir = Path(self.cwd) / ".codex" - config_dir.mkdir(parents=True, exist_ok=True) config_path = config_dir / "config.toml" if tomli_w: @@ -613,14 +646,14 @@ def _cleanup_workspace_config(self) -> None: config_dir = Path(self.cwd) / ".codex" try: # Remove individual files we created - for filename in ("config.toml", "custom_tool_specs.json", "workflow_tool_specs.json"): + for filename in ("config.toml", "custom_tool_specs.json", "workflow_tool_specs.json", "checklist_specs.json", "AGENTS.md"): filepath = config_dir / filename if filepath.exists(): filepath.unlink() # Remove dir if empty if config_dir.exists() and not any(config_dir.iterdir()): config_dir.rmdir() - # Also remove AGENTS.md we wrote in workspace root + # Cleanup legacy workspace-root AGENTS.md (older backend behavior). agents_md = Path(self.cwd) / "AGENTS.md" if agents_md.exists(): agents_md.unlink() @@ -647,6 +680,68 @@ def _is_docker_mode(self) -> bool: return True return False + def _resolve_codex_skills_source(self) -> Optional[Path]: + """Resolve the best available skills source directory, if any.""" + fm = self.filesystem_manager + if fm is not None: + if self._is_docker_mode: + dm = getattr(fm, "docker_manager", None) + agent_id = self.agent_id or getattr(fm, "agent_id", None) + temp_skills_dirs = getattr(dm, "temp_skills_dirs", None) if dm else None + if isinstance(temp_skills_dirs, dict) and agent_id in temp_skills_dirs: + source = Path(temp_skills_dirs[agent_id]) + if source.exists(): + return source + + local_skills_directory = getattr(fm, "local_skills_directory", None) + if local_skills_directory: + source = Path(local_skills_directory) + if source.exists(): + return source + + project_skills = Path(self.cwd) / ".agent" / "skills" + if project_skills.exists(): + return project_skills + + home_skills = Path.home() / ".agent" / "skills" + if home_skills.exists(): + return home_skills + + return None + + def _sync_skills_into_codex_home(self, codex_home: Path) -> None: + """Copy discovered skills into CODEX_HOME/skills for Codex discovery.""" + source = self._resolve_codex_skills_source() + if source is None: + return + + dest = codex_home / "skills" + dest.mkdir(parents=True, exist_ok=True) + + try: + if source.resolve() == dest.resolve(): + return + except OSError: + # Continue best-effort copy if either path cannot be resolved. + pass + + copied_entries = 0 + try: + for entry in source.iterdir(): + target = dest / entry.name + if entry.is_dir(): + shutil.copytree(entry, target, dirs_exist_ok=True) + copied_entries += 1 + elif entry.is_file(): + shutil.copy2(entry, target) + copied_entries += 1 + except OSError as e: + logger.warning(f"Codex skills sync failed from {source} to {dest}: {e}") + return + + if copied_entries: + logger.info(f"Codex skills sync: copied {copied_entries} entries from {source} to {dest}") + def _get_docker_container(self): """Get the Docker container for this agent. diff --git a/massgen/cli.py b/massgen/cli.py index 2e2123888..c14f045ca 100644 --- a/massgen/cli.py +++ b/massgen/cli.py @@ -112,6 +112,53 @@ def load_env_file(): load_env_file() +def _quickstart_config_uses_skills(config_path: Optional[str]) -> bool: + """Return True when a config enables coordination skills.""" + if not config_path: + return False + + try: + with open(config_path, "r", encoding="utf-8") as f: + config = yaml.safe_load(f) or {} + except Exception as e: + logger.debug(f"[Quickstart] Failed to read config for skill check ({config_path}): {e}") + return False + + if not isinstance(config, dict): + return False + + orchestrator = config.get("orchestrator", {}) + if not isinstance(orchestrator, dict): + return False + + coordination = orchestrator.get("coordination", {}) + if not isinstance(coordination, dict): + return False + + return bool(coordination.get("use_skills", False)) + + +def _ensure_quickstart_skills_ready( + config_path: Optional[str], + install_requested: bool = True, +) -> bool: + """Install quickstart skill packages when generated config enables skills.""" + if not install_requested: + logger.info("[Quickstart] Skipping skill package installation by user choice") + return True + + if not _quickstart_config_uses_skills(config_path): + return True + + try: + from .utils.skills_installer import install_quickstart_skills + + return install_quickstart_skills() + except Exception as e: + logger.warning(f"[Quickstart] Skill setup failed: {e}") + return False + + def _setup_logfire_observability() -> bool: """Configure Logfire observability and instrument all LLM providers. @@ -655,6 +702,66 @@ def get_task_planning_prompt_prefix( """ +def get_log_analysis_prompt_prefix( + log_dir: Optional[str], + turn: Optional[int], + profile: str = "dev", +) -> str: + """Generate the user prompt prefix for Textual analysis mode. + + Args: + log_dir: Selected log session directory path, or None for auto/current. + turn: Selected turn number, or None for latest available turn. + profile: Analysis profile ("dev" or "user"). + + Returns: + Prefix instructions to prepend to the user's question. + """ + normalized_profile = profile if profile in ("dev", "user") else "dev" + target_log = log_dir or "auto-select current/latest log session" + target_turn = f"turn_{turn}" if turn is not None else "latest available turn" + + if normalized_profile == "user": + profile_section = """## Profile Focus: USER (skills-first) + +Primary objective: +- Understand what happened in this run and convert findings into reusable user-facing skills. + +Required outputs: +- If a reusable workflow is identified, include exactly one complete `SKILL.md` draft in a fenced markdown block. +- The draft must include YAML frontmatter with at least `name` and `description`. +- Keep recommendations concrete and action-oriented for end users. +""" + else: + profile_section = """## Profile Focus: DEV (internals-first) + +Primary objective: +- Diagnose runtime behavior, coordination quality, and implementation-level issues in MassGen. + +Required outputs: +- Prioritize root causes, regressions, and concrete internal improvements. +- Be specific about signals from logs/events, likely causes, and fix direction. +""" + + return f"""# LOG ANALYSIS MODE + +You are in MassGen Textual analysis mode. + +Analysis target: +- Log session: {target_log} +- Turn: {target_turn} + +{profile_section} + +General constraints: +- Use the available skills and local log artifacts as the primary evidence source. +- Focus on actionable conclusions, not generic summaries. +- If evidence is incomplete, state exactly what is missing and why it matters. + +USER'S ANALYSIS REQUEST: +""" + + # Global PromptSession instance (reused across prompts for better terminal handling) _prompt_session: Optional[PromptSession] = None @@ -2383,16 +2490,26 @@ async def run_question_with_history( # Apply voting sensitivity if specified if "voting_sensitivity" in orchestrator_cfg: orchestrator_config.voting_sensitivity = orchestrator_cfg["voting_sensitivity"] + if "voting_threshold" in orchestrator_cfg: + orchestrator_config.voting_threshold = orchestrator_cfg["voting_threshold"] # Apply answer count limit if specified if "max_new_answers_per_agent" in orchestrator_cfg: orchestrator_config.max_new_answers_per_agent = orchestrator_cfg["max_new_answers_per_agent"] if "max_new_answers_global" in orchestrator_cfg: orchestrator_config.max_new_answers_global = orchestrator_cfg["max_new_answers_global"] + if "checklist_require_gap_report" in orchestrator_cfg: + orchestrator_config.checklist_require_gap_report = orchestrator_cfg["checklist_require_gap_report"] # Apply answer novelty requirement if specified if "answer_novelty_requirement" in orchestrator_cfg: orchestrator_config.answer_novelty_requirement = orchestrator_cfg["answer_novelty_requirement"] + if "fairness_enabled" in orchestrator_cfg: + orchestrator_config.fairness_enabled = orchestrator_cfg["fairness_enabled"] + if "fairness_lead_cap_answers" in orchestrator_cfg: + orchestrator_config.fairness_lead_cap_answers = orchestrator_cfg["fairness_lead_cap_answers"] + if "max_midstream_injections_per_round" in orchestrator_cfg: + orchestrator_config.max_midstream_injections_per_round = orchestrator_cfg["max_midstream_injections_per_round"] # Get context sharing parameters snapshot_storage = orchestrator_cfg.get("snapshot_storage") @@ -2405,6 +2522,16 @@ async def run_question_with_history( if orchestrator_cfg.get("debug_final_answer"): orchestrator_config.debug_final_answer = orchestrator_cfg["debug_final_answer"] + # Apply subagent/TUI orchestrator flags + if orchestrator_cfg.get("skip_final_presentation", False): + orchestrator_config.skip_final_presentation = True + if orchestrator_cfg.get("skip_voting", False): + orchestrator_config.skip_voting = True + if orchestrator_cfg.get("disable_injection", False): + orchestrator_config.disable_injection = True + if "defer_voting_until_all_answered" in orchestrator_cfg: + orchestrator_config.defer_voting_until_all_answered = orchestrator_cfg["defer_voting_until_all_answered"] + # Parse decomposition mode parameters if "coordination_mode" in orchestrator_cfg: orchestrator_config.coordination_mode = orchestrator_cfg["coordination_mode"] @@ -3057,16 +3184,26 @@ async def run_single_question( # Apply voting sensitivity if specified if "voting_sensitivity" in orchestrator_cfg: orchestrator_config.voting_sensitivity = orchestrator_cfg["voting_sensitivity"] + if "voting_threshold" in orchestrator_cfg: + orchestrator_config.voting_threshold = orchestrator_cfg["voting_threshold"] # Apply answer count limit if specified if "max_new_answers_per_agent" in orchestrator_cfg: orchestrator_config.max_new_answers_per_agent = orchestrator_cfg["max_new_answers_per_agent"] if "max_new_answers_global" in orchestrator_cfg: orchestrator_config.max_new_answers_global = orchestrator_cfg["max_new_answers_global"] + if "checklist_require_gap_report" in orchestrator_cfg: + orchestrator_config.checklist_require_gap_report = orchestrator_cfg["checklist_require_gap_report"] # Apply answer novelty requirement if specified if "answer_novelty_requirement" in orchestrator_cfg: orchestrator_config.answer_novelty_requirement = orchestrator_cfg["answer_novelty_requirement"] + if "fairness_enabled" in orchestrator_cfg: + orchestrator_config.fairness_enabled = orchestrator_cfg["fairness_enabled"] + if "fairness_lead_cap_answers" in orchestrator_cfg: + orchestrator_config.fairness_lead_cap_answers = orchestrator_cfg["fairness_lead_cap_answers"] + if "max_midstream_injections_per_round" in orchestrator_cfg: + orchestrator_config.max_midstream_injections_per_round = orchestrator_cfg["max_midstream_injections_per_round"] # Get context sharing parameters snapshot_storage = orchestrator_cfg.get("snapshot_storage") @@ -3079,6 +3216,16 @@ async def run_single_question( if orchestrator_cfg.get("debug_final_answer"): orchestrator_config.debug_final_answer = orchestrator_cfg["debug_final_answer"] + # Apply subagent/TUI orchestrator flags + if orchestrator_cfg.get("skip_final_presentation", False): + orchestrator_config.skip_final_presentation = True + if orchestrator_cfg.get("skip_voting", False): + orchestrator_config.skip_voting = True + if orchestrator_cfg.get("disable_injection", False): + orchestrator_config.disable_injection = True + if "defer_voting_until_all_answered" in orchestrator_cfg: + orchestrator_config.defer_voting_until_all_answered = orchestrator_cfg["defer_voting_until_all_answered"] + # Parse decomposition mode parameters if "coordination_mode" in orchestrator_cfg: orchestrator_config.coordination_mode = orchestrator_cfg["coordination_mode"] @@ -5219,6 +5366,95 @@ async def run_turn( try: current_turn_num = session_info.get("current_turn", 0) sess_id = session_info.get("session_id") + mode_state = display.get_mode_state() + + def _merge_readonly_context_path(config_dict: Dict[str, Any], path_str: str, description: str) -> bool: + """Add a read-only orchestrator context path if missing.""" + if not path_str: + return False + + orchestrator_section = config_dict.setdefault("orchestrator", {}) + existing = orchestrator_section.get("context_paths", []) + if not isinstance(existing, list): + existing = [] + + normalized_target = str(Path(path_str).resolve()) + normalized_existing = set() + for item in existing: + item_path = item.get("path") if isinstance(item, dict) else item + if not item_path: + continue + try: + normalized_existing.add(str(Path(item_path).resolve())) + except Exception: + normalized_existing.add(str(item_path)) + + if normalized_target in normalized_existing: + orchestrator_section["context_paths"] = existing + return False + + existing.append( + { + "path": normalized_target, + "permission": "read", + "description": description, + }, + ) + orchestrator_section["context_paths"] = existing + return True + + def _agents_have_context_path(current_agents: Optional[Dict[str, Any]], path_str: str) -> bool: + """Check whether all active agents already have a specific context path.""" + if not current_agents: + return False + + target = str(Path(path_str).resolve()) + for agent in current_agents.values(): + backend = getattr(agent, "backend", None) + fm = getattr(backend, "filesystem_manager", None) + ppm = getattr(fm, "path_permission_manager", None) + if ppm is None: + return False + + found = False + for ctx in ppm.get_context_paths(): + ctx_path = ctx.get("path") if isinstance(ctx, dict) else None + if not ctx_path: + continue + try: + normalized_ctx = str(Path(ctx_path).resolve()) + except Exception: + normalized_ctx = str(ctx_path) + if normalized_ctx == target: + found = True + break + if not found: + return False + return True + + analysis_context_path: Optional[str] = None + if mode_state and mode_state.plan_mode == "analysis": + selected_log_dir = getattr(mode_state.analysis_config, "selected_log_dir", None) + if selected_log_dir: + resolved_log_dir = Path(selected_log_dir).resolve() + if resolved_log_dir.exists(): + analysis_context_path = str(resolved_log_dir) + if original_config: + _merge_readonly_context_path( + original_config, + analysis_context_path, + "Analysis target log session", + ) + if isinstance(orchestrator_cfg, dict): + _merge_readonly_context_path( + {"orchestrator": orchestrator_cfg}, + analysis_context_path, + "Analysis target log session", + ) + else: + logger.warning( + f"[Textual] Analysis target log directory does not exist: {resolved_log_dir}", + ) # Handle deferred agent creation (agents may be None on first turn) if agents is None: @@ -5229,6 +5465,12 @@ async def run_turn( from .path_handling import PromptParserError, parse_prompt_for_context modified_config = original_config.copy() + if analysis_context_path: + _merge_readonly_context_path( + modified_config, + analysis_context_path, + "Analysis target log session", + ) try: parsed = parse_prompt_for_context(question) if parsed.context_paths: @@ -5302,6 +5544,47 @@ def progress_callback(status: str, detail: str) -> None: f"[Textual] Execute mode - copied plan with {task_count} tasks to agent workspaces", ) + # Ensure analysis target logs are mounted as read-only context paths. + # Without this, agents in Docker cannot read host log artifacts. + if agents is not None and analysis_context_path and not _agents_have_context_path(agents, analysis_context_path): + logger.info( + f"[Textual] Recreating agents with analysis log context path: {analysis_context_path}", + ) + + # Cleanup existing agents before recreating to avoid leaked containers. + for aid, ag in agents.items(): + if hasattr(ag, "backend") and hasattr(ag.backend, "filesystem_manager") and ag.backend.filesystem_manager: + try: + ag.backend.filesystem_manager.cleanup() + except Exception as e: + logger.warning(f"[Textual] Cleanup failed for {aid}: {e}") + if hasattr(ag.backend, "__aexit__"): + await ag.backend.__aexit__(None, None, None) + + modified_config = original_config.copy() + _merge_readonly_context_path( + modified_config, + analysis_context_path, + "Analysis target log session", + ) + orch_cfg = modified_config.get("orchestrator", {}) + enable_rate_limit = kwargs.get("enable_rate_limit", False) + new_agents = create_agents_from_config( + modified_config, + orch_cfg, + debug=debug, + enable_rate_limit=enable_rate_limit, + config_path=config_path, + memory_session_id=sess_id, + filesystem_session_id=sess_id, + session_storage_base=SESSION_STORAGE, + ) + context.agents = new_agents + agents = new_agents + logger.info( + f"[Textual] Recreated {len(agents)} agent(s) with analysis log context path", + ) + # Inject previous turn workspace as read-only context (same as Rich mode) if current_turn_num > 0 and original_config and orchestrator_cfg: session_dir = Path(SESSION_STORAGE) / sess_id @@ -5444,17 +5727,37 @@ def progress_callback(status: str, detail: str) -> None: if orchestrator_cfg: if "voting_sensitivity" in orchestrator_cfg: orchestrator_config.voting_sensitivity = orchestrator_cfg["voting_sensitivity"] + if "voting_threshold" in orchestrator_cfg: + orchestrator_config.voting_threshold = orchestrator_cfg["voting_threshold"] if "max_new_answers_per_agent" in orchestrator_cfg: orchestrator_config.max_new_answers_per_agent = orchestrator_cfg["max_new_answers_per_agent"] if "max_new_answers_global" in orchestrator_cfg: orchestrator_config.max_new_answers_global = orchestrator_cfg["max_new_answers_global"] + if "checklist_require_gap_report" in orchestrator_cfg: + orchestrator_config.checklist_require_gap_report = orchestrator_cfg["checklist_require_gap_report"] if "answer_novelty_requirement" in orchestrator_cfg: orchestrator_config.answer_novelty_requirement = orchestrator_cfg["answer_novelty_requirement"] + if "fairness_enabled" in orchestrator_cfg: + orchestrator_config.fairness_enabled = orchestrator_cfg["fairness_enabled"] + if "fairness_lead_cap_answers" in orchestrator_cfg: + orchestrator_config.fairness_lead_cap_answers = orchestrator_cfg["fairness_lead_cap_answers"] + if "max_midstream_injections_per_round" in orchestrator_cfg: + orchestrator_config.max_midstream_injections_per_round = orchestrator_cfg["max_midstream_injections_per_round"] if orchestrator_cfg.get("skip_coordination_rounds", False): orchestrator_config.skip_coordination_rounds = True if orchestrator_cfg.get("debug_final_answer"): orchestrator_config.debug_final_answer = orchestrator_cfg["debug_final_answer"] + # Apply subagent/TUI orchestrator flags + if orchestrator_cfg.get("skip_final_presentation", False): + orchestrator_config.skip_final_presentation = True + if orchestrator_cfg.get("skip_voting", False): + orchestrator_config.skip_voting = True + if orchestrator_cfg.get("disable_injection", False): + orchestrator_config.disable_injection = True + if "defer_voting_until_all_answered" in orchestrator_cfg: + orchestrator_config.defer_voting_until_all_answered = orchestrator_cfg["defer_voting_until_all_answered"] + # Parse decomposition mode parameters if "coordination_mode" in orchestrator_cfg: orchestrator_config.coordination_mode = orchestrator_cfg["coordination_mode"] @@ -5491,6 +5794,22 @@ def progress_callback(status: str, detail: str) -> None: if hasattr(orchestrator_config, key): setattr(orchestrator_config, key, value) + # Apply persona-generation toggle for parallel mode. + # This is intentionally OFF by default in Textual mode unless the + # mode-bar toggle is enabled. + persona_enabled = mode_state.parallel_personas_enabled and mode_state.coordination_mode == "parallel" + if orchestrator_config.coordination_config is None: + from .agent_config import CoordinationConfig + + orchestrator_config.coordination_config = CoordinationConfig() + persona_cfg = getattr(orchestrator_config.coordination_config, "persona_generator", None) + if persona_cfg is not None: + persona_cfg.enabled = persona_enabled + logger.info( + f"[Textual] Parallel persona generation: {'enabled' if persona_enabled else 'disabled'} " + f"(toggle={mode_state.parallel_personas_enabled}, coordination={mode_state.coordination_mode})", + ) + # Apply plan mode coordination overrides coord_overrides = mode_state.get_coordination_overrides() if coord_overrides: @@ -5543,6 +5862,39 @@ def progress_callback(status: str, detail: str) -> None: logger.info( f"[Textual] Plan mode: Captured {len(mode_state.planning_context_paths)} context paths for execution", ) + elif mode_state.plan_mode == "analysis": + # In analysis mode, always keep skills enabled and optionally + # apply a runtime skill allowlist selected in the TUI. + if orchestrator_config.coordination_config is None: + from .agent_config import CoordinationConfig + + orchestrator_config.coordination_config = CoordinationConfig() + + orchestrator_config.coordination_config.use_skills = True + + enabled_skill_names = mode_state.analysis_config.get_enabled_skill_names() + setattr( + orchestrator_config.coordination_config, + "enabled_skill_names", + enabled_skill_names, + ) + + analysis_profile = mode_state.analysis_config.profile + analysis_log_dir = mode_state.analysis_config.selected_log_dir + analysis_turn = mode_state.analysis_config.selected_turn + question = ( + get_log_analysis_prompt_prefix( + log_dir=analysis_log_dir, + turn=analysis_turn, + profile=analysis_profile, + ) + + question + ) + logger.info( + "[Textual] Analysis mode: prepended analysis instructions " + f"(profile={analysis_profile}, log_dir={analysis_log_dir}, turn={analysis_turn}, " + f"skills_filter={'all' if enabled_skill_names is None else len(enabled_skill_names)})", + ) # Get generated personas from session info if persist_across_turns is enabled # (matching Rich terminal path setup) @@ -8543,7 +8895,7 @@ def cli_main(): parser.add_argument( "--quickstart", action="store_true", - help="Quick setup: specify number of agents and models, get a full-featured config with code tools, Docker, skills", + help="Quick setup: specify number of agents/models, get a full-featured config with code tools and Docker, and optionally install skill packages", ) parser.add_argument( "--generate-config", @@ -8585,7 +8937,7 @@ def cli_main(): parser.add_argument( "--setup-skills", action="store_true", - help="Install skills (openskills CLI, Anthropic collection, Crawl4AI)", + help="Install skills (openskills CLI, Anthropic/OpenAI/Vercel collections, Agent Browser skill, Crawl4AI)", ) parser.add_argument( "--setup-docker", @@ -8853,6 +9205,10 @@ def _handle_quickstart_result(result): config_path = result.get("config_path") question = result.get("question", "") launch_option = result.get("launch_option", "save_only") + install_skills_now = result.get("install_skills_now", True) + + if config_path: + _ensure_quickstart_skills_ready(config_path, bool(install_skills_now)) if config_path and launch_option == "web": try: @@ -9182,6 +9538,10 @@ def open_browser(): filepath = result[0] question = result[1] interface_choice = result[2] if len(result) >= 3 else "terminal" + install_skills_now = result[3] if len(result) >= 4 else True + + if filepath: + _ensure_quickstart_skills_ready(filepath, bool(install_skills_now)) if filepath and interface_choice == "web": try: @@ -9366,8 +9726,11 @@ def on_key(self, event) -> None: filepath = result[0] question = result[1] interface_choice = result[2] if len(result) >= 3 else "terminal" + install_skills_now = result[3] if len(result) >= 4 else True if filepath: + _ensure_quickstart_skills_ready(filepath, bool(install_skills_now)) + # Set the config path args.config = filepath diff --git a/massgen/config_builder.py b/massgen/config_builder.py index 112ac553f..c928a69ac 100644 --- a/massgen/config_builder.py +++ b/massgen/config_builder.py @@ -3964,7 +3964,7 @@ def run_quickstart(self) -> Optional[tuple]: their models. Returns: - Tuple of (filepath, question) or None if cancelled + Tuple of (filepath, question, interface_choice, install_skills_now) or None if cancelled """ try: # Simple banner @@ -4377,6 +4377,24 @@ def run_quickstart(self) -> Optional[tuple]: ) use_docker = False + install_skills_now = False + if use_docker: + console.print("\n[bold cyan]Skills Setup[/bold cyan]") + console.print( + "[dim]Install quickstart skill packages now?[/dim]", + ) + console.print( + "[dim]Includes openskills + Anthropic/OpenAI/Vercel collections, Agent Browser skill, and Crawl4AI.[/dim]\n", + ) + install_skills_now = questionary.confirm( + "Install missing quickstart skill packages now?", + default=True, + style=questionary.Style([("question", "fg:cyan bold")]), + ).ask() + + if install_skills_now is None: + raise KeyboardInterrupt + # Step 3b: Code Execution toggle (only when Docker is NOT enabled) # Providers like OpenAI/Claude have cloud-based code execution sandboxes if not use_docker: @@ -4893,10 +4911,10 @@ def run_quickstart(self) -> Optional[tuple]: if example_prompt: # Return with the selected example prompt as initial question - return (str(filepath), example_prompt, interface_choice) + return (str(filepath), example_prompt, interface_choice, bool(install_skills_now)) else: # Auto-launch into interactive mode (return empty string to signal interactive mode) - return (str(filepath), "", interface_choice) + return (str(filepath), "", interface_choice, bool(install_skills_now)) except (KeyboardInterrupt, EOFError): console.print("\n\n[yellow]Quickstart cancelled[/yellow]\n") @@ -4931,7 +4949,8 @@ def _generate_quickstart_config( coordination_settings: Shared coordination settings dict with keys like 'coordination_mode', 'presenter_agent', 'voting_sensitivity', 'answer_novelty_requirement', - 'max_new_answers_per_agent', 'max_new_answers_global' + 'max_new_answers_per_agent', 'max_new_answers_global', + and fairness controls Returns: Complete configuration dict @@ -5050,6 +5069,10 @@ def create_agent_backend( "snapshot_storage": "snapshots", "agent_temporary_workspace": "temp_workspaces", "max_new_answers_per_agent": 5, + # Fairness defaults (enabled across all coordination modes) + "fairness_enabled": True, + "fairness_lead_cap_answers": 2, + "max_midstream_injections_per_round": 2, # Multimodal tools enabled for all agents "enable_multimodal_tools": True, # Default generation backends (agents can override) @@ -5072,6 +5095,10 @@ def create_agent_backend( "snapshot_storage": "snapshots", "agent_temporary_workspace": "temp_workspaces", "max_new_answers_per_agent": 5, + # Fairness defaults (enabled across all coordination modes) + "fairness_enabled": True, + "fairness_lead_cap_answers": 2, + "max_midstream_injections_per_round": 2, # Multimodal tools enabled for all agents "enable_multimodal_tools": True, # Default generation backends (agents can override) @@ -5126,6 +5153,12 @@ def create_agent_backend( orchestrator_config["max_new_answers_per_agent"] = coordination_settings["max_new_answers_per_agent"] if coordination_settings.get("max_new_answers_global"): orchestrator_config["max_new_answers_global"] = coordination_settings["max_new_answers_global"] + if "fairness_enabled" in coordination_settings: + orchestrator_config["fairness_enabled"] = coordination_settings["fairness_enabled"] + if coordination_settings.get("fairness_lead_cap_answers") is not None: + orchestrator_config["fairness_lead_cap_answers"] = coordination_settings["fairness_lead_cap_answers"] + if coordination_settings.get("max_midstream_injections_per_round") is not None: + orchestrator_config["max_midstream_injections_per_round"] = coordination_settings["max_midstream_injections_per_round"] if coordination_settings.get("enable_subagents"): orchestrator_config["coordination"]["enable_subagents"] = True orchestrator_config["coordination"]["subagent_default_timeout"] = 300 # 5 minutes diff --git a/massgen/config_validator.py b/massgen/config_validator.py index cbf6ed9ce..28c26c52a 100644 --- a/massgen/config_validator.py +++ b/massgen/config_validator.py @@ -152,6 +152,9 @@ class ConfigValidator: "consistency", "diversity", "reflective", + "checklist", + "checklist_scored", + "checklist_gated", } # Valid answer novelty requirements @@ -987,6 +990,34 @@ def _validate_orchestrator(self, orchestrator_config: Dict[str, Any], result: Va "Use null (unlimited) or a positive integer like 1, 2, or 3", ) + # Validate fairness controls if present + if "fairness_enabled" in orchestrator_config: + fairness_enabled = orchestrator_config["fairness_enabled"] + if not isinstance(fairness_enabled, bool): + result.add_error( + f"'fairness_enabled' must be a boolean, got {type(fairness_enabled).__name__}", + f"{location}.fairness_enabled", + "Use true or false", + ) + + if "fairness_lead_cap_answers" in orchestrator_config: + lead_cap = orchestrator_config["fairness_lead_cap_answers"] + if isinstance(lead_cap, bool) or not isinstance(lead_cap, int) or lead_cap < 0: + result.add_error( + f"'fairness_lead_cap_answers' must be a non-negative integer, got {type(lead_cap).__name__}", + f"{location}.fairness_lead_cap_answers", + "Use 0 (strict lockstep) or a positive integer like 1 or 2", + ) + + if "max_midstream_injections_per_round" in orchestrator_config: + injection_cap = orchestrator_config["max_midstream_injections_per_round"] + if isinstance(injection_cap, bool) or not isinstance(injection_cap, int) or injection_cap <= 0: + result.add_error( + f"'max_midstream_injections_per_round' must be a positive integer, got {type(injection_cap).__name__}", + f"{location}.max_midstream_injections_per_round", + "Use a positive integer like 1 or 2", + ) + # Validate timeout if present if "timeout" in orchestrator_config: timeout = orchestrator_config["timeout"] diff --git a/massgen/configs/README.md b/massgen/configs/README.md index 591ff578f..8b67b46a6 100644 --- a/massgen/configs/README.md +++ b/massgen/configs/README.md @@ -998,7 +998,7 @@ uv run massgen --config massgen/configs/providers/gemini/gemini_3_pro.yaml \ **Key Features:** - **Code-Based Tools (CodeAct Paradigm)**: Revolutionary tool integration via importable Python code, reducing token usage by 98% - **MCP Server Registry**: Auto-discovery and intelligent tool routing with on-demand loading -- **Skills Installation System**: Cross-platform automated installer for openskills CLI, Anthropic skills, and Crawl4AI +- **Skills Installation System**: Cross-platform automated installer for openskills CLI, Anthropic/OpenAI/Vercel skills, Agent Browser skill, and Crawl4AI - **NLIP Integration**: Advanced tool routing with Natural Language Interface Protocol across all backends - **Shared Tools Directory**: Tools generated once and shared across all agents to avoid duplication - **Auto-Discover Custom Tools**: Automatically discover and load all tools from `massgen/tool/` directory @@ -1011,7 +1011,7 @@ uv run massgen --config massgen/configs/providers/gemini/gemini_3_pro.yaml \ pip install --upgrade massgen # Automated Skills Installation - cross-platform setup -massgen --setup-skills # Installs openskills CLI, Anthropic skills, and Crawl4AI +massgen --setup-skills # Installs openskills CLI, Anthropic/OpenAI/Vercel skills, Agent Browser skill, and Crawl4AI # Code-Based Tools with Auto-Discovery - demonstrates 98% context reduction # Prerequisites: Docker running, .env file with API keys (OPENAI_API_KEY, GOOGLE_API_KEY, etc.) diff --git a/massgen/configs/basic/multi/gemini_4o_claude.yaml b/massgen/configs/basic/multi/gemini_4o_claude.yaml index 4608ed1f4..e5637eb07 100644 --- a/massgen/configs/basic/multi/gemini_4o_claude.yaml +++ b/massgen/configs/basic/multi/gemini_4o_claude.yaml @@ -21,7 +21,7 @@ agents: - id: "claude-3-5-haiku" backend: type: "claude" - model: "claude-3-5-haiku-20241022" + model: "claude-haiku-4-5-20251001" enable_web_search: true enable_code_execution: true # system_message: "You are a helpful AI assistant with web search capabilities. For any question involving current events, recent information, or real-time data, ALWAYS use web search first." diff --git a/massgen/configs/basic/multi/gemini_gpt5nano_claude.yaml b/massgen/configs/basic/multi/gemini_gpt5nano_claude.yaml index 61b12fa02..df924732c 100644 --- a/massgen/configs/basic/multi/gemini_gpt5nano_claude.yaml +++ b/massgen/configs/basic/multi/gemini_gpt5nano_claude.yaml @@ -26,7 +26,7 @@ agents: - id: "claude-3-5-haiku" backend: type: "claude" - model: "claude-3-5-haiku-20241022" + model: "claude-haiku-4-5-20251001" enable_web_search: true enable_code_execution: true # system_message: "You are a helpful AI assistant with web search capabilities. For any question involving current events, recent information, or real-time data, ALWAYS use web search first." diff --git a/massgen/configs/basic/multi/geminicode_4o_claude.yaml b/massgen/configs/basic/multi/geminicode_4o_claude.yaml index 7732dc626..e62447569 100644 --- a/massgen/configs/basic/multi/geminicode_4o_claude.yaml +++ b/massgen/configs/basic/multi/geminicode_4o_claude.yaml @@ -1,5 +1,5 @@ # MassGen Three Agent Configuration -# Gemini-2.5-flash, GPT-4o, and claude-3-5-haiku-20241022 with builtin tools enabled +# Gemini-2.5-flash, GPT-4o, and claude-haiku-4-5-20251001 with builtin tools enabled agents: - id: "gemini2.5flash" @@ -21,7 +21,7 @@ agents: - id: "claude-3-5-haiku" backend: type: "claude" - model: "claude-3-5-haiku-20241022" + model: "claude-haiku-4-5-20251001" enable_web_search: true enable_code_execution: true # system_message: "You are a helpful AI assistant with web search capabilities. For any question involving current events, recent information, or real-time data, ALWAYS use web search first." diff --git a/massgen/configs/basic/multi/geminicode_gpt5nano_claude.yaml b/massgen/configs/basic/multi/geminicode_gpt5nano_claude.yaml index 84cf7e1ee..8cbf48285 100644 --- a/massgen/configs/basic/multi/geminicode_gpt5nano_claude.yaml +++ b/massgen/configs/basic/multi/geminicode_gpt5nano_claude.yaml @@ -26,7 +26,7 @@ agents: - id: "claude-3-5-haiku" backend: type: "claude" - model: "claude-3-5-haiku-20241022" + model: "claude-haiku-4-5-20251001" enable_web_search: true enable_code_execution: true # system_message: "You are a helpful AI assistant with web search capabilities. For any question involving current events, recent information, or real-time data, ALWAYS use web search first." diff --git a/massgen/configs/basic/multi/glm_gemini_claude.yaml b/massgen/configs/basic/multi/glm_gemini_claude.yaml index 95d1c243b..76681fa4d 100644 --- a/massgen/configs/basic/multi/glm_gemini_claude.yaml +++ b/massgen/configs/basic/multi/glm_gemini_claude.yaml @@ -11,10 +11,10 @@ agents: model: "gemini-2.5-flash" enable_web_search: true - - id: "claude-3.5-haiku" + - id: "claude-haiku-4-5-20251001" backend: type: "claude" - model: "claude-3-5-haiku-20241022" + model: "claude-haiku-4-5-20251001" enable_web_search: true enable_code_execution: true diff --git a/massgen/docker/Dockerfile b/massgen/docker/Dockerfile index 236eeb703..3a31f3e81 100644 --- a/massgen/docker/Dockerfile +++ b/massgen/docker/Dockerfile @@ -64,7 +64,7 @@ RUN pip install --no-cache-dir ast-grep-cli # Install openskills CLI for skills management # Anthropic skills are installed manually beforehand and added as a volume at runtime # Also install any agent CLI tools -RUN npm install -g openskills @openai/codex +RUN npm install -g openskills @openai/codex agent-browser # Fix MCP filesystem server schema issue # The latest @modelcontextprotocol/server-filesystem (2025.8.21) has a Zod version conflict: @@ -144,10 +144,18 @@ RUN useradd -m -u 1000 -s /bin/bash massgen && \ # Switch to non-root user USER massgen +# Keep Playwright browser binaries in the image-owned cache directory. +ENV PLAYWRIGHT_BROWSERS_PATH="/home/massgen/.cache/ms-playwright" + # Install Playwright browser binaries as massgen user # This puts browsers in /home/massgen/.cache/ms-playwright/ where the user can access them RUN python -m playwright install +# Install Agent Browser browser bundle and default skill. +RUN agent-browser install && \ + cd /home/massgen && \ + openskills install vercel-labs/agent-browser --universal -y + # Install uv (modern Python package installer for optional serena skill) # Enables uvx for running tools like serena on-demand without permanent installation RUN curl -LsSf https://astral.sh/uv/install.sh | sh diff --git a/massgen/docker/Dockerfile.overlay b/massgen/docker/Dockerfile.overlay new file mode 100644 index 000000000..a2b0445de --- /dev/null +++ b/massgen/docker/Dockerfile.overlay @@ -0,0 +1,28 @@ +# MassGen Docker overlay image (standard / non-sudo) +# +# Purpose: +# - Start from official MassGen runtime image +# - Add Vercel Agent Browser runtime + skill +# - Keep Playwright browser path pinned to the preinstalled image cache + +ARG BASE_IMAGE=ghcr.io/massgen/mcp-runtime:latest +FROM ${BASE_IMAGE} + +# Ensure global npm install permissions. +USER root +RUN npm install -g agent-browser && \ + (command -v openskills >/dev/null 2>&1 || npm install -g openskills) + +# Switch back to runtime user for user-scoped browser/skills setup. +USER massgen + +# Keep Playwright browser binaries fixed to image-owned cache. +ENV PLAYWRIGHT_BROWSERS_PATH="/home/massgen/.cache/ms-playwright" + +# Install Agent Browser browser bundle and corresponding skill package. +RUN agent-browser install && \ + cd /home/massgen && \ + openskills install vercel-labs/agent-browser --universal -y + +WORKDIR /workspace +CMD ["tail", "-f", "/dev/null"] diff --git a/massgen/docker/Dockerfile.overlay.sudo b/massgen/docker/Dockerfile.overlay.sudo new file mode 100644 index 000000000..2d65bf341 --- /dev/null +++ b/massgen/docker/Dockerfile.overlay.sudo @@ -0,0 +1,28 @@ +# MassGen Docker overlay image (sudo-enabled) +# +# Purpose: +# - Start from official sudo MassGen runtime image +# - Add Vercel Agent Browser runtime + skill +# - Keep Playwright browser path pinned to the preinstalled image cache + +ARG BASE_IMAGE=ghcr.io/massgen/mcp-runtime-sudo:latest +FROM ${BASE_IMAGE} + +# Ensure global npm install permissions. +USER root +RUN npm install -g agent-browser && \ + (command -v openskills >/dev/null 2>&1 || npm install -g openskills) + +# Switch back to runtime user for user-scoped browser/skills setup. +USER massgen + +# Keep Playwright browser binaries fixed to image-owned cache. +ENV PLAYWRIGHT_BROWSERS_PATH="/home/massgen/.cache/ms-playwright" + +# Install Agent Browser browser bundle and corresponding skill package. +RUN agent-browser install && \ + cd /home/massgen && \ + openskills install vercel-labs/agent-browser --universal -y + +WORKDIR /workspace +CMD ["tail", "-f", "/dev/null"] diff --git a/massgen/docker/Dockerfile.sudo b/massgen/docker/Dockerfile.sudo index 2c3f920ff..5f9a9ed59 100644 --- a/massgen/docker/Dockerfile.sudo +++ b/massgen/docker/Dockerfile.sudo @@ -68,7 +68,7 @@ RUN pip install --no-cache-dir ast-grep-cli # Install openskills CLI for skills management # Anthropic skills are installed manually beforehand and added as a volume at runtime # Also install any agent CLI tools -RUN npm install -g openskills @openai/codex +RUN npm install -g openskills @openai/codex agent-browser # Fix MCP filesystem server schema issue # The latest @modelcontextprotocol/server-filesystem (2025.8.21) has a Zod version conflict: @@ -151,10 +151,18 @@ RUN useradd -m -u 1000 -s /bin/bash massgen && \ # Switch to non-root user USER massgen +# Keep Playwright browser binaries in the image-owned cache directory. +ENV PLAYWRIGHT_BROWSERS_PATH="/home/massgen/.cache/ms-playwright" + # Install Playwright browser binaries as massgen user # This puts browsers in /home/massgen/.cache/ms-playwright/ where the user can access them RUN python -m playwright install +# Install Agent Browser browser bundle and default skill. +RUN agent-browser install && \ + cd /home/massgen && \ + openskills install vercel-labs/agent-browser --universal -y + # Install uv (modern Python package installer for optional serena skill) # Enables uvx for running tools like serena on-demand without permanent installation RUN curl -LsSf https://astral.sh/uv/install.sh | sh diff --git a/massgen/docker/README.md b/massgen/docker/README.md index 97ba20c02..d8e467620 100644 --- a/massgen/docker/README.md +++ b/massgen/docker/README.md @@ -44,6 +44,24 @@ bash massgen/docker/build.sh This builds `massgen/mcp-runtime:latest` (~400-500MB). +### Alternative: Overlay on Official Images + +If you already use official GHCR images and only want local customizations +(for example Agent Browser runtime/skill), build the lightweight overlay: + +```bash +# Standard overlay on top of ghcr.io/massgen/mcp-runtime:latest +bash massgen/docker/build_overlay_from_official.sh + +# Sudo overlay on top of ghcr.io/massgen/mcp-runtime-sudo:latest +bash massgen/docker/build_overlay_from_official.sh --sudo +``` + +Overlay assets: +- `massgen/docker/Dockerfile.overlay` +- `massgen/docker/Dockerfile.overlay.sudo` +- `massgen/docker/build_overlay_from_official.sh` + ### 3. Enable in Configuration **Minimal setup:** @@ -171,13 +189,14 @@ Orchestration End - Base: Python 3.11-slim - System packages: git, curl, build-essential, Node.js 20.x, ripgrep - Python packages: pytest, requests, numpy, pandas, ast-grep-cli -- CLI tools: openskills, semtools (npm), uv (for uvx) +- CLI tools: openskills, semtools, agent-browser (npm), uv (for uvx) - User: non-root (massgen, UID 1000) - Working directory: /workspace **Skills support:** - file_search (ripgrep + ast-grep) - pre-installed ✓ - semtools (semantic search) - pre-installed ✓ +- agent-browser skill/runtime (browser-native automation) - pre-installed ✓ - serena (LSP code understanding) - available via `uvx --from git+https://github.com/oraios/serena serena` ✓ **Size:** ~500-600MB (compressed) diff --git a/massgen/docker/build_overlay_from_official.sh b/massgen/docker/build_overlay_from_official.sh new file mode 100755 index 000000000..11e346dac --- /dev/null +++ b/massgen/docker/build_overlay_from_official.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# Build script for MassGen overlay images from official GHCR runtimes. + +set -e + +# Colors for output +GREEN='\033[0;32m' +BLUE='\033[0;34m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Defaults +TAG="latest" +BUILD_SUDO=false +BASE_IMAGE_STANDARD="ghcr.io/massgen/mcp-runtime:latest" +BASE_IMAGE_SUDO="ghcr.io/massgen/mcp-runtime-sudo:latest" +IMAGE_NAME="massgen/mcp-runtime-agent-browser" +DOCKERFILE="massgen/docker/Dockerfile.overlay" + +while [[ $# -gt 0 ]]; do + case "$1" in + -t|--tag) + TAG="$2" + shift 2 + ;; + -n|--name) + IMAGE_NAME="$2" + shift 2 + ;; + --base-image) + BASE_IMAGE_STANDARD="$2" + shift 2 + ;; + --base-image-sudo) + BASE_IMAGE_SUDO="$2" + shift 2 + ;; + --sudo) + BUILD_SUDO=true + shift + ;; + -h|--help) + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " -t, --tag TAG Image tag (default: latest)" + echo " -n, --name NAME Output image name" + echo " --base-image IMAGE Base image for standard build (default: ${BASE_IMAGE_STANDARD})" + echo " --base-image-sudo IMAGE Base image for sudo build (default: ${BASE_IMAGE_SUDO})" + echo " --sudo Build sudo overlay variant" + echo " -h, --help Show this help message" + echo "" + echo "Examples:" + echo " $0" + echo " $0 --sudo" + echo " $0 -n my-runtime -t dev" + echo " $0 --base-image ghcr.io/massgen/mcp-runtime:v0.1.40" + exit 0 + ;; + *) + echo -e "${RED}Unknown option: $1${NC}" + echo "Use -h or --help for usage information." + exit 1 + ;; + esac +done + +if [ "$BUILD_SUDO" = true ]; then + if [ "$IMAGE_NAME" = "massgen/mcp-runtime-agent-browser" ]; then + IMAGE_NAME="massgen/mcp-runtime-sudo-agent-browser" + fi + DOCKERFILE="massgen/docker/Dockerfile.overlay.sudo" + BASE_IMAGE="$BASE_IMAGE_SUDO" + echo -e "${BLUE}ℹ️ Building sudo overlay variant${NC}" +else + BASE_IMAGE="$BASE_IMAGE_STANDARD" +fi + +if ! command -v docker &> /dev/null; then + echo -e "${RED}Error: Docker is not installed or not in PATH${NC}" + exit 1 +fi + +if ! docker info &> /dev/null; then + echo -e "${RED}Error: Docker daemon is not running${NC}" + exit 1 +fi + +echo -e "${BLUE}Building MassGen overlay image from official runtime...${NC}" +echo -e "${BLUE}Output image: ${IMAGE_NAME}:${TAG}${NC}" +echo -e "${BLUE}Base image: ${BASE_IMAGE}${NC}" +echo -e "${BLUE}Dockerfile: ${DOCKERFILE}${NC}" +echo "" + +docker build \ + --build-arg "BASE_IMAGE=${BASE_IMAGE}" \ + -t "${IMAGE_NAME}:${TAG}" \ + -f "${DOCKERFILE}" \ + . + +echo "" +echo -e "${GREEN}✓ Build successful${NC}" +docker images "${IMAGE_NAME}:${TAG}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}" +echo "" +echo -e "${BLUE}Use in config:${NC}" +echo -e " command_line_execution_mode: \"docker\"" +echo -e " command_line_docker_image: \"${IMAGE_NAME}:${TAG}\"" +if [ "$BUILD_SUDO" = true ]; then + echo -e " command_line_docker_enable_sudo: true" +fi diff --git a/massgen/filesystem_manager/_docker_manager.py b/massgen/filesystem_manager/_docker_manager.py index 381a46130..26142de8e 100644 --- a/massgen/filesystem_manager/_docker_manager.py +++ b/massgen/filesystem_manager/_docker_manager.py @@ -601,6 +601,10 @@ def create_container( # Other common tools env_vars["GRADLE_USER_HOME"] = f"{workspace_data}/gradle" + # Playwright browsers are pre-installed in the image under /home/massgen/.cache. + # Keep this path fixed so runtime cache redirection does not trigger re-downloads. + env_vars["PLAYWRIGHT_BROWSERS_PATH"] = "/home/massgen/.cache/ms-playwright" + if env_vars: logger.info(f" Environment variables: {len(env_vars)} variable(s)") diff --git a/massgen/filesystem_manager/_filesystem_manager.py b/massgen/filesystem_manager/_filesystem_manager.py index a50dae0e6..3613ea860 100644 --- a/massgen/filesystem_manager/_filesystem_manager.py +++ b/massgen/filesystem_manager/_filesystem_manager.py @@ -414,18 +414,27 @@ def setup_orchestration_paths( extra_mount_paths = None if self.write_mode and self.write_mode != "legacy" and context_paths: extra_mount_paths = [] + preserved_context_paths = [] + suppressed_repo_paths = [] for ctx_path_config in context_paths: ctx_path = ctx_path_config.get("path", "") git_dir = os.path.join(ctx_path, ".git") if ctx_path and os.path.isdir(git_dir): + suppressed_repo_paths.append(ctx_path) extra_mount_paths.append((git_dir, git_dir, "rw")) logger.info( f"[FilesystemManager] write_mode: mounting .git/ dir for worktree refs: {git_dir}", ) - # Clear context_paths so originals are not mounted - context_paths = [] + else: + # Preserve non-git context paths (e.g., log/session directories) + # so agents can still read external artifacts in Docker. + preserved_context_paths.append(ctx_path_config) + context_paths = preserved_context_paths logger.info( - "[FilesystemManager] write_mode: suppressed original context path mounts " f"(worktrees in workspace replace them), {len(extra_mount_paths)} .git/ mounts added", + "[FilesystemManager] write_mode: suppressed {} repo context path mounts, preserved {} non-repo context paths, added {} .git/ mounts", + len(suppressed_repo_paths), + len(context_paths), + len(extra_mount_paths), ) # Get session mount config if session manager is initialized @@ -2037,22 +2046,18 @@ def clear_temp_workspace(self) -> None: try: logger.info(f"[FilesystemManager] Clearing temp workspace parent at orchestration startup: {self.agent_temporary_workspace_parent}") - items_to_clear = list(self.agent_temporary_workspace_parent.iterdir()) - for item in items_to_clear: - logger.info(f" - Removing temp workspace item: {item}") - if item.is_symlink(): - logger.debug(f"[FilesystemManager] Skipping symlink during temp clear: {item}") - continue - if item.is_file(): - item.unlink() - elif item.is_dir(): - shutil.rmtree(item) + shutil.rmtree(self.agent_temporary_workspace_parent) + self.agent_temporary_workspace_parent.mkdir(parents=True, exist_ok=True) logger.info("[FilesystemManager] Temp workspace parent cleared successfully") except Exception as e: logger.error(f"[FilesystemManager] Failed to clear temp workspace parent: {e}") - # Don't raise - orchestration can continue without clean temp workspace + # Last resort: try to recreate it fresh even if rmtree partially failed + try: + self.agent_temporary_workspace_parent.mkdir(parents=True, exist_ok=True) + except Exception: + pass async def copy_snapshots_to_temp_workspace(self, all_snapshots: Dict[str, Path], agent_mapping: Dict[str, str]) -> Optional[Path]: """ diff --git a/massgen/filesystem_manager/_path_permission_manager.py b/massgen/filesystem_manager/_path_permission_manager.py index 1386d2d00..a4250f386 100644 --- a/massgen/filesystem_manager/_path_permission_manager.py +++ b/massgen/filesystem_manager/_path_permission_manager.py @@ -752,17 +752,14 @@ def _is_read_tool(self, tool_name: str) -> bool: - compare_files: File comparison - compare_directories: Directory comparison """ - # Use lowercase for case-insensitive matching tool_lower = tool_name.lower() - # Check if tool name contains any read operation keywords - read_keywords = [ - # "read", # Matches: read, Read, read_multimodal_files, mcp__filesystem__read_text_file - "compare_files", # Matches: compare_files - "compare_directories", # Matches: compare_directories - ] + # Track standard read tools (Read/read_*/mcp__...__read_*) + if tool_name == "Read" or "read_" in tool_lower or tool_lower.startswith("read"): + return True - return any(keyword in tool_lower for keyword in read_keywords) + # Track comparison tools that read file content. + return "compare_files" in tool_lower or "compare_directories" in tool_lower def _validate_binary_file_access(self, tool_name: str, tool_args: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """ @@ -1024,6 +1021,9 @@ def _validate_delete_files_batch(self, tool_args: Dict[str, Any]) -> Tuple[bool, Tuple of (allowed: bool, reason: Optional[str]) """ try: + if not self.file_operation_tracker.enforce_read_before_delete: + return (True, None) + base_path = tool_args.get("base_path") include_patterns = tool_args.get("include_patterns") or ["*"] exclude_patterns = tool_args.get("exclude_patterns") or [] diff --git a/massgen/frontend/displays/__init__.py b/massgen/frontend/displays/__init__.py index 0ffc52ab0..2aff3c5b8 100644 --- a/massgen/frontend/displays/__init__.py +++ b/massgen/frontend/displays/__init__.py @@ -22,7 +22,9 @@ ) TEXTUAL_IMPORTS_AVAILABLE = True -except ImportError: +except (ImportError, NameError): + # Keep non-Textual imports usable when textual dependencies are unavailable + # or when textual symbols fail to resolve during module initialization. TextualTerminalDisplay = None TEXTUAL_IMPORTS_AVAILABLE = False diff --git a/massgen/frontend/displays/task_plan_support.py b/massgen/frontend/displays/task_plan_support.py index b86e64e9c..ef70db4f3 100644 --- a/massgen/frontend/displays/task_plan_support.py +++ b/massgen/frontend/displays/task_plan_support.py @@ -10,6 +10,7 @@ from __future__ import annotations +import ast import json from typing import Any, Callable, Dict, List, Optional @@ -35,6 +36,59 @@ } +def _safe_parse_mapping(raw: Any) -> Optional[Dict[str, Any]]: + """Best-effort parse for tool result payloads (JSON or Python-literal).""" + if isinstance(raw, dict): + return raw + if not isinstance(raw, str): + return None + + text = raw.strip() + if not text: + return None + + parsed: Any = None + try: + parsed = json.loads(text) + except Exception: + try: + parsed = ast.literal_eval(text) + except Exception: + return None + + if isinstance(parsed, dict): + return parsed + return None + + +def _extract_structured_result(raw_result: Any) -> Optional[Dict[str, Any]]: + """Extract the structured Planning MCP payload from a tool result. + + Handles: + - Direct JSON dict payloads + - Python-literal wrapper payloads (Codex style) with `structured_content` + - Wrapper payloads where the JSON lives in `content[*].text` + """ + result_data = _safe_parse_mapping(raw_result) + if not result_data: + return None + + structured = _safe_parse_mapping(result_data.get("structured_content")) + if structured: + return structured + + content_blocks = result_data.get("content") + if isinstance(content_blocks, list): + for block in content_blocks: + if not isinstance(block, dict): + continue + parsed_text = _safe_parse_mapping(block.get("text")) + if parsed_text: + return parsed_text + + return result_data + + def is_planning_tool(tool_name: str) -> bool: """Return True if tool_name matches a Planning MCP tool.""" tool_lower = tool_name.lower() @@ -77,10 +131,10 @@ def _log(msg: str) -> None: _log("_task_plan: no result_full") return True - try: - result_data = json.loads(result) - except (json.JSONDecodeError, TypeError) as exc: - _log(f"_task_plan: JSON parse error: {exc} (result length={len(result)})") + result_data = _extract_structured_result(result) + if not result_data: + result_len = len(result) if isinstance(result, str) else "n/a" + _log(f"_task_plan: parse error (result length={result_len})") return True if not isinstance(result_data, dict): diff --git a/massgen/frontend/displays/textual/__init__.py b/massgen/frontend/displays/textual/__init__.py index 2aac1c0e0..853943347 100644 --- a/massgen/frontend/displays/textual/__init__.py +++ b/massgen/frontend/displays/textual/__init__.py @@ -32,6 +32,8 @@ MCPStatusModal, MetricsModal, OrchestratorEventsModal, + SkillConfirmModal, + SkillsModal, StructuredBroadcastPromptModal, SystemStatusModal, TextContentModal, @@ -75,6 +77,9 @@ "GitDiffReviewModal", # Shortcuts modal "KeyboardShortcutsModal", + # Skills modals + "SkillsModal", + "SkillConfirmModal", # Workspace modals "FileInspectionModal", # Agent output modal diff --git a/massgen/frontend/displays/textual/widgets/__init__.py b/massgen/frontend/displays/textual/widgets/__init__.py index 5fb5d35e2..a50059bb9 100644 --- a/massgen/frontend/displays/textual/widgets/__init__.py +++ b/massgen/frontend/displays/textual/widgets/__init__.py @@ -30,6 +30,8 @@ MCPStatusModal, MetricsModal, OrchestratorEventsModal, + SkillConfirmModal, + SkillsModal, StructuredBroadcastPromptModal, SystemStatusModal, TextContentModal, @@ -73,6 +75,9 @@ "GitDiffReviewModal", # Shortcuts modal "KeyboardShortcutsModal", + # Skills modals + "SkillsModal", + "SkillConfirmModal", # Workspace modals "FileInspectionModal", # Agent output modal diff --git a/massgen/frontend/displays/textual/widgets/modals/__init__.py b/massgen/frontend/displays/textual/widgets/modals/__init__.py index 03b2d2574..3db65dc47 100644 --- a/massgen/frontend/displays/textual/widgets/modals/__init__.py +++ b/massgen/frontend/displays/textual/widgets/modals/__init__.py @@ -41,6 +41,7 @@ ) from .review_modal import GitDiffReviewModal from .shortcuts_modal import KeyboardShortcutsModal +from .skills_modals import SkillConfirmModal, SkillsModal from .status_modals import ( CostBreakdownModal, MCPStatusModal, @@ -79,6 +80,9 @@ "GitDiffReviewModal", # Shortcuts modal "KeyboardShortcutsModal", + # Skills modals + "SkillsModal", + "SkillConfirmModal", # Workspace modals "FileInspectionModal", # Agent output modal diff --git a/massgen/frontend/displays/textual/widgets/modals/browser_modals.py b/massgen/frontend/displays/textual/widgets/modals/browser_modals.py index 48ac61d82..9a628a03c 100644 --- a/massgen/frontend/displays/textual/widgets/modals/browser_modals.py +++ b/massgen/frontend/displays/textual/widgets/modals/browser_modals.py @@ -25,6 +25,7 @@ from massgen.filesystem_manager._constants import SKIP_DIRS_FOR_LOGGING +from ....shared.tui_debug import tui_debug_enabled, tui_log from ..modal_base import BaseModal # Additional patterns to skip in workspace view @@ -841,6 +842,8 @@ class WorkspaceBrowserModal(BaseModal): # Special indices for workspace types CURRENT_WORKSPACE_IDX = -100 FINAL_WORKSPACE_IDX = -200 # Final workspace (after consensus) + _MAX_SCAN_FILES = 400 + _MAX_SCAN_DEPTH = 6 def __init__( self, @@ -882,6 +885,12 @@ def __init__( self._dir_file_counts: Dict[str, int] = {} # Track file counts per directory # Default to specified agent or first agent self._current_agent_filter: Optional[str] = selected_agent # None = all agents + self._timing_debug = tui_debug_enabled() and os.environ.get("MASSGEN_TUI_TIMING_DEBUG", "").lower() in ( + "1", + "true", + "yes", + "on", + ) def compose(self) -> ComposeResult: with Container(id="workspace_browser_container"): @@ -977,9 +986,14 @@ def _update_answer_selector(self) -> None: def _load_workspace_files(self, answer_idx: int) -> None: """Load files from the workspace path of the selected answer, current, or final workspace.""" + started = time.perf_counter() file_list = self.query_one("#workspace_file_list", VerticalScroll) + preview = self.query_one("#workspace_preview", VerticalScroll) file_list.remove_children() + preview.remove_children() + preview.mount(Static("[dim]Select a file to preview[/]", markup=True)) self._current_files = [] + self._selected_file_idx = -1 self._tree_lines = [] # Reset tree structure self._expanded_dirs = set() # Reset expanded state self._dir_file_counts = {} # Reset file counts @@ -1009,31 +1023,10 @@ def _load_workspace_files(self, answer_idx: int) -> None: file_list.mount(Static(f"[dim]No workspace available[/]\n[dim]{workspace_path or 'N/A'}[/]", markup=True)) return - # List files in workspace + # List files in workspace (bounded for responsiveness) try: - files = [] - for root, dirs, filenames in os.walk(workspace_path): - # Skip hidden directories and filtered patterns (subagent dirs, gitignored, etc.) - dirs[:] = [d for d in dirs if not d.startswith(".") and not _should_skip_dir(d)] - for fname in filenames: - if not fname.startswith("."): - full_path = os.path.join(root, fname) - rel_path = os.path.relpath(full_path, workspace_path) - try: - stat = os.stat(full_path) - files.append( - { - "name": fname, - "rel_path": rel_path, - "full_path": full_path, - "size": stat.st_size, - "mtime": stat.st_mtime, - }, - ) - except OSError: - pass - - self._current_files = sorted(files, key=lambda f: f["rel_path"]) + files, truncated = self._scan_workspace_files(workspace_path) + self._current_files = files if not self._current_files: file_list.mount(Static("[dim]Workspace is empty[/]", markup=True)) @@ -1053,12 +1046,60 @@ def _load_workspace_files(self, answer_idx: int) -> None: ), ) - # Auto-select first file - if self._current_files: - self._preview_file(0) + if truncated: + file_list.mount( + Static( + f"[dim]... showing first {self._MAX_SCAN_FILES} files[/]", + markup=True, + ), + ) + else: + file_list.mount(Static("[dim]Select a file to preview[/]", markup=True)) except Exception as e: file_list.mount(Static(f"[red]Error: {e}[/]", markup=True)) + finally: + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowserModal._load_workspace_files " f"{(time.perf_counter() - started) * 1000.0:.1f}ms " f"files={len(self._current_files)} workspace={workspace_path}", + ) + + def _scan_workspace_files(self, workspace_path: str) -> tuple[List[Dict[str, Any]], bool]: + """Return a bounded, filtered file listing for a workspace.""" + files: List[Dict[str, Any]] = [] + truncated = False + for root, dirs, filenames in os.walk(workspace_path, topdown=True): + # Skip hidden/ignored directories and enforce a max traversal depth. + rel_root = os.path.relpath(root, workspace_path) + depth = 0 if rel_root == "." else len(rel_root.split(os.sep)) + dirs[:] = [d for d in dirs if not d.startswith(".") and not _should_skip_dir(d) and depth < self._MAX_SCAN_DEPTH] + if depth >= self._MAX_SCAN_DEPTH: + filenames = [] + + for fname in filenames: + if fname.startswith("."): + continue + if len(files) >= self._MAX_SCAN_FILES: + truncated = True + break + full_path = os.path.join(root, fname) + rel_path = os.path.relpath(full_path, workspace_path) + try: + stat = os.stat(full_path) + files.append( + { + "name": fname, + "rel_path": rel_path, + "full_path": full_path, + "size": stat.st_size, + "mtime": stat.st_mtime, + }, + ) + except OSError: + pass + if truncated: + break + return sorted(files, key=lambda f: f["rel_path"]), truncated def _format_size(self, size: int) -> str: """Format file size in human-readable format.""" diff --git a/massgen/frontend/displays/textual/widgets/modals/shortcuts_modal.py b/massgen/frontend/displays/textual/widgets/modals/shortcuts_modal.py index f6ed8ad19..def94a3a7 100644 --- a/massgen/frontend/displays/textual/widgets/modals/shortcuts_modal.py +++ b/massgen/frontend/displays/textual/widgets/modals/shortcuts_modal.py @@ -34,6 +34,7 @@ def compose(self) -> ComposeResult: " [yellow]h[/] Conversation history\n" " [yellow]c[/] Cost breakdown\n" " [yellow]m[/] MCP status / metrics\n" + " [yellow]k[/] Skills manager\n" " [yellow]s[/] System status\n" " [yellow]o[/] Agent output (full)\n" " [yellow]?[/] This help\n" @@ -52,22 +53,23 @@ def compose(self) -> ComposeResult: " [yellow]Shift+Enter[/] New line\n" " [yellow]Ctrl+P[/] File access (off/read/write)\n" " [yellow]Tab[/] Next agent\n" - " [yellow]Shift+Tab[/] Cycle plan mode\n" + " [yellow]Shift+Tab[/] Cycle mode (normal/plan/execute/analysis)\n" "\n" "[bold cyan]Mode Bar[/]\n" - " [yellow]Plan[/] Normal / Plan / Execute\n" + " [yellow]Plan[/] Normal / Plan / Execute / Analysis\n" " [yellow]Multi-Agent[/] All agents vs one\n" " [yellow]Refine[/] Iterative refinement\n" " [yellow]Parallel[/] Same task + voting (default)\n" " [yellow]Decomposition[/] Independent subtasks\n" " [yellow]Subtasks[/] Edit per-agent subtasks\n" - " [yellow]⋮[/] Plan settings + selector\n" + " [yellow]⋮[/] Plan/analysis settings\n" " [yellow]?[/] Open mode bar guide\n" " [yellow]Override[/] Manual winner selection\n" "\n" "[bold cyan]Slash Commands[/]\n" " [yellow]/history[/] Conversation history\n" " [yellow]/context[/] Manage context paths\n" + " [yellow]/skills[/] Open skills manager\n" " [yellow]/vim[/] Toggle vim mode\n" "\n" "[bold cyan]Quit[/]\n" diff --git a/massgen/frontend/displays/textual/widgets/modals/skills_modals.py b/massgen/frontend/displays/textual/widgets/modals/skills_modals.py new file mode 100644 index 000000000..4770548b2 --- /dev/null +++ b/massgen/frontend/displays/textual/widgets/modals/skills_modals.py @@ -0,0 +1,161 @@ +# -*- coding: utf-8 -*- +"""Skill management modals for Textual TUI.""" + +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +try: + from textual.app import ComposeResult + from textual.containers import Container, Horizontal, VerticalScroll + from textual.widgets import Button, Checkbox, Label, Static, TextArea + + TEXTUAL_AVAILABLE = True +except ImportError: + TEXTUAL_AVAILABLE = False + +from ..modal_base import BaseModal + + +class SkillsModal(BaseModal): + """Modal for viewing and toggling available skills for the current session.""" + + def __init__( + self, + *, + default_skills: List[Dict[str, Any]], + created_skills: List[Dict[str, Any]], + enabled_skill_names: Optional[List[str]], + ) -> None: + super().__init__() + self._default_skills = default_skills + self._created_skills = created_skills + self._enabled_skill_names = enabled_skill_names + self._checkbox_to_name: Dict[str, str] = {} + + def _is_enabled(self, name: str) -> bool: + """Return whether a skill should render as enabled.""" + if self._enabled_skill_names is None: + return True + enabled = {s.lower() for s in self._enabled_skill_names} + return name.lower() in enabled + + def compose(self) -> ComposeResult: + total = len(self._default_skills) + len(self._created_skills) + with Container(id="skills_modal_container"): + yield Label("🧩 Skills Manager", id="skills_modal_header") + yield Label( + f"{total} skill(s) discovered • Session-only toggles", + id="skills_modal_summary", + ) + + with VerticalScroll(id="skills_modal_scroll"): + yield Label("Default Skills", classes="modal-section-header") + if self._default_skills: + for idx, skill in enumerate(self._default_skills): + name = skill.get("name", f"default-{idx}") + desc = skill.get("description", "") + checkbox_id = f"skill_default_{idx}" + self._checkbox_to_name[checkbox_id] = name + yield Checkbox(name, value=self._is_enabled(name), id=checkbox_id) + if desc: + yield Static(f"[dim]{desc}[/]", markup=True, classes="modal-list-item") + else: + yield Static("[dim]No default skills found[/]", markup=True, classes="modal-list-item") + + yield Label("Created Skills", classes="modal-section-header") + if self._created_skills: + for idx, skill in enumerate(self._created_skills): + name = skill.get("name", f"created-{idx}") + desc = skill.get("description", "") + location = skill.get("location", "created") + checkbox_id = f"skill_created_{idx}" + self._checkbox_to_name[checkbox_id] = name + yield Checkbox( + f"{name} [{location}]", + value=self._is_enabled(name), + id=checkbox_id, + ) + if desc: + yield Static(f"[dim]{desc}[/]", markup=True, classes="modal-list-item") + else: + yield Static("[dim]No created skills found[/]", markup=True, classes="modal-list-item") + + with Horizontal(id="skills_modal_actions"): + yield Button("Enable All", id="enable_all_skills_btn") + yield Button("Disable All", id="disable_all_skills_btn") + yield Button("Apply", id="apply_skills_btn", variant="primary") + yield Button("Cancel", id="skills_cancel_button") + + def _set_all_checkboxes(self, value: bool) -> None: + """Set all skill checkboxes to the given value.""" + for checkbox_id in self._checkbox_to_name: + try: + cb = self.query_one(f"#{checkbox_id}", Checkbox) + cb.value = value + except Exception: + continue + + def _collect_enabled_names(self) -> List[str]: + """Collect selected skill names from checkbox state.""" + selected: List[str] = [] + for checkbox_id, name in self._checkbox_to_name.items(): + try: + cb = self.query_one(f"#{checkbox_id}", Checkbox) + if cb.value: + selected.append(name) + except Exception: + continue + return selected + + def on_button_pressed(self, event: Button.Pressed) -> None: + if event.button.id == "enable_all_skills_btn": + self._set_all_checkboxes(True) + return + if event.button.id == "disable_all_skills_btn": + self._set_all_checkboxes(False) + return + if event.button.id == "apply_skills_btn": + self.dismiss(self._collect_enabled_names()) + event.stop() + return + if event.button.id == "skills_cancel_button": + self.dismiss(None) + event.stop() + return + + +class SkillConfirmModal(BaseModal): + """Modal asking user to confirm writing a generated skill to disk.""" + + def __init__( + self, + *, + skill_name: str, + skill_markdown: str, + target_path: str, + ) -> None: + super().__init__() + self._skill_name = skill_name + self._skill_markdown = skill_markdown + self._target_path = target_path + + def compose(self) -> ComposeResult: + with Container(id="skill_confirm_container"): + yield Label("Create Skill from Analysis?", id="skill_confirm_header") + yield Static(f"[bold]Name:[/] {self._skill_name}", markup=True) + yield Static(f"[bold]Target:[/] {self._target_path}", markup=True) + yield TextArea(self._skill_markdown, read_only=True, id="skill_confirm_body") + with Horizontal(id="skill_confirm_actions"): + yield Button("Create Skill", id="confirm_skill_write_btn", variant="success") + yield Button("Cancel", id="skill_confirm_cancel_button") + + def on_button_pressed(self, event: Button.Pressed) -> None: + if event.button.id == "confirm_skill_write_btn": + self.dismiss(True) + event.stop() + return + if event.button.id == "skill_confirm_cancel_button": + self.dismiss(False) + event.stop() + return diff --git a/massgen/frontend/displays/textual_terminal_display.py b/massgen/frontend/displays/textual_terminal_display.py index 653a78444..fea53e3cd 100644 --- a/massgen/frontend/displays/textual_terminal_display.py +++ b/massgen/frontend/displays/textual_terminal_display.py @@ -5,10 +5,13 @@ """ import functools +import json import os import re +import sys import threading import time +import traceback from collections import deque from datetime import datetime from pathlib import Path @@ -58,6 +61,8 @@ MCPStatusModal, MetricsModal, OrchestratorEventsModal, + SkillConfirmModal, + SkillsModal, StructuredBroadcastPromptModal, SystemStatusModal, TextContentModal, @@ -69,6 +74,8 @@ AgentStatusRibbon, AgentTabBar, AgentTabChanged, + AnalysisProfileChanged, + AnalysisTargetChanged, BroadcastModeChanged, CompletionFooter, ContextPathsClicked, @@ -78,6 +85,7 @@ ModeChanged, ModeHelpClicked, MultiLineInput, + OpenSkillsRequested, OverrideRequested, PathSuggestionDropdown, PlanDepthChanged, @@ -97,6 +105,7 @@ ToolCallCard, ToolDetailModal, ToolSection, + ViewAnalysisRequested, ViewPlanRequested, ViewSelected, ) @@ -108,7 +117,7 @@ TEXTUAL_AVAILABLE = False # TUI Debug logger - use shared implementation -from .shared.tui_debug import tui_log # noqa: E402 +from .shared.tui_debug import tui_debug_enabled, tui_log # noqa: E402 def _process_line_buffer( @@ -1255,6 +1264,15 @@ def set_agent_subtasks(self, subtasks: Dict[str, str]) -> None: if self._app: self._call_app_method("set_agent_subtasks", subtasks) + def set_agent_personas(self, personas: Dict[str, str]) -> None: + """Pass agent persona assignments to the TUI for display in the tab bar. + + Args: + personas: Mapping of agent_id to persona summary/description. + """ + if self._app: + self._call_app_method("set_agent_personas", personas) + def begin_restart( self, attempt: int, @@ -2625,7 +2643,7 @@ def _get_combined_css_path(cls, theme: str) -> Path: # Help - Ctrl+G for guide/help Binding("ctrl+g", "show_help", "Help", priority=True, show=False), # Mode toggles - Binding("shift+tab", "toggle_plan_mode", "Plan Mode", priority=True), + Binding("shift+tab", "toggle_plan_mode", "Mode Cycle", priority=True), Binding("ctrl+o", "trigger_override", "Override", priority=True, show=False), # Task plan toggle Binding("ctrl+t", "toggle_task_plan", "Toggle Tasks", priority=True, show=False), @@ -2657,6 +2675,21 @@ def __init__( self._buffer_lock = buffer_lock self.buffer_flush_interval = buffer_flush_interval self._keyboard_interactive_mode = display._keyboard_interactive_mode + self._timing_debug = tui_debug_enabled() and os.environ.get("MASSGEN_TUI_TIMING_DEBUG", "").lower() in ( + "1", + "true", + "yes", + "on", + ) + self._heartbeat_timer = None + self._last_heartbeat_at: Optional[float] = None + self._stall_watchdog_thread: Optional[threading.Thread] = None + self._stall_watchdog_stop = threading.Event() + self._last_stall_dump_at: float = 0.0 + try: + self._stall_watchdog_threshold_s = float(os.environ.get("MASSGEN_TUI_STALL_THRESHOLD_S", "0.8")) + except ValueError: + self._stall_watchdog_threshold_s = 0.8 self.agent_widgets = {} self.header_widget = None @@ -2734,12 +2767,25 @@ def __init__( # Runtime decomposition generation UI state self._decomposition_generation_modal: Optional[DecompositionGenerationModal] = None self._runtime_decomposition_subtasks: Dict[str, str] = {} + self._runtime_parallel_personas: Dict[str, str] = {} self._decomposition_completion_source: str = "subagent" self._decomposition_runtime_subagent_call_id: Optional[str] = None self._decomposition_runtime_subagent_agent_id: Optional[str] = None self._decomposition_runtime_subagent_data: Optional[Any] = None self._decomposition_runtime_status_callback: Optional[Callable[[str], Optional[Any]]] = None self._decomposition_runtime_auto_opened: bool = False + # Workspace browser open-guard to prevent duplicate modal pushes from + # repeated click/key events while the UI is busy. + self._workspace_browser_open_pending: bool = False + self._workspace_browser_last_request_at: float = 0.0 + # Performance guard: suppress expensive hover style updates while the + # timeline is answer-locked (buttons remain clickable). + self._hover_updates_suppressed: bool = False + self._persona_runtime_subagent_call_id: Optional[str] = None + self._persona_runtime_subagent_agent_id: Optional[str] = None + self._persona_runtime_subagent_data: Optional[Any] = None + self._persona_runtime_status_callback: Optional[Callable[[str], Optional[Any]]] = None + self._persona_runtime_auto_opened: bool = False if not self._keyboard_interactive_mode: self.BINDINGS = [] @@ -2800,12 +2846,24 @@ def reset_turn_state(self) -> None: # Decomposition generation modal/runtime state self._runtime_decomposition_subtasks = {} + self._runtime_parallel_personas = {} self._dismiss_decomposition_generation_modal() self._decomposition_runtime_subagent_call_id = None self._decomposition_runtime_subagent_agent_id = None self._decomposition_runtime_subagent_data = None self._decomposition_runtime_status_callback = None self._decomposition_runtime_auto_opened = False + self._persona_runtime_subagent_call_id = None + self._persona_runtime_subagent_agent_id = None + self._persona_runtime_subagent_data = None + self._persona_runtime_status_callback = None + self._persona_runtime_auto_opened = False + + if self._tab_bar and self._mode_state.coordination_mode == "parallel": + if self._mode_state.parallel_personas_enabled: + self._tab_bar.set_agent_personas({}) + else: + self._tab_bar.set_agent_subtasks({}) def compose(self) -> ComposeResult: """Compose the UI layout with adaptive agent arrangement.""" @@ -2850,7 +2908,7 @@ def compose(self) -> ComposeResult: # Spacer to push cancel button to right yield Static("", id="execution_spacer") # Cancel button - on right - self._cancel_button = Button("Cancel [q]", id="cancel_button", variant="error") + self._cancel_button = Button("Cancel [q]", id="turn_cancel_button", variant="error") yield self._cancel_button # Queued input banner - mounted dynamically when needed (not in compose) @@ -2989,6 +3047,10 @@ async def on_mount(self): self.coordination_display._app_ready.set() self._register_event_listener() self.set_interval(self.buffer_flush_interval, self._flush_buffers) + if self._timing_debug: + self._last_heartbeat_at = time.monotonic() + self._heartbeat_timer = self.set_interval(0.05, self._heartbeat_tick) + self._start_stall_watchdog() if self.coordination_display.restart_reason and self.header_widget: self.header_widget.show_restart_context( self.coordination_display.restart_reason, @@ -2998,6 +3060,7 @@ async def on_mount(self): self._update_theme_indicator() if self._mode_bar: self._mode_bar.set_coordination_mode(self._mode_state.coordination_mode) + self._mode_bar.set_parallel_personas_enabled(self._mode_state.parallel_personas_enabled) # Auto-focus input field on startup if self.question_input: self.question_input.focus() @@ -3048,7 +3111,7 @@ async def on_mount(self): debug_info["execution_bar"] = {"exists": False, "error": str(e)} try: - cancel_btn = self.query_one("#cancel_button") + cancel_btn = self.query_one("#turn_cancel_button") debug_info["cancel_button"] = { "exists": True, "id": cancel_btn.id, @@ -3075,6 +3138,102 @@ async def on_mount(self): self.log("DEBUG: Widget info written to /tmp/textual_debug.json") tui_log("TUI mounted - debug info written to /tmp/textual_debug.json") + def on_unmount(self) -> None: + """Clean up debug timers/threads when app exits.""" + try: + if self._heartbeat_timer is not None: + self._heartbeat_timer.stop() + except Exception: + pass + self._heartbeat_timer = None + self._stop_stall_watchdog() + + def set_hover_updates_suppressed(self, suppressed: bool, reason: str = "") -> None: + """Enable/disable hover-style recalculation for responsiveness.""" + if self._hover_updates_suppressed == suppressed: + return + self._hover_updates_suppressed = suppressed + if self._timing_debug: + reason_suffix = f" reason={reason}" if reason else "" + tui_log(f"[TIMING] TextualApp.hover_updates_suppressed {suppressed}{reason_suffix}") + + def _set_mouse_over(self, widget: Optional[Widget], hover_widget: Optional[Widget]) -> None: + """Skip hover style churn when suppression is enabled.""" + if self._hover_updates_suppressed: + return + super()._set_mouse_over(widget, hover_widget) + + def _start_stall_watchdog(self) -> None: + """Start a background watchdog to capture main-thread stack on stalls.""" + if not self._timing_debug: + return + if self._stall_watchdog_thread and self._stall_watchdog_thread.is_alive(): + return + + self._stall_watchdog_stop.clear() + self._stall_watchdog_thread = threading.Thread( + target=self._stall_watchdog_loop, + name="massgen-tui-stall-watchdog", + daemon=True, + ) + self._stall_watchdog_thread.start() + + def _stop_stall_watchdog(self) -> None: + """Stop stall watchdog thread.""" + self._stall_watchdog_stop.set() + thread = self._stall_watchdog_thread + if thread and thread.is_alive(): + try: + thread.join(timeout=0.2) + except Exception: + pass + self._stall_watchdog_thread = None + + def _stall_watchdog_loop(self) -> None: + """Capture Python stack traces when main loop appears blocked.""" + while not self._stall_watchdog_stop.wait(0.1): + last = self._last_heartbeat_at + if not self._timing_debug or last is None: + continue + now = time.monotonic() + delta = now - last + if delta < self._stall_watchdog_threshold_s: + continue + # Avoid spamming stack dumps while blocked. + if now - self._last_stall_dump_at < 1.5: + continue + self._last_stall_dump_at = now + + thread_id = self._thread_id + if thread_id is None: + continue + frame = sys._current_frames().get(thread_id) + if frame is None: + continue + stack = "".join(traceback.format_stack(frame, limit=40)) + tui_log( + "[TIMING] TextualApp.main_loop_stall_stack " f"{delta * 1000.0:.1f}ms thread_id={thread_id}\n{stack}", + ) + + def _heartbeat_tick(self) -> None: + """Log event-loop stalls when timing debug is enabled.""" + now = time.monotonic() + last = self._last_heartbeat_at + self._last_heartbeat_at = now + if not self._timing_debug or last is None: + return + + delta = now - last + # 250ms+ main-loop gaps are typically perceived as input lag. + if delta >= 0.25: + try: + batch_len = len(self._event_batch) + except Exception: + batch_len = -1 + tui_log( + "[TIMING] TextualApp.main_loop_stall " f"{delta * 1000.0:.1f}ms event_batch={batch_len} pending_flush={self._pending_flush}", + ) + def _dump_widget_sizes(self) -> None: """Dump full widget tree with sizes for debugging layout issues.""" import json @@ -3706,10 +3865,13 @@ def _submit_question(self, submitted_text: str | None = None) -> None: text = submitted_text.strip() if submitted_text else self.question_input.text.strip() tui_log(f"_submit_question called with text: '{text[:50]}...' (len={len(text)})") - # In execute mode, allow empty submission (just press Enter to run the plan) + # In execute/analysis mode, allow empty submission. + # - Execute: Enter runs selected plan. + # - Analysis: Enter runs default analysis request for selected log target. is_execute_mode = self._mode_state.plan_mode == "execute" - if not text and not is_execute_mode: - tui_log(" Empty text and not execute mode, returning") + is_analysis_mode = self._mode_state.plan_mode == "analysis" + if not text and not (is_execute_mode or is_analysis_mode): + tui_log(" Empty text and not execute/analysis mode, returning") return # Hide plan options popover on submission (especially for execute mode) @@ -3738,6 +3900,8 @@ def _submit_question(self, submitted_text: str | None = None) -> None: if text is None: # Setup failed, error already shown return + elif is_analysis_mode: + text = self._setup_analysis_submission(text) # Clear input after determining routing (queued input was already cleared) self.question_input.clear() @@ -3909,6 +4073,8 @@ def _handle_slash_command(self, command: str) -> None: self.action_open_workspace_browser() elif result.ui_action == "show_browser": self.action_open_unified_browser() + elif result.ui_action == "show_skills": + self._show_skills_modal() elif result.ui_action == "toggle_vim": self._toggle_vim_mode() elif result.ui_action == "toggle_theme": @@ -3953,6 +4119,8 @@ def _handle_slash_command(self, command: str) -> None: self._show_history_modal() elif cmd in ("/timeline", "/t"): self.action_open_timeline() + elif cmd in ("/skills", "/k"): + self._show_skills_modal() else: self.notify(f"Unknown command: {command}", severity="warning") @@ -4053,12 +4221,13 @@ def _show_help_modal(self) -> None: v - Vote results MODE BAR: - Plan - Normal → Planning → Execute + Plan - Normal → Planning → Execute → Analysis Agents - Multi-agent or single-agent runs Coordination - Parallel (vote) or decomposition (independent subtasks) + Personas - Toggle parallel persona generation + convergence prep view Subtasks - Define per-agent subtasks (decomposition mode) Refine - Keep iterative refinement/voting on or off - ⋮ - Plan settings (depth, broadcast, plan selector) + ⋮ - Plan/analysis settings (depth, selector, profile, target) ? - Open mode bar help Override - Manually pick final presenter (when available) @@ -4572,6 +4741,162 @@ def _auto_open_decomposition_runtime_subagent_screen(self, attempt: int = 0) -> lambda: self._auto_open_decomposition_runtime_subagent_screen(attempt + 1), ) + def _get_persona_runtime_subagent( + self, + subagent_id: str = "persona_generation", + ) -> Optional[Any]: + """Return latest runtime persona-generation subagent data.""" + current = self._persona_runtime_subagent_data + callback = self._persona_runtime_status_callback + + if callback: + try: + refreshed = callback(subagent_id) + if refreshed is not None: + self._persona_runtime_subagent_data = refreshed + current = refreshed + except Exception: + pass + + if current is not None and getattr(current, "id", None) == subagent_id: + return current + return None + + def _open_persona_runtime_subagent_screen( + self, + auto_return_on_completion: bool = False, + ) -> bool: + """Open the runtime persona-generation subagent screen.""" + subagent = self._get_persona_runtime_subagent() + if not subagent: + return False + + screen = SubagentScreen( + subagent=subagent, + all_subagents=[subagent], + status_callback=self._get_persona_runtime_subagent, + auto_return_on_completion=auto_return_on_completion, + ) + self.push_screen(screen) + return True + + def _persona_subagent_events_ready(self) -> bool: + """Return True when persona-generation subagent has enough event data.""" + subagent = self._get_persona_runtime_subagent() + if not subagent: + return False + + log_path_raw = getattr(subagent, "log_path", None) + if not log_path_raw: + return False + + try: + from massgen.subagent.models import SubagentResult + + log_path = Path(log_path_raw) + if not log_path.is_absolute(): + log_path = (Path.cwd() / log_path).resolve() + + events_path: Optional[Path] = None + if log_path.is_file(): + events_path = log_path + elif log_path.is_dir(): + resolved = SubagentResult.resolve_events_path(log_path) + if resolved: + events_path = Path(resolved) + + if not events_path or not events_path.exists(): + return False + if events_path.stat().st_size <= 0: + return False + + metadata_candidates = [events_path.parent / "execution_metadata.yaml"] + if log_path.is_dir(): + metadata_candidates.extend( + [ + log_path / "full_logs" / "execution_metadata.yaml", + log_path / "execution_metadata.yaml", + ], + ) + else: + metadata_candidates.append(log_path.parent / "execution_metadata.yaml") + + for candidate in metadata_candidates: + if not candidate.exists(): + continue + try: + import yaml + + with open(candidate, encoding="utf-8") as f: + metadata = yaml.safe_load(f) or {} + agents_cfg = (metadata.get("config") or {}).get("agents") or [] + if isinstance(agents_cfg, list): + agent_ids = [a.get("id") for a in agents_cfg if isinstance(a, dict) and isinstance(a.get("id"), str) and a.get("id")] + if agent_ids: + return True + except Exception: + continue + + # Fallback: scan recent event lines for inner-agent sources. + def _is_agent_source(source: Optional[str]) -> bool: + if not source: + return False + lowered = source.lower() + if lowered.startswith("mcp_") or lowered.startswith("mcp__") or "mcp__" in lowered: + return False + if lowered in ("mcp_setup", "mcp_session", "orchestrator", "system", "persona_generation"): + return False + return True + + try: + import json + + tail_lines = events_path.read_text(encoding="utf-8", errors="ignore").splitlines()[-400:] + seen_agents: set[str] = set() + for raw in tail_lines: + if not raw.strip(): + continue + try: + event = json.loads(raw) + except Exception: + continue + + agent_id = event.get("agent_id") + if isinstance(agent_id, str) and _is_agent_source(agent_id): + seen_agents.add(agent_id) + + data = event.get("data") if isinstance(event.get("data"), dict) else {} + source = data.get("source") if isinstance(data, dict) else None + if not source and isinstance(data, dict): + chunk = data.get("chunk") + if isinstance(chunk, dict): + source = chunk.get("source") + if isinstance(source, str) and _is_agent_source(source): + seen_agents.add(source) + + if seen_agents: + return True + except Exception: + return False + + return False + except Exception: + return False + + def _auto_open_persona_runtime_subagent_screen(self, attempt: int = 0) -> None: + """Auto-open persona-generation subagent screen once event data is available.""" + if self._persona_subagent_events_ready(): + self._open_persona_runtime_subagent_screen(auto_return_on_completion=True) + return + + if attempt >= 120: + return + + self.set_timer( + 0.1, + lambda: self._auto_open_persona_runtime_subagent_screen(attempt + 1), + ) + def show_runtime_subagent_card( self, agent_id: str, @@ -4626,6 +4951,45 @@ def show_runtime_subagent_card( self.set_timer(0.05, self._auto_open_decomposition_runtime_subagent_screen) return + # Persona generation prep should also stay out of the main timeline and + # open directly in the dedicated subagent screen. + if subagent_id == "persona_generation": + trimmed_task = (task or "").strip() + if len(trimmed_task) > 300: + trimmed_task = trimmed_task[:297] + "..." + + resolved_log_path = log_path + if not resolved_log_path: + try: + log_dir = get_log_session_dir() + if log_dir: + resolved_log_path = str(log_dir / "subagents" / subagent_id) + except Exception: + resolved_log_path = None + + self._persona_runtime_subagent_call_id = call_id + self._persona_runtime_subagent_agent_id = agent_id + self._persona_runtime_status_callback = status_callback + self._persona_runtime_subagent_data = SubagentDisplayData( + id=subagent_id, + task=trimmed_task, + status="running", + progress_percent=0, + elapsed_seconds=0.0, + timeout_seconds=float(timeout_seconds or 300), + workspace_path="", + workspace_file_count=0, + last_log_line="Starting...", + error=None, + answer_preview=None, + log_path=resolved_log_path, + ) + + if not self._persona_runtime_auto_opened: + self._persona_runtime_auto_opened = True + self.set_timer(0.05, self._auto_open_persona_runtime_subagent_screen) + return + target_agent = agent_id if agent_id in self.agent_widgets else None if not target_agent: if self._active_agent_id in self.agent_widgets: @@ -4791,6 +5155,40 @@ def update_runtime_subagent_card( self._decomposition_runtime_subagent_agent_id = None return + if subagent_id == "persona_generation": + existing = self._get_persona_runtime_subagent(subagent_id) or self._persona_runtime_subagent_data + + status_map = { + "running": "running", + "pending": "pending", + "completed": "completed", + "timeout": "timeout", + "failed": "failed", + "error": "error", + } + normalized_status = status_map.get((status or "").lower(), "failed") + + if existing is not None: + self._persona_runtime_subagent_data = SubagentDisplayData( + id=existing.id, + task=existing.task, + status=normalized_status, + progress_percent=100 if normalized_status in ("completed", "timeout", "failed", "error") else existing.progress_percent, + elapsed_seconds=existing.elapsed_seconds, + timeout_seconds=existing.timeout_seconds, + workspace_path=existing.workspace_path, + workspace_file_count=existing.workspace_file_count, + last_log_line=existing.last_log_line, + error=error or existing.error, + answer_preview=answer_preview or existing.answer_preview, + log_path=existing.log_path, + ) + + if call_id == self._persona_runtime_subagent_call_id and normalized_status in ("completed", "timeout", "failed", "error"): + self._persona_runtime_subagent_call_id = None + self._persona_runtime_subagent_agent_id = None + return + status_map = { "running": "running", "pending": "pending", @@ -4804,6 +5202,8 @@ def update_runtime_subagent_card( target_agent = agent_id if call_id == self._decomposition_runtime_subagent_call_id and self._decomposition_runtime_subagent_agent_id: target_agent = self._decomposition_runtime_subagent_agent_id + elif call_id == self._persona_runtime_subagent_call_id and self._persona_runtime_subagent_agent_id: + target_agent = self._persona_runtime_subagent_agent_id panel = self.agent_widgets.get(target_agent) if not panel: @@ -4849,6 +5249,9 @@ def update_runtime_subagent_card( if call_id == self._decomposition_runtime_subagent_call_id and normalized_status in ("completed", "timeout", "failed", "error"): self._decomposition_runtime_subagent_call_id = None self._decomposition_runtime_subagent_agent_id = None + elif call_id == self._persona_runtime_subagent_call_id and normalized_status in ("completed", "timeout", "failed", "error"): + self._persona_runtime_subagent_call_id = None + self._persona_runtime_subagent_agent_id = None def show_subagent_card_from_spawn( self, @@ -5096,9 +5499,9 @@ def get_answer_label(aid): # Still need to do the lock and complete if answer and not getattr(card, "_final_content", []): card.append_chunk(answer) - card.complete() timeline.lock_to_final_answer("final_presentation_card") card.set_locked_mode(True) + card.complete() return tui_log("[TextualDisplay] Creating new final presentation card") @@ -5135,6 +5538,9 @@ def set_content_and_complete(): # Only add content if card is empty (streaming may have already populated it) if answer and not getattr(card, "_final_content", []): card.append_chunk(answer) + # Auto-lock timeline to show only final answer + timeline.lock_to_final_answer("final_presentation_card") + card.set_locked_mode(True) card.complete() try: logger.info( @@ -5142,9 +5548,6 @@ def set_content_and_complete(): ) except Exception as e: tui_log(f"[TextualDisplay] {e}") - # Auto-lock timeline to show only final answer - timeline.lock_to_final_answer("final_presentation_card") - card.set_locked_mode(True) # Auto-collapse task plan when final presentation shows if hasattr(panel, "_task_plan_host"): panel._task_plan_host.collapse() @@ -5250,9 +5653,6 @@ def end_post_evaluation(self, agent_id: str): if self._final_presentation_card._post_eval_status in ("none", "evaluating"): self._final_presentation_card.set_post_eval_status("verified") - # Mark the card as complete (shows footer with buttons) - self._final_presentation_card.complete() - # Auto-lock timeline to show only final answer if agent_id in self.agent_widgets: panel = self.agent_widgets[agent_id] @@ -5269,6 +5669,9 @@ def end_post_evaluation(self, agent_id: str): except Exception as e: tui_log(f"[TextualDisplay] {e}") + # Mark the card as complete (shows footer with buttons) + self._final_presentation_card.complete() + # Phase 12.4: Store final answer for view-based navigation if agent_id in self.agent_widgets: panel = self.agent_widgets[agent_id] @@ -5878,6 +6281,12 @@ def set_agent_subtasks(self, subtasks: Dict[str, str]) -> None: ) self.set_timer(2.5, self._dismiss_decomposition_generation_modal) + def set_agent_personas(self, personas: Dict[str, str]) -> None: + """Pass agent persona assignments to the tab bar for display.""" + self._runtime_parallel_personas = dict(personas or {}) + if self._tab_bar and self._mode_state.coordination_mode == "parallel" and self._mode_state.parallel_personas_enabled: + self._tab_bar.set_agent_personas(self._runtime_parallel_personas) + def set_input_enabled(self, enabled: bool): """Enable or disable mode controls during execution. @@ -6089,9 +6498,11 @@ def action_show_subagents(self): except Exception: continue - # Fallback: runtime decomposition subagent (hidden from timeline by design) + # Fallback: runtime preparation subagents (hidden from timeline by design) if self._open_decomposition_runtime_subagent_screen(): return + if self._open_persona_runtime_subagent_screen(): + return self.notify("No active subagents", severity="information", timeout=2) @@ -6219,10 +6630,11 @@ def on_view_selected(self, event: ViewSelected) -> None: def on_session_info_clicked(self, event: SessionInfoClicked) -> None: """Handle click on session info to show full prompt.""" tui_log(f"on_session_info_clicked: turn={event.turn}") - # Build content with optional subtask + # Build content with optional per-agent assignment (subtask/persona) content = "" if event.subtask: - content += f"Subtask: {event.subtask}\n\n" + label = getattr(event, "assignment_kind", "Subtask") + content += f"{label}: {event.subtask}\n\n" content += event.question or "(No prompt)" # Show the full prompt in a text modal self.push_screen( @@ -6242,11 +6654,15 @@ def _sync_coordination_mode_toggle(self, mode: str) -> None: self._mode_state.coordination_mode = mode if self._mode_bar: self._mode_bar.set_coordination_mode(mode) + self._mode_bar.set_parallel_personas_enabled(self._mode_state.parallel_personas_enabled) if self._tab_bar: if mode == "decomposition": self._tab_bar.set_agent_subtasks(self._mode_state.decomposition_subtasks) else: - self._tab_bar.set_agent_subtasks({}) + if self._mode_state.parallel_personas_enabled: + self._tab_bar.set_agent_personas(self._runtime_parallel_personas) + else: + self._tab_bar.set_agent_subtasks({}) # ============================================================ # Mode Change Handlers @@ -6273,6 +6689,8 @@ def on_mode_changed(self, event: ModeChanged) -> None: self._mode_bar.set_coordination_mode(self._mode_state.coordination_mode) elif event.mode_type == "refinement" and self._mode_bar: self._mode_bar.set_refinement_mode(self._mode_state.refinement_enabled) + elif event.mode_type == "personas" and self._mode_bar: + self._mode_bar.set_parallel_personas_enabled(self._mode_state.parallel_personas_enabled) event.stop() return @@ -6284,6 +6702,8 @@ def on_mode_changed(self, event: ModeChanged) -> None: self._handle_coordination_mode_change(event.value) elif event.mode_type == "refinement": self._handle_refinement_mode_change(event.value == "on") + elif event.mode_type == "personas": + self._handle_parallel_persona_mode_change(event.value == "on") event.stop() @@ -6455,6 +6875,96 @@ def on_view_plan_requested(self, event: ViewPlanRequested) -> None: self.push_screen(modal) event.stop() + def on_analysis_profile_changed(self, event: AnalysisProfileChanged) -> None: + """Handle analysis profile changes from the popover.""" + tui_log(f"on_analysis_profile_changed: profile={event.profile}") + + if self._mode_state.is_locked(): + self.notify("Cannot change analysis profile during execution.", severity="warning", timeout=2) + event.stop() + return + + profile = "user" if event.profile == "user" else "dev" + self._mode_state.analysis_config.profile = profile + + popover_visible = hasattr(self, "_plan_options_popover") and "visible" in self._plan_options_popover.classes + if not popover_visible: + self.notify( + f"Analysis profile: {'User (skills)' if profile == 'user' else 'Dev (internals)'}", + severity="information", + timeout=2, + ) + event.stop() + + def on_analysis_target_changed(self, event: AnalysisTargetChanged) -> None: + """Handle analysis target changes from the popover.""" + tui_log(f"on_analysis_target_changed: log_dir={event.log_dir}, turn={event.turn}") + + if self._mode_state.is_locked(): + self.notify("Cannot change analysis target during execution.", severity="warning", timeout=2) + event.stop() + return + + cfg = self._mode_state.analysis_config + prev_log_dir = cfg.selected_log_dir + prev_turn = cfg.selected_turn + cfg.selected_log_dir = event.log_dir + + if event.log_dir: + turns = self._get_turn_numbers(Path(event.log_dir)) + if event.turn in turns: + cfg.selected_turn = event.turn + elif turns: + cfg.selected_turn = turns[-1] + else: + cfg.selected_turn = None + else: + cfg.selected_turn = None + + if cfg.selected_log_dir == prev_log_dir and cfg.selected_turn == prev_turn: + event.stop() + return + + self._refresh_analysis_popover_if_visible() + + popover_visible = hasattr(self, "_plan_options_popover") and "visible" in self._plan_options_popover.classes + if not popover_visible: + if cfg.selected_log_dir and cfg.selected_turn is not None: + self.notify( + f"Analysis target: {Path(cfg.selected_log_dir).name} / turn_{cfg.selected_turn}", + severity="information", + timeout=2, + ) + elif cfg.selected_log_dir: + self.notify( + f"Analysis target: {Path(cfg.selected_log_dir).name} (no turns found)", + severity="warning", + timeout=2, + ) + else: + self.notify("Analysis target cleared", severity="warning", timeout=2) + event.stop() + + def on_view_analysis_requested(self, event: ViewAnalysisRequested) -> None: + """Handle request to open the selected analysis report.""" + report_path = self._get_analysis_report_path(event.log_dir, event.turn) + if not report_path.exists(): + self.notify( + f"Analysis report not found at {report_path}. Run analysis first.", + severity="warning", + timeout=3, + ) + event.stop() + return + + self._show_text_modal(report_path, f"Analysis Report • {Path(event.log_dir).name} • turn_{event.turn}") + event.stop() + + def on_open_skills_requested(self, event: OpenSkillsRequested) -> None: + """Handle request to open the session skills manager.""" + self._show_skills_modal() + event.stop() + def _update_plan_options_popover_state(self) -> None: """Update the plan options popover internal state (without recompose).""" if not hasattr(self, "_plan_options_popover"): @@ -6465,6 +6975,9 @@ def _update_plan_options_popover_state(self) -> None: storage = PlanStorage() plans = storage.get_all_plans(limit=5) + self._ensure_analysis_defaults() + analysis_log_options = self._build_analysis_log_options() + analysis_turn_options = self._build_analysis_turn_options() # Update popover internal state popover = self._plan_options_popover @@ -6473,10 +6986,324 @@ def _update_plan_options_popover_state(self) -> None: popover._current_plan_id = self._mode_state.selected_plan_id popover._current_depth = self._mode_state.plan_config.depth popover._current_broadcast = self._mode_state.plan_config.broadcast + popover._analysis_profile = self._mode_state.analysis_config.profile + popover._analysis_log_options = analysis_log_options + popover._analysis_selected_log_dir = self._mode_state.analysis_config.selected_log_dir + popover._analysis_turn_options = analysis_turn_options + popover._analysis_selected_turn = self._mode_state.analysis_config.selected_turn + popover._analysis_preview_text = self._build_analysis_preview_text( + self._mode_state.analysis_config.selected_log_dir, + self._mode_state.analysis_config.selected_turn, + ) # Don't recompose - let the popover show with updated state except Exception as e: tui_log(f"_update_plan_options_popover_state error: {e}") + def _get_available_log_sessions(self) -> List[Path]: + """Return available log session directories with current session prioritized.""" + log_dirs: List[Path] = [] + try: + from massgen.logger_config import get_log_session_root + from massgen.logs_analyzer import get_logs_dir + + logs_base = get_logs_dir() + if logs_base.exists(): + log_dirs.extend([p.resolve() for p in logs_base.glob("log_*") if p.is_dir()]) + # Timestamp-based directory names sort correctly lexicographically. + log_dirs.sort(key=lambda p: p.name, reverse=True) + + current_root = get_log_session_root().resolve() + if current_root.exists() and current_root.is_dir() and current_root.name.startswith("log_"): + log_dirs = [p for p in log_dirs if p != current_root] + log_dirs.insert(0, current_root) + except Exception as e: + tui_log(f"_get_available_log_sessions error: {e}") + return log_dirs + + @staticmethod + def _get_turn_numbers(log_dir: Path) -> List[int]: + """Extract sorted turn numbers from a log session directory.""" + turns: List[int] = [] + if not log_dir.exists(): + return turns + for turn_dir in log_dir.glob("turn_*"): + if not turn_dir.is_dir(): + continue + try: + turns.append(int(turn_dir.name.split("_", 1)[1])) + except (IndexError, ValueError): + continue + return sorted(set(turns)) + + def _ensure_analysis_defaults(self) -> None: + """Ensure analysis target defaults are set to valid log/turn values.""" + logs = self._get_available_log_sessions() + cfg = self._mode_state.analysis_config + + if not logs: + cfg.selected_log_dir = None + cfg.selected_turn = None + return + + log_paths = {str(p): p for p in logs} + selected_log = cfg.selected_log_dir + if not selected_log or selected_log not in log_paths: + selected_log = str(logs[0]) + + turns = self._get_turn_numbers(log_paths[selected_log]) + selected_turn = cfg.selected_turn + if not turns: + selected_turn = None + elif selected_turn not in turns: + selected_turn = turns[-1] + + cfg.selected_log_dir = selected_log + cfg.selected_turn = selected_turn + + def _build_analysis_log_options(self) -> List[Tuple[str, str]]: + """Build `(label, value)` options for analysis log selection.""" + options: List[Tuple[str, str]] = [] + logs = self._get_available_log_sessions() + selected = self._mode_state.analysis_config.selected_log_dir + for path in logs: + label = path.name + if str(path) == selected: + label += " (selected)" + options.append((label, str(path))) + return options + + def _build_analysis_turn_options(self) -> List[Tuple[str, str]]: + """Build `(label, value)` options for analysis turn selection.""" + options: List[Tuple[str, str]] = [] + selected_log = self._mode_state.analysis_config.selected_log_dir + if not selected_log: + return options + turns = self._get_turn_numbers(Path(selected_log)) + for turn in turns: + options.append((f"turn_{turn}", str(turn))) + return options + + def _refresh_analysis_popover_if_visible(self) -> None: + """Recompose the analysis popover when it is currently visible.""" + if not hasattr(self, "_plan_options_popover"): + return + popover = self._plan_options_popover + if "visible" not in popover.classes: + return + self._update_plan_options_popover_state() + popover._initialized = False + popover.refresh(recompose=True) + self.call_later(popover.show) + + @staticmethod + def _get_analysis_report_path(log_dir: str, turn: int) -> Path: + """Return the expected ANALYSIS_REPORT.md path for a log session turn.""" + return Path(log_dir) / f"turn_{turn}" / "ANALYSIS_REPORT.md" + + @staticmethod + def _extract_user_query_fragment(question: str) -> str: + """Extract the user-facing part of a structured analysis prompt.""" + if not question: + return "" + + text = question.strip() + # Analysis prompts often wrap user input as "USER'S ANALYSIS REQUEST: ..." + patterns = [ + r"USER'?S\s+ANALYSIS\s+REQUEST:\s*(.+)", + r"USER'?S\s+REQUEST:\s*(.+)", + ] + for pattern in patterns: + match = re.search(pattern, text, re.IGNORECASE | re.DOTALL) + if match: + candidate = match.group(1).strip() + if candidate: + return candidate + return text + + @staticmethod + def _condense_preview(text: str, max_chars: int = 260) -> str: + """Condense multiline text into a short single-line preview.""" + if not text: + return "" + single_line = re.sub(r"\s+", " ", text).strip() + if len(single_line) <= max_chars: + return single_line + return single_line[: max_chars - 3].rstrip() + "..." + + @staticmethod + def _read_yaml_file(path: Path) -> Dict[str, Any]: + """Read a YAML file into a dictionary, returning {} on errors.""" + if not path.exists(): + return {} + try: + import yaml + + data = yaml.safe_load(path.read_text(encoding="utf-8")) or {} + return data if isinstance(data, dict) else {} + except Exception: + return {} + + @staticmethod + def _get_latest_attempt_dir(turn_dir: Path) -> Optional[Path]: + """Return latest attempt dir under a turn, or the turn dir for legacy layouts.""" + if not turn_dir.exists() or not turn_dir.is_dir(): + return None + + attempts = [p for p in turn_dir.glob("attempt_*") if p.is_dir()] + if not attempts: + return turn_dir + + def attempt_key(path: Path) -> int: + match = re.match(r"attempt_(\d+)$", path.name) + return int(match.group(1)) if match else -1 + + attempts.sort(key=attempt_key) + return attempts[-1] + + def _extract_query_preview_from_attempt(self, attempt_dir: Path) -> Optional[str]: + """Extract query preview from status/metadata/system logs.""" + if not attempt_dir.exists(): + return None + + status_candidates = [attempt_dir / "status.json"] + metadata_candidates = [attempt_dir / "execution_metadata.yaml"] + system_status_candidates = [attempt_dir / "agent_outputs" / "system_status.txt"] + + if attempt_dir.name.startswith("attempt_"): + status_candidates.append(attempt_dir.parent / "status.json") + metadata_candidates.append(attempt_dir.parent / "execution_metadata.yaml") + system_status_candidates.append(attempt_dir.parent / "agent_outputs" / "system_status.txt") + + # 1) status.json -> meta.question (preferred during active/attempt-based runs) + for status_path in status_candidates: + if not status_path.exists(): + continue + try: + status_data = json.loads(status_path.read_text(encoding="utf-8")) + question = status_data.get("meta", {}).get("question") + if isinstance(question, str) and question.strip(): + question = self._extract_user_query_fragment(question) + return self._condense_preview(question) + except Exception: + continue + + # 2) execution_metadata.yaml -> query + for metadata_path in metadata_candidates: + metadata = self._read_yaml_file(metadata_path) + query = metadata.get("query") + if isinstance(query, str) and query.strip(): + query = self._extract_user_query_fragment(query) + return self._condense_preview(query) + + # 3) system_status.txt fallback (legacy logs may only have this) + for system_status_path in system_status_candidates: + if not system_status_path.exists(): + continue + try: + content = system_status_path.read_text(encoding="utf-8", errors="ignore") + except Exception: + continue + match = re.search(r"^\s*(?:Question|Query)\s*:\s*(.+)$", content, re.IGNORECASE | re.MULTILINE) + if match: + query = self._extract_user_query_fragment(match.group(1)) + if query: + return self._condense_preview(query) + + return None + + @staticmethod + def _extract_winner_from_status(status_data: Dict[str, Any]) -> Optional[str]: + """Extract winner agent id from status payload.""" + if not status_data: + return None + + results = status_data.get("results", {}) + winner = results.get("winner") + if isinstance(winner, str) and winner.strip(): + return winner.strip() + + details = status_data.get("finish_reason_details") + if isinstance(details, str): + match = re.search(r"Winner:\s*([A-Za-z0-9_.-]+)", details) + if match: + return match.group(1) + return None + + def _extract_final_answer_preview_from_attempt(self, attempt_dir: Path) -> Optional[str]: + """Extract final answer preview if final/ exists for the selected target.""" + if not attempt_dir.exists(): + return None + + final_dir_candidates = [attempt_dir / "final"] + status_candidates = [attempt_dir / "status.json"] + + if attempt_dir.name.startswith("attempt_"): + final_dir_candidates.append(attempt_dir.parent / "final") + status_candidates.append(attempt_dir.parent / "status.json") + + final_dir: Optional[Path] = None + for candidate in final_dir_candidates: + if candidate.exists() and candidate.is_dir(): + final_dir = candidate + break + + # User requested: skip final preview when there is no final/ + if not final_dir: + return None + + status_data: Dict[str, Any] = {} + for status_path in status_candidates: + if not status_path.exists(): + continue + try: + status_data = json.loads(status_path.read_text(encoding="utf-8")) + break + except Exception: + continue + + candidates: List[Path] = [] + winner = self._extract_winner_from_status(status_data) + if winner: + candidates.append(final_dir / winner / "answer.txt") + candidates.extend(sorted(final_dir.glob("*/answer.txt"))) + + seen: Set[Path] = set() + for answer_path in candidates: + if answer_path in seen: + continue + seen.add(answer_path) + if not answer_path.exists(): + continue + try: + answer = answer_path.read_text(encoding="utf-8", errors="ignore").strip() + except Exception: + continue + if answer: + return self._condense_preview(answer) + + return "unavailable" + + def _build_analysis_preview_text(self, log_dir: Optional[str], turn: Optional[int]) -> str: + """Build query/final preview text for analysis popover.""" + if not log_dir or turn is None: + return "" + + turn_dir = Path(log_dir) / f"turn_{turn}" + attempt_dir = self._get_latest_attempt_dir(turn_dir) + if not attempt_dir: + return "" + + parts: List[str] = [] + query_preview = self._extract_query_preview_from_attempt(attempt_dir) + if query_preview: + parts.append(f"Query: {query_preview}") + + final_preview = self._extract_final_answer_preview_from_attempt(attempt_dir) + if final_preview: + parts.append(f"Final: {final_preview}") + + return "\n".join(parts) + def _enter_execute_mode(self) -> None: """Enter execute mode and show plan selector if plans exist. @@ -6629,11 +7456,43 @@ def _setup_plan_execution(self, user_text: str) -> Optional[str]: self.notify(f"Failed to set up plan execution: {e}", severity="error", timeout=3) return None + def _setup_analysis_submission(self, user_text: str) -> str: + """Prepare analysis request text for submission. + + Empty analysis submissions use a default request so users can press Enter + (matching execute mode ergonomics). + + Args: + user_text: User-provided analysis request text (may be empty). + + Returns: + Analysis request text to submit. + """ + cleaned = (user_text or "").strip() + if cleaned: + return cleaned + + # Keep defaults in sync before submission. + self._ensure_analysis_defaults() + + profile = self._mode_state.analysis_config.profile + if profile == "user": + default_request = "Analyze this run for end-user outcomes. Explain what happened, " "surface reusable workflows, and propose skill-level improvements." + else: + default_request = "Analyze this run in depth. Explain what happened, identify likely " "root causes, and recommend concrete MassGen internal improvements." + + self.notify( + "Analysis Mode: running default analysis request for selected target", + severity="information", + timeout=3, + ) + return default_request + def _handle_plan_mode_change(self, mode: str) -> None: """Handle plan mode toggle. Args: - mode: "normal", "plan", or "execute". + mode: "normal", "plan", "execute", or "analysis". """ tui_log(f"_handle_plan_mode_change: {mode}") @@ -6647,6 +7506,8 @@ def _handle_plan_mode_change(self, mode: str) -> None: # Note: The mode bar already shows "execute", but _enter_execute_mode # may revert to "plan" if no plans exist self._enter_execute_mode() + elif mode == "analysis": + self._enter_analysis_mode() elif mode == "normal": self._mode_state.reset_plan_state() if self._mode_bar: @@ -6659,6 +7520,24 @@ def _handle_plan_mode_change(self, mode: str) -> None: self.question_input.placeholder = "Enter to submit • Shift+Enter for newline • @ for files • Ctrl+G help" self.notify("Plan Mode: OFF", severity="information", timeout=2) + def _enter_analysis_mode(self) -> None: + """Enter log analysis mode.""" + self._mode_state.plan_mode = "analysis" + if self._mode_bar: + self._mode_bar.set_plan_mode("analysis") + if hasattr(self, "question_input"): + self.question_input.placeholder = "Enter to analyze selected log • or describe what to analyze • Shift+Enter newline • @ for files • ⋮ for analysis options" + # Ensure default analysis target/profile are populated. + self._ensure_analysis_defaults() + # If the options popover is already open (e.g., from execute mode), + # immediately recompose it to analysis controls to prevent stale UI. + if hasattr(self, "_plan_options_popover") and "visible" in self._plan_options_popover.classes: + self._update_plan_options_popover_state() + self._plan_options_popover._initialized = False + self._plan_options_popover.refresh(recompose=True) + self.call_later(self._plan_options_popover.show) + self.notify("Analysis Mode: ON - Dev/User profile and log target in ⋮", severity="information", timeout=3) + def _handle_agent_mode_change(self, mode: str) -> None: """Handle agent mode toggle. @@ -6706,13 +7585,47 @@ def _handle_coordination_mode_change(self, mode: str) -> None: ) else: if self._tab_bar: - self._tab_bar.set_agent_subtasks({}) + if self._mode_state.parallel_personas_enabled: + self._tab_bar.set_agent_personas(self._runtime_parallel_personas) + else: + self._tab_bar.set_agent_subtasks({}) self.notify( "Coordination: Parallel (agents solve the same task and vote)", severity="information", timeout=3, ) + def _handle_parallel_persona_mode_change(self, enabled: bool) -> None: + """Handle parallel persona generation toggle.""" + tui_log(f"_handle_parallel_persona_mode_change: {enabled}") + self._mode_state.parallel_personas_enabled = enabled + + if self._tab_bar and self._mode_state.coordination_mode == "parallel": + if enabled: + self._tab_bar.set_agent_personas(self._runtime_parallel_personas) + else: + self._tab_bar.set_agent_subtasks({}) + + if enabled: + if self._mode_state.coordination_mode == "parallel": + self.notify( + "Parallel Personas: ON (generate + display per-agent personas before coordination)", + severity="information", + timeout=3, + ) + else: + self.notify( + "Parallel Personas: ON (will apply when coordination mode is Parallel)", + severity="information", + timeout=3, + ) + else: + self.notify( + "Parallel Personas: OFF", + severity="warning", + timeout=2, + ) + def _update_agent_panels_in_use_state(self, selected_agent: Optional[str]) -> None: """Update the 'in use' state for all agent panels. @@ -6750,7 +7663,7 @@ def _handle_refinement_mode_change(self, enabled: bool) -> None: @keyboard_action def action_toggle_plan_mode(self) -> None: - """Toggle plan mode: normal → plan → execute → normal (Shift+Tab shortcut).""" + """Toggle mode: normal -> plan -> execute -> analysis -> normal (Shift+Tab).""" tui_log("action_toggle_plan_mode") # Block during execution (keyboard_action decorator handles this, @@ -6773,7 +7686,10 @@ def action_toggle_plan_mode(self) -> None: # plan → execute (show plan selector if plans exist) self._enter_execute_mode() elif self._mode_state.plan_mode == "execute": - # execute → normal + # execute -> analysis + self._enter_analysis_mode() + elif self._mode_state.plan_mode == "analysis": + # analysis -> normal self._mode_state.reset_plan_state() if self._mode_bar: self._mode_bar.set_plan_mode("normal") @@ -6907,7 +7823,7 @@ def on_context_paths_clicked(self, event: ContextPathsClicked) -> None: def on_button_pressed(self, event: Button.Pressed) -> None: """Handle button clicks in main app.""" - if event.button.id == "cancel_button": + if event.button.id == "turn_cancel_button": # Trigger cancellation (same as Ctrl+C) self.coordination_display.request_cancellation() self.notify("Cancelling turn...", severity="warning", timeout=2) @@ -7174,7 +8090,7 @@ def scan_for_final(base_dir: Path) -> Dict[str, str]: self.notify("No answers yet - workspaces available after agents submit", severity="warning", timeout=3) return - self._show_modal_async( + self._present_workspace_browser_modal( WorkspaceBrowserModal( answers=self._answers, agent_ids=self.coordination_display.agent_ids, @@ -7183,20 +8099,37 @@ def scan_for_final(base_dir: Path) -> Dict[str, str]: ), ) - def _show_workspace_browser_for_agent(self, agent_id: str): + def _show_workspace_browser_for_agent( + self, + agent_id: str, + preferred_final_workspace: Optional[str] = None, + ): """Open workspace browser focused on the winning agent's final workspace. Args: agent_id: The agent ID to show workspace for (typically the winner) + preferred_final_workspace: Optional already-resolved final workspace path + for the agent. When provided, avoids rescanning log directories. """ from pathlib import Path + started_total = time.perf_counter() # Get current workspace paths for ALL agents agent_workspace_paths: Dict[str, str] = {} final_workspace_paths: Dict[str, str] = {} orchestrator = getattr(self.coordination_display, "orchestrator", None) + if preferred_final_workspace: + preferred_path = Path(preferred_final_workspace) + if preferred_path.exists(): + final_workspace_paths[agent_id] = str(preferred_path) + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowser.reuse_preferred_final_workspace " f"0.0ms agent={agent_id}", + ) + if orchestrator: + started_collect = time.perf_counter() # Get current workspaces for aid, agent in getattr(orchestrator, "agents", {}).items(): fm = getattr(getattr(agent, "backend", None), "filesystem_manager", None) @@ -7204,10 +8137,16 @@ def _show_workspace_browser_for_agent(self, agent_id: str): workspace = getattr(fm, "get_current_workspace", lambda: None)() if workspace: agent_workspace_paths[aid] = str(workspace) + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowser.collect_current_workspaces " f"{(time.perf_counter() - started_collect) * 1000.0:.1f}ms " f"count={len(agent_workspace_paths)}", + ) - # Scan for final workspaces in log directory + # Scan for final workspaces in log directory (unless we already + # received a resolved path from the final-answer card). log_dir = getattr(orchestrator, "log_session_dir", None) - if log_dir: + if log_dir and not final_workspace_paths: + started_scan = time.perf_counter() log_path = Path(log_dir) def scan_for_final(base_dir: Path) -> Dict[str, str]: @@ -7233,6 +8172,10 @@ def scan_for_final(base_dir: Path) -> Dict[str, str]: break if final_workspace_paths: break + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowser.scan_final_workspaces " f"{(time.perf_counter() - started_scan) * 1000.0:.1f}ms " f"count={len(final_workspace_paths)}", + ) # Merge final workspaces into agent_workspace_paths with special key # The modal will detect keys ending with "-final" as final workspaces @@ -7242,9 +8185,13 @@ def scan_for_final(base_dir: Path) -> Dict[str, str]: if not self._answers and not agent_workspace_paths and not agent_final_paths: self.notify("No workspace available yet", severity="warning", timeout=3) + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowser.open " f"{(time.perf_counter() - started_total) * 1000.0:.1f}ms result=no_workspace", + ) return - self._show_modal_async( + self._present_workspace_browser_modal( WorkspaceBrowserModal( answers=self._answers, agent_ids=self.coordination_display.agent_ids, @@ -7254,6 +8201,47 @@ def scan_for_final(base_dir: Path) -> Dict[str, str]: default_to_final=True, ), ) + if self._timing_debug: + tui_log( + "[TIMING] WorkspaceBrowser.open " + f"{(time.perf_counter() - started_total) * 1000.0:.1f}ms " + f"answers={len(self._answers)} current={len(agent_workspace_paths)} final={len(agent_final_paths)}", + ) + + def _present_workspace_browser_modal(self, modal: WorkspaceBrowserModal) -> bool: + """Open workspace browser once, suppressing duplicate open bursts.""" + now = time.monotonic() + # Ignore rapid repeated requests before the first modal appears. + if now - self._workspace_browser_last_request_at < 0.4: + if self._timing_debug: + tui_log("[TIMING] WorkspaceBrowser.open suppressed=throttled") + return False + if self._workspace_browser_open_pending: + if self._timing_debug: + tui_log("[TIMING] WorkspaceBrowser.open suppressed=pending") + return False + + # If a workspace modal is already on stack, don't push another. + try: + if any(isinstance(screen, WorkspaceBrowserModal) for screen in self.screen_stack): + if self._timing_debug: + tui_log("[TIMING] WorkspaceBrowser.open suppressed=already_open") + return False + except Exception: + pass + + self._workspace_browser_open_pending = True + self._workspace_browser_last_request_at = now + + def _on_dismiss(_result: Any = None) -> None: + self._workspace_browser_open_pending = False + + try: + self.push_screen(modal, _on_dismiss) + return True + except Exception: + self._workspace_browser_open_pending = False + raise def action_open_unified_browser(self): """Open unified browser modal with tabs for Answers, Votes, Workspace, Timeline.""" @@ -8064,6 +9052,7 @@ def _handle_agent_shortcuts(self, event: events.Key) -> bool: - f: Final presentation / files - c: Cost breakdown - m: MCP status / metrics + - k: Skills manager - a: Answer browser - t: Timeline - h or ?: Help/shortcuts @@ -8130,6 +9119,12 @@ def _handle_agent_shortcuts(self, event: events.Key) -> bool: event.stop() return True + # k - Skills manager + if key_lower == "k": + self._show_skills_modal() + event.stop() + return True + # a - Answer browser if key_lower == "a": self.action_open_answer_browser() @@ -8260,6 +9255,177 @@ def _show_history_modal(self): ), ) + @staticmethod + def _normalize_skill_name_list(skill_names: List[str]) -> List[str]: + """Normalize and deduplicate skill names while preserving order.""" + seen: Set[str] = set() + normalized: List[str] = [] + for name in skill_names: + cleaned = (name or "").strip() + if not cleaned: + continue + key = cleaned.lower() + if key in seen: + continue + seen.add(key) + normalized.append(cleaned) + return normalized + + def _collect_skill_inventory(self) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: + """Collect available skills grouped into default vs created lists.""" + from massgen.filesystem_manager.skills_manager import scan_skills + from massgen.logs_analyzer import get_logs_dir + + skills_dir = Path(".agent/skills") + logs_dir = get_logs_dir() + all_skills = scan_skills(skills_dir, logs_dir=logs_dir if logs_dir.exists() else None) + + # Keep first instance per name to avoid duplicates across sources. + deduped: List[Dict[str, Any]] = [] + seen: Set[str] = set() + for skill in all_skills: + name = str(skill.get("name", "")).strip() + if not name: + continue + key = name.lower() + if key in seen: + continue + seen.add(key) + deduped.append(skill) + + default_skills = sorted( + [s for s in deduped if s.get("location") == "builtin"], + key=lambda s: str(s.get("name", "")).lower(), + ) + created_skills = sorted( + [s for s in deduped if s.get("location") != "builtin"], + key=lambda s: str(s.get("name", "")).lower(), + ) + return default_skills, created_skills + + def _show_skills_modal(self) -> None: + """Show session skill manager modal.""" + default_skills, created_skills = self._collect_skill_inventory() + current_enabled = self._mode_state.analysis_config.get_enabled_skill_names() + + modal = SkillsModal( + default_skills=default_skills, + created_skills=created_skills, + enabled_skill_names=current_enabled, + ) + + def _on_skills_dismiss(result: Optional[List[str]]) -> None: + if result is None: + return + + selected = self._normalize_skill_name_list(result) + discovered = self._normalize_skill_name_list( + [str(s.get("name", "")) for s in default_skills + created_skills], + ) + + selected_set = {name.lower() for name in selected} + discovered_set = {name.lower() for name in discovered} + + if discovered and selected_set == discovered_set: + # None = unfiltered; automatically includes newly discovered skills. + self._mode_state.analysis_config.enabled_skill_names = None + enabled_count = len(discovered) + self.notify(f"Skills enabled: all {enabled_count} discovered", severity="information", timeout=3) + else: + self._mode_state.analysis_config.enabled_skill_names = selected + self.notify(f"Skills enabled: {len(selected)}", severity="information", timeout=3) + + self.push_screen(modal, _on_skills_dismiss) + + @staticmethod + def _slugify_skill_name(name: str) -> str: + """Create a filesystem-safe skill directory name.""" + slug = re.sub(r"[^a-z0-9]+", "-", (name or "").lower()).strip("-") + return slug or "skill-from-analysis" + + @staticmethod + def _extract_skill_candidate_from_answer(answer_text: str) -> Optional[Tuple[str, str]]: + """Extract a SKILL.md candidate from an answer if present. + + Returns: + Tuple of (skill_name, skill_markdown) when detected, otherwise None. + """ + if not answer_text: + return None + + def parse_skill_markdown(candidate: str) -> Optional[str]: + import yaml + + cleaned = candidate.strip() + if not cleaned.startswith("---"): + return None + + match = re.match(r"^---\s*\n(.*?)\n---\s*(?:\n|$)", cleaned, re.DOTALL) + if not match: + return None + + try: + metadata = yaml.safe_load(match.group(1)) or {} + except Exception: + return None + if not isinstance(metadata, dict): + return None + + skill_name = str(metadata.get("name", "")).strip() + return skill_name or None + + # Prefer fenced blocks so explanatory prose outside the block is ignored. + for fence in re.finditer(r"```(?:[a-zA-Z0-9_-]+)?\n(.*?)```", answer_text, re.DOTALL): + block = fence.group(1).strip() + skill_name = parse_skill_markdown(block) + if skill_name: + return skill_name, block + "\n" + + # Fallback: treat the entire answer as a candidate. + skill_name = parse_skill_markdown(answer_text) + if skill_name: + return skill_name, answer_text.strip() + "\n" + + return None + + def _offer_skill_creation_from_analysis(self, answer_text: str) -> None: + """Show a confirmation modal when a user-mode analysis returns SKILL.md content.""" + if self._mode_state.plan_mode != "analysis": + return + if self._mode_state.analysis_config.profile != "user": + return + + candidate = self._extract_skill_candidate_from_answer(answer_text) + if not candidate: + return + + skill_name, skill_markdown = candidate + target_dir = Path(".agent") / "skills" / self._slugify_skill_name(skill_name) + target_path = target_dir / "SKILL.md" + + modal = SkillConfirmModal( + skill_name=skill_name, + skill_markdown=skill_markdown, + target_path=str(target_path), + ) + + def _on_confirm(result: Optional[bool]) -> None: + if not result: + return + try: + target_dir.mkdir(parents=True, exist_ok=True) + target_path.write_text(skill_markdown, encoding="utf-8") + self.notify(f"Created skill: {target_path}", severity="information", timeout=4) + + # If a filter is active, include the newly created skill automatically. + enabled = self._mode_state.analysis_config.get_enabled_skill_names() + if enabled is not None: + self._mode_state.analysis_config.enabled_skill_names = self._normalize_skill_name_list(enabled + [skill_name]) + except Exception as e: + self.notify(f"Failed to create skill: {e}", severity="error", timeout=4) + + self.push_screen(modal, _on_confirm) + def _show_file_inspection_modal(self): """Display file inspection modal with tree view.""" orchestrator = getattr(self.coordination_display, "orchestrator", None) diff --git a/massgen/frontend/displays/textual_themes/base.tcss b/massgen/frontend/displays/textual_themes/base.tcss index fc8c2c379..ea836b407 100644 --- a/massgen/frontend/displays/textual_themes/base.tcss +++ b/massgen/frontend/displays/textual_themes/base.tcss @@ -597,6 +597,19 @@ ModeToggle.state-execute:focus { text-style: bold; } +ModeToggle.state-analysis { + color: $warning; + border-bottom: tall $warning; + text-style: bold; +} + +ModeToggle.state-analysis:hover, +ModeToggle.state-analysis:focus { + color: $warning; + border-bottom: tall $warning; + text-style: bold; +} + /* Agent mode states - single is muted (reduced mode) */ ModeToggle.state-single { color: $mode-toggle-inactive-color; @@ -2284,6 +2297,88 @@ TaskPlanModal .close-button { width: 100%; } +/* === Skills Modal === */ +#skills_modal_container { + width: 98%; + min-width: 90; + max-width: 180; + height: 92%; + max-height: 60; + background: $background 90%; + border: solid $primary; + padding: 1 2; + layout: vertical; +} + +#skills_modal_header { + color: $primary; + text-style: bold; + margin-bottom: 1; +} + +#skills_modal_summary { + color: $text-muted; + margin-bottom: 1; +} + +#skills_modal_scroll { + width: 100%; + height: 1fr; + border: solid $surface-lighten-1; + background: $panel; + padding: 1; + margin-bottom: 1; + overflow-y: auto; +} + +#skills_modal_actions { + width: 100%; + height: auto; + dock: bottom; + align: left middle; +} + +#skills_modal_actions Button { + margin-right: 1; +} + +#skills_modal_actions #apply_skills_btn { + width: 16; +} + +#skill_confirm_container { + width: 92%; + max-width: 140; + height: 84%; + max-height: 55; + background: $background 90%; + border: solid $primary; + padding: 1 2; + layout: vertical; +} + +#skill_confirm_header { + color: $primary; + text-style: bold; + margin-bottom: 1; +} + +#skill_confirm_body { + width: 100%; + height: 1fr; + margin: 1 0; +} + +#skill_confirm_actions { + width: 100%; + dock: bottom; + align: left middle; +} + +#skill_confirm_actions Button { + margin-right: 1; +} + /* Decomposition subtasks modal */ #subtasks_modal_container { width: 92%; @@ -4822,17 +4917,17 @@ AgentStatusRibbon #round_selector.final-answer-view:hover { /* Dropdown overlay for plan mode configuration */ PlanOptionsPopover { layer: overlay; - dock: bottom; - width: auto; - min-width: 35; - max-width: 50; + dock: right; + width: 84; + min-width: 64; + max-width: 92; height: auto; - max-height: 25; + max-height: 44; background: $surface; border: solid $primary; - padding: 1; + padding: 1 2; margin-bottom: 3; - margin-left: 1; + margin-right: 1; display: none; } @@ -4849,6 +4944,9 @@ PlanOptionsPopover #popover_title { PlanOptionsPopover #popover_content { width: 100%; height: auto; + max-height: 34; + overflow-y: auto; + padding-right: 1; } PlanOptionsPopover .section-label { @@ -4863,6 +4961,33 @@ PlanOptionsPopover Select { margin-bottom: 1; } +PlanOptionsPopover #plan_details { + background: $surface-darken-1; + border: solid $primary-darken-2; + padding: 1; + margin: 1 0; + height: auto; + max-height: 14; + text-wrap: wrap; +} + +PlanOptionsPopover #analysis_target_meta { + color: $text-muted; + margin: 0 0 1 0; + text-wrap: wrap; +} + +PlanOptionsPopover #analysis_preview { + background: $surface-darken-1; + border: solid $primary-darken-2; + padding: 1; + margin: 1 0; + height: auto; + max-height: 14; + text-wrap: wrap; + color: $text-muted; +} + PlanOptionsPopover #close_btn { margin-top: 1; width: 100%; @@ -6270,9 +6395,15 @@ FinalPresentationCard.completed #final_card_title { color: $success; } +FinalPresentationCard #final_card_winner { + color: $success; + text-style: bold; + height: auto; +} + FinalPresentationCard #final_card_votes { color: $text-muted; - height: 1; + height: auto; border-bottom: solid $surface-lighten-1; padding-bottom: 1; margin-bottom: 1; diff --git a/massgen/frontend/displays/textual_widgets/__init__.py b/massgen/frontend/displays/textual_widgets/__init__.py index c4be2b3ed..af1d862ee 100644 --- a/massgen/frontend/displays/textual_widgets/__init__.py +++ b/massgen/frontend/displays/textual_widgets/__init__.py @@ -45,10 +45,14 @@ from .phase_indicator_bar import PhaseIndicatorBar from .plan_approval_modal import PlanApprovalModal, PlanApprovalResult from .plan_options import ( + AnalysisProfileChanged, + AnalysisTargetChanged, BroadcastModeChanged, + OpenSkillsRequested, PlanDepthChanged, PlanOptionsPopover, PlanSelected, + ViewAnalysisRequested, ViewPlanRequested, ) from .queued_input_banner import QueuedInputBanner @@ -91,6 +95,10 @@ "PlanDepthChanged", "BroadcastModeChanged", "ViewPlanRequested", + "AnalysisProfileChanged", + "AnalysisTargetChanged", + "ViewAnalysisRequested", + "OpenSkillsRequested", # Tab bar "AgentTab", "AgentTabBar", diff --git a/massgen/frontend/displays/textual_widgets/content_sections.py b/massgen/frontend/displays/textual_widgets/content_sections.py index b6ee8957e..4fbb1e8c3 100644 --- a/massgen/frontend/displays/textual_widgets/content_sections.py +++ b/massgen/frontend/displays/textual_widgets/content_sections.py @@ -15,6 +15,7 @@ import os import re import time +from contextlib import nullcontext from pathlib import Path from typing import Any, Dict, Optional @@ -443,6 +444,7 @@ def __init__(self, id: Optional[str] = None) -> None: self._final_lock_active = False # Debug scroll logging is opt-in only (MASSGEN_TUI_DEBUG + MASSGEN_TUI_SCROLL_DEBUG) self._debug_scroll = tui_debug_enabled() and _env_flag("MASSGEN_TUI_SCROLL_DEBUG") + self._timing_debug = tui_debug_enabled() and _env_flag("MASSGEN_TUI_TIMING_DEBUG") # Performance: Time-based scroll debouncing (QUICK-002) self._last_scroll_time: float = 0.0 # Performance: Cancel previous timer before creating new one (QUICK-004) @@ -853,6 +855,7 @@ def lock_to_final_answer(self, card_id: str) -> None: """ from massgen.frontend.displays.shared.tui_debug import tui_log + started = time.perf_counter() tui_log(f"[LOCK] lock_to_final_answer called: card_id={card_id}, already_locked={self._answer_lock_mode}") if self._answer_lock_mode: @@ -862,29 +865,40 @@ def lock_to_final_answer(self, card_id: str) -> None: self._locked_card_id = card_id self.enter_final_lock() - # Add lock mode class to timeline - self.add_class("answer-locked") - - # Hide all children except the final card + # Hide all non-final widgets in one UI batch to reduce relayout churn. children = list(self.children) tui_log(f"[LOCK] Found {len(children)} children, timeline height={self.size.height}") card_found = False - for child in children: - child_id = getattr(child, "id", None) - if child_id != card_id: - child.add_class("answer-lock-hidden") - else: - card_found = True - # Check if terminal is too small for full presentation - if self.size.height < 15: - tui_log(f"[LOCK] Using compact mode (height={self.size.height})") - child.add_class("final-card-compact") + app = getattr(self, "app", None) + if app is not None and hasattr(app, "set_hover_updates_suppressed"): + try: + app.set_hover_updates_suppressed(True, reason="answer_locked") + except Exception as e: + tui_log(f"[ContentSections] {e}") + update_context = app.batch_update() if app is not None else nullcontext() + with update_context: + # Add lock mode class to timeline + self.add_class("answer-locked") + for child in children: + child_id = getattr(child, "id", None) + if child_id != card_id: + child.add_class("answer-lock-hidden") else: - tui_log(f"[LOCK] Using locked mode (height={self.size.height})") - child.add_class("final-card-locked") + card_found = True + # Check if terminal is too small for full presentation + if self.size.height < 15: + tui_log(f"[LOCK] Using compact mode (height={self.size.height})") + child.add_class("final-card-compact") + else: + tui_log(f"[LOCK] Using locked mode (height={self.size.height})") + child.add_class("final-card-locked") if not card_found: tui_log(f"[LOCK] WARNING: Card with id={card_id} not found among children!") + if self._timing_debug: + tui_log( + "[TIMING] TimelineSection.lock_to_final_answer " f"{(time.perf_counter() - started) * 1000.0:.1f}ms " f"children={len(children)} card_found={card_found}", + ) def unlock_final_answer(self) -> None: """Unlock timeline to show all content. @@ -893,6 +907,7 @@ def unlock_final_answer(self) -> None: """ from massgen.frontend.displays.shared.tui_debug import tui_log + started = time.perf_counter() if not self._answer_lock_mode: return # Already unlocked @@ -902,14 +917,23 @@ def unlock_final_answer(self) -> None: card_id = self._locked_card_id self.exit_final_lock() - # Remove lock mode class from timeline - self.remove_class("answer-locked") + # Restore hidden widgets in one UI batch to reduce relayout churn. + app = getattr(self, "app", None) + if app is not None and hasattr(app, "set_hover_updates_suppressed"): + try: + app.set_hover_updates_suppressed(False, reason="answer_unlocked") + except Exception as e: + tui_log(f"[ContentSections] {e}") + update_context = app.batch_update() if app is not None else nullcontext() + with update_context: + # Remove lock mode class from timeline + self.remove_class("answer-locked") - # Show all children again - for child in self.children: - child.remove_class("answer-lock-hidden") - child.remove_class("final-card-locked") - child.remove_class("final-card-compact") + # Show all children again + for child in self.children: + child.remove_class("answer-lock-hidden") + child.remove_class("final-card-locked") + child.remove_class("final-card-compact") self._locked_card_id = None @@ -917,13 +941,18 @@ def unlock_final_answer(self) -> None: if card_id: try: card = self.query_one(f"#{card_id}") - card.scroll_visible(animate=True, top=True) + # Keep unlock responsive: jump immediately instead of animating a long scroll. + card.scroll_visible(animate=False, top=True) tui_log(f"[LOCK] Scrolled to card {card_id}") except Exception as e: tui_log(f"[LOCK] Could not scroll to card: {e}") self._scroll_to_end(animate=False, force=True) else: self._scroll_to_end(animate=False, force=True) + if self._timing_debug: + tui_log( + "[TIMING] TimelineSection.unlock_final_answer " f"{(time.perf_counter() - started) * 1000.0:.1f}ms " f"children={len(list(self.children))}", + ) def on_resize(self, event) -> None: """Handle resize events to switch between compact and full modes.""" @@ -1586,6 +1615,11 @@ def add_separator( if label.startswith("Round "): self._pending_round_separators.discard(round_number) + + # Treat FINAL PRESENTATION as the round banner for that round. + # This prevents _ensure_round_banner() from inserting an extra + # default "Round N" banner before the final answer section. + if label.startswith("Round ") or is_final: self._shown_round_banners.add(round_number) self._last_round_shown = max(self._last_round_shown, round_number) if round_number == 1: @@ -1766,12 +1800,9 @@ def clear(self, add_round_1: bool = True) -> None: # Close any open reasoning batch self._close_reasoning_batch() - # Ensure final-answer lock state is cleared + # Ensure final-answer lock state is cleared, including app-level hover suppression. if self._answer_lock_mode: - self._answer_lock_mode = False - self._locked_card_id = None - self.exit_final_lock() - self.remove_class("answer-locked") + self.unlock_final_answer() try: # Keep the scroll indicator, remove everything else @@ -2573,6 +2604,9 @@ class FinalPresentationCard(Vertical): _UPDATE_DEBOUNCE_MS = 50 # Cap context-path rows in the inline section to keep final-card mount fast. _MAX_CONTEXT_PATH_ROWS = 30 + _DEFAULT_MARKDOWN_RENDER_MAX_CHARS = 1200 + _MAX_INFERRED_ANSWER_PATHS = 10 + _ANSWER_PATH_PATTERN = re.compile(r"(?:\./)?(?:[A-Za-z0-9._-]+/)+[A-Za-z0-9._-]+") def __init__( self, @@ -2606,11 +2640,28 @@ def __init__( self._cached_full_text: Optional[str] = None # Cache to avoid repeated joins self._answer_content: Optional[str] = None self._pending_finalize = False + self._workspace_open_cooldown_s = 0.75 + self._last_workspace_open_at = 0.0 + self._markdown_render_max_chars = self._DEFAULT_MARKDOWN_RENDER_MAX_CHARS + raw_markdown_limit = os.environ.get("MASSGEN_TUI_FINAL_MARKDOWN_MAX_CHARS") + if raw_markdown_limit: + try: + self._markdown_render_max_chars = max(0, int(raw_markdown_limit)) + except ValueError: + pass + self._timing_debug = tui_debug_enabled() and _env_flag("MASSGEN_TUI_TIMING_DEBUG") if completion_only: self.add_class("completion-only") else: self.add_class("streaming") + def _timing(self, label: str, elapsed_ms: float, extra: str = "") -> None: + """Emit timing diagnostics to the TUI debug log when enabled.""" + if not self._timing_debug: + return + suffix = f" {extra}" if extra else "" + tui_log(f"[TIMING] FinalPresentationCard.{label} {elapsed_ms:.1f}ms{suffix}") + def compose(self) -> ComposeResult: from textual.containers import Horizontal, ScrollableContainer from textual.widgets import Label, Markdown, Static @@ -2618,6 +2669,7 @@ def compose(self) -> ComposeResult: # Header section - compact single line with Vertical(id="final_card_header"): yield Label(self._build_title(), id="final_card_title") + yield Label(self._build_winner_summary(), id="final_card_winner") yield Label(self._build_vote_summary(), id="final_card_votes") # Body: horizontal container for content + file explorer @@ -2683,8 +2735,8 @@ def _build_title(self) -> str: """Build the title with trophy icon.""" return "🏆 FINAL ANSWER" - def _build_vote_summary(self) -> str: - """Build the vote summary line.""" + def _build_winner_summary(self) -> str: + """Build the winner summary line with vote count when available.""" if not self.vote_results: return "" @@ -2692,14 +2744,30 @@ def _build_vote_summary(self) -> str: winner = self.vote_results.get("winner", "") is_tie = self.vote_results.get("is_tie", False) - if not vote_counts: + winner_label = winner or self.agent_id + if not winner_label: + return "" + + winner_votes = vote_counts.get(winner_label) + votes_suffix = "" + if isinstance(winner_votes, int): + votes_suffix = f" ({winner_votes} vote{'s' if winner_votes != 1 else ''})" + + tie_suffix = " · tie-breaker" if is_tie else "" + return f"🏅 Winner: {winner_label}{votes_suffix}{tie_suffix}" + + def _build_vote_summary(self) -> str: + """Build the vote summary line.""" + if not self.vote_results: return "" - # Format: "Winner: agent_a | Votes: agent_a (2), agent_b (1)" - tie_note = " (tie-breaker)" if is_tie else "" - counts_str = ", ".join(f"{aid} ({count})" for aid, count in vote_counts.items()) + vote_counts = self.vote_results.get("vote_counts", {}) - return f"Winner: {winner}{tie_note} | Votes: {counts_str}" + if not vote_counts: + return "" + + counts_str = " • ".join(f"{aid} ({count})" for aid, count in vote_counts.items()) + return f"Votes: {counts_str}" @classmethod def _limit_context_paths(cls, context_paths: Optional[Dict]) -> tuple[list[str], list[str], int]: @@ -2796,14 +2864,40 @@ def _flush_stream_buffer(self) -> bool: return True return False - def _finalize_markdown(self) -> bool: - """Render the final Markdown once streaming completes.""" - if not self._final_content: - return True + def _render_static_content(self, full_text: str) -> bool: + """Render final answer as a single static widget for fast hover/click response.""" + updated = False + if self._stream_widget is not None: + try: + self._stream_widget.update(full_text) + self._stream_widget.remove_class("hidden") + updated = True + except Exception as e: + tui_log(f"[ContentSections] {e}") + if not updated: + try: + from textual.widgets import Static as _Static - full_text = self._get_full_text() - self._answer_content = full_text + stream_widget = self.query_one("#final_card_stream", _Static) + stream_widget.update(full_text) + stream_widget.remove_class("hidden") + updated = True + except Exception as e: + tui_log(f"[ContentSections] {e}") + try: + if self._markdown_widget is not None: + self._markdown_widget.add_class("hidden") + else: + from textual.widgets import Markdown as _Markdown + text_widget = self.query_one("#final_card_text", _Markdown) + text_widget.add_class("hidden") + except Exception as e: + tui_log(f"[ContentSections] {e}") + return updated + + def _render_markdown_content(self, full_text: str) -> bool: + """Render final answer with Markdown when size and mode permit.""" if self._markdown_widget is not None: try: self._markdown_widget.update(full_text) @@ -2826,6 +2920,54 @@ def _finalize_markdown(self) -> bool: return True except Exception as e: tui_log(f"[ContentSections] {e}") + return False + + def _sync_locked_render_mode(self) -> None: + """Apply render mode matching current lock state after completion.""" + if self._is_streaming: + return + full_text = self.get_content() + if not full_text: + return + if self.has_class("locked-mode") or len(full_text) > self._markdown_render_max_chars: + self._render_static_content(full_text) + return + self._render_markdown_content(full_text) + + def _finalize_markdown(self) -> bool: + """Render the final Markdown once streaming completes.""" + started = time.perf_counter() + if not self._final_content: + return True + + full_text = self._get_full_text() + self._answer_content = full_text + + # Large Markdown trees create expensive hover/style recomputation in Textual. + # Keep locked-mode and large final answers as a single Static widget. + # This avoids expensive hover/style recomputation on large Markdown trees. + force_static = self.has_class("locked-mode") + if force_static or len(full_text) > self._markdown_render_max_chars: + updated = self._render_static_content(full_text) + self._timing( + "_finalize_markdown", + (time.perf_counter() - started) * 1000.0, + f"chars={len(full_text)} mode={'locked-static' if force_static else 'static'}", + ) + return updated + + if self._render_markdown_content(full_text): + self._timing( + "_finalize_markdown", + (time.perf_counter() - started) * 1000.0, + f"chars={len(full_text)}", + ) + return True + self._timing( + "_finalize_markdown", + (time.perf_counter() - started) * 1000.0, + "result=failed", + ) return False @@ -2852,7 +2994,8 @@ def on_mount(self) -> None: # Show file explorer if set_locked_mode was called before mount if getattr(self, "_pending_file_explorer", False): self._pending_file_explorer = False - self._show_file_explorer(True) + # Keep lock transition responsive: avoid synchronous workspace scans on mount. + self._show_file_explorer(True, allow_workspace_scan=False, allow_auto_preview=False) def _on_compose(self) -> None: """Called after compose() completes - use this to flush content.""" @@ -2867,6 +3010,7 @@ def complete(self) -> None: """Mark the presentation as complete and show action buttons.""" from textual.widgets import Label + started = time.perf_counter() self._is_streaming = False # Flush any pending debounced updates immediately @@ -2898,6 +3042,7 @@ def complete(self) -> None: footer.remove_class("hidden") except Exception as e: tui_log(f"[ContentSections] {e}") + self._timing("complete", (time.perf_counter() - started) * 1000.0, f"chunks={len(self._final_content)}") def get_content(self) -> str: """Get the full content for copy operation.""" @@ -3000,7 +3145,9 @@ def _toggle_lock(self) -> None: timeline.lock_to_final_answer(self.id or "final_presentation_card") self.add_class("locked-mode") link.update("↩ Previous Work") - self._show_file_explorer(True) + # Avoid blocking the UI thread on large workspace scans during lock transitions. + self._show_file_explorer(True, allow_workspace_scan=False, allow_auto_preview=False) + self._sync_locked_render_mode() except Exception as e: tui_log(f"[ContentSections] {e}") @@ -3012,6 +3159,7 @@ def set_locked_mode(self, locked: bool) -> None: Args: locked: Whether to enable locked mode """ + started = time.perf_counter() if locked: self.add_class("locked-mode") try: @@ -3020,8 +3168,9 @@ def set_locked_mode(self, locked: bool) -> None: link.update("↩ Previous Work") except Exception as e: tui_log(f"[ContentSections] {e}") - # Show file explorer directly (called after 0.1s timer, card should be mounted) - self._show_file_explorer(True) + # Show file explorer directly when paths are already available, but skip + # expensive fallback scans to keep lock transition responsive. + self._show_file_explorer(True, allow_workspace_scan=False, allow_auto_preview=False) # Also set flag for on_mount fallback in case we're not mounted yet self._pending_file_explorer = True else: @@ -3033,9 +3182,57 @@ def set_locked_mode(self, locked: bool) -> None: except Exception as e: tui_log(f"[ContentSections] {e}") self._show_file_explorer(False) + self._sync_locked_render_mode() + self._timing("set_locked_mode", (time.perf_counter() - started) * 1000.0, f"locked={locked}") + + def _infer_answer_paths(self, panel) -> int: + """Populate file explorer entries from file paths mentioned in final answer text.""" + workspace_path = getattr(panel, "workspace_path", None) + if not workspace_path: + return 0 + ws = Path(workspace_path) + if not ws.exists() or not ws.is_dir(): + return 0 + + answer_text = self.get_content() + if not answer_text: + return 0 + + added = 0 + seen: set[str] = set() + for candidate in self._ANSWER_PATH_PATTERN.findall(answer_text): + rel = candidate.strip("`\"'()[]{}<>,:;") + rel = rel.lstrip("./") + if not rel or rel in seen: + continue + rel_path = Path(rel) + if rel_path.is_absolute() or ".." in rel_path.parts: + continue + abs_path = ws / rel_path + if abs_path.exists() and abs_path.is_file(): + panel._add_path(rel, "workspace", absolute_path=str(abs_path)) + seen.add(rel) + added += 1 + if added >= self._MAX_INFERRED_ANSWER_PATHS: + break + return added - def _show_file_explorer(self, show: bool) -> None: - """Show or hide the file explorer side panel.""" + def _show_file_explorer( + self, + show: bool, + allow_workspace_scan: bool = True, + allow_auto_preview: bool = True, + ) -> None: + """Show or hide the file explorer side panel. + + Args: + show: Whether the explorer should be visible. + allow_workspace_scan: Whether to perform fallback filesystem scanning + when no explicit context paths are available. + allow_auto_preview: Whether to eagerly open a preview for inferred/scanned files. + Disable this during initial final-card lock to avoid startup input lag. + """ + started = time.perf_counter() try: from massgen.frontend.displays.textual_widgets.file_explorer_panel import ( FileExplorerPanel, @@ -3045,11 +3242,35 @@ def _show_file_explorer(self, show: bool) -> None: if not show: panel.remove_class("visible") + self._timing("_show_file_explorer", (time.perf_counter() - started) * 1000.0, "show=False") return - # Lazy-resolve workspace path from log directory if not panel.has_files(): self._resolve_workspace_path(panel) + + if not panel.has_files() and not allow_workspace_scan: + inferred = self._infer_answer_paths(panel) + if inferred > 0: + panel.rebuild_tree() + panel.add_class("visible") + if allow_auto_preview: + panel.auto_preview(self.get_content()) + self._timing( + "_show_file_explorer", + (time.perf_counter() - started) * 1000.0, + f"inferred_paths={inferred} allow_workspace_scan=False", + ) + return + panel.remove_class("visible") + self._timing( + "_show_file_explorer", + (time.perf_counter() - started) * 1000.0, + "visible=False allow_workspace_scan=False", + ) + return + + # Lazy-resolve workspace path from log directory + if not panel.has_files(): if panel.workspace_path and Path(panel.workspace_path).exists(): panel._scan_workspace() if panel.has_files(): @@ -3059,12 +3280,18 @@ def _apply(): p = self.query_one("#file_explorer_panel", FileExplorerPanel) p.rebuild_tree() p.add_class("visible") - p.auto_preview(self.get_content()) + if allow_auto_preview: + p.auto_preview(self.get_content()) p.refresh(layout=True) except Exception as e: tui_log(f"[ContentSections] {e}") self.call_later(_apply) + self._timing( + "_show_file_explorer", + (time.perf_counter() - started) * 1000.0, + "scheduled_scan_apply", + ) return if panel.has_files(): @@ -3073,11 +3300,17 @@ def _apply(): self.query_one("#final_card_context_paths").add_class("hidden") except Exception as e: tui_log(f"[ContentSections] {e}") + self._timing("_show_file_explorer", (time.perf_counter() - started) * 1000.0, "visible=True") + else: + panel.remove_class("visible") + self._timing("_show_file_explorer", (time.perf_counter() - started) * 1000.0, "visible=False") except Exception as e: tui_log(f"[ContentSections] {e}") + self._timing("_show_file_explorer", (time.perf_counter() - started) * 1000.0, "result=error") def _resolve_workspace_path(self, panel) -> None: """Resolve the workspace path from the log session directory.""" + started = time.perf_counter() try: from massgen.logger_config import get_log_session_dir @@ -3100,6 +3333,12 @@ def _resolve_workspace_path(self, panel) -> None: panel.workspace_path = str(candidate) except Exception as e: tui_log(f"[ContentSections] {e}") + finally: + self._timing( + "_resolve_workspace_path", + (time.perf_counter() - started) * 1000.0, + f"resolved={bool(getattr(panel, 'workspace_path', None))}", + ) @staticmethod def _find_final_workspace(base_dir: Path, agent_id: str) -> Optional[Path]: @@ -3151,9 +3390,28 @@ def _copy_to_clipboard(self) -> None: def _open_workspace(self) -> None: """Open workspace browser for the winning agent.""" try: + now = time.monotonic() + if now - self._last_workspace_open_at < self._workspace_open_cooldown_s: + return + self._last_workspace_open_at = now + app = self.app + workspace_hint = None + try: + from massgen.frontend.displays.textual_widgets.file_explorer_panel import ( + FileExplorerPanel, + ) + + panel = self.query_one("#file_explorer_panel", FileExplorerPanel) + workspace_hint = getattr(panel, "workspace_path", None) + except Exception: + workspace_hint = None + if hasattr(app, "_show_workspace_browser_for_agent"): - app._show_workspace_browser_for_agent(self.agent_id) + app._show_workspace_browser_for_agent( + self.agent_id, + preferred_final_workspace=workspace_hint, + ) else: self.app.notify("Workspace browser not available", severity="warning") except Exception as e: diff --git a/massgen/frontend/displays/textual_widgets/file_explorer_panel.py b/massgen/frontend/displays/textual_widgets/file_explorer_panel.py index b545f3ceb..571f816e9 100644 --- a/massgen/frontend/displays/textual_widgets/file_explorer_panel.py +++ b/massgen/frontend/displays/textual_widgets/file_explorer_panel.py @@ -6,12 +6,15 @@ """ import os +import time from pathlib import Path from typing import Dict, List, Optional from textual.containers import Vertical from textual.widgets import Static, Tree +from ..shared.tui_debug import tui_debug_enabled, tui_log + class FileExplorerPanel(Vertical): """Side panel showing workspace file changes with click-to-preview. @@ -34,6 +37,12 @@ def __init__( self.workspace_path = workspace_path self._all_paths: Dict[str, str] = {} # display path -> status ("new"/"modified"/"workspace") self._path_lookup: Dict[str, str] = {} # display path -> absolute path + self._timing_debug = tui_debug_enabled() and os.environ.get("MASSGEN_TUI_TIMING_DEBUG", "").lower() in ( + "1", + "true", + "yes", + "on", + ) # Populate from explicit context_paths first, but cap entries for responsiveness. context_entries: List[tuple[str, str]] = [] @@ -47,10 +56,6 @@ def __init__( if remaining > 0: self._add_path(f"... ({remaining} more files)", "workspace", absolute_path="") - # If no context_paths but workspace exists, scan it - if not self._all_paths and self.workspace_path: - self._scan_workspace() - def _add_path(self, display_path: str, status: str, absolute_path: Optional[str] = None) -> None: """Track a path for display and lookup.""" self._all_paths[display_path] = status @@ -98,13 +103,14 @@ def _clear_workspace_entries(self) -> None: def _scan_workspace(self) -> None: """Scan workspace directory and populate _all_paths with found files.""" + started = time.perf_counter() ws = Path(self.workspace_path) if not ws.exists() or not ws.is_dir(): return self._clear_workspace_entries() + added = 0 + truncated = False try: - added = 0 - truncated = False # Use os.walk with pruning so large ignored dirs don't block the TUI. for root, dirs, files in os.walk(ws, topdown=True): root_path = Path(root) @@ -141,6 +147,11 @@ def _scan_workspace(self) -> None: self._add_path("... (more files)", "workspace", absolute_path="") except Exception: pass + finally: + if self._timing_debug: + tui_log( + "[TIMING] FileExplorerPanel._scan_workspace " f"{(time.perf_counter() - started) * 1000.0:.1f}ms " f"files={added} truncated={truncated} root={ws}", + ) @classmethod def _is_binary_file(cls, filepath: Path) -> bool: diff --git a/massgen/frontend/displays/textual_widgets/mode_bar.py b/massgen/frontend/displays/textual_widgets/mode_bar.py index 5c3ff506f..27a940cd8 100644 --- a/massgen/frontend/displays/textual_widgets/mode_bar.py +++ b/massgen/frontend/displays/textual_widgets/mode_bar.py @@ -2,7 +2,7 @@ """ Mode Bar Widget for MassGen TUI. -Provides a horizontal bar with mode toggles for plan mode, agent mode, +Provides a horizontal bar with mode toggles for plan/analyze mode, agent mode, coordination mode, refinement mode, and override functionality. """ @@ -25,7 +25,7 @@ def __init__(self, mode_type: str, value: str) -> None: """Initialize the message. Args: - mode_type: The type of mode changed ("plan", "agent", "coordination", "refinement"). + mode_type: The type of mode changed ("plan", "agent", "coordination", "refinement", "personas"). value: The new value of the mode. """ self.mode_type = mode_type @@ -91,18 +91,20 @@ class ModeToggle(Static): # Icons for different modes - using radio indicators for clean look ICONS = { - "plan": {"normal": "○", "plan": "◉", "execute": "◉"}, + "plan": {"normal": "○", "plan": "◉", "execute": "◉", "analysis": "◉"}, "agent": {"multi": "◉", "single": "○"}, "coordination": {"parallel": "◉", "decomposition": "○"}, "refinement": {"on": "◉", "off": "○"}, + "personas": {"off": "○", "on": "◉"}, } # Labels for states - concise without redundant ON/OFF LABELS = { - "plan": {"normal": "Normal", "plan": "Planning", "execute": "Executing"}, + "plan": {"normal": "Normal", "plan": "Planning", "execute": "Executing", "analysis": "Analyzing"}, "agent": {"multi": "Multi-Agent", "single": "Single"}, "coordination": {"parallel": "Parallel", "decomposition": "Decomposition"}, "refinement": {"on": "Refine", "off": "Refine OFF"}, + "personas": {"off": "Personas OFF", "on": "Personas"}, } def __init__( @@ -181,13 +183,15 @@ async def on_click(self) -> None: _mode_log(f"ModeToggle.on_click: {self.mode_type} current={self._current_state}") - # For plan mode, cycle through: normal → plan → execute → normal + # For plan mode, cycle through: normal -> plan -> execute -> analysis -> normal if self.mode_type == "plan": if self._current_state == "normal": new_state = "plan" elif self._current_state == "plan": new_state = "execute" elif self._current_state == "execute": + new_state = "analysis" + elif self._current_state == "analysis": new_state = "normal" else: return @@ -207,10 +211,11 @@ class ModeBar(Widget): """Horizontal bar with mode toggles positioned above the input area. Contains toggles for: - - Plan mode: normal → plan → execute + - Plan/analyze mode: normal → plan → execute → analysis - Agent mode: multi ↔ single - Refinement mode: on ↔ off - Coordination mode: parallel ↔ decomposition + - Personas toggle (parallel mode only) - Subtasks button (shown in decomposition mode) - Help button for mode bar explanations - Override button (shown when override is available) @@ -234,6 +239,7 @@ def __init__( self._agent_toggle: Optional[ModeToggle] = None self._coordination_toggle: Optional[ModeToggle] = None self._refinement_toggle: Optional[ModeToggle] = None + self._persona_toggle: Optional[ModeToggle] = None self._subtasks_btn: Optional[Button] = None self._mode_help_btn: Optional[Button] = None self._override_btn: Optional[Button] = None @@ -247,7 +253,7 @@ def compose(self) -> ComposeResult: self._plan_toggle = ModeToggle( mode_type="plan", initial_state="normal", - states=["normal", "plan", "execute"], + states=["normal", "plan", "execute", "analysis"], id="plan_toggle", ) yield self._plan_toggle @@ -279,6 +285,15 @@ def compose(self) -> ComposeResult: ) yield self._coordination_toggle + # Parallel persona generation toggle (off by default) + self._persona_toggle = ModeToggle( + mode_type="personas", + initial_state="off", + states=["off", "on"], + id="persona_toggle", + ) + yield self._persona_toggle + # Subtasks editor button (decomposition mode only) self._subtasks_btn = Button("Subtasks", id="subtasks_btn", variant="default") self._subtasks_btn.add_class("hidden") @@ -321,7 +336,7 @@ def set_plan_mode(self, mode: str, plan_info: str = "") -> None: """Set the plan mode state. Args: - mode: "normal", "plan", or "execute". + mode: "normal", "plan", "execute", or "analysis". plan_info: Optional plan info text (shown in execute mode). """ if self._plan_toggle: @@ -365,17 +380,28 @@ def set_coordination_mode(self, mode: str) -> None: """ if self._coordination_toggle: self._coordination_toggle.set_state(mode) - self._update_subtasks_button(mode) + self._update_coordination_aux_controls(mode) - def _update_subtasks_button(self, mode: str) -> None: - """Show subtasks editor button only in decomposition mode.""" + def set_parallel_personas_enabled(self, enabled: bool) -> None: + """Set the parallel persona toggle state.""" + if self._persona_toggle: + self._persona_toggle.set_state("on" if enabled else "off") + + def _update_coordination_aux_controls(self, mode: str) -> None: + """Update controls that depend on coordination mode.""" if not self._subtasks_btn: - return - if mode == "decomposition": + pass + elif mode == "decomposition": self._subtasks_btn.remove_class("hidden") else: self._subtasks_btn.add_class("hidden") + if self._persona_toggle: + if mode == "parallel": + self._persona_toggle.remove_class("hidden") + else: + self._persona_toggle.add_class("hidden") + def set_enabled(self, enabled: bool) -> None: """Enable or disable all mode toggles. @@ -390,6 +416,8 @@ def set_enabled(self, enabled: bool) -> None: self._coordination_toggle.set_enabled(enabled) if self._refinement_toggle: self._refinement_toggle.set_enabled(enabled) + if self._persona_toggle: + self._persona_toggle.set_enabled(enabled) if self._subtasks_btn: self._subtasks_btn.disabled = not enabled @@ -409,6 +437,10 @@ def get_refinement_enabled(self) -> bool: """Get current refinement mode.""" return self._refinement_toggle.get_state() == "on" if self._refinement_toggle else True + def get_parallel_personas_enabled(self) -> bool: + """Get current parallel persona toggle state.""" + return self._persona_toggle.get_state() == "on" if self._persona_toggle else False + def set_plan_status(self, status: str) -> None: """Set the plan status text shown on the right side. @@ -442,5 +474,5 @@ def on_mode_changed(self, event: ModeChanged) -> None: """Let mode change messages bubble to parent.""" _mode_log(f"ModeBar.on_mode_changed: {event.mode_type}={event.value}") if event.mode_type == "coordination": - self._update_subtasks_button(event.value) + self._update_coordination_aux_controls(event.value) # Don't stop - let it bubble to TextualApp diff --git a/massgen/frontend/displays/textual_widgets/plan_options.py b/massgen/frontend/displays/textual_widgets/plan_options.py index 5ed86d643..8105a421a 100644 --- a/massgen/frontend/displays/textual_widgets/plan_options.py +++ b/massgen/frontend/displays/textual_widgets/plan_options.py @@ -11,10 +11,11 @@ import json from datetime import datetime +from pathlib import Path from typing import TYPE_CHECKING, Any, List, Optional from textual.app import ComposeResult -from textual.containers import Vertical +from textual.containers import VerticalScroll from textual.message import Message from textual.widget import Widget from textual.widgets import Button, Label, Select, Static @@ -80,6 +81,36 @@ def __init__(self, plan_id: str, tasks: List[Any]) -> None: super().__init__() +class AnalysisProfileChanged(Message): + """Message emitted when analysis profile is changed.""" + + def __init__(self, profile: str) -> None: + self.profile = profile + super().__init__() + + +class AnalysisTargetChanged(Message): + """Message emitted when analysis log/turn target is changed.""" + + def __init__(self, log_dir: Optional[str], turn: Optional[int]) -> None: + self.log_dir = log_dir + self.turn = turn + super().__init__() + + +class ViewAnalysisRequested(Message): + """Message emitted when user wants to view an analysis report.""" + + def __init__(self, log_dir: str, turn: int) -> None: + self.log_dir = log_dir + self.turn = turn + super().__init__() + + +class OpenSkillsRequested(Message): + """Message emitted when user wants to open the skills manager.""" + + def _popover_log(msg: str) -> None: """Log to TUI debug file.""" try: @@ -110,14 +141,17 @@ class PlanOptionsPopover(Widget): DEFAULT_CSS = """ PlanOptionsPopover { layer: overlay; - dock: bottom; - width: 70; + dock: right; + width: 84; + min-width: 64; + max-width: 92; height: auto; - max-height: 35; + max-height: 44; background: $surface; border: solid $primary; - padding: 1; + padding: 1 2; margin-bottom: 3; + margin-right: 1; display: none; } @@ -131,6 +165,14 @@ class PlanOptionsPopover(Widget): margin-bottom: 1; } + PlanOptionsPopover #popover_content { + width: 100%; + height: auto; + max-height: 34; + overflow-y: auto; + padding-right: 1; + } + PlanOptionsPopover .section-label { color: $text-muted; margin-top: 1; @@ -148,7 +190,8 @@ class PlanOptionsPopover(Widget): padding: 1; margin: 1 0; height: auto; - max-height: 8; + max-height: 14; + text-wrap: wrap; } PlanOptionsPopover #plan_details.hidden { @@ -170,6 +213,23 @@ class PlanOptionsPopover(Widget): margin-top: 1; } + PlanOptionsPopover #analysis_preview { + background: $surface-darken-1; + border: solid $primary-darken-2; + padding: 1; + margin: 1 0; + height: auto; + max-height: 14; + text-wrap: wrap; + color: $text-muted; + } + + PlanOptionsPopover #analysis_target_meta { + color: $text-muted; + margin: 0 0 1 0; + text-wrap: wrap; + } + PlanOptionsPopover #close_btn { margin-top: 1; width: 100%; @@ -184,13 +244,19 @@ def __init__( current_plan_id: Optional[str] = None, current_depth: "PlanDepth" = "medium", current_broadcast: Any = "human", + analysis_profile: str = "dev", + analysis_log_options: Optional[List[tuple[str, str]]] = None, + analysis_selected_log_dir: Optional[str] = None, + analysis_turn_options: Optional[List[tuple[str, str]]] = None, + analysis_selected_turn: Optional[int] = None, + analysis_preview_text: str = "", id: Optional[str] = None, classes: Optional[str] = None, ) -> None: """Initialize the plan options popover. Args: - plan_mode: Current plan mode ("normal", "plan", "execute"). + plan_mode: Current mode ("normal", "plan", "execute", or "analysis"). available_plans: List of available plan sessions. current_plan_id: Currently selected plan ID. current_depth: Current plan depth setting. @@ -204,23 +270,42 @@ def __init__( self._current_plan_id = current_plan_id self._current_depth = current_depth self._current_broadcast = current_broadcast + self._analysis_profile = analysis_profile + self._analysis_log_options = analysis_log_options or [] + self._analysis_selected_log_dir = analysis_selected_log_dir + self._analysis_turn_options = analysis_turn_options or [] + self._analysis_selected_turn = analysis_selected_turn + self._analysis_preview_text = analysis_preview_text self._plan_details_widget: Optional[Static] = None self._initialized = False # Track if popover has been shown (to ignore events during recompose) + @staticmethod + def _safe_select_value(options: List[tuple[str, str]], preferred: Optional[str]) -> Optional[str]: + """Return a safe select value from options, preferring the given value.""" + if not options: + return None + values = {value for _, value in options} + if preferred in values: + return preferred + return options[0][1] + def compose(self) -> ComposeResult: """Create the popover contents. Content differs by mode: - "plan" mode: Shows depth and human feedback options only - "execute" mode: Shows plan selector and plan details only + - "analysis" mode: Shows profile, log target, turn target, and skills controls """ # Title changes based on mode if self._plan_mode == "plan": yield Label("Planning Options", id="popover_title") + elif self._plan_mode == "analysis": + yield Label("Log Analysis Options", id="popover_title") else: yield Label("Select Plan", id="popover_title") - with Vertical(id="popover_content"): + with VerticalScroll(id="popover_content"): # Execute mode: Show plan selector and details if self._plan_mode == "execute" and self._available_plans: yield Label("Select Plan:", classes="section-label") @@ -282,6 +367,61 @@ def compose(self) -> ComposeResult: id="broadcast_selector", ) + # Analysis mode: profile + target controls + if self._plan_mode == "analysis": + turn_label = f"turn_{self._analysis_selected_turn}" if self._analysis_selected_turn is not None else "latest" + if self._analysis_selected_log_dir: + log_name = Path(self._analysis_selected_log_dir).name + report_exists = False + if self._analysis_selected_turn is not None: + report_exists = (Path(self._analysis_selected_log_dir) / f"turn_{self._analysis_selected_turn}" / "ANALYSIS_REPORT.md").exists() + report_label = "available" if report_exists else "not generated yet" + yield Static( + f"Target: {log_name} / {turn_label}\nReport: {report_label}", + id="analysis_target_meta", + ) + + yield Label("Analysis Profile:", classes="section-label") + yield Select( + [ + ("Dev (internals)", "dev"), + ("User (skills)", "user"), + ], + value=self._analysis_profile if self._analysis_profile in ("dev", "user") else "dev", + id="analysis_profile_selector", + ) + + yield Label("Log Session:", classes="section-label") + if self._analysis_log_options: + selected_log = self._safe_select_value(self._analysis_log_options, self._analysis_selected_log_dir) + yield Select( + self._analysis_log_options, + value=selected_log, + id="analysis_log_selector", + ) + else: + yield Static("[dim]No log sessions found[/]", markup=True) + + yield Label("Turn:", classes="section-label") + if self._analysis_turn_options: + selected_turn = self._safe_select_value( + self._analysis_turn_options, + str(self._analysis_selected_turn) if self._analysis_selected_turn is not None else None, + ) + yield Select( + self._analysis_turn_options, + value=selected_turn, + id="analysis_turn_selector", + ) + else: + yield Static("[dim]No turns found for selected log[/]", markup=True) + + preview_text = self._analysis_preview_text or "Preview unavailable for this selection." + yield Static(preview_text, id="analysis_preview") + + yield Button("View Analysis Report", id="view_analysis_btn", variant="primary") + yield Button("Manage Skills", id="open_skills_btn", variant="default") + yield Button("Close", id="close_btn", variant="default") def _get_plan_by_id(self, plan_id: str) -> Optional["PlanSession"]: @@ -381,19 +521,9 @@ def _update_plan_details(self, plan_id: str) -> None: self._plan_details_widget.update(f"[red]Error loading plan: {e}[/]") def show(self) -> None: - """Show the popover positioned on the right side.""" + """Show the popover.""" _popover_log(f"show() called, current classes: {list(self.classes)}") - # Calculate right-side position based on screen width - if self.app and self.app.size: - screen_width = self.app.size.width - popover_width = 70 # Match CSS width - right_margin = 10 - # Clamp to non-negative to prevent popover from rendering off left edge - offset_x = max(0, screen_width - popover_width - right_margin) - self.styles.offset = (offset_x, 0) - _popover_log(f" Positioned at offset_x={offset_x} (screen={screen_width})") - self.add_class("visible") _popover_log(f"show() after add_class, classes: {list(self.classes)}") self._initialized = True @@ -516,6 +646,26 @@ def on_select_changed(self, event: Select.Changed) -> None: # Convert "off" back to False broadcast = False if value == "off" else value self.post_message(BroadcastModeChanged(broadcast)) + elif selector_id == "analysis_profile_selector": + profile = str(event.value) + if profile == self._analysis_profile: + return + self._analysis_profile = profile + self.post_message(AnalysisProfileChanged(profile)) + elif selector_id == "analysis_log_selector": + log_dir = str(event.value) + if log_dir == self._analysis_selected_log_dir: + return + self._analysis_selected_log_dir = log_dir + # turn=None signals app to pick latest valid turn for this log + self.post_message(AnalysisTargetChanged(log_dir, None)) + elif selector_id == "analysis_turn_selector": + turn_raw = str(event.value) + turn = int(turn_raw) if turn_raw.isdigit() else None + if turn == self._analysis_selected_turn: + return + self._analysis_selected_turn = turn + self.post_message(AnalysisTargetChanged(self._analysis_selected_log_dir, turn)) def on_button_pressed(self, event: Button.Pressed) -> None: """Handle button presses.""" @@ -525,6 +675,12 @@ def on_button_pressed(self, event: Button.Pressed) -> None: elif event.button.id == "view_plan_btn": self._handle_view_plan() event.stop() + elif event.button.id == "view_analysis_btn": + self._handle_view_analysis() + event.stop() + elif event.button.id == "open_skills_btn": + self.post_message(OpenSkillsRequested()) + event.stop() def _handle_view_plan(self) -> None: """Handle View Plan button click - emit ViewPlanRequested message.""" @@ -565,3 +721,17 @@ def _handle_view_plan(self) -> None: except Exception as e: _popover_log(f" -> error loading plan: {e}") + + def _handle_view_analysis(self) -> None: + """Emit an event to open the selected analysis report.""" + if not self._analysis_selected_log_dir: + return + if self._analysis_selected_turn is None: + return + self.post_message( + ViewAnalysisRequested( + self._analysis_selected_log_dir, + int(self._analysis_selected_turn), + ), + ) + self.hide() diff --git a/massgen/frontend/displays/textual_widgets/quickstart_wizard.py b/massgen/frontend/displays/textual_widgets/quickstart_wizard.py index 402d62502..a3e7f4e5f 100644 --- a/massgen/frontend/displays/textual_widgets/quickstart_wizard.py +++ b/massgen/frontend/displays/textual_widgets/quickstart_wizard.py @@ -6,6 +6,9 @@ This replaces the questionary-based CLI quickstart with a Textual TUI experience. """ +import asyncio +import contextlib +import io import string from pathlib import Path from typing import Any, Dict, List, Optional, Tuple @@ -14,6 +17,8 @@ from textual.app import ComposeResult from textual.containers import Container, VerticalScroll from textual.widgets import ( + Button, + Checkbox, Input, Label, OptionList, @@ -888,6 +893,264 @@ def set_value(self, value: Any) -> None: self._option_list.highlighted = idx +class SkillsInstallStep(StepComponent): + """Step for selecting and installing quickstart skill packages.""" + + def __init__( + self, + wizard_state: WizardState, + *, + id: Optional[str] = None, + classes: Optional[str] = None, + ) -> None: + super().__init__(wizard_state, id=id, classes=classes) + self._packages_status: Optional[Dict[str, Dict[str, Any]]] = None + self._checkboxes: Dict[str, Checkbox] = {} + self._selected_packages: List[str] = [] + self._available_package_ids: List[str] = [] + self._install_button: Optional[Button] = None + self._status_label: Optional[Label] = None + self._status_message: str = "" + self._installing: bool = False + self._install_attempted: bool = False + self._installed_packages: List[str] = [] + self._failed_packages: List[str] = [] + + def _load_packages_status(self) -> None: + """Load current skill package installation status.""" + try: + from massgen.utils.skills_installer import check_skill_packages_installed + + self._packages_status = check_skill_packages_installed() + except Exception as e: + _quickstart_log(f"SkillsInstallStep: Failed to load packages status: {e}") + self._packages_status = None + + def compose(self) -> ComposeResult: + self._load_packages_status() + self._checkboxes = {} + self._available_package_ids = [] + + yield Label("Skill Packages", classes="text-input-label") + yield Label( + "Select which quickstart packages to install now, then press Install Selected Packages.", + classes="password-hint", + ) + + if self._packages_status is None: + yield Label("Could not check skill package status.", classes="password-hint") + return + + missing_packages: List[tuple[str, Dict[str, Any]]] = [] + for pkg_id, pkg in self._packages_status.items(): + installed = bool(pkg.get("installed")) + status_text = "installed" if installed else "not installed" + yield Label(f"{pkg.get('name', pkg_id)} [{status_text}]", classes="password-hint") + yield Label(f" {pkg.get('description', '')}", classes="password-hint") + if not installed: + missing_packages.append((pkg_id, pkg)) + + if not missing_packages: + yield Label("All quickstart skill packages are already installed.", classes="password-hint") + self._install_attempted = True + return + + self._available_package_ids = [pkg_id for pkg_id, _ in missing_packages] + + if not self._selected_packages: + self._selected_packages = list(self._available_package_ids) + else: + self._selected_packages = [pkg_id for pkg_id in self._selected_packages if pkg_id in self._available_package_ids] + + yield Label("Select packages to install:", classes="text-input-label") + for pkg_id, pkg in missing_packages: + cb = Checkbox( + f"{pkg.get('name', pkg_id)}", + value=pkg_id in self._selected_packages, + id=f"skills_pkg_{pkg_id}", + ) + cb.disabled = self._installing + self._checkboxes[pkg_id] = cb + yield cb + + self._install_button = Button( + "Install Selected Packages", + id="install_selected_skill_packages", + variant="default", + ) + if self._installing: + self._install_button.disabled = True + self._install_button.label = "Installing..." + yield self._install_button + + self._status_label = Label(self._status_message, classes="password-hint") + self._status_label.display = bool(self._status_message) + yield self._status_label + + def on_checkbox_changed(self, event: Checkbox.Changed) -> None: + """Handle package selection toggles.""" + for pkg_id, cb in self._checkboxes.items(): + if cb.id != event.checkbox.id: + continue + if event.value and pkg_id not in self._selected_packages: + self._selected_packages.append(pkg_id) + elif not event.value and pkg_id in self._selected_packages: + self._selected_packages.remove(pkg_id) + break + + @staticmethod + def _run_installer_quiet(installer) -> tuple[bool, str]: + """Run installer while capturing stdout/stderr to avoid TUI corruption.""" + output_buffer = io.StringIO() + error_buffer = io.StringIO() + with contextlib.redirect_stdout(output_buffer), contextlib.redirect_stderr(error_buffer): + ok = bool(installer()) + combined = "\n".join([output_buffer.getvalue(), error_buffer.getvalue()]).strip() + return ok, combined + + async def on_button_pressed(self, event: Button.Pressed) -> None: + """Install selected skill packages with progress updates.""" + if event.button.id != "install_selected_skill_packages" or self._installing: + return + + if not self._selected_packages: + self._install_attempted = True + self._status_message = "No packages selected. You can continue." + if self._status_label: + self._status_label.update(self._status_message) + self._status_label.display = True + return + + self._installing = True + if self._install_button: + self._install_button.disabled = True + self._install_button.label = "Installing..." + for cb in self._checkboxes.values(): + cb.disabled = True + + def _status(message: str) -> None: + self._status_message = message + if self._status_label: + self._status_label.update(message) + self._status_label.display = True + + _status("Preparing skill package installation...") + self._installed_packages = [] + self._failed_packages = [] + + try: + from massgen.utils.skills_installer import ( + install_agent_browser_skill, + install_anthropic_skills, + install_crawl4ai_skill, + install_openai_skills, + install_openskills_cli, + install_vercel_skills, + ) + + openskills_installers = { + "anthropic": install_anthropic_skills, + "openai": install_openai_skills, + "vercel": install_vercel_skills, + "agent_browser": install_agent_browser_skill, + } + + selected = list(self._selected_packages) + needs_openskills = any(pkg_id in openskills_installers for pkg_id in selected) + openskills_ready = True + + if needs_openskills: + _status("Installing openskills CLI...") + openskills_ready, cli_logs = await asyncio.to_thread( + self._run_installer_quiet, + install_openskills_cli, + ) + if cli_logs: + _quickstart_log(f"SkillsInstallStep: openskills logs:\n{cli_logs}") + if not openskills_ready: + self._failed_packages.extend([pkg_id for pkg_id in selected if pkg_id in openskills_installers]) + + for pkg_id in selected: + if pkg_id in openskills_installers: + if not openskills_ready: + continue + _status(f"Installing {pkg_id}...") + ok, pkg_logs = await asyncio.to_thread( + self._run_installer_quiet, + openskills_installers[pkg_id], + ) + elif pkg_id == "crawl4ai": + _status("Installing crawl4ai...") + ok, pkg_logs = await asyncio.to_thread( + self._run_installer_quiet, + install_crawl4ai_skill, + ) + else: + _quickstart_log(f"SkillsInstallStep: Unknown package id '{pkg_id}'") + pkg_logs = "" + ok = False + + if pkg_logs: + _quickstart_log(f"SkillsInstallStep: {pkg_id} logs:\n{pkg_logs}") + + if ok: + self._installed_packages.append(pkg_id) + else: + self._failed_packages.append(pkg_id) + + self._install_attempted = True + if self._failed_packages: + _status( + f"Installed {len(self._installed_packages)} package(s), " f"{len(self._failed_packages)} failed. Retry or adjust selection.", + ) + else: + _status(f"Installed {len(self._installed_packages)} package(s) successfully.") + + except Exception as e: + self._install_attempted = True + self._failed_packages = list(self._selected_packages) + _quickstart_log(f"SkillsInstallStep: Installation error: {e}") + _status(f"Skills installation failed: {e}") + + self._installing = False + if self._install_button: + self._install_button.disabled = False + self._install_button.label = "Install Selected Packages" + for cb in self._checkboxes.values(): + cb.disabled = False + + # Recompose so package status reflects newly installed items. + self.refresh(recompose=True) + + def validate(self) -> Optional[str]: + if self._installing: + return "Please wait for skill installation to finish" + + if not self._available_package_ids: + return None + + if self._selected_packages and not self._install_attempted: + return "Click 'Install Selected Packages' before continuing, or deselect all packages" + + return None + + def get_value(self) -> Dict[str, Any]: + return { + "packages_to_install": list(self._selected_packages), + "install_attempted": self._install_attempted, + "installed_packages": list(self._installed_packages), + "failed_packages": list(self._failed_packages), + } + + def set_value(self, value: Any) -> None: + if not isinstance(value, dict): + return + self._selected_packages = list(value.get("packages_to_install", [])) + self._install_attempted = bool(value.get("install_attempted", False)) + self._installed_packages = list(value.get("installed_packages", [])) + self._failed_packages = list(value.get("failed_packages", [])) + + class ContextPathStep(StepComponent): """Step for entering optional context/workspace path.""" @@ -1367,6 +1630,21 @@ def compose(self) -> ComposeResult: config_path = self.wizard_state.get("config_path", default) yield Label(f"Saved to: {config_path}", classes="complete-message") + skills_data = self.wizard_state.get("install_skills_now", {}) + if isinstance(skills_data, dict): + installed = skills_data.get("installed_packages", []) + failed = skills_data.get("failed_packages", []) + if installed: + yield Label( + f"Installed {len(installed)} skill package(s)", + classes="complete-next-steps", + ) + if failed: + yield Label( + f"{len(failed)} skill package(s) failed to install", + classes="complete-next-steps", + ) + launch_option = self.wizard_state.get("launch_option", "terminal") if launch_option == "terminal": yield Label("Launching MassGen Terminal TUI...", classes="complete-next-steps") @@ -1390,11 +1668,12 @@ class QuickstartWizard(WizardModal): 4. Provider/model selection 5. Execution mode 6. Docker setup - skipped if local mode selected - 7. Context path - 8. Coordination mode (multi-agent only) - 9. Preview - 10. Launch options - 11. Complete + 7. Skills setup - select packages and install in-step (skipped if local mode selected) + 8. Context path + 9. Coordination mode (multi-agent only) + 10. Preview + 11. Launch options + 12. Complete """ def __init__( @@ -1450,6 +1729,13 @@ def get_steps(self) -> List[WizardStep]: component_class=DockerSetupStep, skip_condition=lambda state: not state.get("execution_mode", True), ), + WizardStep( + id="install_skills_now", + title="Skills", + description="Install quickstart skill packages now?", + component_class=SkillsInstallStep, + skip_condition=lambda state: not state.get("execution_mode", True), + ), WizardStep( id="context_path", title="Context Path", @@ -1568,6 +1854,16 @@ async def on_wizard_complete(self) -> Any: agent_count = self.state.get("agent_count", 3) setup_mode = self.state.get("setup_mode", "same") use_docker = self.state.get("execution_mode", True) + skills_step_data = self.state.get("install_skills_now", {}) + install_skills_now = False + installed_skill_packages: List[str] = [] + failed_skill_packages: List[str] = [] + if isinstance(skills_step_data, dict): + installed_skill_packages = list(skills_step_data.get("installed_packages", [])) + failed_skill_packages = list(skills_step_data.get("failed_packages", [])) + elif isinstance(skills_step_data, bool): + # Backward compatibility: older bool step data means defer to CLI installer. + install_skills_now = skills_step_data context_path = self.state.get("context_path") launch_option = self.state.get("launch_options", "terminal") @@ -1647,6 +1943,9 @@ async def on_wizard_complete(self) -> Any: "success": True, "config_path": self._config_path, "launch_option": launch_option, + "install_skills_now": bool(install_skills_now), + "skills_installed": installed_skill_packages, + "skills_failed": failed_skill_packages, } except Exception as e: diff --git a/massgen/frontend/displays/textual_widgets/setup_wizard.py b/massgen/frontend/displays/textual_widgets/setup_wizard.py index 3a88e45c0..2d0dcd8f7 100644 --- a/massgen/frontend/displays/textual_widgets/setup_wizard.py +++ b/massgen/frontend/displays/textual_widgets/setup_wizard.py @@ -1089,23 +1089,47 @@ async def on_wizard_complete(self) -> Any: _setup_log(f"SetupWizard: Installing skill packages: {packages_to_install}") try: from massgen.utils.skills_installer import ( + install_agent_browser_skill, install_anthropic_skills, install_crawl4ai_skill, + install_openai_skills, install_openskills_cli, + install_vercel_skills, ) - # Always need openskills CLI first for anthropic skills - if "anthropic" in packages_to_install: + openskills_installers = { + "anthropic": install_anthropic_skills, + "openai": install_openai_skills, + "vercel": install_vercel_skills, + "agent_browser": install_agent_browser_skill, + } + + requested_openskills_packages = [pkg for pkg in packages_to_install if pkg in openskills_installers] + if requested_openskills_packages: _setup_log("SetupWizard: Installing openskills CLI") - if install_openskills_cli(): - _setup_log("SetupWizard: Installing Anthropic skills") - if install_anthropic_skills(): - installed_packages.append("anthropic") - - if "crawl4ai" in packages_to_install: - _setup_log("SetupWizard: Installing Crawl4AI") - if install_crawl4ai_skill(): - installed_packages.append("crawl4ai") + openskills_ready = install_openskills_cli() + else: + openskills_ready = True + + for package_id in packages_to_install: + if package_id == "crawl4ai": + _setup_log("SetupWizard: Installing Crawl4AI") + if install_crawl4ai_skill(): + installed_packages.append("crawl4ai") + continue + + installer = openskills_installers.get(package_id) + if installer is None: + _setup_log(f"SetupWizard: Unknown package '{package_id}', skipping") + continue + + if not openskills_ready: + _setup_log(f"SetupWizard: Skipping '{package_id}' because openskills CLI install failed") + continue + + _setup_log(f"SetupWizard: Installing '{package_id}'") + if installer(): + installed_packages.append(package_id) except Exception as e: _setup_log(f"SetupWizard: Skills installation failed: {e}") diff --git a/massgen/frontend/displays/textual_widgets/subagent_screen.py b/massgen/frontend/displays/textual_widgets/subagent_screen.py index 1a37e40c8..1d2a39fa0 100644 --- a/massgen/frontend/displays/textual_widgets/subagent_screen.py +++ b/massgen/frontend/displays/textual_widgets/subagent_screen.py @@ -1357,7 +1357,6 @@ def _maybe_lock_final_answer(self, agent_id: str) -> None: try: if adapter.final_answer and not getattr(card, "_final_content", []): card.append_chunk(adapter.final_answer) - card.complete() except Exception as e: tui_log(f"[SubagentScreen] {e}") @@ -1365,6 +1364,7 @@ def _maybe_lock_final_answer(self, agent_id: str) -> None: try: timeline.lock_to_final_answer(card_id or "final_presentation_card") card.set_locked_mode(True) + card.complete() except Exception as e: tui_log(f"[SubagentScreen] {e}") diff --git a/massgen/frontend/displays/textual_widgets/tab_bar.py b/massgen/frontend/displays/textual_widgets/tab_bar.py index ec22b01d0..bd8e083f1 100644 --- a/massgen/frontend/displays/textual_widgets/tab_bar.py +++ b/massgen/frontend/displays/textual_widgets/tab_bar.py @@ -32,17 +32,25 @@ def __init__(self, agent_id: str) -> None: class SessionInfoClicked(Message): """Message emitted when session info is clicked to show full prompt.""" - def __init__(self, turn: int, question: str, subtask: Optional[str] = None) -> None: + def __init__( + self, + turn: int, + question: str, + subtask: Optional[str] = None, + assignment_kind: str = "Subtask", + ) -> None: """Initialize the message. Args: turn: Current turn number. question: Full question text. subtask: Optional subtask for the active agent. + assignment_kind: Label for the assignment (e.g., "Subtask", "Persona"). """ self.turn = turn self.question = question self.subtask = subtask + self.assignment_kind = assignment_kind super().__init__() @@ -79,15 +87,16 @@ def __init__( super().__init__(id=id, classes=classes) self._turn = turn self._question = question - self._subtask: Optional[str] = None + self._assignment: Optional[str] = None + self._assignment_kind: str = "Subtask" def render(self) -> Text: """Render the session info.""" text = Text() - # Line 1: Subtask label (if present) + Turn number - if self._subtask: - st = self._subtask.replace("\n", " ").strip() + # Line 1: Assignment label (if present) + Turn number + if self._assignment: + st = self._assignment.replace("\n", " ").strip() if len(st) > 30: st = st[:27] + "…" text.append(st, style="bold #d2a8ff") @@ -114,12 +123,24 @@ def update_info(self, turn: int, question: str) -> None: def update_subtask(self, subtask: Optional[str]) -> None: """Update the displayed subtask label.""" - self._subtask = subtask + self.update_assignment(subtask, kind="Subtask") + + def update_assignment(self, assignment: Optional[str], kind: str = "Subtask") -> None: + """Update the displayed agent assignment label.""" + self._assignment = assignment + self._assignment_kind = kind self.refresh() async def on_click(self) -> None: """Handle click to show full prompt.""" - self.post_message(SessionInfoClicked(self._turn, self._question, self._subtask)) + self.post_message( + SessionInfoClicked( + self._turn, + self._question, + self._assignment, + assignment_kind=self._assignment_kind, + ), + ) class AgentTab(Static): @@ -351,7 +372,8 @@ def __init__( self._question = question self._tab_id_prefix = tab_id_prefix self._session_info_widget: Optional[SessionInfoWidget] = None - self._agent_subtasks: Dict[str, str] = {} + self._agent_assignments: Dict[str, str] = {} + self._assignment_kind: str = "Subtask" def compose(self) -> ComposeResult: """Create agent tabs and session info.""" @@ -426,10 +448,11 @@ def set_active(self, agent_id: str) -> None: self._tabs[agent_id].set_active(True) self.active_agent = agent_id - # Update subtask display for the newly active agent - if self._session_info_widget and self._agent_subtasks: - self._session_info_widget.update_subtask( - self._agent_subtasks.get(agent_id), + # Update assignment display for the newly active agent + if self._session_info_widget and self._agent_assignments: + self._session_info_widget.update_assignment( + self._agent_assignments.get(agent_id), + kind=self._assignment_kind, ) def set_agent_subtasks(self, subtasks: Dict[str, str]) -> None: @@ -438,11 +461,21 @@ def set_agent_subtasks(self, subtasks: Dict[str, str]) -> None: Args: subtasks: Mapping of agent_id to subtask description. """ - self._agent_subtasks = subtasks + self._set_agent_assignments(subtasks, kind="Subtask") + + def set_agent_personas(self, personas: Dict[str, str]) -> None: + """Set per-agent persona assignments for parallel mode.""" + self._set_agent_assignments(personas, kind="Persona") + + def _set_agent_assignments(self, assignments: Dict[str, str], kind: str) -> None: + """Set and render per-agent assignment labels.""" + self._agent_assignments = assignments + self._assignment_kind = kind # Update display for currently active agent if self._session_info_widget and self.active_agent: - self._session_info_widget.update_subtask( - subtasks.get(self.active_agent), + self._session_info_widget.update_assignment( + assignments.get(self.active_agent), + kind=kind, ) def update_agent_status(self, agent_id: str, status: str) -> None: diff --git a/massgen/frontend/displays/timeline_event_recorder.py b/massgen/frontend/displays/timeline_event_recorder.py index c662b1a2b..7b19bfff1 100644 --- a/massgen/frontend/displays/timeline_event_recorder.py +++ b/massgen/frontend/displays/timeline_event_recorder.py @@ -49,7 +49,9 @@ def add_separator( round_number: int = 1, subtitle: str = "", ) -> None: - if label.startswith("Round "): + is_round = label.startswith("Round ") + is_final = "FINAL" in label.upper() + if is_round or is_final: self._shown_round_banners.add(round_number) self._deferred_round_banners.pop(round_number, None) self._cb(format_separator(label, round_number, subtitle)) diff --git a/massgen/frontend/displays/tui_modes.py b/massgen/frontend/displays/tui_modes.py index 32ddbacdb..ddb5c0d3f 100644 --- a/massgen/frontend/displays/tui_modes.py +++ b/massgen/frontend/displays/tui_modes.py @@ -13,6 +13,7 @@ # Type alias for plan depth PlanDepth = Literal["shallow", "medium", "deep"] +AnalysisProfile = Literal["dev", "user"] @dataclass @@ -45,6 +46,40 @@ def get_depth_description(self) -> str: return descriptions.get(self.depth, "20-50 tasks") +@dataclass +class AnalysisConfig: + """Configuration for log analysis mode behavior.""" + + # Profile focus: + # - "dev": internal MassGen debugging/improvement focus + # - "user": reusable skill creation/refinement focus + profile: AnalysisProfile = "dev" + + # Selected analysis target. None means "auto-select current/latest". + selected_log_dir: Optional[str] = None + selected_turn: Optional[int] = None + + # Session-only skill allowlist. None means "no filtering" (all discovered skills). + enabled_skill_names: Optional[List[str]] = None + + def get_enabled_skill_names(self) -> Optional[List[str]]: + """Return normalized enabled skill names, or None if unfiltered.""" + if self.enabled_skill_names is None: + return None + seen: set[str] = set() + normalized: List[str] = [] + for name in self.enabled_skill_names: + cleaned = (name or "").strip() + if not cleaned: + continue + key = cleaned.lower() + if key in seen: + continue + seen.add(key) + normalized.append(cleaned) + return normalized + + @dataclass class TuiModeState: """Tracks TUI mode configuration. @@ -57,7 +92,7 @@ class TuiModeState: - Override state: human override of final answer selection """ - # Plan mode: "normal" | "plan" | "plan_and_execute" | "execute" + # Plan mode: "normal" | "plan" | "plan_and_execute" | "execute" | "analysis" # - "normal": Standard mode, no planning # - "plan": Planning mode, will show approval before execute # - "plan_and_execute": Planning mode, auto-execute without approval @@ -66,6 +101,7 @@ class TuiModeState: plan_session: Optional["PlanSession"] = None pending_plan_approval: bool = False plan_config: PlanConfig = field(default_factory=PlanConfig) + analysis_config: AnalysisConfig = field(default_factory=AnalysisConfig) # Selected plan ID for execution (None = use latest, "new" = create new) selected_plan_id: Optional[str] = None @@ -85,6 +121,9 @@ class TuiModeState: # - "parallel" -> orchestrator coordination_mode="voting" # - "decomposition" -> orchestrator coordination_mode="decomposition" coordination_mode: str = "parallel" + # Parallel persona generation toggle (off by default). + # When enabled (and coordination mode is parallel), runtime persona generation is used. + parallel_personas_enabled: bool = False # Set to True after the user explicitly changes the coordination toggle coordination_mode_user_set: bool = False # Optional per-agent subtask overrides for decomposition mode @@ -266,6 +305,9 @@ def get_mode_summary(self) -> str: parts.append("Plan: Creating") elif self.plan_mode == "execute": parts.append("Plan: Executing") + elif self.plan_mode == "analysis": + profile = self.analysis_config.profile.capitalize() + parts.append(f"Analyze: {profile}") # Agent mode if self.agent_mode == "single": @@ -277,6 +319,8 @@ def get_mode_summary(self) -> str: # Coordination mode if self.coordination_mode == "decomposition": parts.append("Coord: Decomposition") + elif self.parallel_personas_enabled: + parts.append("Personas: ON") # Refinement mode if not self.refinement_enabled: diff --git a/massgen/frontend/interactive_controller.py b/massgen/frontend/interactive_controller.py index ee9be36cf..54fcae14a 100644 --- a/massgen/frontend/interactive_controller.py +++ b/massgen/frontend/interactive_controller.py @@ -505,6 +505,13 @@ def on_turn_end(self, turn: int, result: TurnResult) -> None: logger.info("[TextualAdapter] Triggering plan approval flow") self._trigger_plan_approval(result, mode_state) return + if mode_state.plan_mode == "analysis" and result.answer_text and not result.was_cancelled and not result.error: + analysis_profile = getattr(mode_state.analysis_config, "profile", "dev") + if analysis_profile == "user": + self._display._call_app_method( + "_offer_skill_creation_from_analysis", + result.answer_text, + ) if result.was_cancelled: self.notify("Turn cancelled", "warning") @@ -693,6 +700,7 @@ class SlashCommandDispatcher: /timeline, /t - Show coordination timeline /files, /w - Browse workspace files from answers /browser, /u - Unified browser (Answers/Votes/Workspace/Timeline tabs) + /skills, /k - Open skills manager (session skill toggles) /vim - Toggle vim mode (hjkl navigation, i to insert) 💡 Input: @@ -771,6 +779,8 @@ def dispatch(self, command_text: str) -> CommandResult: return self._handle_files() elif cmd in ("/browser", "/u"): return self._handle_browser() + elif cmd in ("/skills", "/k"): + return self._handle_skills() elif cmd == "/vim": return self._handle_vim() # TODO: Re-enable /theme command when additional themes are ready @@ -1029,6 +1039,13 @@ def _handle_browser(self) -> CommandResult: ui_action="show_browser", ) + def _handle_skills(self) -> CommandResult: + """Handle /skills command - open skills manager modal.""" + return CommandResult( + message="Opening skills manager...", + ui_action="show_skills", + ) + def _handle_vim(self) -> CommandResult: """Handle /vim command - toggle vim mode in input.""" return CommandResult( @@ -1225,6 +1242,13 @@ async def _handle_command_result(self, result: CommandResult) -> None: self._adapter.request_cancel_turn() else: self._adapter.notify("Cancel is only available during an active turn in Textual mode.") + elif result.ui_action == "show_skills": + if is_textual and isinstance(self._adapter, TextualInteractiveAdapter): + display = getattr(self._adapter, "_display", None) + if display: + display._call_app_method("_show_skills_modal") + else: + self._adapter.notify("Skills manager is available in Textual mode.") if result.should_exit: self._adapter.request_exit() diff --git a/massgen/frontend/web/server.py b/massgen/frontend/web/server.py index 4a42be8b6..26b318134 100644 --- a/massgen/frontend/web/server.py +++ b/massgen/frontend/web/server.py @@ -897,11 +897,14 @@ def add_skills_from_dir(skills_dir: Path, location: str) -> None: # Find project skills (.agent/skills/ in current directory) add_skills_from_dir(Path.cwd() / ".agent" / "skills", "project") + from massgen.utils.skills_installer import check_skill_packages_installed + return { "skills": skills, "builtin_count": len([s for s in skills if s["location"] == "builtin"]), "user_count": len([s for s in skills if s["location"] == "user"]), "project_count": len([s for s in skills if s["location"] == "project"]), + "packages": check_skill_packages_installed(), } @app.get("/api/skills/{skill_name}") @@ -944,63 +947,65 @@ async def get_skill_detail(skill_name: str): @app.post("/api/skills/install") async def install_skill_package(request_data: dict): - """Install a skill package (anthropic or crawl4ai). + """Install a skill package. Request body: { - "package": "anthropic" | "crawl4ai" + "package": "anthropic" | "openai" | "vercel" | "agent_browser" | "crawl4ai" } Returns: {"success": true, "message": "..."} or {"error": "..."} """ from massgen.utils.skills_installer import ( + install_agent_browser_skill, install_anthropic_skills, install_crawl4ai_skill, + install_openai_skills, install_openskills_cli, + install_vercel_skills, ) package_id = request_data.get("package") - if package_id == "anthropic": - # First ensure openskills CLI is installed + openskills_installers = { + "anthropic": (install_anthropic_skills, "Anthropic skills"), + "openai": (install_openai_skills, "OpenAI skills"), + "vercel": (install_vercel_skills, "Vercel agent skills"), + "agent_browser": (install_agent_browser_skill, "Vercel Agent Browser skill"), + } + + if package_id in openskills_installers: if not install_openskills_cli(): return JSONResponse( - { - "error": "Failed to install openskills CLI. Ensure npm/Node.js is installed.", - }, - status_code=500, - ) - # Then install Anthropic skills - if install_anthropic_skills(): - return { - "success": True, - "message": "Anthropic skills installed successfully", - } - else: - return JSONResponse( - {"error": "Failed to install Anthropic skills"}, + {"error": "Failed to install openskills CLI. Ensure npm/Node.js is installed."}, status_code=500, ) - elif package_id == "crawl4ai": + installer, label = openskills_installers[package_id] + if installer(): + return {"success": True, "message": f"{label} installed successfully"} + return JSONResponse( + {"error": f"Failed to install {label}"}, + status_code=500, + ) + + if package_id == "crawl4ai": if install_crawl4ai_skill(): return { "success": True, "message": "Crawl4AI skill installed successfully", } - else: - return JSONResponse( - {"error": "Failed to install Crawl4AI skill"}, - status_code=500, - ) - - else: return JSONResponse( - {"error": f"Unknown package: {package_id}"}, - status_code=400, + {"error": "Failed to install Crawl4AI skill"}, + status_code=500, ) + return JSONResponse( + {"error": f"Unknown package: {package_id}"}, + status_code=400, + ) + @app.get("/api/providers") async def get_providers(): """Get available providers with their models and API key status.""" diff --git a/massgen/frontend/web/static/assets/_baseUniq-LXHsPSjj.js b/massgen/frontend/web/static/assets/_baseUniq-CR-Qd8A8.js similarity index 98% rename from massgen/frontend/web/static/assets/_baseUniq-LXHsPSjj.js rename to massgen/frontend/web/static/assets/_baseUniq-CR-Qd8A8.js index 178578882..36e0a7fda 100644 --- a/massgen/frontend/web/static/assets/_baseUniq-LXHsPSjj.js +++ b/massgen/frontend/web/static/assets/_baseUniq-CR-Qd8A8.js @@ -1,2 +1,2 @@ -import{b6 as L,bE as ln,aS as A,b4 as P,bF as gn,bG as dn,aR as z,bH as hn,bI as W,bJ as pn,bz as An,bK as N,b7 as m,bc as K,bf as T,bL as _n,ba as on,bM as wn,bC as bn,aT as V,bA as On,bN as I}from"./index-yx4Z55Qu.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||L(n)&&ln(n)==Pn}function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e-1}function M(n){return z(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function C(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function Cn(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var $n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fn=/\\(\\)?/g,Gn=Cn(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace($n,function(e,i,f,t){r.push(f?t.replace(Fn,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:C(n,r)?[n]:Gn(Dn(n))}function R(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&eu))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&Wn?new v:void 0;for(t.set(n,r),t.set(r,n);++l=Ur){var h=r?null:Kr(n);if(h)return $(h);s=!1,f=tn,a=new v}else a=r?[]:u;n:for(;++i-1}function M(n){return z(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function C(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function Cn(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var $n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fn=/\\(\\)?/g,Gn=Cn(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace($n,function(e,i,f,t){r.push(f?t.replace(Fn,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:C(n,r)?[n]:Gn(Dn(n))}function R(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&eu))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&Wn?new v:void 0;for(t.set(n,r),t.set(r,n);++l=Ur){var h=r?null:Kr(n);if(h)return $(h);s=!1,f=tn,a=new v}else a=r?[]:u;n:for(;++i true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nexport default baseReduce;\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n"],"names":["symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","index","length","result","symbolProto","Symbol","symbolToString","baseToString","isArray","noop","arrayEach","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","keys","object","isArrayLike","arrayLikeKeys","baseKeys","reIsDeepProp","reIsPlainProp","isKey","type","MAX_MEMOIZE_SIZE","memoizeCapped","func","memoize","key","cache","rePropName","reEscapeChar","stringToPath","string","match","number","quote","subString","toString","castPath","toKey","baseGet","path","get","defaultValue","arrayPush","values","offset","spreadableSymbol","isFlattenable","isArguments","baseFlatten","depth","isStrict","arrayReduce","accumulator","initAccum","arrayFilter","resIndex","stubArray","objectProto","propertyIsEnumerable","nativeGetSymbols","getSymbols","symbol","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","HASH_UNDEFINED","setCacheAdd","setCacheHas","SetCache","MapCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","other","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","map","setToArray","set","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","symbolValueOf","equalByTag","tag","Uint8Array","eq","convert","stacked","hasOwnProperty","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","isBuffer","Stack","isTypedArray","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","source","matchData","data","srcValue","isStrictComparable","isObject","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","isLength","isIndex","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","identity","baseForOwn","baseFor","createBaseEach","eachFunc","collection","iterable","baseEach","castFunction","forEach","baseFilter","filter","baseReduce","reduce","INFINITY","createSet","Set","LARGE_ARRAY_SIZE","baseUniq","comparator","includes","isCommon","outer","computed","seenIndex"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]} \ No newline at end of file +{"version":3,"file":"_baseUniq-CR-Qd8A8.js","sources":["../../../../../webui/node_modules/lodash-es/isSymbol.js","../../../../../webui/node_modules/lodash-es/_arrayMap.js","../../../../../webui/node_modules/lodash-es/_baseToString.js","../../../../../webui/node_modules/lodash-es/noop.js","../../../../../webui/node_modules/lodash-es/_arrayEach.js","../../../../../webui/node_modules/lodash-es/_baseFindIndex.js","../../../../../webui/node_modules/lodash-es/_baseIsNaN.js","../../../../../webui/node_modules/lodash-es/_strictIndexOf.js","../../../../../webui/node_modules/lodash-es/_baseIndexOf.js","../../../../../webui/node_modules/lodash-es/_arrayIncludes.js","../../../../../webui/node_modules/lodash-es/keys.js","../../../../../webui/node_modules/lodash-es/_isKey.js","../../../../../webui/node_modules/lodash-es/_memoizeCapped.js","../../../../../webui/node_modules/lodash-es/_stringToPath.js","../../../../../webui/node_modules/lodash-es/toString.js","../../../../../webui/node_modules/lodash-es/_castPath.js","../../../../../webui/node_modules/lodash-es/_toKey.js","../../../../../webui/node_modules/lodash-es/_baseGet.js","../../../../../webui/node_modules/lodash-es/get.js","../../../../../webui/node_modules/lodash-es/_arrayPush.js","../../../../../webui/node_modules/lodash-es/_isFlattenable.js","../../../../../webui/node_modules/lodash-es/_baseFlatten.js","../../../../../webui/node_modules/lodash-es/_arrayReduce.js","../../../../../webui/node_modules/lodash-es/_arrayFilter.js","../../../../../webui/node_modules/lodash-es/stubArray.js","../../../../../webui/node_modules/lodash-es/_getSymbols.js","../../../../../webui/node_modules/lodash-es/_baseGetAllKeys.js","../../../../../webui/node_modules/lodash-es/_getAllKeys.js","../../../../../webui/node_modules/lodash-es/_setCacheAdd.js","../../../../../webui/node_modules/lodash-es/_setCacheHas.js","../../../../../webui/node_modules/lodash-es/_SetCache.js","../../../../../webui/node_modules/lodash-es/_arraySome.js","../../../../../webui/node_modules/lodash-es/_cacheHas.js","../../../../../webui/node_modules/lodash-es/_equalArrays.js","../../../../../webui/node_modules/lodash-es/_mapToArray.js","../../../../../webui/node_modules/lodash-es/_setToArray.js","../../../../../webui/node_modules/lodash-es/_equalByTag.js","../../../../../webui/node_modules/lodash-es/_equalObjects.js","../../../../../webui/node_modules/lodash-es/_baseIsEqualDeep.js","../../../../../webui/node_modules/lodash-es/_baseIsEqual.js","../../../../../webui/node_modules/lodash-es/_baseIsMatch.js","../../../../../webui/node_modules/lodash-es/_isStrictComparable.js","../../../../../webui/node_modules/lodash-es/_getMatchData.js","../../../../../webui/node_modules/lodash-es/_matchesStrictComparable.js","../../../../../webui/node_modules/lodash-es/_baseMatches.js","../../../../../webui/node_modules/lodash-es/_baseHasIn.js","../../../../../webui/node_modules/lodash-es/_hasPath.js","../../../../../webui/node_modules/lodash-es/hasIn.js","../../../../../webui/node_modules/lodash-es/_baseMatchesProperty.js","../../../../../webui/node_modules/lodash-es/_baseProperty.js","../../../../../webui/node_modules/lodash-es/_basePropertyDeep.js","../../../../../webui/node_modules/lodash-es/property.js","../../../../../webui/node_modules/lodash-es/_baseIteratee.js","../../../../../webui/node_modules/lodash-es/_baseForOwn.js","../../../../../webui/node_modules/lodash-es/_createBaseEach.js","../../../../../webui/node_modules/lodash-es/_baseEach.js","../../../../../webui/node_modules/lodash-es/_castFunction.js","../../../../../webui/node_modules/lodash-es/forEach.js","../../../../../webui/node_modules/lodash-es/_baseFilter.js","../../../../../webui/node_modules/lodash-es/filter.js","../../../../../webui/node_modules/lodash-es/_baseReduce.js","../../../../../webui/node_modules/lodash-es/reduce.js","../../../../../webui/node_modules/lodash-es/_createSet.js","../../../../../webui/node_modules/lodash-es/_baseUniq.js"],"sourcesContent":["import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nexport default baseReduce;\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n"],"names":["symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","index","length","result","symbolProto","Symbol","symbolToString","baseToString","isArray","noop","arrayEach","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","keys","object","isArrayLike","arrayLikeKeys","baseKeys","reIsDeepProp","reIsPlainProp","isKey","type","MAX_MEMOIZE_SIZE","memoizeCapped","func","memoize","key","cache","rePropName","reEscapeChar","stringToPath","string","match","number","quote","subString","toString","castPath","toKey","baseGet","path","get","defaultValue","arrayPush","values","offset","spreadableSymbol","isFlattenable","isArguments","baseFlatten","depth","isStrict","arrayReduce","accumulator","initAccum","arrayFilter","resIndex","stubArray","objectProto","propertyIsEnumerable","nativeGetSymbols","getSymbols","symbol","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","HASH_UNDEFINED","setCacheAdd","setCacheHas","SetCache","MapCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","other","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","map","setToArray","set","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","symbolValueOf","equalByTag","tag","Uint8Array","eq","convert","stacked","hasOwnProperty","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","isBuffer","Stack","isTypedArray","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","source","matchData","data","srcValue","isStrictComparable","isObject","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","isLength","isIndex","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","identity","baseForOwn","baseFor","createBaseEach","eachFunc","collection","iterable","baseEach","castFunction","forEach","baseFilter","filter","baseReduce","reduce","INFINITY","createSet","Set","LARGE_ARRAY_SIZE","baseUniq","comparator","includes","isCommon","outer","computed","seenIndex"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/arc-D5_FvRk_.js b/massgen/frontend/web/static/assets/arc-BofFEJ5q.js similarity index 96% rename from massgen/frontend/web/static/assets/arc-D5_FvRk_.js rename to massgen/frontend/web/static/assets/arc-BofFEJ5q.js index eba744bfa..8e47b5eee 100644 --- a/massgen/frontend/web/static/assets/arc-D5_FvRk_.js +++ b/massgen/frontend/web/static/assets/arc-BofFEJ5q.js @@ -1,2 +1,2 @@ -import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as B,a9 as rn,aa as L,ab as o,ac as sn,ad as on,ae as fn}from"./index-yx4Z55Qu.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*ur*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),sy))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(Fy?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),pr*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),sy))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(Fy?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n"],"names":["arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","t","epsilon","cornerTangents","r1","rc","cw","x01","y01","lo","sqrt","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","D","max","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","d3arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","arc","buffer","r0","a0","halfPi","a1","da","abs","tau","cos","sin","a01","a11","a00","a10","da0","da1","ap","rp","min","rc0","rc1","t0","t1","p0","asin","p1","oc","pi","ax","ay","bx","by","kc","acos","lc","atan2","a","_"],"mappings":"iKAIA,SAASA,GAAeC,EAAG,CACzB,OAAOA,EAAE,WACX,CAEA,SAASC,GAAeD,EAAG,CACzB,OAAOA,EAAE,WACX,CAEA,SAASE,GAAcF,EAAG,CACxB,OAAOA,EAAE,UACX,CAEA,SAASG,GAAYH,EAAG,CACtB,OAAOA,EAAE,QACX,CAEA,SAASI,GAAYJ,EAAG,CACtB,OAAOA,GAAKA,EAAE,QAChB,CAEA,SAASK,GAAUC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACjD,IAAIC,EAAMN,EAAKF,EAAIS,EAAMN,EAAKF,EAC1BS,EAAMJ,EAAKF,EAAIO,EAAMJ,EAAKF,EAC1BO,EAAID,EAAMH,EAAME,EAAMD,EAC1B,GAAI,EAAAG,EAAIA,EAAIC,GACZ,OAAAD,GAAKF,GAAOT,EAAKI,GAAMM,GAAOX,EAAKI,IAAOQ,EACnC,CAACZ,EAAKY,EAAIJ,EAAKP,EAAKW,EAAIH,CAAG,CACpC,CAIA,SAASK,EAAed,EAAIC,EAAIC,EAAIC,EAAIY,EAAIC,EAAIC,EAAI,CAClD,IAAIC,EAAMlB,EAAKE,EACXiB,EAAMlB,EAAKE,EACXiB,GAAMH,EAAKD,EAAK,CAACA,GAAMK,EAAKH,EAAMA,EAAMC,EAAMA,CAAG,EACjDG,EAAKF,EAAKD,EACVI,EAAK,CAACH,EAAKF,EACXM,EAAMxB,EAAKsB,EACXG,EAAMxB,EAAKsB,EACXf,EAAMN,EAAKoB,EACXb,EAAMN,EAAKoB,EACXG,GAAOF,EAAMhB,GAAO,EACpBmB,GAAOF,EAAMhB,GAAO,EACpBmB,EAAKpB,EAAMgB,EACXK,EAAKpB,EAAMgB,EACXK,EAAKF,EAAKA,EAAKC,EAAKA,EACpBE,EAAIhB,EAAKC,EACTgB,EAAIR,EAAMf,EAAMD,EAAMiB,EACtB/B,GAAKmC,EAAK,EAAI,GAAK,GAAKR,EAAKY,GAAI,EAAGF,EAAIA,EAAID,EAAKE,EAAIA,CAAC,CAAC,EACvDE,GAAOF,EAAIH,EAAKD,EAAKlC,GAAKoC,EAC1BK,GAAO,CAACH,EAAIJ,EAAKC,EAAKnC,GAAKoC,EAC3BM,GAAOJ,EAAIH,EAAKD,EAAKlC,GAAKoC,EAC1BO,GAAO,CAACL,EAAIJ,EAAKC,EAAKnC,GAAKoC,EAC3BQ,EAAMJ,EAAMR,EACZa,EAAMJ,EAAMR,EACZa,EAAMJ,EAAMV,EACZe,EAAMJ,EAAMV,EAIhB,OAAIW,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,IAAKP,EAAME,EAAKD,EAAME,GAE7D,CACL,GAAIH,EACJ,GAAIC,EACJ,IAAK,CAACb,EACN,IAAK,CAACC,EACN,IAAKW,GAAOnB,EAAKgB,EAAI,GACrB,IAAKI,GAAOpB,EAAKgB,EAAI,EACzB,CACA,CAEe,SAAAW,IAAW,CACxB,IAAIC,EAAclD,GACdmD,EAAcjD,GACdkD,EAAeC,EAAS,CAAC,EACzBC,EAAY,KACZC,EAAapD,GACbqD,EAAWpD,GACXqD,EAAWpD,GACXqD,EAAU,KACVC,EAAOC,GAASC,CAAG,EAEvB,SAASA,GAAM,CACb,IAAIC,EACAxB,EACAyB,EAAK,CAACb,EAAY,MAAM,KAAM,SAAS,EACvC5B,EAAK,CAAC6B,EAAY,MAAM,KAAM,SAAS,EACvCa,EAAKT,EAAW,MAAM,KAAM,SAAS,EAAIU,GACzCC,EAAKV,EAAS,MAAM,KAAM,SAAS,EAAIS,GACvCE,EAAKC,GAAIF,EAAKF,CAAE,EAChBxC,EAAK0C,EAAKF,EAQd,GANKN,IAASA,EAAUI,EAASH,EAAI,GAGjCrC,EAAKyC,IAAIzB,EAAIhB,EAAIA,EAAKyC,EAAIA,EAAKzB,GAG/B,EAAEhB,EAAKF,GAAUsC,EAAQ,OAAO,EAAG,CAAC,UAG/BS,EAAKE,GAAMjD,EAClBsC,EAAQ,OAAOpC,EAAKgD,EAAIN,CAAE,EAAG1C,EAAKiD,EAAIP,CAAE,CAAC,EACzCN,EAAQ,IAAI,EAAG,EAAGpC,EAAI0C,EAAIE,EAAI,CAAC1C,CAAE,EAC7BuC,EAAK3C,IACPsC,EAAQ,OAAOK,EAAKO,EAAIJ,CAAE,EAAGH,EAAKQ,EAAIL,CAAE,CAAC,EACzCR,EAAQ,IAAI,EAAG,EAAGK,EAAIG,EAAIF,EAAIxC,CAAE,OAK/B,CACH,IAAIgD,EAAMR,EACNS,EAAMP,EACNQ,EAAMV,EACNW,EAAMT,EACNU,EAAMT,EACNU,EAAMV,EACNW,EAAKrB,EAAS,MAAM,KAAM,SAAS,EAAI,EACvCsB,EAAMD,EAAK1D,IAAakC,EAAY,CAACA,EAAU,MAAM,KAAM,SAAS,EAAI1B,EAAKmC,EAAKA,EAAKzC,EAAKA,CAAE,GAC9FC,EAAKyD,EAAIZ,GAAI9C,EAAKyC,CAAE,EAAI,EAAG,CAACX,EAAa,MAAM,KAAM,SAAS,CAAC,EAC/D6B,EAAM1D,EACN2D,EAAM3D,EACN4D,EACAC,EAGJ,GAAIL,EAAK3D,EAAS,CAChB,IAAIiE,EAAKC,GAAKP,EAAKhB,EAAKQ,EAAIO,CAAE,CAAC,EAC3BS,EAAKD,GAAKP,EAAKzD,EAAKiD,EAAIO,CAAE,CAAC,GAC1BF,GAAOS,EAAK,GAAKjE,GAASiE,GAAO7D,EAAK,EAAI,GAAKkD,GAAOW,EAAIV,GAAOU,IACjET,EAAM,EAAGF,EAAMC,GAAOX,EAAKE,GAAM,IACjCW,GAAOU,EAAK,GAAKnE,GAASmE,GAAO/D,EAAK,EAAI,GAAKgD,GAAOe,EAAId,GAAOc,IACjEV,EAAM,EAAGL,EAAMC,GAAOT,EAAKE,GAAM,EACxC,CAEA,IAAIzC,EAAMH,EAAKgD,EAAIE,CAAG,EAClB9C,EAAMJ,EAAKiD,EAAIC,CAAG,EAClBzD,EAAMgD,EAAKO,EAAIK,CAAG,EAClB3D,EAAM+C,EAAKQ,EAAII,CAAG,EAGtB,GAAIpD,EAAKH,EAAS,CAChB,IAAIW,EAAMT,EAAKgD,EAAIG,CAAG,EAClBzC,EAAMV,EAAKiD,EAAIE,CAAG,EAClBxC,EAAM8B,EAAKO,EAAII,CAAG,EAClBxC,EAAM6B,EAAKQ,EAAIG,CAAG,EAClBc,EAKJ,GAAIrB,EAAKsB,GACP,GAAID,EAAKlF,GAAUmB,EAAKC,EAAKO,EAAKC,EAAKH,EAAKC,EAAKjB,EAAKC,CAAG,EAAG,CAC1D,IAAI0E,EAAKjE,EAAM+D,EAAG,CAAC,EACfG,EAAKjE,EAAM8D,EAAG,CAAC,EACfI,EAAK7D,EAAMyD,EAAG,CAAC,EACfK,EAAK7D,EAAMwD,EAAG,CAAC,EACfM,GAAK,EAAIvB,EAAIwB,IAAML,EAAKE,EAAKD,EAAKE,IAAOjE,EAAK8D,EAAKA,EAAKC,EAAKA,CAAE,EAAI/D,EAAKgE,EAAKA,EAAKC,EAAKA,CAAE,EAAE,EAAI,CAAC,EAChGG,GAAKpE,EAAK4D,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,CAAC,EAC3CP,EAAMD,EAAIzD,GAAKwC,EAAKiC,KAAOF,GAAK,EAAE,EAClCZ,EAAMF,EAAIzD,GAAKD,EAAK0E,KAAOF,GAAK,EAAE,CACpC,MACEb,EAAMC,EAAM,CAGlB,CAGML,EAAMzD,EAGH8D,EAAM9D,GACb+D,EAAK9D,EAAeY,EAAKC,EAAKT,EAAKC,EAAKJ,EAAI4D,EAAK1D,CAAE,EACnD4D,EAAK/D,EAAeU,EAAKC,EAAKjB,EAAKC,EAAKM,EAAI4D,EAAK1D,CAAE,EAEnDkC,EAAQ,OAAOyB,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAGzCD,EAAM3D,EAAImC,EAAQ,IAAIyB,EAAG,GAAIA,EAAG,GAAID,EAAKe,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAGc,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC5D,CAAE,GAI5FkC,EAAQ,IAAIyB,EAAG,GAAIA,EAAG,GAAID,EAAKe,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAGc,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC3D,CAAE,EAChFkC,EAAQ,IAAI,EAAG,EAAGpC,EAAI2E,EAAMd,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAAGc,EAAMb,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAAG,CAAC5D,CAAE,EACvGkC,EAAQ,IAAI0B,EAAG,GAAIA,EAAG,GAAIF,EAAKe,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAGa,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC5D,CAAE,KAK/EkC,EAAQ,OAAOjC,EAAKC,CAAG,EAAGgC,EAAQ,IAAI,EAAG,EAAGpC,EAAIkD,EAAKC,EAAK,CAACjD,CAAE,GArB5CkC,EAAQ,OAAOjC,EAAKC,CAAG,EAyBzC,EAAEqC,EAAK3C,IAAY,EAAEwD,EAAMxD,GAAUsC,EAAQ,OAAO3C,EAAKC,CAAG,EAGvDiE,EAAM7D,GACb+D,EAAK9D,EAAeN,EAAKC,EAAKe,EAAKC,EAAK+B,EAAI,CAACkB,EAAKzD,CAAE,EACpD4D,EAAK/D,EAAeI,EAAKC,EAAKO,EAAKC,EAAK6B,EAAI,CAACkB,EAAKzD,CAAE,EAEpDkC,EAAQ,OAAOyB,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAGzCF,EAAM1D,EAAImC,EAAQ,IAAIyB,EAAG,GAAIA,EAAG,GAAIF,EAAKgB,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAGc,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC5D,CAAE,GAI5FkC,EAAQ,IAAIyB,EAAG,GAAIA,EAAG,GAAIF,EAAKgB,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAGc,EAAMd,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC3D,CAAE,EAChFkC,EAAQ,IAAI,EAAG,EAAGK,EAAIkC,EAAMd,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAAGc,EAAMb,EAAG,GAAKA,EAAG,IAAKA,EAAG,GAAKA,EAAG,GAAG,EAAG5D,CAAE,EACtGkC,EAAQ,IAAI0B,EAAG,GAAIA,EAAG,GAAIH,EAAKgB,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAGa,EAAMb,EAAG,IAAKA,EAAG,GAAG,EAAG,CAAC5D,CAAE,IAK/EkC,EAAQ,IAAI,EAAG,EAAGK,EAAIY,EAAKD,EAAKlD,CAAE,CACzC,CAIA,GAFAkC,EAAQ,UAAS,EAEbI,EAAQ,OAAOJ,EAAU,KAAMI,EAAS,IAAM,IACpD,CAEA,OAAAD,EAAI,SAAW,UAAW,CACxB,IAAIvB,GAAK,CAACY,EAAY,MAAM,KAAM,SAAS,GAAI,CAACC,EAAY,MAAM,KAAM,SAAS,GAAK,EAClF+C,GAAK,CAAC3C,EAAW,MAAM,KAAM,SAAS,GAAI,CAACC,EAAS,MAAM,KAAM,SAAS,GAAK,EAAIiC,GAAK,EAC3F,MAAO,CAACnB,EAAI4B,CAAC,EAAI5D,EAAGiC,EAAI2B,CAAC,EAAI5D,CAAC,CAChC,EAEAuB,EAAI,YAAc,SAASsC,EAAG,CAC5B,OAAO,UAAU,QAAUjD,EAAc,OAAOiD,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOX,CAC9F,EAEAW,EAAI,YAAc,SAASsC,EAAG,CAC5B,OAAO,UAAU,QAAUhD,EAAc,OAAOgD,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOV,CAC9F,EAEAU,EAAI,aAAe,SAASsC,EAAG,CAC7B,OAAO,UAAU,QAAU/C,EAAe,OAAO+C,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOT,CAC/F,EAEAS,EAAI,UAAY,SAASsC,EAAG,CAC1B,OAAO,UAAU,QAAU7C,EAAY6C,GAAK,KAAO,KAAO,OAAOA,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOP,CAC/G,EAEAO,EAAI,WAAa,SAASsC,EAAG,CAC3B,OAAO,UAAU,QAAU5C,EAAa,OAAO4C,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAON,CAC7F,EAEAM,EAAI,SAAW,SAASsC,EAAG,CACzB,OAAO,UAAU,QAAU3C,EAAW,OAAO2C,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOL,CAC3F,EAEAK,EAAI,SAAW,SAASsC,EAAG,CACzB,OAAO,UAAU,QAAU1C,EAAW,OAAO0C,GAAM,WAAaA,EAAI9C,EAAS,CAAC8C,CAAC,EAAGtC,GAAOJ,CAC3F,EAEAI,EAAI,QAAU,SAASsC,EAAG,CACxB,OAAO,UAAU,QAAWzC,EAAUyC,GAAY,KAAWtC,GAAOH,CACtE,EAEOG,CACT","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"arc-BofFEJ5q.js","sources":["../../../../../webui/node_modules/d3-shape/src/arc.js"],"sourcesContent":["import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n"],"names":["arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","t","epsilon","cornerTangents","r1","rc","cw","x01","y01","lo","sqrt","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","D","max","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","d3arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","arc","buffer","r0","a0","halfPi","a1","da","abs","tau","cos","sin","a01","a11","a00","a10","da0","da1","ap","rp","min","rc0","rc1","t0","t1","p0","asin","p1","oc","pi","ax","ay","bx","by","kc","acos","lc","atan2","a","_"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js b/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js similarity index 99% rename from massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js rename to massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js index 3b5960b40..a5f71a58b 100644 --- a/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js +++ b/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js @@ -1,4 +1,4 @@ -import{aK as ke,_ as dt,H as Ze,V as qe,l as Se,b as Qe,a as Je,p as Ke,q as je,g as _e,s as tr,y as er,D as rr,E as ir,F as ar,c as Ee,ak as me,aU as pe,i as nr,d as or,x as sr,aV as hr,aW as lr}from"./index-yx4Z55Qu.js";import{p as fr}from"./chunk-4BX2VUAB-zPP-xzOW.js";import{p as cr}from"./treemap-KMMF4GRG-DeY5gSJ9.js";import{c as Fe}from"./cytoscape.esm-BQaXIfA_.js";import"./min-DVxmWhZZ.js";import"./_baseUniq-LXHsPSjj.js";var he={exports:{}},le={exports:{}},fe={exports:{}},gr=fe.exports,we;function ur(){return we||(we=1,(function(I,D){(function(P,N){I.exports=N()})(gr,function(){return(function(A){var P={};function N(u){if(P[u])return P[u].exports;var h=P[u]={i:u,l:!1,exports:{}};return A[u].call(h.exports,h,h.exports,N),h.l=!0,h.exports}return N.m=A,N.c=P,N.i=function(u){return u},N.d=function(u,h,a){N.o(u,h)||Object.defineProperty(u,h,{configurable:!1,enumerable:!0,get:a})},N.n=function(u){var h=u&&u.__esModule?function(){return u.default}:function(){return u};return N.d(h,"a",h),h},N.o=function(u,h){return Object.prototype.hasOwnProperty.call(u,h)},N.p="",N(N.s=28)})([(function(A,P,N){function u(){}u.QUALITY=1,u.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,u.DEFAULT_INCREMENTAL=!1,u.DEFAULT_ANIMATION_ON_LAYOUT=!0,u.DEFAULT_ANIMATION_DURING_LAYOUT=!1,u.DEFAULT_ANIMATION_PERIOD=50,u.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,u.DEFAULT_GRAPH_MARGIN=15,u.NODE_DIMENSIONS_INCLUDE_LABELS=!1,u.SIMPLE_NODE_SIZE=40,u.SIMPLE_NODE_HALF_SIZE=u.SIMPLE_NODE_SIZE/2,u.EMPTY_COMPOUND_NODE_SIZE=40,u.MIN_EDGE_LENGTH=1,u.WORLD_BOUNDARY=1e6,u.INITIAL_WORLD_BOUNDARY=u.WORLD_BOUNDARY/1e3,u.WORLD_CENTER_X=1200,u.WORLD_CENTER_Y=900,A.exports=u}),(function(A,P,N){var u=N(2),h=N(8),a=N(9);function r(f,i,g){u.call(this,g),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=g,this.bendpoints=[],this.source=f,this.target=i}r.prototype=Object.create(u.prototype);for(var e in u)r[e]=u[e];r.prototype.getSource=function(){return this.source},r.prototype.getTarget=function(){return this.target},r.prototype.isInterGraph=function(){return this.isInterGraph},r.prototype.getLength=function(){return this.length},r.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},r.prototype.getBendpoints=function(){return this.bendpoints},r.prototype.getLca=function(){return this.lca},r.prototype.getSourceInLca=function(){return this.sourceInLca},r.prototype.getTargetInLca=function(){return this.targetInLca},r.prototype.getOtherEnd=function(f){if(this.source===f)return this.target;if(this.target===f)return this.source;throw"Node is not incident with this edge"},r.prototype.getOtherEndInGraph=function(f,i){for(var g=this.getOtherEnd(f),t=i.getGraphManager().getRoot();;){if(g.getOwner()==i)return g;if(g.getOwner()==t)break;g=g.getOwner().getParent()}return null},r.prototype.updateLength=function(){var f=new Array(4);this.isOverlapingSourceAndTarget=h.getIntersection(this.target.getRect(),this.source.getRect(),f),this.isOverlapingSourceAndTarget||(this.lengthX=f[0]-f[2],this.lengthY=f[1]-f[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},r.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},A.exports=r}),(function(A,P,N){function u(h){this.vGraphObject=h}A.exports=u}),(function(A,P,N){var u=N(2),h=N(10),a=N(13),r=N(0),e=N(16),f=N(5);function i(t,o,s,c){s==null&&c==null&&(c=o),u.call(this,c),t.graphManager!=null&&(t=t.graphManager),this.estimatedSize=h.MIN_VALUE,this.inclusionTreeDepth=h.MAX_VALUE,this.vGraphObject=c,this.edges=[],this.graphManager=t,s!=null&&o!=null?this.rect=new a(o.x,o.y,s.width,s.height):this.rect=new a}i.prototype=Object.create(u.prototype);for(var g in u)i[g]=u[g];i.prototype.getEdges=function(){return this.edges},i.prototype.getChild=function(){return this.child},i.prototype.getOwner=function(){return this.owner},i.prototype.getWidth=function(){return this.rect.width},i.prototype.setWidth=function(t){this.rect.width=t},i.prototype.getHeight=function(){return this.rect.height},i.prototype.setHeight=function(t){this.rect.height=t},i.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},i.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},i.prototype.getCenter=function(){return new f(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},i.prototype.getLocation=function(){return new f(this.rect.x,this.rect.y)},i.prototype.getRect=function(){return this.rect},i.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},i.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},i.prototype.setRect=function(t,o){this.rect.x=t.x,this.rect.y=t.y,this.rect.width=o.width,this.rect.height=o.height},i.prototype.setCenter=function(t,o){this.rect.x=t-this.rect.width/2,this.rect.y=o-this.rect.height/2},i.prototype.setLocation=function(t,o){this.rect.x=t,this.rect.y=o},i.prototype.moveBy=function(t,o){this.rect.x+=t,this.rect.y+=o},i.prototype.getEdgeListToNode=function(t){var o=[],s=this;return s.edges.forEach(function(c){if(c.target==t){if(c.source!=s)throw"Incorrect edge source!";o.push(c)}}),o},i.prototype.getEdgesBetween=function(t){var o=[],s=this;return s.edges.forEach(function(c){if(!(c.source==s||c.target==s))throw"Incorrect edge source and/or target";(c.target==t||c.source==t)&&o.push(c)}),o},i.prototype.getNeighborsList=function(){var t=new Set,o=this;return o.edges.forEach(function(s){if(s.source==o)t.add(s.target);else{if(s.target!=o)throw"Incorrect incidency!";t.add(s.source)}}),t},i.prototype.withChildren=function(){var t=new Set,o,s;if(t.add(this),this.child!=null)for(var c=this.child.getNodes(),l=0;lo?(this.rect.x-=(this.labelWidth-o)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(o+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(s+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>s?(this.rect.y-=(this.labelHeight-s)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(s+this.labelHeight))}}},i.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==h.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},i.prototype.transform=function(t){var o=this.rect.x;o>r.WORLD_BOUNDARY?o=r.WORLD_BOUNDARY:o<-r.WORLD_BOUNDARY&&(o=-r.WORLD_BOUNDARY);var s=this.rect.y;s>r.WORLD_BOUNDARY?s=r.WORLD_BOUNDARY:s<-r.WORLD_BOUNDARY&&(s=-r.WORLD_BOUNDARY);var c=new f(o,s),l=t.inverseTransformPoint(c);this.setLocation(l.x,l.y)},i.prototype.getLeft=function(){return this.rect.x},i.prototype.getRight=function(){return this.rect.x+this.rect.width},i.prototype.getTop=function(){return this.rect.y},i.prototype.getBottom=function(){return this.rect.y+this.rect.height},i.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},A.exports=i}),(function(A,P,N){var u=N(0);function h(){}for(var a in u)h[a]=u[a];h.MAX_ITERATIONS=2500,h.DEFAULT_EDGE_LENGTH=50,h.DEFAULT_SPRING_STRENGTH=.45,h.DEFAULT_REPULSION_STRENGTH=4500,h.DEFAULT_GRAVITY_STRENGTH=.4,h.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,h.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,h.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,h.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,h.COOLING_ADAPTATION_FACTOR=.33,h.ADAPTATION_LOWER_NODE_LIMIT=1e3,h.ADAPTATION_UPPER_NODE_LIMIT=5e3,h.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,h.MAX_NODE_DISPLACEMENT=h.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,h.MIN_REPULSION_DIST=h.DEFAULT_EDGE_LENGTH/10,h.CONVERGENCE_CHECK_PERIOD=100,h.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,h.MIN_EDGE_LENGTH=1,h.GRID_CALCULATION_CHECK_PERIOD=10,A.exports=h}),(function(A,P,N){function u(h,a){h==null&&a==null?(this.x=0,this.y=0):(this.x=h,this.y=a)}u.prototype.getX=function(){return this.x},u.prototype.getY=function(){return this.y},u.prototype.setX=function(h){this.x=h},u.prototype.setY=function(h){this.y=h},u.prototype.getDifference=function(h){return new DimensionD(this.x-h.x,this.y-h.y)},u.prototype.getCopy=function(){return new u(this.x,this.y)},u.prototype.translate=function(h){return this.x+=h.width,this.y+=h.height,this},A.exports=u}),(function(A,P,N){var u=N(2),h=N(10),a=N(0),r=N(7),e=N(3),f=N(1),i=N(13),g=N(12),t=N(11);function o(c,l,T){u.call(this,T),this.estimatedSize=h.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=c,l!=null&&l instanceof r?this.graphManager=l:l!=null&&l instanceof Layout&&(this.graphManager=l.graphManager)}o.prototype=Object.create(u.prototype);for(var s in u)o[s]=u[s];o.prototype.getNodes=function(){return this.nodes},o.prototype.getEdges=function(){return this.edges},o.prototype.getGraphManager=function(){return this.graphManager},o.prototype.getParent=function(){return this.parent},o.prototype.getLeft=function(){return this.left},o.prototype.getRight=function(){return this.right},o.prototype.getTop=function(){return this.top},o.prototype.getBottom=function(){return this.bottom},o.prototype.isConnected=function(){return this.isConnected},o.prototype.add=function(c,l,T){if(l==null&&T==null){var d=c;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(d)>-1)throw"Node already in graph!";return d.owner=this,this.getNodes().push(d),d}else{var v=c;if(!(this.getNodes().indexOf(l)>-1&&this.getNodes().indexOf(T)>-1))throw"Source or target not in graph!";if(!(l.owner==T.owner&&l.owner==this))throw"Both owners must be this graph!";return l.owner!=T.owner?null:(v.source=l,v.target=T,v.isInterGraph=!1,this.getEdges().push(v),l.edges.push(v),T!=l&&T.edges.push(v),v)}},o.prototype.remove=function(c){var l=c;if(c instanceof e){if(l==null)throw"Node is null!";if(!(l.owner!=null&&l.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var T=l.edges.slice(),d,v=T.length,L=0;L-1&&G>-1))throw"Source and/or target doesn't know this edge!";d.source.edges.splice(C,1),d.target!=d.source&&d.target.edges.splice(G,1);var S=d.source.owner.getEdges().indexOf(d);if(S==-1)throw"Not in owner's edge list!";d.source.owner.getEdges().splice(S,1)}},o.prototype.updateLeftTop=function(){for(var c=h.MAX_VALUE,l=h.MAX_VALUE,T,d,v,L=this.getNodes(),S=L.length,C=0;CT&&(c=T),l>d&&(l=d)}return c==h.MAX_VALUE?null:(L[0].getParent().paddingLeft!=null?v=L[0].getParent().paddingLeft:v=this.margin,this.left=l-v,this.top=c-v,new g(this.left,this.top))},o.prototype.updateBounds=function(c){for(var l=h.MAX_VALUE,T=-h.MAX_VALUE,d=h.MAX_VALUE,v=-h.MAX_VALUE,L,S,C,G,K,X=this.nodes,Q=X.length,O=0;OL&&(l=L),TC&&(d=C),vL&&(l=L),TC&&(d=C),v=this.nodes.length){var Q=0;T.forEach(function(O){O.owner==c&&Q++}),Q==this.nodes.length&&(this.isConnected=!0)}},A.exports=o}),(function(A,P,N){var u,h=N(1);function a(r){u=N(6),this.layout=r,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var r=this.layout.newGraph(),e=this.layout.newNode(null),f=this.add(r,e);return this.setRootGraph(f),this.rootGraph},a.prototype.add=function(r,e,f,i,g){if(f==null&&i==null&&g==null){if(r==null)throw"Graph is null!";if(e==null)throw"Parent node is null!";if(this.graphs.indexOf(r)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(r),r.parent!=null)throw"Already has a parent!";if(e.child!=null)throw"Already has a child!";return r.parent=e,e.child=r,r}else{g=f,i=e,f=r;var t=i.getOwner(),o=g.getOwner();if(!(t!=null&&t.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(o!=null&&o.getGraphManager()==this))throw"Target not in this graph mgr!";if(t==o)return f.isInterGraph=!1,t.add(f,i,g);if(f.isInterGraph=!0,f.source=i,f.target=g,this.edges.indexOf(f)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(f),!(f.source!=null&&f.target!=null))throw"Edge source and/or target is null!";if(!(f.source.edges.indexOf(f)==-1&&f.target.edges.indexOf(f)==-1))throw"Edge already in source and/or target incidency list!";return f.source.edges.push(f),f.target.edges.push(f),f}},a.prototype.remove=function(r){if(r instanceof u){var e=r;if(e.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(e==this.rootGraph||e.parent!=null&&e.parent.graphManager==this))throw"Invalid parent node!";var f=[];f=f.concat(e.getEdges());for(var i,g=f.length,t=0;t=r.getRight()?e[0]+=Math.min(r.getX()-a.getX(),a.getRight()-r.getRight()):r.getX()<=a.getX()&&r.getRight()>=a.getRight()&&(e[0]+=Math.min(a.getX()-r.getX(),r.getRight()-a.getRight())),a.getY()<=r.getY()&&a.getBottom()>=r.getBottom()?e[1]+=Math.min(r.getY()-a.getY(),a.getBottom()-r.getBottom()):r.getY()<=a.getY()&&r.getBottom()>=a.getBottom()&&(e[1]+=Math.min(a.getY()-r.getY(),r.getBottom()-a.getBottom()));var g=Math.abs((r.getCenterY()-a.getCenterY())/(r.getCenterX()-a.getCenterX()));r.getCenterY()===a.getCenterY()&&r.getCenterX()===a.getCenterX()&&(g=1);var t=g*e[0],o=e[1]/g;e[0]t)return e[0]=f,e[1]=s,e[2]=g,e[3]=X,!1;if(ig)return e[0]=o,e[1]=i,e[2]=G,e[3]=t,!1;if(fg?(e[0]=l,e[1]=T,n=!0):(e[0]=c,e[1]=s,n=!0):p===y&&(f>g?(e[0]=o,e[1]=s,n=!0):(e[0]=d,e[1]=T,n=!0)),-E===y?g>f?(e[2]=K,e[3]=X,m=!0):(e[2]=G,e[3]=C,m=!0):E===y&&(g>f?(e[2]=S,e[3]=C,m=!0):(e[2]=Q,e[3]=X,m=!0)),n&&m)return!1;if(f>g?i>t?(R=this.getCardinalDirection(p,y,4),M=this.getCardinalDirection(E,y,2)):(R=this.getCardinalDirection(-p,y,3),M=this.getCardinalDirection(-E,y,1)):i>t?(R=this.getCardinalDirection(-p,y,1),M=this.getCardinalDirection(-E,y,3)):(R=this.getCardinalDirection(p,y,2),M=this.getCardinalDirection(E,y,4)),!n)switch(R){case 1:W=s,F=f+-L/y,e[0]=F,e[1]=W;break;case 2:F=d,W=i+v*y,e[0]=F,e[1]=W;break;case 3:W=T,F=f+L/y,e[0]=F,e[1]=W;break;case 4:F=l,W=i+-v*y,e[0]=F,e[1]=W;break}if(!m)switch(M){case 1:Z=C,x=g+-rt/y,e[2]=x,e[3]=Z;break;case 2:x=Q,Z=t+O*y,e[2]=x,e[3]=Z;break;case 3:Z=X,x=g+rt/y,e[2]=x,e[3]=Z;break;case 4:x=K,Z=t+-O*y,e[2]=x,e[3]=Z;break}}return!1},h.getCardinalDirection=function(a,r,e){return a>r?e:1+e%4},h.getIntersection=function(a,r,e,f){if(f==null)return this.getIntersection2(a,r,e);var i=a.x,g=a.y,t=r.x,o=r.y,s=e.x,c=e.y,l=f.x,T=f.y,d=void 0,v=void 0,L=void 0,S=void 0,C=void 0,G=void 0,K=void 0,X=void 0,Q=void 0;return L=o-g,C=i-t,K=t*g-i*o,S=T-c,G=s-l,X=l*c-s*T,Q=L*G-S*C,Q===0?null:(d=(C*X-G*K)/Q,v=(S*K-L*X)/Q,new u(d,v))},h.angleOfVector=function(a,r,e,f){var i=void 0;return a!==e?(i=Math.atan((f-r)/(e-a)),e=0){var T=(-s+Math.sqrt(s*s-4*o*c))/(2*o),d=(-s-Math.sqrt(s*s-4*o*c))/(2*o),v=null;return T>=0&&T<=1?[T]:d>=0&&d<=1?[d]:v}else return null},h.HALF_PI=.5*Math.PI,h.ONE_AND_HALF_PI=1.5*Math.PI,h.TWO_PI=2*Math.PI,h.THREE_PI=3*Math.PI,A.exports=h}),(function(A,P,N){function u(){}u.sign=function(h){return h>0?1:h<0?-1:0},u.floor=function(h){return h<0?Math.ceil(h):Math.floor(h)},u.ceil=function(h){return h<0?Math.floor(h):Math.ceil(h)},A.exports=u}),(function(A,P,N){function u(){}u.MAX_VALUE=2147483647,u.MIN_VALUE=-2147483648,A.exports=u}),(function(A,P,N){var u=(function(){function i(g,t){for(var o=0;o"u"?"undefined":u(a);return a==null||r!="object"&&r!="function"},A.exports=h}),(function(A,P,N){function u(s){if(Array.isArray(s)){for(var c=0,l=Array(s.length);c0&&c;){for(L.push(C[0]);L.length>0&&c;){var G=L[0];L.splice(0,1),v.add(G);for(var K=G.getEdges(),d=0;d-1&&C.splice(rt,1)}v=new Set,S=new Map}}return s},o.prototype.createDummyNodesForBendpoints=function(s){for(var c=[],l=s.source,T=this.graphManager.calcLowestCommonAncestor(s.source,s.target),d=0;d0){for(var T=this.edgeToDummyNodes.get(l),d=0;d=0&&c.splice(X,1);var Q=S.getNeighborsList();Q.forEach(function(n){if(l.indexOf(n)<0){var m=T.get(n),p=m-1;p==1&&G.push(n),T.set(n,p)}})}l=l.concat(G),(c.length==1||c.length==2)&&(d=!0,v=c[0])}return v},o.prototype.setGraphManager=function(s){this.graphManager=s},A.exports=o}),(function(A,P,N){function u(){}u.seed=1,u.x=0,u.nextDouble=function(){return u.x=Math.sin(u.seed++)*1e4,u.x-Math.floor(u.x)},A.exports=u}),(function(A,P,N){var u=N(5);function h(a,r){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}h.prototype.getWorldOrgX=function(){return this.lworldOrgX},h.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},h.prototype.getWorldOrgY=function(){return this.lworldOrgY},h.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},h.prototype.getWorldExtX=function(){return this.lworldExtX},h.prototype.setWorldExtX=function(a){this.lworldExtX=a},h.prototype.getWorldExtY=function(){return this.lworldExtY},h.prototype.setWorldExtY=function(a){this.lworldExtY=a},h.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},h.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},h.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},h.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},h.prototype.getDeviceExtX=function(){return this.ldeviceExtX},h.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},h.prototype.getDeviceExtY=function(){return this.ldeviceExtY},h.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},h.prototype.transformX=function(a){var r=0,e=this.lworldExtX;return e!=0&&(r=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/e),r},h.prototype.transformY=function(a){var r=0,e=this.lworldExtY;return e!=0&&(r=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/e),r},h.prototype.inverseTransformX=function(a){var r=0,e=this.ldeviceExtX;return e!=0&&(r=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/e),r},h.prototype.inverseTransformY=function(a){var r=0,e=this.ldeviceExtY;return e!=0&&(r=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/e),r},h.prototype.inverseTransformPoint=function(a){var r=new u(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return r},A.exports=h}),(function(A,P,N){function u(t){if(Array.isArray(t)){for(var o=0,s=Array(t.length);oa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(t-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(t>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(t-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},i.prototype.calcSpringForces=function(){for(var t=this.getAllEdges(),o,s=0;s0&&arguments[0]!==void 0?arguments[0]:!0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s,c,l,T,d=this.getAllNodes(),v;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&t&&this.updateGrid(),v=new Set,s=0;sL||v>L)&&(t.gravitationForceX=-this.gravityConstant*l,t.gravitationForceY=-this.gravityConstant*T)):(L=o.getEstimatedSize()*this.compoundGravityRangeFactor,(d>L||v>L)&&(t.gravitationForceX=-this.gravityConstant*l*this.compoundGravityConstant,t.gravitationForceY=-this.gravityConstant*T*this.compoundGravityConstant))},i.prototype.isConverged=function(){var t,o=!1;return this.totalIterations>this.maxIterations/3&&(o=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),t=this.totalDisplacement=d.length||L>=d[0].length)){for(var S=0;Si}}]),e})();A.exports=r}),(function(A,P,N){function u(){}u.svd=function(h){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=h.length,this.n=h[0].length;var a=Math.min(this.m,this.n);this.s=(function(Tt){for(var Ct=[];Tt-- >0;)Ct.push(0);return Ct})(Math.min(this.m+1,this.n)),this.U=(function(Tt){var Ct=function $t(bt){if(bt.length==0)return 0;for(var zt=[],St=0;St0;)Ct.push(0);return Ct})(this.n),e=(function(Tt){for(var Ct=[];Tt-- >0;)Ct.push(0);return Ct})(this.m),f=!0,i=Math.min(this.m-1,this.n),g=Math.max(0,Math.min(this.n-2,this.m)),t=0;t=0;E--)if(this.s[E]!==0){for(var y=E+1;y=0;V--){if((function(Tt,Ct){return Tt&&Ct})(V0;){var q=void 0,It=void 0;for(q=n-2;q>=-1&&q!==-1;q--)if(Math.abs(r[q])<=ht+_*(Math.abs(this.s[q])+Math.abs(this.s[q+1]))){r[q]=0;break}if(q===n-2)It=4;else{var Nt=void 0;for(Nt=n-1;Nt>=q&&Nt!==q;Nt--){var vt=(Nt!==n?Math.abs(r[Nt]):0)+(Nt!==q+1?Math.abs(r[Nt-1]):0);if(Math.abs(this.s[Nt])<=ht+_*vt){this.s[Nt]=0;break}}Nt===q?It=3:Nt===n-1?It=1:(It=2,q=Nt)}switch(q++,It){case 1:{var it=r[n-2];r[n-2]=0;for(var gt=n-2;gt>=q;gt--){var mt=u.hypot(this.s[gt],it),At=this.s[gt]/mt,Ot=it/mt;this.s[gt]=mt,gt!==q&&(it=-Ot*r[gt-1],r[gt-1]=At*r[gt-1]);for(var Et=0;Et=this.s[q+1]);){var Lt=this.s[q];if(this.s[q]=this.s[q+1],this.s[q+1]=Lt,qMath.abs(a)?(r=a/h,r=Math.abs(h)*Math.sqrt(1+r*r)):a!=0?(r=h/a,r=Math.abs(a)*Math.sqrt(1+r*r)):r=0,r},A.exports=u}),(function(A,P,N){var u=(function(){function r(e,f){for(var i=0;i2&&arguments[2]!==void 0?arguments[2]:1,g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;h(this,r),this.sequence1=e,this.sequence2=f,this.match_score=i,this.mismatch_penalty=g,this.gap_penalty=t,this.iMax=e.length+1,this.jMax=f.length+1,this.grid=new Array(this.iMax);for(var o=0;o=0;e--){var f=this.listeners[e];f.event===a&&f.callback===r&&this.listeners.splice(e,1)}},h.emit=function(a,r){for(var e=0;e{var P={45:((a,r,e)=>{var f={};f.layoutBase=e(551),f.CoSEConstants=e(806),f.CoSEEdge=e(767),f.CoSEGraph=e(880),f.CoSEGraphManager=e(578),f.CoSELayout=e(765),f.CoSENode=e(991),f.ConstraintHandler=e(902),a.exports=f}),806:((a,r,e)=>{var f=e(551).FDLayoutConstants;function i(){}for(var g in f)i[g]=f[g];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=f.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,i.ENFORCE_CONSTRAINTS=!0,i.APPLY_LAYOUT=!0,i.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,i.TREE_REDUCTION_ON_INCREMENTAL=!0,i.PURE_INCREMENTAL=i.DEFAULT_INCREMENTAL,a.exports=i}),767:((a,r,e)=>{var f=e(551).FDLayoutEdge;function i(t,o,s){f.call(this,t,o,s)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),880:((a,r,e)=>{var f=e(551).LGraph;function i(t,o,s){f.call(this,t,o,s)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),578:((a,r,e)=>{var f=e(551).LGraphManager;function i(t){f.call(this,t)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),765:((a,r,e)=>{var f=e(551).FDLayout,i=e(578),g=e(880),t=e(991),o=e(767),s=e(806),c=e(902),l=e(551).FDLayoutConstants,T=e(551).LayoutConstants,d=e(551).Point,v=e(551).PointD,L=e(551).DimensionD,S=e(551).Layout,C=e(551).Integer,G=e(551).IGeometry,K=e(551).LGraph,X=e(551).Transform,Q=e(551).LinkedList;function O(){f.call(this),this.toBeTiled={},this.constraints={}}O.prototype=Object.create(f.prototype);for(var rt in f)O[rt]=f[rt];O.prototype.newGraphManager=function(){var n=new i(this);return this.graphManager=n,n},O.prototype.newGraph=function(n){return new g(null,this.graphManager,n)},O.prototype.newNode=function(n){return new t(this.graphManager,n)},O.prototype.newEdge=function(n){return new o(null,null,n)},O.prototype.initParameters=function(){f.prototype.initParameters.call(this,arguments),this.isSubLayout||(s.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=s.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=s.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=l.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=l.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=l.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},O.prototype.initSpringEmbedder=function(){f.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/l.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},O.prototype.layout=function(){var n=T.DEFAULT_CREATE_BENDS_AS_NEEDED;return n&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},O.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(s.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),p=this.nodesWithGravity.filter(function(R){return m.has(R)});this.graphManager.setAllNodesToApplyGravitation(p)}}else{var n=this.getFlatForest();if(n.length>0)this.positionNodesRadially(n);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),p=this.nodesWithGravity.filter(function(E){return m.has(E)});this.graphManager.setAllNodesToApplyGravitation(p),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(c.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),s.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},O.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%l.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),m=this.nodesWithGravity.filter(function(y){return n.has(y)});this.graphManager.setAllNodesToApplyGravitation(m),this.graphManager.updateBounds(),this.updateGrid(),s.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),s.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var p=!this.isTreeGrowing&&!this.isGrowthFinished,E=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(p,E),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},O.prototype.getPositionsData=function(){for(var n=this.graphManager.getAllNodes(),m={},p=0;p0&&this.updateDisplacements();for(var p=0;p0&&(E.fixedNodeWeight=R)}}if(this.constraints.relativePlacementConstraint){var M=new Map,F=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(w){n.fixedNodesOnHorizontal.add(w),n.fixedNodesOnVertical.add(w)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var W=this.constraints.alignmentConstraint.vertical,p=0;p=2*w.length/3;_--)H=Math.floor(Math.random()*(_+1)),$=w[_],w[_]=w[H],w[H]=$;return w},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(w){if(w.left){var H=M.has(w.left)?M.get(w.left):w.left,$=M.has(w.right)?M.get(w.right):w.right;n.nodesInRelativeHorizontal.includes(H)||(n.nodesInRelativeHorizontal.push(H),n.nodeToRelativeConstraintMapHorizontal.set(H,[]),n.dummyToNodeForVerticalAlignment.has(H)?n.nodeToTempPositionMapHorizontal.set(H,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set(H,n.idToNodeMap.get(H).getCenterX())),n.nodesInRelativeHorizontal.includes($)||(n.nodesInRelativeHorizontal.push($),n.nodeToRelativeConstraintMapHorizontal.set($,[]),n.dummyToNodeForVerticalAlignment.has($)?n.nodeToTempPositionMapHorizontal.set($,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get($)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set($,n.idToNodeMap.get($).getCenterX())),n.nodeToRelativeConstraintMapHorizontal.get(H).push({right:$,gap:w.gap}),n.nodeToRelativeConstraintMapHorizontal.get($).push({left:H,gap:w.gap})}else{var _=F.has(w.top)?F.get(w.top):w.top,ht=F.has(w.bottom)?F.get(w.bottom):w.bottom;n.nodesInRelativeVertical.includes(_)||(n.nodesInRelativeVertical.push(_),n.nodeToRelativeConstraintMapVertical.set(_,[]),n.dummyToNodeForHorizontalAlignment.has(_)?n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(_)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(_).getCenterY())),n.nodesInRelativeVertical.includes(ht)||(n.nodesInRelativeVertical.push(ht),n.nodeToRelativeConstraintMapVertical.set(ht,[]),n.dummyToNodeForHorizontalAlignment.has(ht)?n.nodeToTempPositionMapVertical.set(ht,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(ht)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(ht,n.idToNodeMap.get(ht).getCenterY())),n.nodeToRelativeConstraintMapVertical.get(_).push({bottom:ht,gap:w.gap}),n.nodeToRelativeConstraintMapVertical.get(ht).push({top:_,gap:w.gap})}});else{var Z=new Map,V=new Map;this.constraints.relativePlacementConstraint.forEach(function(w){if(w.left){var H=M.has(w.left)?M.get(w.left):w.left,$=M.has(w.right)?M.get(w.right):w.right;Z.has(H)?Z.get(H).push($):Z.set(H,[$]),Z.has($)?Z.get($).push(H):Z.set($,[H])}else{var _=F.has(w.top)?F.get(w.top):w.top,ht=F.has(w.bottom)?F.get(w.bottom):w.bottom;V.has(_)?V.get(_).push(ht):V.set(_,[ht]),V.has(ht)?V.get(ht).push(_):V.set(ht,[_])}});var Y=function(H,$){var _=[],ht=[],q=new Q,It=new Set,Nt=0;return H.forEach(function(vt,it){if(!It.has(it)){_[Nt]=[],ht[Nt]=!1;var gt=it;for(q.push(gt),It.add(gt),_[Nt].push(gt);q.length!=0;){gt=q.shift(),$.has(gt)&&(ht[Nt]=!0);var mt=H.get(gt);mt.forEach(function(At){It.has(At)||(q.push(At),It.add(At),_[Nt].push(At))})}Nt++}}),{components:_,isFixed:ht}},et=Y(Z,n.fixedNodesOnHorizontal);this.componentsOnHorizontal=et.components,this.fixedComponentsOnHorizontal=et.isFixed;var z=Y(V,n.fixedNodesOnVertical);this.componentsOnVertical=z.components,this.fixedComponentsOnVertical=z.isFixed}}},O.prototype.updateDisplacements=function(){var n=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(z){var w=n.idToNodeMap.get(z.nodeId);w.displacementX=0,w.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var m=this.constraints.alignmentConstraint.vertical,p=0;p1){var F;for(F=0;FE&&(E=Math.floor(M.y)),R=Math.floor(M.x+s.DEFAULT_COMPONENT_SEPERATION)}this.transform(new v(T.WORLD_CENTER_X-M.x/2,T.WORLD_CENTER_Y-M.y/2))},O.radialLayout=function(n,m,p){var E=Math.max(this.maxDiagonalInTree(n),s.DEFAULT_RADIAL_SEPARATION);O.branchRadialLayout(m,null,0,359,0,E);var y=K.calculateBounds(n),R=new X;R.setDeviceOrgX(y.getMinX()),R.setDeviceOrgY(y.getMinY()),R.setWorldOrgX(p.x),R.setWorldOrgY(p.y);for(var M=0;M1;){var $=H[0];H.splice(0,1);var _=V.indexOf($);_>=0&&V.splice(_,1),z--,Y--}m!=null?w=(V.indexOf(H[0])+1)%z:w=0;for(var ht=Math.abs(E-p)/Y,q=w;et!=Y;q=++q%z){var It=V[q].getOtherEnd(n);if(It!=m){var Nt=(p+et*ht)%360,vt=(Nt+ht)%360;O.branchRadialLayout(It,n,Nt,vt,y+R,R),et++}}},O.maxDiagonalInTree=function(n){for(var m=C.MIN_VALUE,p=0;pm&&(m=y)}return m},O.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},O.prototype.groupZeroDegreeMembers=function(){var n=this,m={};this.memberGroups={},this.idToDummyNode={};for(var p=[],E=this.graphManager.getAllNodes(),y=0;y"u"&&(m[F]=[]),m[F]=m[F].concat(R)}Object.keys(m).forEach(function(W){if(m[W].length>1){var x="DummyCompound_"+W;n.memberGroups[x]=m[W];var Z=m[W][0].getParent(),V=new t(n.graphManager);V.id=x,V.paddingLeft=Z.paddingLeft||0,V.paddingRight=Z.paddingRight||0,V.paddingBottom=Z.paddingBottom||0,V.paddingTop=Z.paddingTop||0,n.idToDummyNode[x]=V;var Y=n.getGraphManager().add(n.newGraph(),V),et=Z.getChild();et.add(V);for(var z=0;zy?(E.rect.x-=(E.labelWidth-y)/2,E.setWidth(E.labelWidth),E.labelMarginLeft=(E.labelWidth-y)/2):E.labelPosHorizontal=="right"&&E.setWidth(y+E.labelWidth)),E.labelHeight&&(E.labelPosVertical=="top"?(E.rect.y-=E.labelHeight,E.setHeight(R+E.labelHeight),E.labelMarginTop=E.labelHeight):E.labelPosVertical=="center"&&E.labelHeight>R?(E.rect.y-=(E.labelHeight-R)/2,E.setHeight(E.labelHeight),E.labelMarginTop=(E.labelHeight-R)/2):E.labelPosVertical=="bottom"&&E.setHeight(R+E.labelHeight))}})},O.prototype.repopulateCompounds=function(){for(var n=this.compoundOrder.length-1;n>=0;n--){var m=this.compoundOrder[n],p=m.id,E=m.paddingLeft,y=m.paddingTop,R=m.labelMarginLeft,M=m.labelMarginTop;this.adjustLocations(this.tiledMemberPack[p],m.rect.x,m.rect.y,E,y,R,M)}},O.prototype.repopulateZeroDegreeMembers=function(){var n=this,m=this.tiledZeroDegreePack;Object.keys(m).forEach(function(p){var E=n.idToDummyNode[p],y=E.paddingLeft,R=E.paddingTop,M=E.labelMarginLeft,F=E.labelMarginTop;n.adjustLocations(m[p],E.rect.x,E.rect.y,y,R,M,F)})},O.prototype.getToBeTiled=function(n){var m=n.id;if(this.toBeTiled[m]!=null)return this.toBeTiled[m];var p=n.getChild();if(p==null)return this.toBeTiled[m]=!1,!1;for(var E=p.getNodes(),y=0;y0)return this.toBeTiled[m]=!1,!1;if(R.getChild()==null){this.toBeTiled[R.id]=!1;continue}if(!this.getToBeTiled(R))return this.toBeTiled[m]=!1,!1}return this.toBeTiled[m]=!0,!0},O.prototype.getNodeDegree=function(n){n.id;for(var m=n.getEdges(),p=0,E=0;EZ&&(Z=Y.rect.height)}p+=Z+n.verticalPadding}},O.prototype.tileCompoundMembers=function(n,m){var p=this;this.tiledMemberPack=[],Object.keys(n).forEach(function(E){var y=m[E];if(p.tiledMemberPack[E]=p.tileNodes(n[E],y.paddingLeft+y.paddingRight),y.rect.width=p.tiledMemberPack[E].width,y.rect.height=p.tiledMemberPack[E].height,y.setCenter(p.tiledMemberPack[E].centerX,p.tiledMemberPack[E].centerY),y.labelMarginLeft=0,y.labelMarginTop=0,s.NODE_DIMENSIONS_INCLUDE_LABELS){var R=y.rect.width,M=y.rect.height;y.labelWidth&&(y.labelPosHorizontal=="left"?(y.rect.x-=y.labelWidth,y.setWidth(R+y.labelWidth),y.labelMarginLeft=y.labelWidth):y.labelPosHorizontal=="center"&&y.labelWidth>R?(y.rect.x-=(y.labelWidth-R)/2,y.setWidth(y.labelWidth),y.labelMarginLeft=(y.labelWidth-R)/2):y.labelPosHorizontal=="right"&&y.setWidth(R+y.labelWidth)),y.labelHeight&&(y.labelPosVertical=="top"?(y.rect.y-=y.labelHeight,y.setHeight(M+y.labelHeight),y.labelMarginTop=y.labelHeight):y.labelPosVertical=="center"&&y.labelHeight>M?(y.rect.y-=(y.labelHeight-M)/2,y.setHeight(y.labelHeight),y.labelMarginTop=(y.labelHeight-M)/2):y.labelPosVertical=="bottom"&&y.setHeight(M+y.labelHeight))}})},O.prototype.tileNodes=function(n,m){var p=this.tileNodesByFavoringDim(n,m,!0),E=this.tileNodesByFavoringDim(n,m,!1),y=this.getOrgRatio(p),R=this.getOrgRatio(E),M;return RF&&(F=z.getWidth())});var W=R/y,x=M/y,Z=Math.pow(p-E,2)+4*(W+E)*(x+p)*y,V=(E-p+Math.sqrt(Z))/(2*(W+E)),Y;m?(Y=Math.ceil(V),Y==V&&Y++):Y=Math.floor(V);var et=Y*(W+E)-E;return F>et&&(et=F),et+=E*2,et},O.prototype.tileNodesByFavoringDim=function(n,m,p){var E=s.TILING_PADDING_VERTICAL,y=s.TILING_PADDING_HORIZONTAL,R=s.TILING_COMPARE_BY,M={rows:[],rowWidth:[],rowHeight:[],width:0,height:m,verticalPadding:E,horizontalPadding:y,centerX:0,centerY:0};R&&(M.idealRowWidth=this.calcIdealRowWidth(n,p));var F=function(w){return w.rect.width*w.rect.height},W=function(w,H){return F(H)-F(w)};n.sort(function(z,w){var H=W;return M.idealRowWidth?(H=R,H(z.id,w.id)):H(z,w)});for(var x=0,Z=0,V=0;V0&&(M+=n.horizontalPadding),n.rowWidth[p]=M,n.width0&&(F+=n.verticalPadding);var W=0;F>n.rowHeight[p]&&(W=n.rowHeight[p],n.rowHeight[p]=F,W=n.rowHeight[p]-W),n.height+=W,n.rows[p].push(m)},O.prototype.getShortestRowIndex=function(n){for(var m=-1,p=Number.MAX_VALUE,E=0;Ep&&(m=E,p=n.rowWidth[E]);return m},O.prototype.canAddHorizontal=function(n,m,p){if(n.idealRowWidth){var E=n.rows.length-1,y=n.rowWidth[E];return y+m+n.horizontalPadding<=n.idealRowWidth}var R=this.getShortestRowIndex(n);if(R<0)return!0;var M=n.rowWidth[R];if(M+n.horizontalPadding+m<=n.width)return!0;var F=0;n.rowHeight[R]0&&(F=p+n.verticalPadding-n.rowHeight[R]);var W;n.width-M>=m+n.horizontalPadding?W=(n.height+F)/(M+m+n.horizontalPadding):W=(n.height+F)/n.width,F=p+n.verticalPadding;var x;return n.widthR&&m!=p){E.splice(-1,1),n.rows[p].push(y),n.rowWidth[m]=n.rowWidth[m]-R,n.rowWidth[p]=n.rowWidth[p]+R,n.width=n.rowWidth[instance.getLongestRowIndex(n)];for(var M=Number.MIN_VALUE,F=0;FM&&(M=E[F].height);m>0&&(M+=n.verticalPadding);var W=n.rowHeight[m]+n.rowHeight[p];n.rowHeight[m]=M,n.rowHeight[p]0)for(var et=y;et<=R;et++)Y[0]+=this.grid[et][M-1].length+this.grid[et][M].length-1;if(R0)for(var et=M;et<=F;et++)Y[3]+=this.grid[y-1][et].length+this.grid[y][et].length-1;for(var z=C.MAX_VALUE,w,H,$=0;${var f=e(551).FDLayoutNode,i=e(551).IMath;function g(o,s,c,l){f.call(this,o,s,c,l)}g.prototype=Object.create(f.prototype);for(var t in f)g[t]=f[t];g.prototype.calculateDisplacement=function(){var o=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=o.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=o.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=o.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=o.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>o.coolingFactor*o.maxNodeDisplacement&&(this.displacementX=o.coolingFactor*o.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>o.coolingFactor*o.maxNodeDisplacement&&(this.displacementY=o.coolingFactor*o.maxNodeDisplacement*i.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},g.prototype.propogateDisplacementToChildren=function(o,s){for(var c=this.getChild().getNodes(),l,T=0;T{function f(c){if(Array.isArray(c)){for(var l=0,T=Array(c.length);l0){var Lt=0;ot.forEach(function(st){B=="horizontal"?(tt.set(st,d.has(st)?v[d.get(st)]:k.get(st)),Lt+=tt.get(st)):(tt.set(st,d.has(st)?L[d.get(st)]:k.get(st)),Lt+=tt.get(st))}),Lt=Lt/ot.length,lt.forEach(function(st){J.has(st)||tt.set(st,Lt)})}else{var ft=0;lt.forEach(function(st){B=="horizontal"?ft+=d.has(st)?v[d.get(st)]:k.get(st):ft+=d.has(st)?L[d.get(st)]:k.get(st)}),ft=ft/lt.length,lt.forEach(function(st){tt.set(st,ft)})}});for(var Mt=function(){var ot=ut.shift(),Lt=U.get(ot);Lt.forEach(function(ft){if(tt.get(ft.id)st&&(st=kt),KtXt&&(Xt=Kt)}}catch(ee){Ct=!0,$t=ee}finally{try{!Tt&&bt.return&&bt.return()}finally{if(Ct)throw $t}}var ce=(Lt+st)/2-(ft+Xt)/2,Qt=!0,jt=!1,_t=void 0;try{for(var Jt=lt[Symbol.iterator](),oe;!(Qt=(oe=Jt.next()).done);Qt=!0){var te=oe.value;tt.set(te,tt.get(te)+ce)}}catch(ee){jt=!0,_t=ee}finally{try{!Qt&&Jt.return&&Jt.return()}finally{if(jt)throw _t}}})}return tt},rt=function(U){var B=0,J=0,k=0,at=0;if(U.forEach(function(j){j.left?v[d.get(j.left)]-v[d.get(j.right)]>=0?B++:J++:L[d.get(j.top)]-L[d.get(j.bottom)]>=0?k++:at++}),B>J&&k>at)for(var ct=0;ctJ)for(var nt=0;ntat)for(var tt=0;tt1)l.fixedNodeConstraint.forEach(function(b,U){E[U]=[b.position.x,b.position.y],y[U]=[v[d.get(b.nodeId)],L[d.get(b.nodeId)]]}),R=!0;else if(l.alignmentConstraint)(function(){var b=0;if(l.alignmentConstraint.vertical){for(var U=l.alignmentConstraint.vertical,B=function(tt){var j=new Set;U[tt].forEach(function(pt){j.add(pt)});var ut=new Set([].concat(f(j)).filter(function(pt){return F.has(pt)})),Mt=void 0;ut.size>0?Mt=v[d.get(ut.values().next().value)]:Mt=Q(j).x,U[tt].forEach(function(pt){E[b]=[Mt,L[d.get(pt)]],y[b]=[v[d.get(pt)],L[d.get(pt)]],b++})},J=0;J0?Mt=v[d.get(ut.values().next().value)]:Mt=Q(j).y,k[tt].forEach(function(pt){E[b]=[v[d.get(pt)],Mt],y[b]=[v[d.get(pt)],L[d.get(pt)]],b++})},ct=0;ctV&&(V=Z[et].length,Y=et);if(V0){var Et={x:0,y:0};l.fixedNodeConstraint.forEach(function(b,U){var B={x:v[d.get(b.nodeId)],y:L[d.get(b.nodeId)]},J=b.position,k=X(J,B);Et.x+=k.x,Et.y+=k.y}),Et.x/=l.fixedNodeConstraint.length,Et.y/=l.fixedNodeConstraint.length,v.forEach(function(b,U){v[U]+=Et.x}),L.forEach(function(b,U){L[U]+=Et.y}),l.fixedNodeConstraint.forEach(function(b){v[d.get(b.nodeId)]=b.position.x,L[d.get(b.nodeId)]=b.position.y})}if(l.alignmentConstraint){if(l.alignmentConstraint.vertical)for(var Dt=l.alignmentConstraint.vertical,Rt=function(U){var B=new Set;Dt[U].forEach(function(at){B.add(at)});var J=new Set([].concat(f(B)).filter(function(at){return F.has(at)})),k=void 0;J.size>0?k=v[d.get(J.values().next().value)]:k=Q(B).x,B.forEach(function(at){F.has(at)||(v[d.get(at)]=k)})},Ht=0;Ht0?k=L[d.get(J.values().next().value)]:k=Q(B).y,B.forEach(function(at){F.has(at)||(L[d.get(at)]=k)})},Ft=0;Ft{a.exports=A})},N={};function u(a){var r=N[a];if(r!==void 0)return r.exports;var e=N[a]={exports:{}};return P[a](e,e.exports,u),e.exports}var h=u(45);return h})()})})(le)),le.exports}var pr=he.exports,De;function yr(){return De||(De=1,(function(I,D){(function(P,N){I.exports=N(vr())})(pr,function(A){return(()=>{var P={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(r){for(var e=arguments.length,f=Array(e>1?e-1:0),i=1;i{var f=(function(){function t(o,s){var c=[],l=!0,T=!1,d=void 0;try{for(var v=o[Symbol.iterator](),L;!(l=(L=v.next()).done)&&(c.push(L.value),!(s&&c.length===s));l=!0);}catch(S){T=!0,d=S}finally{try{!l&&v.return&&v.return()}finally{if(T)throw d}}return c}return function(o,s){if(Array.isArray(o))return o;if(Symbol.iterator in Object(o))return t(o,s);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),i=e(140).layoutBase.LinkedList,g={};g.getTopMostNodes=function(t){for(var o={},s=0;s0&&R.merge(x)});for(var M=0;M1){L=d[0],S=L.connectedEdges().length,d.forEach(function(y){y.connectedEdges().length0&&c.set("dummy"+(c.size+1),K),X},g.relocateComponent=function(t,o,s){if(!s.fixedNodeConstraint){var c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,T=Number.POSITIVE_INFINITY,d=Number.NEGATIVE_INFINITY;if(s.quality=="draft"){var v=!0,L=!1,S=void 0;try{for(var C=o.nodeIndexes[Symbol.iterator](),G;!(v=(G=C.next()).done);v=!0){var K=G.value,X=f(K,2),Q=X[0],O=X[1],rt=s.cy.getElementById(Q);if(rt){var n=rt.boundingBox(),m=o.xCoords[O]-n.w/2,p=o.xCoords[O]+n.w/2,E=o.yCoords[O]-n.h/2,y=o.yCoords[O]+n.h/2;ml&&(l=p),Ed&&(d=y)}}}catch(x){L=!0,S=x}finally{try{!v&&C.return&&C.return()}finally{if(L)throw S}}var R=t.x-(l+c)/2,M=t.y-(d+T)/2;o.xCoords=o.xCoords.map(function(x){return x+R}),o.yCoords=o.yCoords.map(function(x){return x+M})}else{Object.keys(o).forEach(function(x){var Z=o[x],V=Z.getRect().x,Y=Z.getRect().x+Z.getRect().width,et=Z.getRect().y,z=Z.getRect().y+Z.getRect().height;Vl&&(l=Y),etd&&(d=z)});var F=t.x-(l+c)/2,W=t.y-(d+T)/2;Object.keys(o).forEach(function(x){var Z=o[x];Z.setCenter(Z.getCenterX()+F,Z.getCenterY()+W)})}}},g.calcBoundingBox=function(t,o,s,c){for(var l=Number.MAX_SAFE_INTEGER,T=Number.MIN_SAFE_INTEGER,d=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,L=void 0,S=void 0,C=void 0,G=void 0,K=t.descendants().not(":parent"),X=K.length,Q=0;QL&&(l=L),TC&&(d=C),v{var f=e(548),i=e(140).CoSELayout,g=e(140).CoSENode,t=e(140).layoutBase.PointD,o=e(140).layoutBase.DimensionD,s=e(140).layoutBase.LayoutConstants,c=e(140).layoutBase.FDLayoutConstants,l=e(140).CoSEConstants,T=function(v,L){var S=v.cy,C=v.eles,G=C.nodes(),K=C.edges(),X=void 0,Q=void 0,O=void 0,rt={};v.randomize&&(X=L.nodeIndexes,Q=L.xCoords,O=L.yCoords);var n=function(x){return typeof x=="function"},m=function(x,Z){return n(x)?x(Z):x},p=f.calcParentsWithoutChildren(S,C),E=function W(x,Z,V,Y){for(var et=Z.length,z=0;z0){var q=void 0;q=V.getGraphManager().add(V.newGraph(),$),W(q,H,V,Y)}}},y=function(x,Z,V){for(var Y=0,et=0,z=0;z0?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=Y/et:n(v.idealEdgeLength)?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=50:l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=v.idealEdgeLength,l.MIN_REPULSION_DIST=c.MIN_REPULSION_DIST=c.DEFAULT_EDGE_LENGTH/10,l.DEFAULT_RADIAL_SEPARATION=c.DEFAULT_EDGE_LENGTH)},R=function(x,Z){Z.fixedNodeConstraint&&(x.constraints.fixedNodeConstraint=Z.fixedNodeConstraint),Z.alignmentConstraint&&(x.constraints.alignmentConstraint=Z.alignmentConstraint),Z.relativePlacementConstraint&&(x.constraints.relativePlacementConstraint=Z.relativePlacementConstraint)};v.nestingFactor!=null&&(l.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=c.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=v.nestingFactor),v.gravity!=null&&(l.DEFAULT_GRAVITY_STRENGTH=c.DEFAULT_GRAVITY_STRENGTH=v.gravity),v.numIter!=null&&(l.MAX_ITERATIONS=c.MAX_ITERATIONS=v.numIter),v.gravityRange!=null&&(l.DEFAULT_GRAVITY_RANGE_FACTOR=c.DEFAULT_GRAVITY_RANGE_FACTOR=v.gravityRange),v.gravityCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_STRENGTH=c.DEFAULT_COMPOUND_GRAVITY_STRENGTH=v.gravityCompound),v.gravityRangeCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=c.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=v.gravityRangeCompound),v.initialEnergyOnIncremental!=null&&(l.DEFAULT_COOLING_FACTOR_INCREMENTAL=c.DEFAULT_COOLING_FACTOR_INCREMENTAL=v.initialEnergyOnIncremental),v.tilingCompareBy!=null&&(l.TILING_COMPARE_BY=v.tilingCompareBy),v.quality=="proof"?s.QUALITY=2:s.QUALITY=0,l.NODE_DIMENSIONS_INCLUDE_LABELS=c.NODE_DIMENSIONS_INCLUDE_LABELS=s.NODE_DIMENSIONS_INCLUDE_LABELS=v.nodeDimensionsIncludeLabels,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=s.DEFAULT_INCREMENTAL=!v.randomize,l.ANIMATE=c.ANIMATE=s.ANIMATE=v.animate,l.TILE=v.tile,l.TILING_PADDING_VERTICAL=typeof v.tilingPaddingVertical=="function"?v.tilingPaddingVertical.call():v.tilingPaddingVertical,l.TILING_PADDING_HORIZONTAL=typeof v.tilingPaddingHorizontal=="function"?v.tilingPaddingHorizontal.call():v.tilingPaddingHorizontal,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=s.DEFAULT_INCREMENTAL=!0,l.PURE_INCREMENTAL=!v.randomize,s.DEFAULT_UNIFORM_LEAF_NODE_SIZES=v.uniformNodeDimensions,v.step=="transformed"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!1),v.step=="enforced"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!1),v.step=="cose"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!0),v.step=="all"&&(v.randomize?l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!0),v.fixedNodeConstraint||v.alignmentConstraint||v.relativePlacementConstraint?l.TREE_REDUCTION_ON_INCREMENTAL=!1:l.TREE_REDUCTION_ON_INCREMENTAL=!0;var M=new i,F=M.newGraphManager();return E(F.addRoot(),f.getTopMostNodes(G),M,v),y(M,F,K),R(M,v),M.runLayout(),rt};a.exports={coseLayout:T}}),212:((a,r,e)=>{var f=(function(){function v(L,S){for(var C=0;C0)if(p){var R=t.getTopMostNodes(C.eles.nodes());if(O=t.connectComponents(G,C.eles,R),O.forEach(function(vt){var it=vt.boundingBox();rt.push({x:it.x1+it.w/2,y:it.y1+it.h/2})}),C.randomize&&O.forEach(function(vt){C.eles=vt,X.push(s(C))}),C.quality=="default"||C.quality=="proof"){var M=G.collection();if(C.tile){var F=new Map,W=[],x=[],Z=0,V={nodeIndexes:F,xCoords:W,yCoords:x},Y=[];if(O.forEach(function(vt,it){vt.edges().length==0&&(vt.nodes().forEach(function(gt,mt){M.merge(vt.nodes()[mt]),gt.isParent()||(V.nodeIndexes.set(vt.nodes()[mt].id(),Z++),V.xCoords.push(vt.nodes()[0].position().x),V.yCoords.push(vt.nodes()[0].position().y))}),Y.push(it))}),M.length>1){var et=M.boundingBox();rt.push({x:et.x1+et.w/2,y:et.y1+et.h/2}),O.push(M),X.push(V);for(var z=Y.length-1;z>=0;z--)O.splice(Y[z],1),X.splice(Y[z],1),rt.splice(Y[z],1)}}O.forEach(function(vt,it){C.eles=vt,Q.push(l(C,X[it])),t.relocateComponent(rt[it],Q[it],C)})}else O.forEach(function(vt,it){t.relocateComponent(rt[it],X[it],C)});var w=new Set;if(O.length>1){var H=[],$=K.filter(function(vt){return vt.css("display")=="none"});O.forEach(function(vt,it){var gt=void 0;if(C.quality=="draft"&&(gt=X[it].nodeIndexes),vt.nodes().not($).length>0){var mt={};mt.edges=[],mt.nodes=[];var At=void 0;vt.nodes().not($).forEach(function(Ot){if(C.quality=="draft")if(!Ot.isParent())At=gt.get(Ot.id()),mt.nodes.push({x:X[it].xCoords[At]-Ot.boundingbox().w/2,y:X[it].yCoords[At]-Ot.boundingbox().h/2,width:Ot.boundingbox().w,height:Ot.boundingbox().h});else{var Et=t.calcBoundingBox(Ot,X[it].xCoords,X[it].yCoords,gt);mt.nodes.push({x:Et.topLeftX,y:Et.topLeftY,width:Et.width,height:Et.height})}else Q[it][Ot.id()]&&mt.nodes.push({x:Q[it][Ot.id()].getLeft(),y:Q[it][Ot.id()].getTop(),width:Q[it][Ot.id()].getWidth(),height:Q[it][Ot.id()].getHeight()})}),vt.edges().forEach(function(Ot){var Et=Ot.source(),Dt=Ot.target();if(Et.css("display")!="none"&&Dt.css("display")!="none")if(C.quality=="draft"){var Rt=gt.get(Et.id()),Ht=gt.get(Dt.id()),Ut=[],Pt=[];if(Et.isParent()){var Ft=t.calcBoundingBox(Et,X[it].xCoords,X[it].yCoords,gt);Ut.push(Ft.topLeftX+Ft.width/2),Ut.push(Ft.topLeftY+Ft.height/2)}else Ut.push(X[it].xCoords[Rt]),Ut.push(X[it].yCoords[Rt]);if(Dt.isParent()){var Yt=t.calcBoundingBox(Dt,X[it].xCoords,X[it].yCoords,gt);Pt.push(Yt.topLeftX+Yt.width/2),Pt.push(Yt.topLeftY+Yt.height/2)}else Pt.push(X[it].xCoords[Ht]),Pt.push(X[it].yCoords[Ht]);mt.edges.push({startX:Ut[0],startY:Ut[1],endX:Pt[0],endY:Pt[1]})}else Q[it][Et.id()]&&Q[it][Dt.id()]&&mt.edges.push({startX:Q[it][Et.id()].getCenterX(),startY:Q[it][Et.id()].getCenterY(),endX:Q[it][Dt.id()].getCenterX(),endY:Q[it][Dt.id()].getCenterY()})}),mt.nodes.length>0&&(H.push(mt),w.add(it))}});var _=m.packComponents(H,C.randomize).shifts;if(C.quality=="draft")X.forEach(function(vt,it){var gt=vt.xCoords.map(function(At){return At+_[it].dx}),mt=vt.yCoords.map(function(At){return At+_[it].dy});vt.xCoords=gt,vt.yCoords=mt});else{var ht=0;w.forEach(function(vt){Object.keys(Q[vt]).forEach(function(it){var gt=Q[vt][it];gt.setCenter(gt.getCenterX()+_[ht].dx,gt.getCenterY()+_[ht].dy)}),ht++})}}}else{var E=C.eles.boundingBox();if(rt.push({x:E.x1+E.w/2,y:E.y1+E.h/2}),C.randomize){var y=s(C);X.push(y)}C.quality=="default"||C.quality=="proof"?(Q.push(l(C,X[0])),t.relocateComponent(rt[0],Q[0],C)):t.relocateComponent(rt[0],X[0],C)}var q=function(it,gt){if(C.quality=="default"||C.quality=="proof"){typeof it=="number"&&(it=gt);var mt=void 0,At=void 0,Ot=it.data("id");return Q.forEach(function(Dt){Ot in Dt&&(mt={x:Dt[Ot].getRect().getCenterX(),y:Dt[Ot].getRect().getCenterY()},At=Dt[Ot])}),C.nodeDimensionsIncludeLabels&&(At.labelWidth&&(At.labelPosHorizontal=="left"?mt.x+=At.labelWidth/2:At.labelPosHorizontal=="right"&&(mt.x-=At.labelWidth/2)),At.labelHeight&&(At.labelPosVertical=="top"?mt.y+=At.labelHeight/2:At.labelPosVertical=="bottom"&&(mt.y-=At.labelHeight/2))),mt==null&&(mt={x:it.position("x"),y:it.position("y")}),{x:mt.x,y:mt.y}}else{var Et=void 0;return X.forEach(function(Dt){var Rt=Dt.nodeIndexes.get(it.id());Rt!=null&&(Et={x:Dt.xCoords[Rt],y:Dt.yCoords[Rt]})}),Et==null&&(Et={x:it.position("x"),y:it.position("y")}),{x:Et.x,y:Et.y}}};if(C.quality=="default"||C.quality=="proof"||C.randomize){var It=t.calcParentsWithoutChildren(G,K),Nt=K.filter(function(vt){return vt.css("display")=="none"});C.eles=K.not(Nt),K.nodes().not(":parent").not(Nt).layoutPositions(S,C,q),It.length>0&&It.forEach(function(vt){vt.position(q(vt))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")}}]),v})();a.exports=d}),657:((a,r,e)=>{var f=e(548),i=e(140).layoutBase.Matrix,g=e(140).layoutBase.SVD,t=function(s){var c=s.cy,l=s.eles,T=l.nodes(),d=l.nodes(":parent"),v=new Map,L=new Map,S=new Map,C=[],G=[],K=[],X=[],Q=[],O=[],rt=[],n=[],m=void 0,p=1e8,E=1e-9,y=s.piTol,R=s.samplingType,M=s.nodeSeparation,F=void 0,W=function(){for(var U=0,B=0,J=!1;B=at;){nt=k[at++];for(var xt=C[nt],lt=0;ltut&&(ut=Q[Lt],Mt=Lt)}return Mt},Z=function(U){var B=void 0;if(U){B=Math.floor(Math.random()*m);for(var k=0;k=1)break;j=tt}for(var pt=0;pt=1)break;j=tt}for(var lt=0;lt0&&(B.isParent()?C[U].push(S.get(B.id())):C[U].push(B.id()))})});var Nt=function(U){var B=L.get(U),J=void 0;v.get(U).forEach(function(k){c.getElementById(k).isParent()?J=S.get(k):J=k,C[B].push(J),C[L.get(J)].push(U)})},vt=!0,it=!1,gt=void 0;try{for(var mt=v.keys()[Symbol.iterator](),At;!(vt=(At=mt.next()).done);vt=!0){var Ot=At.value;Nt(Ot)}}catch(b){it=!0,gt=b}finally{try{!vt&&mt.return&&mt.return()}finally{if(it)throw gt}}m=L.size;var Et=void 0;if(m>2){F=m{var f=e(212),i=function(t){t&&t("layout","fcose",f)};typeof cytoscape<"u"&&i(cytoscape),a.exports=i}),140:(a=>{a.exports=A})},N={};function u(a){var r=N[a];if(r!==void 0)return r.exports;var e=N[a]={exports:{}};return P[a](e,e.exports,u),e.exports}var h=u(579);return h})()})})(he)),he.exports}var Er=yr();const mr=ke(Er);var xe={L:"left",R:"right",T:"top",B:"bottom"},Ie={L:dt(I=>`${I},${I/2} 0,${I} 0,0`,"L"),R:dt(I=>`0,${I/2} ${I},0 ${I},${I}`,"R"),T:dt(I=>`0,0 ${I},0 ${I/2},${I}`,"T"),B:dt(I=>`${I/2},0 ${I},${I} 0,${I}`,"B")},se={L:dt((I,D)=>I-D+2,"L"),R:dt((I,D)=>I-2,"R"),T:dt((I,D)=>I-D+2,"T"),B:dt((I,D)=>I-2,"B")},Tr=dt(function(I){return Wt(I)?I==="L"?"R":"L":I==="T"?"B":"T"},"getOppositeArchitectureDirection"),Re=dt(function(I){const D=I;return D==="L"||D==="R"||D==="T"||D==="B"},"isArchitectureDirection"),Wt=dt(function(I){const D=I;return D==="L"||D==="R"},"isArchitectureDirectionX"),qt=dt(function(I){const D=I;return D==="T"||D==="B"},"isArchitectureDirectionY"),Te=dt(function(I,D){const A=Wt(I)&&qt(D),P=qt(I)&&Wt(D);return A||P},"isArchitectureDirectionXY"),Nr=dt(function(I){const D=I[0],A=I[1],P=Wt(D)&&qt(A),N=qt(D)&&Wt(A);return P||N},"isArchitecturePairXY"),Lr=dt(function(I){return I!=="LL"&&I!=="RR"&&I!=="TT"&&I!=="BB"},"isValidArchitectureDirectionPair"),ye=dt(function(I,D){const A=`${I}${D}`;return Lr(A)?A:void 0},"getArchitectureDirectionPair"),Cr=dt(function([I,D],A){const P=A[0],N=A[1];return Wt(P)?qt(N)?[I+(P==="L"?-1:1),D+(N==="T"?1:-1)]:[I+(P==="L"?-1:1),D]:Wt(N)?[I+(N==="L"?1:-1),D+(P==="T"?1:-1)]:[I,D+(P==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ar=dt(function(I){return I==="LT"||I==="TL"?[1,1]:I==="BL"||I==="LB"?[1,-1]:I==="BR"||I==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),Mr=dt(function(I,D){return Te(I,D)?"bend":Wt(I)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),wr=dt(function(I){return I.type==="service"},"isArchitectureService"),Or=dt(function(I){return I.type==="junction"},"isArchitectureJunction"),be=dt(I=>I.data(),"edgeData"),ie=dt(I=>I.data(),"nodeData"),Dr=ar.architecture,ae,Pe=(ae=class{constructor(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.elements={},this.setAccTitle=Qe,this.getAccTitle=Je,this.setDiagramTitle=Ke,this.getDiagramTitle=je,this.getAccDescription=_e,this.setAccDescription=tr,this.clear()}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},er()}addService({id:D,icon:A,in:P,title:N,iconText:u}){if(this.registeredIds[D]!==void 0)throw new Error(`The service id [${D}] is already in use by another ${this.registeredIds[D]}`);if(P!==void 0){if(D===P)throw new Error(`The service [${D}] cannot be placed within itself`);if(this.registeredIds[P]===void 0)throw new Error(`The service [${D}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[P]==="node")throw new Error(`The service [${D}]'s parent is not a group`)}this.registeredIds[D]="node",this.nodes[D]={id:D,type:"service",icon:A,iconText:u,title:N,edges:[],in:P}}getServices(){return Object.values(this.nodes).filter(wr)}addJunction({id:D,in:A}){this.registeredIds[D]="node",this.nodes[D]={id:D,type:"junction",edges:[],in:A}}getJunctions(){return Object.values(this.nodes).filter(Or)}getNodes(){return Object.values(this.nodes)}getNode(D){return this.nodes[D]??null}addGroup({id:D,icon:A,in:P,title:N}){var u,h,a;if(((u=this.registeredIds)==null?void 0:u[D])!==void 0)throw new Error(`The group id [${D}] is already in use by another ${this.registeredIds[D]}`);if(P!==void 0){if(D===P)throw new Error(`The group [${D}] cannot be placed within itself`);if(((h=this.registeredIds)==null?void 0:h[P])===void 0)throw new Error(`The group [${D}]'s parent does not exist. Please make sure the parent is created before this group`);if(((a=this.registeredIds)==null?void 0:a[P])==="node")throw new Error(`The group [${D}]'s parent is not a group`)}this.registeredIds[D]="group",this.groups[D]={id:D,icon:A,title:N,in:P}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:D,rhsId:A,lhsDir:P,rhsDir:N,lhsInto:u,rhsInto:h,lhsGroup:a,rhsGroup:r,title:e}){if(!Re(P))throw new Error(`Invalid direction given for left hand side of edge ${D}--${A}. Expected (L,R,T,B) got ${String(P)}`);if(!Re(N))throw new Error(`Invalid direction given for right hand side of edge ${D}--${A}. Expected (L,R,T,B) got ${String(N)}`);if(this.nodes[D]===void 0&&this.groups[D]===void 0)throw new Error(`The left-hand id [${D}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[A]===void 0&&this.groups[A]===void 0)throw new Error(`The right-hand id [${A}] does not yet exist. Please create the service/group before declaring an edge to it.`);const f=this.nodes[D].in,i=this.nodes[A].in;if(a&&f&&i&&f==i)throw new Error(`The left-hand id [${D}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(r&&f&&i&&f==i)throw new Error(`The right-hand id [${A}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);const g={lhsId:D,lhsDir:P,lhsInto:u,lhsGroup:a,rhsId:A,rhsDir:N,rhsInto:h,rhsGroup:r,title:e};this.edges.push(g),this.nodes[D]&&this.nodes[A]&&(this.nodes[D].edges.push(this.edges[this.edges.length-1]),this.nodes[A].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){const D={},A=Object.entries(this.nodes).reduce((r,[e,f])=>(r[e]=f.edges.reduce((i,g)=>{var s,c;const t=(s=this.getNode(g.lhsId))==null?void 0:s.in,o=(c=this.getNode(g.rhsId))==null?void 0:c.in;if(t&&o&&t!==o){const l=Mr(g.lhsDir,g.rhsDir);l!=="bend"&&(D[t]??(D[t]={}),D[t][o]=l,D[o]??(D[o]={}),D[o][t]=l)}if(g.lhsId===e){const l=ye(g.lhsDir,g.rhsDir);l&&(i[l]=g.rhsId)}else{const l=ye(g.rhsDir,g.lhsDir);l&&(i[l]=g.lhsId)}return i},{}),r),{}),P=Object.keys(A)[0],N={[P]:1},u=Object.keys(A).reduce((r,e)=>e===P?r:{...r,[e]:1},{}),h=dt(r=>{const e={[r]:[0,0]},f=[r];for(;f.length>0;){const i=f.shift();if(i){N[i]=1,delete u[i];const g=A[i],[t,o]=e[i];Object.entries(g).forEach(([s,c])=>{N[c]||(e[c]=Cr([t,o],s),f.push(c))})}}return e},"BFS"),a=[h(P)];for(;Object.keys(u).length>0;)a.push(h(Object.keys(u)[0]));this.dataStructures={adjList:A,spatialMaps:a,groupAlignments:D}}return this.dataStructures}setElementForId(D,A){this.elements[D]=A}getElementById(D){return this.elements[D]}getConfig(){return rr({...Dr,...ir().architecture})}getConfigField(D){return this.getConfig()[D]}},dt(ae,"ArchitectureDB"),ae),xr=dt((I,D)=>{fr(I,D),I.groups.map(A=>D.addGroup(A)),I.services.map(A=>D.addService({...A,type:"service"})),I.junctions.map(A=>D.addJunction({...A,type:"junction"})),I.edges.map(A=>D.addEdge(A))},"populateDb"),Ge={parser:{yy:void 0},parse:dt(async I=>{var P;const D=await cr("architecture",I);Se.debug(D);const A=(P=Ge.parser)==null?void 0:P.yy;if(!(A instanceof Pe))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");xr(D,A)},"parse")},Ir=dt(I=>` +import{aK as ke,_ as dt,H as Ze,V as qe,l as Se,b as Qe,a as Je,p as Ke,q as je,g as _e,s as tr,y as er,D as rr,E as ir,F as ar,c as Ee,ak as me,aU as pe,i as nr,d as or,x as sr,aV as hr,aW as lr}from"./index-DbSnkTMx.js";import{p as fr}from"./chunk-4BX2VUAB-PBVZf6Qi.js";import{p as cr}from"./treemap-KMMF4GRG-DVJsp5UK.js";import{c as Fe}from"./cytoscape.esm-BQaXIfA_.js";import"./min-jMRXb9Wh.js";import"./_baseUniq-CR-Qd8A8.js";var he={exports:{}},le={exports:{}},fe={exports:{}},gr=fe.exports,we;function ur(){return we||(we=1,(function(I,D){(function(P,N){I.exports=N()})(gr,function(){return(function(A){var P={};function N(u){if(P[u])return P[u].exports;var h=P[u]={i:u,l:!1,exports:{}};return A[u].call(h.exports,h,h.exports,N),h.l=!0,h.exports}return N.m=A,N.c=P,N.i=function(u){return u},N.d=function(u,h,a){N.o(u,h)||Object.defineProperty(u,h,{configurable:!1,enumerable:!0,get:a})},N.n=function(u){var h=u&&u.__esModule?function(){return u.default}:function(){return u};return N.d(h,"a",h),h},N.o=function(u,h){return Object.prototype.hasOwnProperty.call(u,h)},N.p="",N(N.s=28)})([(function(A,P,N){function u(){}u.QUALITY=1,u.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,u.DEFAULT_INCREMENTAL=!1,u.DEFAULT_ANIMATION_ON_LAYOUT=!0,u.DEFAULT_ANIMATION_DURING_LAYOUT=!1,u.DEFAULT_ANIMATION_PERIOD=50,u.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,u.DEFAULT_GRAPH_MARGIN=15,u.NODE_DIMENSIONS_INCLUDE_LABELS=!1,u.SIMPLE_NODE_SIZE=40,u.SIMPLE_NODE_HALF_SIZE=u.SIMPLE_NODE_SIZE/2,u.EMPTY_COMPOUND_NODE_SIZE=40,u.MIN_EDGE_LENGTH=1,u.WORLD_BOUNDARY=1e6,u.INITIAL_WORLD_BOUNDARY=u.WORLD_BOUNDARY/1e3,u.WORLD_CENTER_X=1200,u.WORLD_CENTER_Y=900,A.exports=u}),(function(A,P,N){var u=N(2),h=N(8),a=N(9);function r(f,i,g){u.call(this,g),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=g,this.bendpoints=[],this.source=f,this.target=i}r.prototype=Object.create(u.prototype);for(var e in u)r[e]=u[e];r.prototype.getSource=function(){return this.source},r.prototype.getTarget=function(){return this.target},r.prototype.isInterGraph=function(){return this.isInterGraph},r.prototype.getLength=function(){return this.length},r.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},r.prototype.getBendpoints=function(){return this.bendpoints},r.prototype.getLca=function(){return this.lca},r.prototype.getSourceInLca=function(){return this.sourceInLca},r.prototype.getTargetInLca=function(){return this.targetInLca},r.prototype.getOtherEnd=function(f){if(this.source===f)return this.target;if(this.target===f)return this.source;throw"Node is not incident with this edge"},r.prototype.getOtherEndInGraph=function(f,i){for(var g=this.getOtherEnd(f),t=i.getGraphManager().getRoot();;){if(g.getOwner()==i)return g;if(g.getOwner()==t)break;g=g.getOwner().getParent()}return null},r.prototype.updateLength=function(){var f=new Array(4);this.isOverlapingSourceAndTarget=h.getIntersection(this.target.getRect(),this.source.getRect(),f),this.isOverlapingSourceAndTarget||(this.lengthX=f[0]-f[2],this.lengthY=f[1]-f[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},r.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},A.exports=r}),(function(A,P,N){function u(h){this.vGraphObject=h}A.exports=u}),(function(A,P,N){var u=N(2),h=N(10),a=N(13),r=N(0),e=N(16),f=N(5);function i(t,o,s,c){s==null&&c==null&&(c=o),u.call(this,c),t.graphManager!=null&&(t=t.graphManager),this.estimatedSize=h.MIN_VALUE,this.inclusionTreeDepth=h.MAX_VALUE,this.vGraphObject=c,this.edges=[],this.graphManager=t,s!=null&&o!=null?this.rect=new a(o.x,o.y,s.width,s.height):this.rect=new a}i.prototype=Object.create(u.prototype);for(var g in u)i[g]=u[g];i.prototype.getEdges=function(){return this.edges},i.prototype.getChild=function(){return this.child},i.prototype.getOwner=function(){return this.owner},i.prototype.getWidth=function(){return this.rect.width},i.prototype.setWidth=function(t){this.rect.width=t},i.prototype.getHeight=function(){return this.rect.height},i.prototype.setHeight=function(t){this.rect.height=t},i.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},i.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},i.prototype.getCenter=function(){return new f(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},i.prototype.getLocation=function(){return new f(this.rect.x,this.rect.y)},i.prototype.getRect=function(){return this.rect},i.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},i.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},i.prototype.setRect=function(t,o){this.rect.x=t.x,this.rect.y=t.y,this.rect.width=o.width,this.rect.height=o.height},i.prototype.setCenter=function(t,o){this.rect.x=t-this.rect.width/2,this.rect.y=o-this.rect.height/2},i.prototype.setLocation=function(t,o){this.rect.x=t,this.rect.y=o},i.prototype.moveBy=function(t,o){this.rect.x+=t,this.rect.y+=o},i.prototype.getEdgeListToNode=function(t){var o=[],s=this;return s.edges.forEach(function(c){if(c.target==t){if(c.source!=s)throw"Incorrect edge source!";o.push(c)}}),o},i.prototype.getEdgesBetween=function(t){var o=[],s=this;return s.edges.forEach(function(c){if(!(c.source==s||c.target==s))throw"Incorrect edge source and/or target";(c.target==t||c.source==t)&&o.push(c)}),o},i.prototype.getNeighborsList=function(){var t=new Set,o=this;return o.edges.forEach(function(s){if(s.source==o)t.add(s.target);else{if(s.target!=o)throw"Incorrect incidency!";t.add(s.source)}}),t},i.prototype.withChildren=function(){var t=new Set,o,s;if(t.add(this),this.child!=null)for(var c=this.child.getNodes(),l=0;lo?(this.rect.x-=(this.labelWidth-o)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(o+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(s+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>s?(this.rect.y-=(this.labelHeight-s)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(s+this.labelHeight))}}},i.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==h.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},i.prototype.transform=function(t){var o=this.rect.x;o>r.WORLD_BOUNDARY?o=r.WORLD_BOUNDARY:o<-r.WORLD_BOUNDARY&&(o=-r.WORLD_BOUNDARY);var s=this.rect.y;s>r.WORLD_BOUNDARY?s=r.WORLD_BOUNDARY:s<-r.WORLD_BOUNDARY&&(s=-r.WORLD_BOUNDARY);var c=new f(o,s),l=t.inverseTransformPoint(c);this.setLocation(l.x,l.y)},i.prototype.getLeft=function(){return this.rect.x},i.prototype.getRight=function(){return this.rect.x+this.rect.width},i.prototype.getTop=function(){return this.rect.y},i.prototype.getBottom=function(){return this.rect.y+this.rect.height},i.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},A.exports=i}),(function(A,P,N){var u=N(0);function h(){}for(var a in u)h[a]=u[a];h.MAX_ITERATIONS=2500,h.DEFAULT_EDGE_LENGTH=50,h.DEFAULT_SPRING_STRENGTH=.45,h.DEFAULT_REPULSION_STRENGTH=4500,h.DEFAULT_GRAVITY_STRENGTH=.4,h.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,h.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,h.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,h.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,h.COOLING_ADAPTATION_FACTOR=.33,h.ADAPTATION_LOWER_NODE_LIMIT=1e3,h.ADAPTATION_UPPER_NODE_LIMIT=5e3,h.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,h.MAX_NODE_DISPLACEMENT=h.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,h.MIN_REPULSION_DIST=h.DEFAULT_EDGE_LENGTH/10,h.CONVERGENCE_CHECK_PERIOD=100,h.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,h.MIN_EDGE_LENGTH=1,h.GRID_CALCULATION_CHECK_PERIOD=10,A.exports=h}),(function(A,P,N){function u(h,a){h==null&&a==null?(this.x=0,this.y=0):(this.x=h,this.y=a)}u.prototype.getX=function(){return this.x},u.prototype.getY=function(){return this.y},u.prototype.setX=function(h){this.x=h},u.prototype.setY=function(h){this.y=h},u.prototype.getDifference=function(h){return new DimensionD(this.x-h.x,this.y-h.y)},u.prototype.getCopy=function(){return new u(this.x,this.y)},u.prototype.translate=function(h){return this.x+=h.width,this.y+=h.height,this},A.exports=u}),(function(A,P,N){var u=N(2),h=N(10),a=N(0),r=N(7),e=N(3),f=N(1),i=N(13),g=N(12),t=N(11);function o(c,l,T){u.call(this,T),this.estimatedSize=h.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=c,l!=null&&l instanceof r?this.graphManager=l:l!=null&&l instanceof Layout&&(this.graphManager=l.graphManager)}o.prototype=Object.create(u.prototype);for(var s in u)o[s]=u[s];o.prototype.getNodes=function(){return this.nodes},o.prototype.getEdges=function(){return this.edges},o.prototype.getGraphManager=function(){return this.graphManager},o.prototype.getParent=function(){return this.parent},o.prototype.getLeft=function(){return this.left},o.prototype.getRight=function(){return this.right},o.prototype.getTop=function(){return this.top},o.prototype.getBottom=function(){return this.bottom},o.prototype.isConnected=function(){return this.isConnected},o.prototype.add=function(c,l,T){if(l==null&&T==null){var d=c;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(d)>-1)throw"Node already in graph!";return d.owner=this,this.getNodes().push(d),d}else{var v=c;if(!(this.getNodes().indexOf(l)>-1&&this.getNodes().indexOf(T)>-1))throw"Source or target not in graph!";if(!(l.owner==T.owner&&l.owner==this))throw"Both owners must be this graph!";return l.owner!=T.owner?null:(v.source=l,v.target=T,v.isInterGraph=!1,this.getEdges().push(v),l.edges.push(v),T!=l&&T.edges.push(v),v)}},o.prototype.remove=function(c){var l=c;if(c instanceof e){if(l==null)throw"Node is null!";if(!(l.owner!=null&&l.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var T=l.edges.slice(),d,v=T.length,L=0;L-1&&G>-1))throw"Source and/or target doesn't know this edge!";d.source.edges.splice(C,1),d.target!=d.source&&d.target.edges.splice(G,1);var S=d.source.owner.getEdges().indexOf(d);if(S==-1)throw"Not in owner's edge list!";d.source.owner.getEdges().splice(S,1)}},o.prototype.updateLeftTop=function(){for(var c=h.MAX_VALUE,l=h.MAX_VALUE,T,d,v,L=this.getNodes(),S=L.length,C=0;CT&&(c=T),l>d&&(l=d)}return c==h.MAX_VALUE?null:(L[0].getParent().paddingLeft!=null?v=L[0].getParent().paddingLeft:v=this.margin,this.left=l-v,this.top=c-v,new g(this.left,this.top))},o.prototype.updateBounds=function(c){for(var l=h.MAX_VALUE,T=-h.MAX_VALUE,d=h.MAX_VALUE,v=-h.MAX_VALUE,L,S,C,G,K,X=this.nodes,Q=X.length,O=0;OL&&(l=L),TC&&(d=C),vL&&(l=L),TC&&(d=C),v=this.nodes.length){var Q=0;T.forEach(function(O){O.owner==c&&Q++}),Q==this.nodes.length&&(this.isConnected=!0)}},A.exports=o}),(function(A,P,N){var u,h=N(1);function a(r){u=N(6),this.layout=r,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var r=this.layout.newGraph(),e=this.layout.newNode(null),f=this.add(r,e);return this.setRootGraph(f),this.rootGraph},a.prototype.add=function(r,e,f,i,g){if(f==null&&i==null&&g==null){if(r==null)throw"Graph is null!";if(e==null)throw"Parent node is null!";if(this.graphs.indexOf(r)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(r),r.parent!=null)throw"Already has a parent!";if(e.child!=null)throw"Already has a child!";return r.parent=e,e.child=r,r}else{g=f,i=e,f=r;var t=i.getOwner(),o=g.getOwner();if(!(t!=null&&t.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(o!=null&&o.getGraphManager()==this))throw"Target not in this graph mgr!";if(t==o)return f.isInterGraph=!1,t.add(f,i,g);if(f.isInterGraph=!0,f.source=i,f.target=g,this.edges.indexOf(f)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(f),!(f.source!=null&&f.target!=null))throw"Edge source and/or target is null!";if(!(f.source.edges.indexOf(f)==-1&&f.target.edges.indexOf(f)==-1))throw"Edge already in source and/or target incidency list!";return f.source.edges.push(f),f.target.edges.push(f),f}},a.prototype.remove=function(r){if(r instanceof u){var e=r;if(e.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(e==this.rootGraph||e.parent!=null&&e.parent.graphManager==this))throw"Invalid parent node!";var f=[];f=f.concat(e.getEdges());for(var i,g=f.length,t=0;t=r.getRight()?e[0]+=Math.min(r.getX()-a.getX(),a.getRight()-r.getRight()):r.getX()<=a.getX()&&r.getRight()>=a.getRight()&&(e[0]+=Math.min(a.getX()-r.getX(),r.getRight()-a.getRight())),a.getY()<=r.getY()&&a.getBottom()>=r.getBottom()?e[1]+=Math.min(r.getY()-a.getY(),a.getBottom()-r.getBottom()):r.getY()<=a.getY()&&r.getBottom()>=a.getBottom()&&(e[1]+=Math.min(a.getY()-r.getY(),r.getBottom()-a.getBottom()));var g=Math.abs((r.getCenterY()-a.getCenterY())/(r.getCenterX()-a.getCenterX()));r.getCenterY()===a.getCenterY()&&r.getCenterX()===a.getCenterX()&&(g=1);var t=g*e[0],o=e[1]/g;e[0]t)return e[0]=f,e[1]=s,e[2]=g,e[3]=X,!1;if(ig)return e[0]=o,e[1]=i,e[2]=G,e[3]=t,!1;if(fg?(e[0]=l,e[1]=T,n=!0):(e[0]=c,e[1]=s,n=!0):p===y&&(f>g?(e[0]=o,e[1]=s,n=!0):(e[0]=d,e[1]=T,n=!0)),-E===y?g>f?(e[2]=K,e[3]=X,m=!0):(e[2]=G,e[3]=C,m=!0):E===y&&(g>f?(e[2]=S,e[3]=C,m=!0):(e[2]=Q,e[3]=X,m=!0)),n&&m)return!1;if(f>g?i>t?(R=this.getCardinalDirection(p,y,4),M=this.getCardinalDirection(E,y,2)):(R=this.getCardinalDirection(-p,y,3),M=this.getCardinalDirection(-E,y,1)):i>t?(R=this.getCardinalDirection(-p,y,1),M=this.getCardinalDirection(-E,y,3)):(R=this.getCardinalDirection(p,y,2),M=this.getCardinalDirection(E,y,4)),!n)switch(R){case 1:W=s,F=f+-L/y,e[0]=F,e[1]=W;break;case 2:F=d,W=i+v*y,e[0]=F,e[1]=W;break;case 3:W=T,F=f+L/y,e[0]=F,e[1]=W;break;case 4:F=l,W=i+-v*y,e[0]=F,e[1]=W;break}if(!m)switch(M){case 1:Z=C,x=g+-rt/y,e[2]=x,e[3]=Z;break;case 2:x=Q,Z=t+O*y,e[2]=x,e[3]=Z;break;case 3:Z=X,x=g+rt/y,e[2]=x,e[3]=Z;break;case 4:x=K,Z=t+-O*y,e[2]=x,e[3]=Z;break}}return!1},h.getCardinalDirection=function(a,r,e){return a>r?e:1+e%4},h.getIntersection=function(a,r,e,f){if(f==null)return this.getIntersection2(a,r,e);var i=a.x,g=a.y,t=r.x,o=r.y,s=e.x,c=e.y,l=f.x,T=f.y,d=void 0,v=void 0,L=void 0,S=void 0,C=void 0,G=void 0,K=void 0,X=void 0,Q=void 0;return L=o-g,C=i-t,K=t*g-i*o,S=T-c,G=s-l,X=l*c-s*T,Q=L*G-S*C,Q===0?null:(d=(C*X-G*K)/Q,v=(S*K-L*X)/Q,new u(d,v))},h.angleOfVector=function(a,r,e,f){var i=void 0;return a!==e?(i=Math.atan((f-r)/(e-a)),e=0){var T=(-s+Math.sqrt(s*s-4*o*c))/(2*o),d=(-s-Math.sqrt(s*s-4*o*c))/(2*o),v=null;return T>=0&&T<=1?[T]:d>=0&&d<=1?[d]:v}else return null},h.HALF_PI=.5*Math.PI,h.ONE_AND_HALF_PI=1.5*Math.PI,h.TWO_PI=2*Math.PI,h.THREE_PI=3*Math.PI,A.exports=h}),(function(A,P,N){function u(){}u.sign=function(h){return h>0?1:h<0?-1:0},u.floor=function(h){return h<0?Math.ceil(h):Math.floor(h)},u.ceil=function(h){return h<0?Math.floor(h):Math.ceil(h)},A.exports=u}),(function(A,P,N){function u(){}u.MAX_VALUE=2147483647,u.MIN_VALUE=-2147483648,A.exports=u}),(function(A,P,N){var u=(function(){function i(g,t){for(var o=0;o"u"?"undefined":u(a);return a==null||r!="object"&&r!="function"},A.exports=h}),(function(A,P,N){function u(s){if(Array.isArray(s)){for(var c=0,l=Array(s.length);c0&&c;){for(L.push(C[0]);L.length>0&&c;){var G=L[0];L.splice(0,1),v.add(G);for(var K=G.getEdges(),d=0;d-1&&C.splice(rt,1)}v=new Set,S=new Map}}return s},o.prototype.createDummyNodesForBendpoints=function(s){for(var c=[],l=s.source,T=this.graphManager.calcLowestCommonAncestor(s.source,s.target),d=0;d0){for(var T=this.edgeToDummyNodes.get(l),d=0;d=0&&c.splice(X,1);var Q=S.getNeighborsList();Q.forEach(function(n){if(l.indexOf(n)<0){var m=T.get(n),p=m-1;p==1&&G.push(n),T.set(n,p)}})}l=l.concat(G),(c.length==1||c.length==2)&&(d=!0,v=c[0])}return v},o.prototype.setGraphManager=function(s){this.graphManager=s},A.exports=o}),(function(A,P,N){function u(){}u.seed=1,u.x=0,u.nextDouble=function(){return u.x=Math.sin(u.seed++)*1e4,u.x-Math.floor(u.x)},A.exports=u}),(function(A,P,N){var u=N(5);function h(a,r){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}h.prototype.getWorldOrgX=function(){return this.lworldOrgX},h.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},h.prototype.getWorldOrgY=function(){return this.lworldOrgY},h.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},h.prototype.getWorldExtX=function(){return this.lworldExtX},h.prototype.setWorldExtX=function(a){this.lworldExtX=a},h.prototype.getWorldExtY=function(){return this.lworldExtY},h.prototype.setWorldExtY=function(a){this.lworldExtY=a},h.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},h.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},h.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},h.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},h.prototype.getDeviceExtX=function(){return this.ldeviceExtX},h.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},h.prototype.getDeviceExtY=function(){return this.ldeviceExtY},h.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},h.prototype.transformX=function(a){var r=0,e=this.lworldExtX;return e!=0&&(r=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/e),r},h.prototype.transformY=function(a){var r=0,e=this.lworldExtY;return e!=0&&(r=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/e),r},h.prototype.inverseTransformX=function(a){var r=0,e=this.ldeviceExtX;return e!=0&&(r=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/e),r},h.prototype.inverseTransformY=function(a){var r=0,e=this.ldeviceExtY;return e!=0&&(r=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/e),r},h.prototype.inverseTransformPoint=function(a){var r=new u(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return r},A.exports=h}),(function(A,P,N){function u(t){if(Array.isArray(t)){for(var o=0,s=Array(t.length);oa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(t-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(t>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(t-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},i.prototype.calcSpringForces=function(){for(var t=this.getAllEdges(),o,s=0;s0&&arguments[0]!==void 0?arguments[0]:!0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s,c,l,T,d=this.getAllNodes(),v;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&t&&this.updateGrid(),v=new Set,s=0;sL||v>L)&&(t.gravitationForceX=-this.gravityConstant*l,t.gravitationForceY=-this.gravityConstant*T)):(L=o.getEstimatedSize()*this.compoundGravityRangeFactor,(d>L||v>L)&&(t.gravitationForceX=-this.gravityConstant*l*this.compoundGravityConstant,t.gravitationForceY=-this.gravityConstant*T*this.compoundGravityConstant))},i.prototype.isConverged=function(){var t,o=!1;return this.totalIterations>this.maxIterations/3&&(o=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),t=this.totalDisplacement=d.length||L>=d[0].length)){for(var S=0;Si}}]),e})();A.exports=r}),(function(A,P,N){function u(){}u.svd=function(h){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=h.length,this.n=h[0].length;var a=Math.min(this.m,this.n);this.s=(function(Tt){for(var Ct=[];Tt-- >0;)Ct.push(0);return Ct})(Math.min(this.m+1,this.n)),this.U=(function(Tt){var Ct=function $t(bt){if(bt.length==0)return 0;for(var zt=[],St=0;St0;)Ct.push(0);return Ct})(this.n),e=(function(Tt){for(var Ct=[];Tt-- >0;)Ct.push(0);return Ct})(this.m),f=!0,i=Math.min(this.m-1,this.n),g=Math.max(0,Math.min(this.n-2,this.m)),t=0;t=0;E--)if(this.s[E]!==0){for(var y=E+1;y=0;V--){if((function(Tt,Ct){return Tt&&Ct})(V0;){var q=void 0,It=void 0;for(q=n-2;q>=-1&&q!==-1;q--)if(Math.abs(r[q])<=ht+_*(Math.abs(this.s[q])+Math.abs(this.s[q+1]))){r[q]=0;break}if(q===n-2)It=4;else{var Nt=void 0;for(Nt=n-1;Nt>=q&&Nt!==q;Nt--){var vt=(Nt!==n?Math.abs(r[Nt]):0)+(Nt!==q+1?Math.abs(r[Nt-1]):0);if(Math.abs(this.s[Nt])<=ht+_*vt){this.s[Nt]=0;break}}Nt===q?It=3:Nt===n-1?It=1:(It=2,q=Nt)}switch(q++,It){case 1:{var it=r[n-2];r[n-2]=0;for(var gt=n-2;gt>=q;gt--){var mt=u.hypot(this.s[gt],it),At=this.s[gt]/mt,Ot=it/mt;this.s[gt]=mt,gt!==q&&(it=-Ot*r[gt-1],r[gt-1]=At*r[gt-1]);for(var Et=0;Et=this.s[q+1]);){var Lt=this.s[q];if(this.s[q]=this.s[q+1],this.s[q+1]=Lt,qMath.abs(a)?(r=a/h,r=Math.abs(h)*Math.sqrt(1+r*r)):a!=0?(r=h/a,r=Math.abs(a)*Math.sqrt(1+r*r)):r=0,r},A.exports=u}),(function(A,P,N){var u=(function(){function r(e,f){for(var i=0;i2&&arguments[2]!==void 0?arguments[2]:1,g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;h(this,r),this.sequence1=e,this.sequence2=f,this.match_score=i,this.mismatch_penalty=g,this.gap_penalty=t,this.iMax=e.length+1,this.jMax=f.length+1,this.grid=new Array(this.iMax);for(var o=0;o=0;e--){var f=this.listeners[e];f.event===a&&f.callback===r&&this.listeners.splice(e,1)}},h.emit=function(a,r){for(var e=0;e{var P={45:((a,r,e)=>{var f={};f.layoutBase=e(551),f.CoSEConstants=e(806),f.CoSEEdge=e(767),f.CoSEGraph=e(880),f.CoSEGraphManager=e(578),f.CoSELayout=e(765),f.CoSENode=e(991),f.ConstraintHandler=e(902),a.exports=f}),806:((a,r,e)=>{var f=e(551).FDLayoutConstants;function i(){}for(var g in f)i[g]=f[g];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=f.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,i.ENFORCE_CONSTRAINTS=!0,i.APPLY_LAYOUT=!0,i.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,i.TREE_REDUCTION_ON_INCREMENTAL=!0,i.PURE_INCREMENTAL=i.DEFAULT_INCREMENTAL,a.exports=i}),767:((a,r,e)=>{var f=e(551).FDLayoutEdge;function i(t,o,s){f.call(this,t,o,s)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),880:((a,r,e)=>{var f=e(551).LGraph;function i(t,o,s){f.call(this,t,o,s)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),578:((a,r,e)=>{var f=e(551).LGraphManager;function i(t){f.call(this,t)}i.prototype=Object.create(f.prototype);for(var g in f)i[g]=f[g];a.exports=i}),765:((a,r,e)=>{var f=e(551).FDLayout,i=e(578),g=e(880),t=e(991),o=e(767),s=e(806),c=e(902),l=e(551).FDLayoutConstants,T=e(551).LayoutConstants,d=e(551).Point,v=e(551).PointD,L=e(551).DimensionD,S=e(551).Layout,C=e(551).Integer,G=e(551).IGeometry,K=e(551).LGraph,X=e(551).Transform,Q=e(551).LinkedList;function O(){f.call(this),this.toBeTiled={},this.constraints={}}O.prototype=Object.create(f.prototype);for(var rt in f)O[rt]=f[rt];O.prototype.newGraphManager=function(){var n=new i(this);return this.graphManager=n,n},O.prototype.newGraph=function(n){return new g(null,this.graphManager,n)},O.prototype.newNode=function(n){return new t(this.graphManager,n)},O.prototype.newEdge=function(n){return new o(null,null,n)},O.prototype.initParameters=function(){f.prototype.initParameters.call(this,arguments),this.isSubLayout||(s.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=s.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=s.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=l.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=l.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=l.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},O.prototype.initSpringEmbedder=function(){f.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/l.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},O.prototype.layout=function(){var n=T.DEFAULT_CREATE_BENDS_AS_NEEDED;return n&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},O.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(s.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),p=this.nodesWithGravity.filter(function(R){return m.has(R)});this.graphManager.setAllNodesToApplyGravitation(p)}}else{var n=this.getFlatForest();if(n.length>0)this.positionNodesRadially(n);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),p=this.nodesWithGravity.filter(function(E){return m.has(E)});this.graphManager.setAllNodesToApplyGravitation(p),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(c.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),s.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},O.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%l.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),m=this.nodesWithGravity.filter(function(y){return n.has(y)});this.graphManager.setAllNodesToApplyGravitation(m),this.graphManager.updateBounds(),this.updateGrid(),s.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),s.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var p=!this.isTreeGrowing&&!this.isGrowthFinished,E=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(p,E),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},O.prototype.getPositionsData=function(){for(var n=this.graphManager.getAllNodes(),m={},p=0;p0&&this.updateDisplacements();for(var p=0;p0&&(E.fixedNodeWeight=R)}}if(this.constraints.relativePlacementConstraint){var M=new Map,F=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(w){n.fixedNodesOnHorizontal.add(w),n.fixedNodesOnVertical.add(w)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var W=this.constraints.alignmentConstraint.vertical,p=0;p=2*w.length/3;_--)H=Math.floor(Math.random()*(_+1)),$=w[_],w[_]=w[H],w[H]=$;return w},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(w){if(w.left){var H=M.has(w.left)?M.get(w.left):w.left,$=M.has(w.right)?M.get(w.right):w.right;n.nodesInRelativeHorizontal.includes(H)||(n.nodesInRelativeHorizontal.push(H),n.nodeToRelativeConstraintMapHorizontal.set(H,[]),n.dummyToNodeForVerticalAlignment.has(H)?n.nodeToTempPositionMapHorizontal.set(H,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set(H,n.idToNodeMap.get(H).getCenterX())),n.nodesInRelativeHorizontal.includes($)||(n.nodesInRelativeHorizontal.push($),n.nodeToRelativeConstraintMapHorizontal.set($,[]),n.dummyToNodeForVerticalAlignment.has($)?n.nodeToTempPositionMapHorizontal.set($,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get($)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set($,n.idToNodeMap.get($).getCenterX())),n.nodeToRelativeConstraintMapHorizontal.get(H).push({right:$,gap:w.gap}),n.nodeToRelativeConstraintMapHorizontal.get($).push({left:H,gap:w.gap})}else{var _=F.has(w.top)?F.get(w.top):w.top,ht=F.has(w.bottom)?F.get(w.bottom):w.bottom;n.nodesInRelativeVertical.includes(_)||(n.nodesInRelativeVertical.push(_),n.nodeToRelativeConstraintMapVertical.set(_,[]),n.dummyToNodeForHorizontalAlignment.has(_)?n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(_)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(_).getCenterY())),n.nodesInRelativeVertical.includes(ht)||(n.nodesInRelativeVertical.push(ht),n.nodeToRelativeConstraintMapVertical.set(ht,[]),n.dummyToNodeForHorizontalAlignment.has(ht)?n.nodeToTempPositionMapVertical.set(ht,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(ht)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(ht,n.idToNodeMap.get(ht).getCenterY())),n.nodeToRelativeConstraintMapVertical.get(_).push({bottom:ht,gap:w.gap}),n.nodeToRelativeConstraintMapVertical.get(ht).push({top:_,gap:w.gap})}});else{var Z=new Map,V=new Map;this.constraints.relativePlacementConstraint.forEach(function(w){if(w.left){var H=M.has(w.left)?M.get(w.left):w.left,$=M.has(w.right)?M.get(w.right):w.right;Z.has(H)?Z.get(H).push($):Z.set(H,[$]),Z.has($)?Z.get($).push(H):Z.set($,[H])}else{var _=F.has(w.top)?F.get(w.top):w.top,ht=F.has(w.bottom)?F.get(w.bottom):w.bottom;V.has(_)?V.get(_).push(ht):V.set(_,[ht]),V.has(ht)?V.get(ht).push(_):V.set(ht,[_])}});var Y=function(H,$){var _=[],ht=[],q=new Q,It=new Set,Nt=0;return H.forEach(function(vt,it){if(!It.has(it)){_[Nt]=[],ht[Nt]=!1;var gt=it;for(q.push(gt),It.add(gt),_[Nt].push(gt);q.length!=0;){gt=q.shift(),$.has(gt)&&(ht[Nt]=!0);var mt=H.get(gt);mt.forEach(function(At){It.has(At)||(q.push(At),It.add(At),_[Nt].push(At))})}Nt++}}),{components:_,isFixed:ht}},et=Y(Z,n.fixedNodesOnHorizontal);this.componentsOnHorizontal=et.components,this.fixedComponentsOnHorizontal=et.isFixed;var z=Y(V,n.fixedNodesOnVertical);this.componentsOnVertical=z.components,this.fixedComponentsOnVertical=z.isFixed}}},O.prototype.updateDisplacements=function(){var n=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(z){var w=n.idToNodeMap.get(z.nodeId);w.displacementX=0,w.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var m=this.constraints.alignmentConstraint.vertical,p=0;p1){var F;for(F=0;FE&&(E=Math.floor(M.y)),R=Math.floor(M.x+s.DEFAULT_COMPONENT_SEPERATION)}this.transform(new v(T.WORLD_CENTER_X-M.x/2,T.WORLD_CENTER_Y-M.y/2))},O.radialLayout=function(n,m,p){var E=Math.max(this.maxDiagonalInTree(n),s.DEFAULT_RADIAL_SEPARATION);O.branchRadialLayout(m,null,0,359,0,E);var y=K.calculateBounds(n),R=new X;R.setDeviceOrgX(y.getMinX()),R.setDeviceOrgY(y.getMinY()),R.setWorldOrgX(p.x),R.setWorldOrgY(p.y);for(var M=0;M1;){var $=H[0];H.splice(0,1);var _=V.indexOf($);_>=0&&V.splice(_,1),z--,Y--}m!=null?w=(V.indexOf(H[0])+1)%z:w=0;for(var ht=Math.abs(E-p)/Y,q=w;et!=Y;q=++q%z){var It=V[q].getOtherEnd(n);if(It!=m){var Nt=(p+et*ht)%360,vt=(Nt+ht)%360;O.branchRadialLayout(It,n,Nt,vt,y+R,R),et++}}},O.maxDiagonalInTree=function(n){for(var m=C.MIN_VALUE,p=0;pm&&(m=y)}return m},O.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},O.prototype.groupZeroDegreeMembers=function(){var n=this,m={};this.memberGroups={},this.idToDummyNode={};for(var p=[],E=this.graphManager.getAllNodes(),y=0;y"u"&&(m[F]=[]),m[F]=m[F].concat(R)}Object.keys(m).forEach(function(W){if(m[W].length>1){var x="DummyCompound_"+W;n.memberGroups[x]=m[W];var Z=m[W][0].getParent(),V=new t(n.graphManager);V.id=x,V.paddingLeft=Z.paddingLeft||0,V.paddingRight=Z.paddingRight||0,V.paddingBottom=Z.paddingBottom||0,V.paddingTop=Z.paddingTop||0,n.idToDummyNode[x]=V;var Y=n.getGraphManager().add(n.newGraph(),V),et=Z.getChild();et.add(V);for(var z=0;zy?(E.rect.x-=(E.labelWidth-y)/2,E.setWidth(E.labelWidth),E.labelMarginLeft=(E.labelWidth-y)/2):E.labelPosHorizontal=="right"&&E.setWidth(y+E.labelWidth)),E.labelHeight&&(E.labelPosVertical=="top"?(E.rect.y-=E.labelHeight,E.setHeight(R+E.labelHeight),E.labelMarginTop=E.labelHeight):E.labelPosVertical=="center"&&E.labelHeight>R?(E.rect.y-=(E.labelHeight-R)/2,E.setHeight(E.labelHeight),E.labelMarginTop=(E.labelHeight-R)/2):E.labelPosVertical=="bottom"&&E.setHeight(R+E.labelHeight))}})},O.prototype.repopulateCompounds=function(){for(var n=this.compoundOrder.length-1;n>=0;n--){var m=this.compoundOrder[n],p=m.id,E=m.paddingLeft,y=m.paddingTop,R=m.labelMarginLeft,M=m.labelMarginTop;this.adjustLocations(this.tiledMemberPack[p],m.rect.x,m.rect.y,E,y,R,M)}},O.prototype.repopulateZeroDegreeMembers=function(){var n=this,m=this.tiledZeroDegreePack;Object.keys(m).forEach(function(p){var E=n.idToDummyNode[p],y=E.paddingLeft,R=E.paddingTop,M=E.labelMarginLeft,F=E.labelMarginTop;n.adjustLocations(m[p],E.rect.x,E.rect.y,y,R,M,F)})},O.prototype.getToBeTiled=function(n){var m=n.id;if(this.toBeTiled[m]!=null)return this.toBeTiled[m];var p=n.getChild();if(p==null)return this.toBeTiled[m]=!1,!1;for(var E=p.getNodes(),y=0;y0)return this.toBeTiled[m]=!1,!1;if(R.getChild()==null){this.toBeTiled[R.id]=!1;continue}if(!this.getToBeTiled(R))return this.toBeTiled[m]=!1,!1}return this.toBeTiled[m]=!0,!0},O.prototype.getNodeDegree=function(n){n.id;for(var m=n.getEdges(),p=0,E=0;EZ&&(Z=Y.rect.height)}p+=Z+n.verticalPadding}},O.prototype.tileCompoundMembers=function(n,m){var p=this;this.tiledMemberPack=[],Object.keys(n).forEach(function(E){var y=m[E];if(p.tiledMemberPack[E]=p.tileNodes(n[E],y.paddingLeft+y.paddingRight),y.rect.width=p.tiledMemberPack[E].width,y.rect.height=p.tiledMemberPack[E].height,y.setCenter(p.tiledMemberPack[E].centerX,p.tiledMemberPack[E].centerY),y.labelMarginLeft=0,y.labelMarginTop=0,s.NODE_DIMENSIONS_INCLUDE_LABELS){var R=y.rect.width,M=y.rect.height;y.labelWidth&&(y.labelPosHorizontal=="left"?(y.rect.x-=y.labelWidth,y.setWidth(R+y.labelWidth),y.labelMarginLeft=y.labelWidth):y.labelPosHorizontal=="center"&&y.labelWidth>R?(y.rect.x-=(y.labelWidth-R)/2,y.setWidth(y.labelWidth),y.labelMarginLeft=(y.labelWidth-R)/2):y.labelPosHorizontal=="right"&&y.setWidth(R+y.labelWidth)),y.labelHeight&&(y.labelPosVertical=="top"?(y.rect.y-=y.labelHeight,y.setHeight(M+y.labelHeight),y.labelMarginTop=y.labelHeight):y.labelPosVertical=="center"&&y.labelHeight>M?(y.rect.y-=(y.labelHeight-M)/2,y.setHeight(y.labelHeight),y.labelMarginTop=(y.labelHeight-M)/2):y.labelPosVertical=="bottom"&&y.setHeight(M+y.labelHeight))}})},O.prototype.tileNodes=function(n,m){var p=this.tileNodesByFavoringDim(n,m,!0),E=this.tileNodesByFavoringDim(n,m,!1),y=this.getOrgRatio(p),R=this.getOrgRatio(E),M;return RF&&(F=z.getWidth())});var W=R/y,x=M/y,Z=Math.pow(p-E,2)+4*(W+E)*(x+p)*y,V=(E-p+Math.sqrt(Z))/(2*(W+E)),Y;m?(Y=Math.ceil(V),Y==V&&Y++):Y=Math.floor(V);var et=Y*(W+E)-E;return F>et&&(et=F),et+=E*2,et},O.prototype.tileNodesByFavoringDim=function(n,m,p){var E=s.TILING_PADDING_VERTICAL,y=s.TILING_PADDING_HORIZONTAL,R=s.TILING_COMPARE_BY,M={rows:[],rowWidth:[],rowHeight:[],width:0,height:m,verticalPadding:E,horizontalPadding:y,centerX:0,centerY:0};R&&(M.idealRowWidth=this.calcIdealRowWidth(n,p));var F=function(w){return w.rect.width*w.rect.height},W=function(w,H){return F(H)-F(w)};n.sort(function(z,w){var H=W;return M.idealRowWidth?(H=R,H(z.id,w.id)):H(z,w)});for(var x=0,Z=0,V=0;V0&&(M+=n.horizontalPadding),n.rowWidth[p]=M,n.width0&&(F+=n.verticalPadding);var W=0;F>n.rowHeight[p]&&(W=n.rowHeight[p],n.rowHeight[p]=F,W=n.rowHeight[p]-W),n.height+=W,n.rows[p].push(m)},O.prototype.getShortestRowIndex=function(n){for(var m=-1,p=Number.MAX_VALUE,E=0;Ep&&(m=E,p=n.rowWidth[E]);return m},O.prototype.canAddHorizontal=function(n,m,p){if(n.idealRowWidth){var E=n.rows.length-1,y=n.rowWidth[E];return y+m+n.horizontalPadding<=n.idealRowWidth}var R=this.getShortestRowIndex(n);if(R<0)return!0;var M=n.rowWidth[R];if(M+n.horizontalPadding+m<=n.width)return!0;var F=0;n.rowHeight[R]0&&(F=p+n.verticalPadding-n.rowHeight[R]);var W;n.width-M>=m+n.horizontalPadding?W=(n.height+F)/(M+m+n.horizontalPadding):W=(n.height+F)/n.width,F=p+n.verticalPadding;var x;return n.widthR&&m!=p){E.splice(-1,1),n.rows[p].push(y),n.rowWidth[m]=n.rowWidth[m]-R,n.rowWidth[p]=n.rowWidth[p]+R,n.width=n.rowWidth[instance.getLongestRowIndex(n)];for(var M=Number.MIN_VALUE,F=0;FM&&(M=E[F].height);m>0&&(M+=n.verticalPadding);var W=n.rowHeight[m]+n.rowHeight[p];n.rowHeight[m]=M,n.rowHeight[p]0)for(var et=y;et<=R;et++)Y[0]+=this.grid[et][M-1].length+this.grid[et][M].length-1;if(R0)for(var et=M;et<=F;et++)Y[3]+=this.grid[y-1][et].length+this.grid[y][et].length-1;for(var z=C.MAX_VALUE,w,H,$=0;${var f=e(551).FDLayoutNode,i=e(551).IMath;function g(o,s,c,l){f.call(this,o,s,c,l)}g.prototype=Object.create(f.prototype);for(var t in f)g[t]=f[t];g.prototype.calculateDisplacement=function(){var o=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=o.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=o.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=o.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=o.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>o.coolingFactor*o.maxNodeDisplacement&&(this.displacementX=o.coolingFactor*o.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>o.coolingFactor*o.maxNodeDisplacement&&(this.displacementY=o.coolingFactor*o.maxNodeDisplacement*i.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},g.prototype.propogateDisplacementToChildren=function(o,s){for(var c=this.getChild().getNodes(),l,T=0;T{function f(c){if(Array.isArray(c)){for(var l=0,T=Array(c.length);l0){var Lt=0;ot.forEach(function(st){B=="horizontal"?(tt.set(st,d.has(st)?v[d.get(st)]:k.get(st)),Lt+=tt.get(st)):(tt.set(st,d.has(st)?L[d.get(st)]:k.get(st)),Lt+=tt.get(st))}),Lt=Lt/ot.length,lt.forEach(function(st){J.has(st)||tt.set(st,Lt)})}else{var ft=0;lt.forEach(function(st){B=="horizontal"?ft+=d.has(st)?v[d.get(st)]:k.get(st):ft+=d.has(st)?L[d.get(st)]:k.get(st)}),ft=ft/lt.length,lt.forEach(function(st){tt.set(st,ft)})}});for(var Mt=function(){var ot=ut.shift(),Lt=U.get(ot);Lt.forEach(function(ft){if(tt.get(ft.id)st&&(st=kt),KtXt&&(Xt=Kt)}}catch(ee){Ct=!0,$t=ee}finally{try{!Tt&&bt.return&&bt.return()}finally{if(Ct)throw $t}}var ce=(Lt+st)/2-(ft+Xt)/2,Qt=!0,jt=!1,_t=void 0;try{for(var Jt=lt[Symbol.iterator](),oe;!(Qt=(oe=Jt.next()).done);Qt=!0){var te=oe.value;tt.set(te,tt.get(te)+ce)}}catch(ee){jt=!0,_t=ee}finally{try{!Qt&&Jt.return&&Jt.return()}finally{if(jt)throw _t}}})}return tt},rt=function(U){var B=0,J=0,k=0,at=0;if(U.forEach(function(j){j.left?v[d.get(j.left)]-v[d.get(j.right)]>=0?B++:J++:L[d.get(j.top)]-L[d.get(j.bottom)]>=0?k++:at++}),B>J&&k>at)for(var ct=0;ctJ)for(var nt=0;ntat)for(var tt=0;tt1)l.fixedNodeConstraint.forEach(function(b,U){E[U]=[b.position.x,b.position.y],y[U]=[v[d.get(b.nodeId)],L[d.get(b.nodeId)]]}),R=!0;else if(l.alignmentConstraint)(function(){var b=0;if(l.alignmentConstraint.vertical){for(var U=l.alignmentConstraint.vertical,B=function(tt){var j=new Set;U[tt].forEach(function(pt){j.add(pt)});var ut=new Set([].concat(f(j)).filter(function(pt){return F.has(pt)})),Mt=void 0;ut.size>0?Mt=v[d.get(ut.values().next().value)]:Mt=Q(j).x,U[tt].forEach(function(pt){E[b]=[Mt,L[d.get(pt)]],y[b]=[v[d.get(pt)],L[d.get(pt)]],b++})},J=0;J0?Mt=v[d.get(ut.values().next().value)]:Mt=Q(j).y,k[tt].forEach(function(pt){E[b]=[v[d.get(pt)],Mt],y[b]=[v[d.get(pt)],L[d.get(pt)]],b++})},ct=0;ctV&&(V=Z[et].length,Y=et);if(V0){var Et={x:0,y:0};l.fixedNodeConstraint.forEach(function(b,U){var B={x:v[d.get(b.nodeId)],y:L[d.get(b.nodeId)]},J=b.position,k=X(J,B);Et.x+=k.x,Et.y+=k.y}),Et.x/=l.fixedNodeConstraint.length,Et.y/=l.fixedNodeConstraint.length,v.forEach(function(b,U){v[U]+=Et.x}),L.forEach(function(b,U){L[U]+=Et.y}),l.fixedNodeConstraint.forEach(function(b){v[d.get(b.nodeId)]=b.position.x,L[d.get(b.nodeId)]=b.position.y})}if(l.alignmentConstraint){if(l.alignmentConstraint.vertical)for(var Dt=l.alignmentConstraint.vertical,Rt=function(U){var B=new Set;Dt[U].forEach(function(at){B.add(at)});var J=new Set([].concat(f(B)).filter(function(at){return F.has(at)})),k=void 0;J.size>0?k=v[d.get(J.values().next().value)]:k=Q(B).x,B.forEach(function(at){F.has(at)||(v[d.get(at)]=k)})},Ht=0;Ht0?k=L[d.get(J.values().next().value)]:k=Q(B).y,B.forEach(function(at){F.has(at)||(L[d.get(at)]=k)})},Ft=0;Ft{a.exports=A})},N={};function u(a){var r=N[a];if(r!==void 0)return r.exports;var e=N[a]={exports:{}};return P[a](e,e.exports,u),e.exports}var h=u(45);return h})()})})(le)),le.exports}var pr=he.exports,De;function yr(){return De||(De=1,(function(I,D){(function(P,N){I.exports=N(vr())})(pr,function(A){return(()=>{var P={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(r){for(var e=arguments.length,f=Array(e>1?e-1:0),i=1;i{var f=(function(){function t(o,s){var c=[],l=!0,T=!1,d=void 0;try{for(var v=o[Symbol.iterator](),L;!(l=(L=v.next()).done)&&(c.push(L.value),!(s&&c.length===s));l=!0);}catch(S){T=!0,d=S}finally{try{!l&&v.return&&v.return()}finally{if(T)throw d}}return c}return function(o,s){if(Array.isArray(o))return o;if(Symbol.iterator in Object(o))return t(o,s);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),i=e(140).layoutBase.LinkedList,g={};g.getTopMostNodes=function(t){for(var o={},s=0;s0&&R.merge(x)});for(var M=0;M1){L=d[0],S=L.connectedEdges().length,d.forEach(function(y){y.connectedEdges().length0&&c.set("dummy"+(c.size+1),K),X},g.relocateComponent=function(t,o,s){if(!s.fixedNodeConstraint){var c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,T=Number.POSITIVE_INFINITY,d=Number.NEGATIVE_INFINITY;if(s.quality=="draft"){var v=!0,L=!1,S=void 0;try{for(var C=o.nodeIndexes[Symbol.iterator](),G;!(v=(G=C.next()).done);v=!0){var K=G.value,X=f(K,2),Q=X[0],O=X[1],rt=s.cy.getElementById(Q);if(rt){var n=rt.boundingBox(),m=o.xCoords[O]-n.w/2,p=o.xCoords[O]+n.w/2,E=o.yCoords[O]-n.h/2,y=o.yCoords[O]+n.h/2;ml&&(l=p),Ed&&(d=y)}}}catch(x){L=!0,S=x}finally{try{!v&&C.return&&C.return()}finally{if(L)throw S}}var R=t.x-(l+c)/2,M=t.y-(d+T)/2;o.xCoords=o.xCoords.map(function(x){return x+R}),o.yCoords=o.yCoords.map(function(x){return x+M})}else{Object.keys(o).forEach(function(x){var Z=o[x],V=Z.getRect().x,Y=Z.getRect().x+Z.getRect().width,et=Z.getRect().y,z=Z.getRect().y+Z.getRect().height;Vl&&(l=Y),etd&&(d=z)});var F=t.x-(l+c)/2,W=t.y-(d+T)/2;Object.keys(o).forEach(function(x){var Z=o[x];Z.setCenter(Z.getCenterX()+F,Z.getCenterY()+W)})}}},g.calcBoundingBox=function(t,o,s,c){for(var l=Number.MAX_SAFE_INTEGER,T=Number.MIN_SAFE_INTEGER,d=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,L=void 0,S=void 0,C=void 0,G=void 0,K=t.descendants().not(":parent"),X=K.length,Q=0;QL&&(l=L),TC&&(d=C),v{var f=e(548),i=e(140).CoSELayout,g=e(140).CoSENode,t=e(140).layoutBase.PointD,o=e(140).layoutBase.DimensionD,s=e(140).layoutBase.LayoutConstants,c=e(140).layoutBase.FDLayoutConstants,l=e(140).CoSEConstants,T=function(v,L){var S=v.cy,C=v.eles,G=C.nodes(),K=C.edges(),X=void 0,Q=void 0,O=void 0,rt={};v.randomize&&(X=L.nodeIndexes,Q=L.xCoords,O=L.yCoords);var n=function(x){return typeof x=="function"},m=function(x,Z){return n(x)?x(Z):x},p=f.calcParentsWithoutChildren(S,C),E=function W(x,Z,V,Y){for(var et=Z.length,z=0;z0){var q=void 0;q=V.getGraphManager().add(V.newGraph(),$),W(q,H,V,Y)}}},y=function(x,Z,V){for(var Y=0,et=0,z=0;z0?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=Y/et:n(v.idealEdgeLength)?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=50:l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=v.idealEdgeLength,l.MIN_REPULSION_DIST=c.MIN_REPULSION_DIST=c.DEFAULT_EDGE_LENGTH/10,l.DEFAULT_RADIAL_SEPARATION=c.DEFAULT_EDGE_LENGTH)},R=function(x,Z){Z.fixedNodeConstraint&&(x.constraints.fixedNodeConstraint=Z.fixedNodeConstraint),Z.alignmentConstraint&&(x.constraints.alignmentConstraint=Z.alignmentConstraint),Z.relativePlacementConstraint&&(x.constraints.relativePlacementConstraint=Z.relativePlacementConstraint)};v.nestingFactor!=null&&(l.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=c.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=v.nestingFactor),v.gravity!=null&&(l.DEFAULT_GRAVITY_STRENGTH=c.DEFAULT_GRAVITY_STRENGTH=v.gravity),v.numIter!=null&&(l.MAX_ITERATIONS=c.MAX_ITERATIONS=v.numIter),v.gravityRange!=null&&(l.DEFAULT_GRAVITY_RANGE_FACTOR=c.DEFAULT_GRAVITY_RANGE_FACTOR=v.gravityRange),v.gravityCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_STRENGTH=c.DEFAULT_COMPOUND_GRAVITY_STRENGTH=v.gravityCompound),v.gravityRangeCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=c.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=v.gravityRangeCompound),v.initialEnergyOnIncremental!=null&&(l.DEFAULT_COOLING_FACTOR_INCREMENTAL=c.DEFAULT_COOLING_FACTOR_INCREMENTAL=v.initialEnergyOnIncremental),v.tilingCompareBy!=null&&(l.TILING_COMPARE_BY=v.tilingCompareBy),v.quality=="proof"?s.QUALITY=2:s.QUALITY=0,l.NODE_DIMENSIONS_INCLUDE_LABELS=c.NODE_DIMENSIONS_INCLUDE_LABELS=s.NODE_DIMENSIONS_INCLUDE_LABELS=v.nodeDimensionsIncludeLabels,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=s.DEFAULT_INCREMENTAL=!v.randomize,l.ANIMATE=c.ANIMATE=s.ANIMATE=v.animate,l.TILE=v.tile,l.TILING_PADDING_VERTICAL=typeof v.tilingPaddingVertical=="function"?v.tilingPaddingVertical.call():v.tilingPaddingVertical,l.TILING_PADDING_HORIZONTAL=typeof v.tilingPaddingHorizontal=="function"?v.tilingPaddingHorizontal.call():v.tilingPaddingHorizontal,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=s.DEFAULT_INCREMENTAL=!0,l.PURE_INCREMENTAL=!v.randomize,s.DEFAULT_UNIFORM_LEAF_NODE_SIZES=v.uniformNodeDimensions,v.step=="transformed"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!1),v.step=="enforced"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!1),v.step=="cose"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!0),v.step=="all"&&(v.randomize?l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!0),v.fixedNodeConstraint||v.alignmentConstraint||v.relativePlacementConstraint?l.TREE_REDUCTION_ON_INCREMENTAL=!1:l.TREE_REDUCTION_ON_INCREMENTAL=!0;var M=new i,F=M.newGraphManager();return E(F.addRoot(),f.getTopMostNodes(G),M,v),y(M,F,K),R(M,v),M.runLayout(),rt};a.exports={coseLayout:T}}),212:((a,r,e)=>{var f=(function(){function v(L,S){for(var C=0;C0)if(p){var R=t.getTopMostNodes(C.eles.nodes());if(O=t.connectComponents(G,C.eles,R),O.forEach(function(vt){var it=vt.boundingBox();rt.push({x:it.x1+it.w/2,y:it.y1+it.h/2})}),C.randomize&&O.forEach(function(vt){C.eles=vt,X.push(s(C))}),C.quality=="default"||C.quality=="proof"){var M=G.collection();if(C.tile){var F=new Map,W=[],x=[],Z=0,V={nodeIndexes:F,xCoords:W,yCoords:x},Y=[];if(O.forEach(function(vt,it){vt.edges().length==0&&(vt.nodes().forEach(function(gt,mt){M.merge(vt.nodes()[mt]),gt.isParent()||(V.nodeIndexes.set(vt.nodes()[mt].id(),Z++),V.xCoords.push(vt.nodes()[0].position().x),V.yCoords.push(vt.nodes()[0].position().y))}),Y.push(it))}),M.length>1){var et=M.boundingBox();rt.push({x:et.x1+et.w/2,y:et.y1+et.h/2}),O.push(M),X.push(V);for(var z=Y.length-1;z>=0;z--)O.splice(Y[z],1),X.splice(Y[z],1),rt.splice(Y[z],1)}}O.forEach(function(vt,it){C.eles=vt,Q.push(l(C,X[it])),t.relocateComponent(rt[it],Q[it],C)})}else O.forEach(function(vt,it){t.relocateComponent(rt[it],X[it],C)});var w=new Set;if(O.length>1){var H=[],$=K.filter(function(vt){return vt.css("display")=="none"});O.forEach(function(vt,it){var gt=void 0;if(C.quality=="draft"&&(gt=X[it].nodeIndexes),vt.nodes().not($).length>0){var mt={};mt.edges=[],mt.nodes=[];var At=void 0;vt.nodes().not($).forEach(function(Ot){if(C.quality=="draft")if(!Ot.isParent())At=gt.get(Ot.id()),mt.nodes.push({x:X[it].xCoords[At]-Ot.boundingbox().w/2,y:X[it].yCoords[At]-Ot.boundingbox().h/2,width:Ot.boundingbox().w,height:Ot.boundingbox().h});else{var Et=t.calcBoundingBox(Ot,X[it].xCoords,X[it].yCoords,gt);mt.nodes.push({x:Et.topLeftX,y:Et.topLeftY,width:Et.width,height:Et.height})}else Q[it][Ot.id()]&&mt.nodes.push({x:Q[it][Ot.id()].getLeft(),y:Q[it][Ot.id()].getTop(),width:Q[it][Ot.id()].getWidth(),height:Q[it][Ot.id()].getHeight()})}),vt.edges().forEach(function(Ot){var Et=Ot.source(),Dt=Ot.target();if(Et.css("display")!="none"&&Dt.css("display")!="none")if(C.quality=="draft"){var Rt=gt.get(Et.id()),Ht=gt.get(Dt.id()),Ut=[],Pt=[];if(Et.isParent()){var Ft=t.calcBoundingBox(Et,X[it].xCoords,X[it].yCoords,gt);Ut.push(Ft.topLeftX+Ft.width/2),Ut.push(Ft.topLeftY+Ft.height/2)}else Ut.push(X[it].xCoords[Rt]),Ut.push(X[it].yCoords[Rt]);if(Dt.isParent()){var Yt=t.calcBoundingBox(Dt,X[it].xCoords,X[it].yCoords,gt);Pt.push(Yt.topLeftX+Yt.width/2),Pt.push(Yt.topLeftY+Yt.height/2)}else Pt.push(X[it].xCoords[Ht]),Pt.push(X[it].yCoords[Ht]);mt.edges.push({startX:Ut[0],startY:Ut[1],endX:Pt[0],endY:Pt[1]})}else Q[it][Et.id()]&&Q[it][Dt.id()]&&mt.edges.push({startX:Q[it][Et.id()].getCenterX(),startY:Q[it][Et.id()].getCenterY(),endX:Q[it][Dt.id()].getCenterX(),endY:Q[it][Dt.id()].getCenterY()})}),mt.nodes.length>0&&(H.push(mt),w.add(it))}});var _=m.packComponents(H,C.randomize).shifts;if(C.quality=="draft")X.forEach(function(vt,it){var gt=vt.xCoords.map(function(At){return At+_[it].dx}),mt=vt.yCoords.map(function(At){return At+_[it].dy});vt.xCoords=gt,vt.yCoords=mt});else{var ht=0;w.forEach(function(vt){Object.keys(Q[vt]).forEach(function(it){var gt=Q[vt][it];gt.setCenter(gt.getCenterX()+_[ht].dx,gt.getCenterY()+_[ht].dy)}),ht++})}}}else{var E=C.eles.boundingBox();if(rt.push({x:E.x1+E.w/2,y:E.y1+E.h/2}),C.randomize){var y=s(C);X.push(y)}C.quality=="default"||C.quality=="proof"?(Q.push(l(C,X[0])),t.relocateComponent(rt[0],Q[0],C)):t.relocateComponent(rt[0],X[0],C)}var q=function(it,gt){if(C.quality=="default"||C.quality=="proof"){typeof it=="number"&&(it=gt);var mt=void 0,At=void 0,Ot=it.data("id");return Q.forEach(function(Dt){Ot in Dt&&(mt={x:Dt[Ot].getRect().getCenterX(),y:Dt[Ot].getRect().getCenterY()},At=Dt[Ot])}),C.nodeDimensionsIncludeLabels&&(At.labelWidth&&(At.labelPosHorizontal=="left"?mt.x+=At.labelWidth/2:At.labelPosHorizontal=="right"&&(mt.x-=At.labelWidth/2)),At.labelHeight&&(At.labelPosVertical=="top"?mt.y+=At.labelHeight/2:At.labelPosVertical=="bottom"&&(mt.y-=At.labelHeight/2))),mt==null&&(mt={x:it.position("x"),y:it.position("y")}),{x:mt.x,y:mt.y}}else{var Et=void 0;return X.forEach(function(Dt){var Rt=Dt.nodeIndexes.get(it.id());Rt!=null&&(Et={x:Dt.xCoords[Rt],y:Dt.yCoords[Rt]})}),Et==null&&(Et={x:it.position("x"),y:it.position("y")}),{x:Et.x,y:Et.y}}};if(C.quality=="default"||C.quality=="proof"||C.randomize){var It=t.calcParentsWithoutChildren(G,K),Nt=K.filter(function(vt){return vt.css("display")=="none"});C.eles=K.not(Nt),K.nodes().not(":parent").not(Nt).layoutPositions(S,C,q),It.length>0&&It.forEach(function(vt){vt.position(q(vt))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")}}]),v})();a.exports=d}),657:((a,r,e)=>{var f=e(548),i=e(140).layoutBase.Matrix,g=e(140).layoutBase.SVD,t=function(s){var c=s.cy,l=s.eles,T=l.nodes(),d=l.nodes(":parent"),v=new Map,L=new Map,S=new Map,C=[],G=[],K=[],X=[],Q=[],O=[],rt=[],n=[],m=void 0,p=1e8,E=1e-9,y=s.piTol,R=s.samplingType,M=s.nodeSeparation,F=void 0,W=function(){for(var U=0,B=0,J=!1;B=at;){nt=k[at++];for(var xt=C[nt],lt=0;ltut&&(ut=Q[Lt],Mt=Lt)}return Mt},Z=function(U){var B=void 0;if(U){B=Math.floor(Math.random()*m);for(var k=0;k=1)break;j=tt}for(var pt=0;pt=1)break;j=tt}for(var lt=0;lt0&&(B.isParent()?C[U].push(S.get(B.id())):C[U].push(B.id()))})});var Nt=function(U){var B=L.get(U),J=void 0;v.get(U).forEach(function(k){c.getElementById(k).isParent()?J=S.get(k):J=k,C[B].push(J),C[L.get(J)].push(U)})},vt=!0,it=!1,gt=void 0;try{for(var mt=v.keys()[Symbol.iterator](),At;!(vt=(At=mt.next()).done);vt=!0){var Ot=At.value;Nt(Ot)}}catch(b){it=!0,gt=b}finally{try{!vt&&mt.return&&mt.return()}finally{if(it)throw gt}}m=L.size;var Et=void 0;if(m>2){F=m{var f=e(212),i=function(t){t&&t("layout","fcose",f)};typeof cytoscape<"u"&&i(cytoscape),a.exports=i}),140:(a=>{a.exports=A})},N={};function u(a){var r=N[a];if(r!==void 0)return r.exports;var e=N[a]={exports:{}};return P[a](e,e.exports,u),e.exports}var h=u(579);return h})()})})(he)),he.exports}var Er=yr();const mr=ke(Er);var xe={L:"left",R:"right",T:"top",B:"bottom"},Ie={L:dt(I=>`${I},${I/2} 0,${I} 0,0`,"L"),R:dt(I=>`0,${I/2} ${I},0 ${I},${I}`,"R"),T:dt(I=>`0,0 ${I},0 ${I/2},${I}`,"T"),B:dt(I=>`${I/2},0 ${I},${I} 0,${I}`,"B")},se={L:dt((I,D)=>I-D+2,"L"),R:dt((I,D)=>I-2,"R"),T:dt((I,D)=>I-D+2,"T"),B:dt((I,D)=>I-2,"B")},Tr=dt(function(I){return Wt(I)?I==="L"?"R":"L":I==="T"?"B":"T"},"getOppositeArchitectureDirection"),Re=dt(function(I){const D=I;return D==="L"||D==="R"||D==="T"||D==="B"},"isArchitectureDirection"),Wt=dt(function(I){const D=I;return D==="L"||D==="R"},"isArchitectureDirectionX"),qt=dt(function(I){const D=I;return D==="T"||D==="B"},"isArchitectureDirectionY"),Te=dt(function(I,D){const A=Wt(I)&&qt(D),P=qt(I)&&Wt(D);return A||P},"isArchitectureDirectionXY"),Nr=dt(function(I){const D=I[0],A=I[1],P=Wt(D)&&qt(A),N=qt(D)&&Wt(A);return P||N},"isArchitecturePairXY"),Lr=dt(function(I){return I!=="LL"&&I!=="RR"&&I!=="TT"&&I!=="BB"},"isValidArchitectureDirectionPair"),ye=dt(function(I,D){const A=`${I}${D}`;return Lr(A)?A:void 0},"getArchitectureDirectionPair"),Cr=dt(function([I,D],A){const P=A[0],N=A[1];return Wt(P)?qt(N)?[I+(P==="L"?-1:1),D+(N==="T"?1:-1)]:[I+(P==="L"?-1:1),D]:Wt(N)?[I+(N==="L"?1:-1),D+(P==="T"?1:-1)]:[I,D+(P==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ar=dt(function(I){return I==="LT"||I==="TL"?[1,1]:I==="BL"||I==="LB"?[1,-1]:I==="BR"||I==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),Mr=dt(function(I,D){return Te(I,D)?"bend":Wt(I)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),wr=dt(function(I){return I.type==="service"},"isArchitectureService"),Or=dt(function(I){return I.type==="junction"},"isArchitectureJunction"),be=dt(I=>I.data(),"edgeData"),ie=dt(I=>I.data(),"nodeData"),Dr=ar.architecture,ae,Pe=(ae=class{constructor(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.elements={},this.setAccTitle=Qe,this.getAccTitle=Je,this.setDiagramTitle=Ke,this.getDiagramTitle=je,this.getAccDescription=_e,this.setAccDescription=tr,this.clear()}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},er()}addService({id:D,icon:A,in:P,title:N,iconText:u}){if(this.registeredIds[D]!==void 0)throw new Error(`The service id [${D}] is already in use by another ${this.registeredIds[D]}`);if(P!==void 0){if(D===P)throw new Error(`The service [${D}] cannot be placed within itself`);if(this.registeredIds[P]===void 0)throw new Error(`The service [${D}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[P]==="node")throw new Error(`The service [${D}]'s parent is not a group`)}this.registeredIds[D]="node",this.nodes[D]={id:D,type:"service",icon:A,iconText:u,title:N,edges:[],in:P}}getServices(){return Object.values(this.nodes).filter(wr)}addJunction({id:D,in:A}){this.registeredIds[D]="node",this.nodes[D]={id:D,type:"junction",edges:[],in:A}}getJunctions(){return Object.values(this.nodes).filter(Or)}getNodes(){return Object.values(this.nodes)}getNode(D){return this.nodes[D]??null}addGroup({id:D,icon:A,in:P,title:N}){var u,h,a;if(((u=this.registeredIds)==null?void 0:u[D])!==void 0)throw new Error(`The group id [${D}] is already in use by another ${this.registeredIds[D]}`);if(P!==void 0){if(D===P)throw new Error(`The group [${D}] cannot be placed within itself`);if(((h=this.registeredIds)==null?void 0:h[P])===void 0)throw new Error(`The group [${D}]'s parent does not exist. Please make sure the parent is created before this group`);if(((a=this.registeredIds)==null?void 0:a[P])==="node")throw new Error(`The group [${D}]'s parent is not a group`)}this.registeredIds[D]="group",this.groups[D]={id:D,icon:A,title:N,in:P}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:D,rhsId:A,lhsDir:P,rhsDir:N,lhsInto:u,rhsInto:h,lhsGroup:a,rhsGroup:r,title:e}){if(!Re(P))throw new Error(`Invalid direction given for left hand side of edge ${D}--${A}. Expected (L,R,T,B) got ${String(P)}`);if(!Re(N))throw new Error(`Invalid direction given for right hand side of edge ${D}--${A}. Expected (L,R,T,B) got ${String(N)}`);if(this.nodes[D]===void 0&&this.groups[D]===void 0)throw new Error(`The left-hand id [${D}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[A]===void 0&&this.groups[A]===void 0)throw new Error(`The right-hand id [${A}] does not yet exist. Please create the service/group before declaring an edge to it.`);const f=this.nodes[D].in,i=this.nodes[A].in;if(a&&f&&i&&f==i)throw new Error(`The left-hand id [${D}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(r&&f&&i&&f==i)throw new Error(`The right-hand id [${A}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);const g={lhsId:D,lhsDir:P,lhsInto:u,lhsGroup:a,rhsId:A,rhsDir:N,rhsInto:h,rhsGroup:r,title:e};this.edges.push(g),this.nodes[D]&&this.nodes[A]&&(this.nodes[D].edges.push(this.edges[this.edges.length-1]),this.nodes[A].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){const D={},A=Object.entries(this.nodes).reduce((r,[e,f])=>(r[e]=f.edges.reduce((i,g)=>{var s,c;const t=(s=this.getNode(g.lhsId))==null?void 0:s.in,o=(c=this.getNode(g.rhsId))==null?void 0:c.in;if(t&&o&&t!==o){const l=Mr(g.lhsDir,g.rhsDir);l!=="bend"&&(D[t]??(D[t]={}),D[t][o]=l,D[o]??(D[o]={}),D[o][t]=l)}if(g.lhsId===e){const l=ye(g.lhsDir,g.rhsDir);l&&(i[l]=g.rhsId)}else{const l=ye(g.rhsDir,g.lhsDir);l&&(i[l]=g.lhsId)}return i},{}),r),{}),P=Object.keys(A)[0],N={[P]:1},u=Object.keys(A).reduce((r,e)=>e===P?r:{...r,[e]:1},{}),h=dt(r=>{const e={[r]:[0,0]},f=[r];for(;f.length>0;){const i=f.shift();if(i){N[i]=1,delete u[i];const g=A[i],[t,o]=e[i];Object.entries(g).forEach(([s,c])=>{N[c]||(e[c]=Cr([t,o],s),f.push(c))})}}return e},"BFS"),a=[h(P)];for(;Object.keys(u).length>0;)a.push(h(Object.keys(u)[0]));this.dataStructures={adjList:A,spatialMaps:a,groupAlignments:D}}return this.dataStructures}setElementForId(D,A){this.elements[D]=A}getElementById(D){return this.elements[D]}getConfig(){return rr({...Dr,...ir().architecture})}getConfigField(D){return this.getConfig()[D]}},dt(ae,"ArchitectureDB"),ae),xr=dt((I,D)=>{fr(I,D),I.groups.map(A=>D.addGroup(A)),I.services.map(A=>D.addService({...A,type:"service"})),I.junctions.map(A=>D.addJunction({...A,type:"junction"})),I.edges.map(A=>D.addEdge(A))},"populateDb"),Ge={parser:{yy:void 0},parse:dt(async I=>{var P;const D=await cr("architecture",I);Se.debug(D);const A=(P=Ge.parser)==null?void 0:P.yy;if(!(A instanceof Pe))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");xr(D,A)},"parse")},Ir=dt(I=>` .edge { stroke-width: ${I.archEdgeWidth}; stroke: ${I.archEdgeColor}; @@ -34,4 +34,4 @@ import{aK as ke,_ as dt,H as Ze,V as qe,l as Se,b as Qe,a as Je,p as Ke,q as je, translate(${E*R.width/2}, ${y*R.height/2}) rotate(${-1*E*y*45}, 0, ${p.height/2}) `)}}}}}))},"drawEdges"),Fr=dt(async function(I,D,A){const N=A.getConfigField("padding")*.75,u=A.getConfigField("fontSize"),a=A.getConfigField("iconSize")/2;await Promise.all(D.nodes().map(async r=>{const e=ie(r);if(e.type==="group"){const{h:f,w:i,x1:g,y1:t}=r.boundingBox(),o=I.append("rect");o.attr("id",`group-${e.id}`).attr("x",g+a).attr("y",t+a).attr("width",i).attr("height",f).attr("class","node-bkg");const s=I.append("g");let c=g,l=t;if(e.icon){const T=s.append("g");T.html(`${await pe(e.icon,{height:N,width:N,fallbackPrefix:ne.prefix})}`),T.attr("transform","translate("+(c+a+1)+", "+(l+a+1)+")"),c+=N,l+=u/2-1-2}if(e.label){const T=s.append("g");await me(T,e.label,{useHtmlLabels:!1,width:i,classes:"architecture-service-label"},Ee()),T.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),T.attr("transform","translate("+(c+a+4)+", "+(l+a+2)+")")}A.setElementForId(e.id,o)}}))},"drawGroups"),br=dt(async function(I,D,A){const P=Ee();for(const N of A){const u=D.append("g"),h=I.getConfigField("iconSize");if(N.title){const f=u.append("g");await me(f,N.title,{useHtmlLabels:!1,width:h*1.5,classes:"architecture-service-label"},P),f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),f.attr("transform","translate("+h/2+", "+h+")")}const a=u.append("g");if(N.icon)a.html(`${await pe(N.icon,{height:h,width:h,fallbackPrefix:ne.prefix})}`);else if(N.iconText){a.html(`${await pe("blank",{height:h,width:h,fallbackPrefix:ne.prefix})}`);const g=a.append("g").append("foreignObject").attr("width",h).attr("height",h).append("div").attr("class","node-icon-text").attr("style",`height: ${h}px;`).append("div").html(nr(N.iconText,P)),t=parseInt(window.getComputedStyle(g.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;g.attr("style",`-webkit-line-clamp: ${Math.floor((h-2)/t)};`)}else a.append("path").attr("class","node-bkg").attr("id","node-"+N.id).attr("d",`M0 ${h} v${-h} q0,-5 5,-5 h${h} q5,0 5,5 v${h} H0 Z`);u.attr("id",`service-${N.id}`).attr("class","architecture-service");const{width:r,height:e}=u.node().getBBox();N.width=r,N.height=e,I.setElementForId(N.id,u)}return 0},"drawServices"),Pr=dt(function(I,D,A){A.forEach(P=>{const N=D.append("g"),u=I.getConfigField("iconSize");N.append("g").append("rect").attr("id","node-"+P.id).attr("fill-opacity","0").attr("width",u).attr("height",u),N.attr("class","architecture-junction");const{width:a,height:r}=N._groups[0][0].getBBox();N.width=a,N.height=r,I.setElementForId(P.id,N)})},"drawJunctions");hr([{name:ne.prefix,icons:ne}]);Fe.use(mr);function Ue(I,D,A){I.forEach(P=>{D.add({group:"nodes",data:{type:"service",id:P.id,icon:P.icon,label:P.title,parent:P.in,width:A.getConfigField("iconSize"),height:A.getConfigField("iconSize")},classes:"node-service"})})}dt(Ue,"addServices");function Ye(I,D,A){I.forEach(P=>{D.add({group:"nodes",data:{type:"junction",id:P.id,parent:P.in,width:A.getConfigField("iconSize"),height:A.getConfigField("iconSize")},classes:"node-junction"})})}dt(Ye,"addJunctions");function Xe(I,D){D.nodes().map(A=>{const P=ie(A);if(P.type==="group")return;P.x=A.position().x,P.y=A.position().y,I.getElementById(P.id).attr("transform","translate("+(P.x||0)+","+(P.y||0)+")")})}dt(Xe,"positionNodes");function He(I,D){I.forEach(A=>{D.add({group:"nodes",data:{type:"group",id:A.id,icon:A.icon,label:A.title,parent:A.in},classes:"node-group"})})}dt(He,"addGroups");function We(I,D){I.forEach(A=>{const{lhsId:P,rhsId:N,lhsInto:u,lhsGroup:h,rhsInto:a,lhsDir:r,rhsDir:e,rhsGroup:f,title:i}=A,g=Te(A.lhsDir,A.rhsDir)?"segments":"straight",t={id:`${P}-${N}`,label:i,source:P,sourceDir:r,sourceArrow:u,sourceGroup:h,sourceEndpoint:r==="L"?"0 50%":r==="R"?"100% 50%":r==="T"?"50% 0":"50% 100%",target:N,targetDir:e,targetArrow:a,targetGroup:f,targetEndpoint:e==="L"?"0 50%":e==="R"?"100% 50%":e==="T"?"50% 0":"50% 100%"};D.add({group:"edges",data:t,classes:g})})}dt(We,"addEdges");function Ve(I,D,A){const P=dt((a,r)=>Object.entries(a).reduce((e,[f,i])=>{var o;let g=0;const t=Object.entries(i);if(t.length===1)return e[f]=t[0][1],e;for(let s=0;s{const r={},e={};return Object.entries(a).forEach(([f,[i,g]])=>{var o,s,c;const t=((o=I.getNode(f))==null?void 0:o.in)??"default";r[g]??(r[g]={}),(s=r[g])[t]??(s[t]=[]),r[g][t].push(f),e[i]??(e[i]={}),(c=e[i])[t]??(c[t]=[]),e[i][t].push(f)}),{horiz:Object.values(P(r,"horizontal")).filter(f=>f.length>1),vert:Object.values(P(e,"vertical")).filter(f=>f.length>1)}}),[u,h]=N.reduce(([a,r],{horiz:e,vert:f})=>[[...a,...e],[...r,...f]],[[],[]]);return{horizontal:u,vertical:h}}dt(Ve,"getAlignments");function ze(I,D){const A=[],P=dt(u=>`${u[0]},${u[1]}`,"posToStr"),N=dt(u=>u.split(",").map(h=>parseInt(h)),"strToPos");return I.forEach(u=>{const h=Object.fromEntries(Object.entries(u).map(([f,i])=>[P(i),f])),a=[P([0,0])],r={},e={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;a.length>0;){const f=a.shift();if(f){r[f]=1;const i=h[f];if(i){const g=N(f);Object.entries(e).forEach(([t,o])=>{const s=P([g[0]+o[0],g[1]+o[1]]),c=h[s];c&&!r[s]&&(a.push(s),A.push({[xe[t]]:c,[xe[Tr(t)]]:i,gap:1.5*D.getConfigField("iconSize")}))})}}}}),A}dt(ze,"getRelativeConstraints");function $e(I,D,A,P,N,{spatialMaps:u,groupAlignments:h}){return new Promise(a=>{const r=or("body").append("div").attr("id","cy").attr("style","display:none"),e=Fe({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${N.getConfigField("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${N.getConfigField("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});r.remove(),He(A,e),Ue(I,e,N),Ye(D,e,N),We(P,e);const f=Ve(N,u,h),i=ze(u,N),g=e.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(t){const[o,s]=t.connectedNodes(),{parent:c}=ie(o),{parent:l}=ie(s);return c===l?1.5*N.getConfigField("iconSize"):.5*N.getConfigField("iconSize")},edgeElasticity(t){const[o,s]=t.connectedNodes(),{parent:c}=ie(o),{parent:l}=ie(s);return c===l?.45:.001},alignmentConstraint:f,relativePlacementConstraint:i});g.one("layoutstop",()=>{var o;function t(s,c,l,T){let d,v;const{x:L,y:S}=s,{x:C,y:G}=c;v=(T-S+(L-l)*(S-G)/(L-C))/Math.sqrt(1+Math.pow((S-G)/(L-C),2)),d=Math.sqrt(Math.pow(T-S,2)+Math.pow(l-L,2)-Math.pow(v,2));const K=Math.sqrt(Math.pow(C-L,2)+Math.pow(G-S,2));d=d/K;let X=(C-L)*(T-S)-(G-S)*(l-L);switch(!0){case X>=0:X=1;break;case X<0:X=-1;break}let Q=(C-L)*(l-L)+(G-S)*(T-S);switch(!0){case Q>=0:Q=1;break;case Q<0:Q=-1;break}return v=Math.abs(v)*X,d=d*Q,{distances:v,weights:d}}dt(t,"getSegmentWeights"),e.startBatch();for(const s of Object.values(e.edges()))if((o=s.data)!=null&&o.call(s)){const{x:c,y:l}=s.source().position(),{x:T,y:d}=s.target().position();if(c!==T&&l!==d){const v=s.sourceEndpoint(),L=s.targetEndpoint(),{sourceDir:S}=be(s),[C,G]=qt(S)?[v.x,L.y]:[L.x,v.y],{weights:K,distances:X}=t(v,L,C,G);s.style("segment-distances",X),s.style("segment-weights",K)}}e.endBatch(),g.run()}),g.run(),e.ready(t=>{Se.info("Ready",t),a(e)})})}dt($e,"layoutArchitecture");var Gr=dt(async(I,D,A,P)=>{const N=P.db,u=N.getServices(),h=N.getJunctions(),a=N.getGroups(),r=N.getEdges(),e=N.getDataStructures(),f=Ze(D),i=f.append("g");i.attr("class","architecture-edges");const g=f.append("g");g.attr("class","architecture-services");const t=f.append("g");t.attr("class","architecture-groups"),await br(N,g,u),Pr(N,g,h);const o=await $e(u,h,a,r,N,e);await Sr(i,o,N),await Fr(t,o,N),Xe(N,o),qe(void 0,f,N.getConfigField("padding"),N.getConfigField("useMaxWidth"))},"draw"),Ur={draw:Gr},$r={parser:Ge,get db(){return new Pe},renderer:Ur,styles:Rr};export{$r as diagram}; -//# sourceMappingURL=architectureDiagram-VXUJARFQ-DoviFfeW.js.map +//# sourceMappingURL=architectureDiagram-VXUJARFQ-CSLO5JFe.js.map diff --git a/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js.map b/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js.map similarity index 99% rename from massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js.map rename to massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js.map index 2b9f463fd..09965b35d 100644 --- a/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-DoviFfeW.js.map +++ b/massgen/frontend/web/static/assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js.map @@ -1 +1 @@ -{"version":3,"file":"architectureDiagram-VXUJARFQ-DoviFfeW.js","sources":["../../../../../webui/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.js","../../../../../webui/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.js","../../../../../webui/node_modules/cytoscape-fcose/cytoscape-fcose.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/architectureDiagram-VXUJARFQ.mjs"],"sourcesContent":["(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[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 28);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(5);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth) {\n if (this.labelPosHorizontal == \"left\") {\n this.rect.x -= this.labelWidth;\n this.setWidth(width + this.labelWidth);\n } else if (this.labelPosHorizontal == \"center\" && this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n } else if (this.labelPosHorizontal == \"right\") {\n this.setWidth(width + this.labelWidth);\n }\n }\n\n if (this.labelHeight) {\n if (this.labelPosVertical == \"top\") {\n this.rect.y -= this.labelHeight;\n this.setHeight(height + this.labelHeight);\n } else if (this.labelPosVertical == \"center\" && this.labelHeight > height) {\n this.rect.y -= (this.labelHeight - height) / 2;\n this.setHeight(this.labelHeight);\n } else if (this.labelPosVertical == \"bottom\") {\n this.setHeight(height + this.labelHeight);\n }\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(6); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n var edgesToRemove = [];\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n edgesToRemove.push(edge);\n }\n }\n\n // Remove invalid edges from graph manager\n for (var i = 0; i < edgesToRemove.length; i++) {\n this.remove(edgesToRemove[i]);\n }\n\n // Invalid edges are cleared, so return false\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n/**\n * This method checks and calculates the intersection of \n * a line segment and a circle.\n */\nIGeometry.findCircleLineIntersections = function (Ex, Ey, Lx, Ly, Cx, Cy, r) {\n\n // E is the starting point of the ray,\n // L is the end point of the ray,\n // C is the center of sphere you're testing against\n // r is the radius of that sphere\n\n // Compute:\n // d = L - E ( Direction vector of ray, from start to end )\n // f = E - C ( Vector from center sphere to ray start )\n\n // Then the intersection is found by..\n // P = E + t * d\n // This is a parametric equation:\n // Px = Ex + tdx\n // Py = Ey + tdy\n\n // get a, b, c values\n var a = (Lx - Ex) * (Lx - Ex) + (Ly - Ey) * (Ly - Ey);\n var b = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey));\n var c = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r * r;\n\n // get discriminant\n var disc = b * b - 4 * a * c;\n if (disc >= 0) {\n // insert into quadratic formula\n var t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var intersections = null;\n if (t1 >= 0 && t1 <= 1) {\n // t1 is the intersection, and it's closer than t2\n // (since t1 uses -b - discriminant)\n // Impale, Poke\n return [t1];\n }\n\n // here t1 didn't intersect so we are either started\n // inside the sphere or completely past it\n if (t2 >= 0 && t2 <= 1) {\n // ExitWound\n return [t2];\n }\n\n return intersections;\n } else return null;\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(6);\nvar PointD = __webpack_require__(5);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(29);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(5);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(4);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var originalIdealLength;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n originalIdealLength = edge.idealLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += originalIdealLength * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n // Reassign this attribute by using new constant value\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = edge.edgeElasticity * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n // Here we use half of the nodes' repulsion values for backward compatibility\n repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n\n // Ideal length and elasticity value for this edge\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.edgeElasticity = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n\n // Repulsion value of this node\n this.nodeRepulsion = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Some matrix (1d and 2d array) operations\nfunction Matrix() {}\n\n/**\n * matrix multiplication\n * array1, array2 and result are 2d arrays\n */\nMatrix.multMat = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = [];\n for (var j = 0; j < array2[0].length; j++) {\n result[i][j] = 0;\n for (var k = 0; k < array1[0].length; k++) {\n result[i][j] += array1[i][k] * array2[k][j];\n }\n }\n }\n return result;\n};\n\n/**\n * matrix transpose\n * array and result are 2d arrays\n */\nMatrix.transpose = function (array) {\n var result = [];\n\n for (var i = 0; i < array[0].length; i++) {\n result[i] = [];\n for (var j = 0; j < array.length; j++) {\n result[i][j] = array[j][i];\n }\n }\n\n return result;\n};\n\n/**\n * multiply array with constant\n * array and result are 1d arrays\n */\nMatrix.multCons = function (array, constant) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] * constant;\n }\n\n return result;\n};\n\n/**\n * substract two arrays\n * array1, array2 and result are 1d arrays\n */\nMatrix.minusOp = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = array1[i] - array2[i];\n }\n\n return result;\n};\n\n/**\n * dot product of two arrays with same size\n * array1 and array2 are 1d arrays\n */\nMatrix.dotProduct = function (array1, array2) {\n var product = 0;\n\n for (var i = 0; i < array1.length; i++) {\n product += array1[i] * array2[i];\n }\n\n return product;\n};\n\n/**\n * magnitude of an array\n * array is 1d array\n */\nMatrix.mag = function (array) {\n return Math.sqrt(this.dotProduct(array, array));\n};\n\n/**\n * normalization of an array\n * array and result are 1d array\n */\nMatrix.normalize = function (array) {\n var result = [];\n var magnitude = this.mag(array);\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] / magnitude;\n }\n\n return result;\n};\n\n/**\n * multiply an array with centering matrix\n * array and result are 1d array\n */\nMatrix.multGamma = function (array) {\n var result = [];\n var sum = 0;\n\n for (var i = 0; i < array.length; i++) {\n sum += array[i];\n }\n\n sum *= -1 / array.length;\n\n for (var _i = 0; _i < array.length; _i++) {\n result[_i] = sum + array[_i];\n }\n return result;\n};\n\n/**\n * a special matrix multiplication\n * result = 0.5 * C * INV * C^T * array\n * array and result are 1d, C and INV are 2d arrays\n */\nMatrix.multL = function (array, C, INV) {\n var result = [];\n var temp1 = [];\n var temp2 = [];\n\n // multiply by C^T\n for (var i = 0; i < C[0].length; i++) {\n var sum = 0;\n for (var j = 0; j < C.length; j++) {\n sum += -0.5 * C[j][i] * array[j];\n }\n temp1[i] = sum;\n }\n // multiply the result by INV\n for (var _i2 = 0; _i2 < INV.length; _i2++) {\n var _sum = 0;\n for (var _j = 0; _j < INV.length; _j++) {\n _sum += INV[_i2][_j] * temp1[_j];\n }\n temp2[_i2] = _sum;\n }\n // multiply the result by C\n for (var _i3 = 0; _i3 < C.length; _i3++) {\n var _sum2 = 0;\n for (var _j2 = 0; _j2 < C[0].length; _j2++) {\n _sum2 += C[_i3][_j2] * temp2[_j2];\n }\n result[_i3] = _sum2;\n }\n\n return result;\n};\n\nmodule.exports = Matrix;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Singular Value Decomposition implementation\nfunction SVD() {};\n\n/* Below singular value decomposition (svd) code including hypot function is adopted from https://github.com/dragonfly-ai/JamaJS\n Some changes are applied to make the code compatible with the fcose code and to make it independent from Jama.\n Input matrix is changed to a 2D array instead of Jama matrix. Matrix dimensions are taken according to 2D array instead of using Jama functions.\n An object that includes singular value components is created for return. \n The types of input parameters of the hypot function are removed. \n let is used instead of var for the variable initialization.\n*/\n/*\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*/\n\nSVD.svd = function (A) {\n this.U = null;\n this.V = null;\n this.s = null;\n this.m = 0;\n this.n = 0;\n this.m = A.length;\n this.n = A[0].length;\n var nu = Math.min(this.m, this.n);\n this.s = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(Math.min(this.m + 1, this.n));\n this.U = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.m, nu]);\n this.V = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.n, this.n]);\n var e = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.n);\n var work = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.m);\n var wantu = true;\n var wantv = true;\n var nct = Math.min(this.m - 1, this.n);\n var nrt = Math.max(0, Math.min(this.n - 2, this.m));\n for (var k = 0; k < Math.max(nct, nrt); k++) {\n if (k < nct) {\n this.s[k] = 0;\n for (var i = k; i < this.m; i++) {\n this.s[k] = SVD.hypot(this.s[k], A[i][k]);\n }\n ;\n if (this.s[k] !== 0.0) {\n if (A[k][k] < 0.0) {\n this.s[k] = -this.s[k];\n }\n for (var _i = k; _i < this.m; _i++) {\n A[_i][k] /= this.s[k];\n }\n ;\n A[k][k] += 1.0;\n }\n this.s[k] = -this.s[k];\n }\n for (var j = k + 1; j < this.n; j++) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k < nct, this.s[k] !== 0.0)) {\n var t = 0;\n for (var _i2 = k; _i2 < this.m; _i2++) {\n t += A[_i2][k] * A[_i2][j];\n }\n ;\n t = -t / A[k][k];\n for (var _i3 = k; _i3 < this.m; _i3++) {\n A[_i3][j] += t * A[_i3][k];\n }\n ;\n }\n e[j] = A[k][j];\n }\n ;\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(wantu, k < nct)) {\n for (var _i4 = k; _i4 < this.m; _i4++) {\n this.U[_i4][k] = A[_i4][k];\n }\n ;\n }\n if (k < nrt) {\n e[k] = 0;\n for (var _i5 = k + 1; _i5 < this.n; _i5++) {\n e[k] = SVD.hypot(e[k], e[_i5]);\n }\n ;\n if (e[k] !== 0.0) {\n if (e[k + 1] < 0.0) {\n e[k] = -e[k];\n }\n for (var _i6 = k + 1; _i6 < this.n; _i6++) {\n e[_i6] /= e[k];\n }\n ;\n e[k + 1] += 1.0;\n }\n e[k] = -e[k];\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k + 1 < this.m, e[k] !== 0.0)) {\n for (var _i7 = k + 1; _i7 < this.m; _i7++) {\n work[_i7] = 0.0;\n }\n ;\n for (var _j = k + 1; _j < this.n; _j++) {\n for (var _i8 = k + 1; _i8 < this.m; _i8++) {\n work[_i8] += e[_j] * A[_i8][_j];\n }\n ;\n }\n ;\n for (var _j2 = k + 1; _j2 < this.n; _j2++) {\n var _t = -e[_j2] / e[k + 1];\n for (var _i9 = k + 1; _i9 < this.m; _i9++) {\n A[_i9][_j2] += _t * work[_i9];\n }\n ;\n }\n ;\n }\n if (wantv) {\n for (var _i10 = k + 1; _i10 < this.n; _i10++) {\n this.V[_i10][k] = e[_i10];\n };\n }\n }\n };\n var p = Math.min(this.n, this.m + 1);\n if (nct < this.n) {\n this.s[nct] = A[nct][nct];\n }\n if (this.m < p) {\n this.s[p - 1] = 0.0;\n }\n if (nrt + 1 < p) {\n e[nrt] = A[nrt][p - 1];\n }\n e[p - 1] = 0.0;\n if (wantu) {\n for (var _j3 = nct; _j3 < nu; _j3++) {\n for (var _i11 = 0; _i11 < this.m; _i11++) {\n this.U[_i11][_j3] = 0.0;\n }\n ;\n this.U[_j3][_j3] = 1.0;\n };\n for (var _k = nct - 1; _k >= 0; _k--) {\n if (this.s[_k] !== 0.0) {\n for (var _j4 = _k + 1; _j4 < nu; _j4++) {\n var _t2 = 0;\n for (var _i12 = _k; _i12 < this.m; _i12++) {\n _t2 += this.U[_i12][_k] * this.U[_i12][_j4];\n };\n _t2 = -_t2 / this.U[_k][_k];\n for (var _i13 = _k; _i13 < this.m; _i13++) {\n this.U[_i13][_j4] += _t2 * this.U[_i13][_k];\n };\n };\n for (var _i14 = _k; _i14 < this.m; _i14++) {\n this.U[_i14][_k] = -this.U[_i14][_k];\n };\n this.U[_k][_k] = 1.0 + this.U[_k][_k];\n for (var _i15 = 0; _i15 < _k - 1; _i15++) {\n this.U[_i15][_k] = 0.0;\n };\n } else {\n for (var _i16 = 0; _i16 < this.m; _i16++) {\n this.U[_i16][_k] = 0.0;\n };\n this.U[_k][_k] = 1.0;\n }\n };\n }\n if (wantv) {\n for (var _k2 = this.n - 1; _k2 >= 0; _k2--) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(_k2 < nrt, e[_k2] !== 0.0)) {\n for (var _j5 = _k2 + 1; _j5 < nu; _j5++) {\n var _t3 = 0;\n for (var _i17 = _k2 + 1; _i17 < this.n; _i17++) {\n _t3 += this.V[_i17][_k2] * this.V[_i17][_j5];\n };\n _t3 = -_t3 / this.V[_k2 + 1][_k2];\n for (var _i18 = _k2 + 1; _i18 < this.n; _i18++) {\n this.V[_i18][_j5] += _t3 * this.V[_i18][_k2];\n };\n };\n }\n for (var _i19 = 0; _i19 < this.n; _i19++) {\n this.V[_i19][_k2] = 0.0;\n };\n this.V[_k2][_k2] = 1.0;\n };\n }\n var pp = p - 1;\n var iter = 0;\n var eps = Math.pow(2.0, -52.0);\n var tiny = Math.pow(2.0, -966.0);\n while (p > 0) {\n var _k3 = void 0;\n var kase = void 0;\n for (_k3 = p - 2; _k3 >= -1; _k3--) {\n if (_k3 === -1) {\n break;\n }\n if (Math.abs(e[_k3]) <= tiny + eps * (Math.abs(this.s[_k3]) + Math.abs(this.s[_k3 + 1]))) {\n e[_k3] = 0.0;\n break;\n }\n };\n if (_k3 === p - 2) {\n kase = 4;\n } else {\n var ks = void 0;\n for (ks = p - 1; ks >= _k3; ks--) {\n if (ks === _k3) {\n break;\n }\n var _t4 = (ks !== p ? Math.abs(e[ks]) : 0.0) + (ks !== _k3 + 1 ? Math.abs(e[ks - 1]) : 0.0);\n if (Math.abs(this.s[ks]) <= tiny + eps * _t4) {\n this.s[ks] = 0.0;\n break;\n }\n };\n if (ks === _k3) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n _k3 = ks;\n }\n }\n _k3++;\n switch (kase) {\n case 1:\n {\n var f = e[p - 2];\n e[p - 2] = 0.0;\n for (var _j6 = p - 2; _j6 >= _k3; _j6--) {\n var _t5 = SVD.hypot(this.s[_j6], f);\n var cs = this.s[_j6] / _t5;\n var sn = f / _t5;\n this.s[_j6] = _t5;\n if (_j6 !== _k3) {\n f = -sn * e[_j6 - 1];\n e[_j6 - 1] = cs * e[_j6 - 1];\n }\n if (wantv) {\n for (var _i20 = 0; _i20 < this.n; _i20++) {\n _t5 = cs * this.V[_i20][_j6] + sn * this.V[_i20][p - 1];\n this.V[_i20][p - 1] = -sn * this.V[_i20][_j6] + cs * this.V[_i20][p - 1];\n this.V[_i20][_j6] = _t5;\n };\n }\n };\n };\n break;\n case 2:\n {\n var _f = e[_k3 - 1];\n e[_k3 - 1] = 0.0;\n for (var _j7 = _k3; _j7 < p; _j7++) {\n var _t6 = SVD.hypot(this.s[_j7], _f);\n var _cs = this.s[_j7] / _t6;\n var _sn = _f / _t6;\n this.s[_j7] = _t6;\n _f = -_sn * e[_j7];\n e[_j7] = _cs * e[_j7];\n if (wantu) {\n for (var _i21 = 0; _i21 < this.m; _i21++) {\n _t6 = _cs * this.U[_i21][_j7] + _sn * this.U[_i21][_k3 - 1];\n this.U[_i21][_k3 - 1] = -_sn * this.U[_i21][_j7] + _cs * this.U[_i21][_k3 - 1];\n this.U[_i21][_j7] = _t6;\n };\n }\n };\n };\n break;\n case 3:\n {\n var scale = Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[p - 1]), Math.abs(this.s[p - 2])), Math.abs(e[p - 2])), Math.abs(this.s[_k3])), Math.abs(e[_k3]));\n var sp = this.s[p - 1] / scale;\n var spm1 = this.s[p - 2] / scale;\n var epm1 = e[p - 2] / scale;\n var sk = this.s[_k3] / scale;\n var ek = e[_k3] / scale;\n var b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2.0;\n var c = sp * epm1 * (sp * epm1);\n var shift = 0.0;\n if (function (lhs, rhs) {\n return lhs || rhs;\n }(b !== 0.0, c !== 0.0)) {\n shift = Math.sqrt(b * b + c);\n if (b < 0.0) {\n shift = -shift;\n }\n shift = c / (b + shift);\n }\n var _f2 = (sk + sp) * (sk - sp) + shift;\n var g = sk * ek;\n for (var _j8 = _k3; _j8 < p - 1; _j8++) {\n var _t7 = SVD.hypot(_f2, g);\n var _cs2 = _f2 / _t7;\n var _sn2 = g / _t7;\n if (_j8 !== _k3) {\n e[_j8 - 1] = _t7;\n }\n _f2 = _cs2 * this.s[_j8] + _sn2 * e[_j8];\n e[_j8] = _cs2 * e[_j8] - _sn2 * this.s[_j8];\n g = _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = _cs2 * this.s[_j8 + 1];\n if (wantv) {\n for (var _i22 = 0; _i22 < this.n; _i22++) {\n _t7 = _cs2 * this.V[_i22][_j8] + _sn2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8 + 1] = -_sn2 * this.V[_i22][_j8] + _cs2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8] = _t7;\n };\n }\n _t7 = SVD.hypot(_f2, g);\n _cs2 = _f2 / _t7;\n _sn2 = g / _t7;\n this.s[_j8] = _t7;\n _f2 = _cs2 * e[_j8] + _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = -_sn2 * e[_j8] + _cs2 * this.s[_j8 + 1];\n g = _sn2 * e[_j8 + 1];\n e[_j8 + 1] = _cs2 * e[_j8 + 1];\n if (wantu && _j8 < this.m - 1) {\n for (var _i23 = 0; _i23 < this.m; _i23++) {\n _t7 = _cs2 * this.U[_i23][_j8] + _sn2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8 + 1] = -_sn2 * this.U[_i23][_j8] + _cs2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8] = _t7;\n };\n }\n };\n e[p - 2] = _f2;\n iter = iter + 1;\n };\n break;\n case 4:\n {\n if (this.s[_k3] <= 0.0) {\n this.s[_k3] = this.s[_k3] < 0.0 ? -this.s[_k3] : 0.0;\n if (wantv) {\n for (var _i24 = 0; _i24 <= pp; _i24++) {\n this.V[_i24][_k3] = -this.V[_i24][_k3];\n };\n }\n }\n while (_k3 < pp) {\n if (this.s[_k3] >= this.s[_k3 + 1]) {\n break;\n }\n var _t8 = this.s[_k3];\n this.s[_k3] = this.s[_k3 + 1];\n this.s[_k3 + 1] = _t8;\n if (wantv && _k3 < this.n - 1) {\n for (var _i25 = 0; _i25 < this.n; _i25++) {\n _t8 = this.V[_i25][_k3 + 1];\n this.V[_i25][_k3 + 1] = this.V[_i25][_k3];\n this.V[_i25][_k3] = _t8;\n };\n }\n if (wantu && _k3 < this.m - 1) {\n for (var _i26 = 0; _i26 < this.m; _i26++) {\n _t8 = this.U[_i26][_k3 + 1];\n this.U[_i26][_k3 + 1] = this.U[_i26][_k3];\n this.U[_i26][_k3] = _t8;\n };\n }\n _k3++;\n };\n iter = 0;\n p--;\n };\n break;\n }\n };\n var result = { U: this.U, V: this.V, S: this.s };\n return result;\n};\n\n// sqrt(a^2 + b^2) without under/overflow.\nSVD.hypot = function (a, b) {\n var r = void 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n r = Math.abs(a) * Math.sqrt(1 + r * r);\n } else if (b != 0) {\n r = a / b;\n r = Math.abs(b) * Math.sqrt(1 + r * r);\n } else {\n r = 0.0;\n }\n return r;\n};\n\nmodule.exports = SVD;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(4);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(5);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(25);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(6);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(7);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(27);\nlayoutBase.Matrix = __webpack_require__(24);\nlayoutBase.SVD = __webpack_require__(26);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__551__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 45:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(551);\ncoseBase.CoSEConstants = __webpack_require__(806);\ncoseBase.CoSEEdge = __webpack_require__(767);\ncoseBase.CoSEGraph = __webpack_require__(880);\ncoseBase.CoSEGraphManager = __webpack_require__(578);\ncoseBase.CoSELayout = __webpack_require__(765);\ncoseBase.CoSENode = __webpack_require__(991);\ncoseBase.ConstraintHandler = __webpack_require__(902);\n\nmodule.exports = coseBase;\n\n/***/ }),\n\n/***/ 806:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\nCoSEConstants.ENFORCE_CONSTRAINTS = true;\nCoSEConstants.APPLY_LAYOUT = true;\nCoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS = true;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true; // this should be set to false if there will be a constraint\n// This constant is for differentiating whether actual layout algorithm that uses cose-base wants to apply only incremental layout or \n// an incremental layout on top of a randomized layout. If it is only incremental layout, then this constant should be true.\nCoSEConstants.PURE_INCREMENTAL = CoSEConstants.DEFAULT_INCREMENTAL;\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n\n/***/ 767:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutEdge = __webpack_require__(551).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n\n/***/ 880:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraph = __webpack_require__(551).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n\n/***/ 578:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraphManager = __webpack_require__(551).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n\n/***/ 765:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayout = __webpack_require__(551).FDLayout;\nvar CoSEGraphManager = __webpack_require__(578);\nvar CoSEGraph = __webpack_require__(880);\nvar CoSENode = __webpack_require__(991);\nvar CoSEEdge = __webpack_require__(767);\nvar CoSEConstants = __webpack_require__(806);\nvar ConstraintHandler = __webpack_require__(902);\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(551).LayoutConstants;\nvar Point = __webpack_require__(551).Point;\nvar PointD = __webpack_require__(551).PointD;\nvar DimensionD = __webpack_require__(551).DimensionD;\nvar Layout = __webpack_require__(551).Layout;\nvar Integer = __webpack_require__(551).Integer;\nvar IGeometry = __webpack_require__(551).IGeometry;\nvar LGraph = __webpack_require__(551).LGraph;\nvar Transform = __webpack_require__(551).Transform;\nvar LinkedList = __webpack_require__(551).LinkedList;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n this.constraints = {}; // keep layout constraints\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n }\n};\n\n// This method is used to set CoSE related parameters used by spring embedder.\nCoSELayout.prototype.initSpringEmbedder = function () {\n FDLayout.prototype.initSpringEmbedder.call(this);\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = 0.04;\n this.coolingAdjuster = 1;\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n if (Object.keys(this.constraints).length > 0) {\n ConstraintHandler.handleConstraints(this);\n this.initConstraintVariables();\n }\n\n this.initSpringEmbedder();\n if (CoSEConstants.APPLY_LAYOUT) {\n this.runSpringEmbedder();\n }\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2;else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2 * ((100 - this.afterGrowthIterations) / 100);else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\n// overrides moveNodes method in FDLayout\nCoSELayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n // calculate displacement for each node \n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.calculateDisplacement();\n }\n\n if (Object.keys(this.constraints).length > 0) {\n this.updateDisplacements();\n }\n\n // move each node\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\n// constraint related methods: initConstraintVariables and updateDisplacements\n\n// initialize constraint related variables\nCoSELayout.prototype.initConstraintVariables = function () {\n var self = this;\n this.idToNodeMap = new Map();\n this.fixedNodeSet = new Set();\n\n var allNodes = this.graphManager.getAllNodes();\n\n // fill idToNodeMap\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n this.idToNodeMap.set(node.id, node);\n }\n\n // calculate fixed node weight for given compound node\n var calculateCompoundWeight = function calculateCompoundWeight(compoundNode) {\n var nodes = compoundNode.getChild().getNodes();\n var node;\n var fixedNodeWeight = 0;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n if (self.fixedNodeSet.has(node.id)) {\n fixedNodeWeight += 100;\n }\n } else {\n fixedNodeWeight += calculateCompoundWeight(node);\n }\n }\n return fixedNodeWeight;\n };\n\n if (this.constraints.fixedNodeConstraint) {\n // fill fixedNodeSet\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n self.fixedNodeSet.add(nodeData.nodeId);\n });\n\n // assign fixed node weights to compounds if they contain fixed nodes\n var allNodes = this.graphManager.getAllNodes();\n var node;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getChild() != null) {\n var fixedNodeWeight = calculateCompoundWeight(node);\n if (fixedNodeWeight > 0) {\n node.fixedNodeWeight = fixedNodeWeight;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n this.dummyToNodeForVerticalAlignment = new Map();\n this.dummyToNodeForHorizontalAlignment = new Map();\n this.fixedNodesOnHorizontal = new Set();\n this.fixedNodesOnVertical = new Set();\n\n // fill maps and sets\n this.fixedNodeSet.forEach(function (nodeId) {\n self.fixedNodesOnHorizontal.add(nodeId);\n self.fixedNodesOnVertical.add(nodeId);\n });\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var verticalAlignment = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < verticalAlignment.length; i++) {\n this.dummyToNodeForVerticalAlignment.set(\"dummy\" + i, []);\n verticalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForVerticalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnHorizontal.add(\"dummy\" + i);\n }\n });\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < horizontalAlignment.length; i++) {\n this.dummyToNodeForHorizontalAlignment.set(\"dummy\" + i, []);\n horizontalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForHorizontalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnVertical.add(\"dummy\" + i);\n }\n });\n }\n }\n }\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n\n this.shuffle = function (array) {\n var j, x, i;\n for (i = array.length - 1; i >= 2 * array.length / 3; i--) {\n j = Math.floor(Math.random() * (i + 1));\n x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n };\n\n this.nodesInRelativeHorizontal = [];\n this.nodesInRelativeVertical = [];\n this.nodeToRelativeConstraintMapHorizontal = new Map();\n this.nodeToRelativeConstraintMapVertical = new Map();\n this.nodeToTempPositionMapHorizontal = new Map();\n this.nodeToTempPositionMapVertical = new Map();\n\n // fill arrays and maps\n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var nodeIdLeft = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var nodeIdRight = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n\n if (!self.nodesInRelativeHorizontal.includes(nodeIdLeft)) {\n self.nodesInRelativeHorizontal.push(nodeIdLeft);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdLeft, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdLeft)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdLeft)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(nodeIdLeft).getCenterX());\n }\n }\n if (!self.nodesInRelativeHorizontal.includes(nodeIdRight)) {\n self.nodesInRelativeHorizontal.push(nodeIdRight);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdRight, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdRight)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdRight)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(nodeIdRight).getCenterX());\n }\n }\n\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdLeft).push({ right: nodeIdRight, gap: constraint.gap });\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdRight).push({ left: nodeIdLeft, gap: constraint.gap });\n } else {\n var nodeIdTop = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var nodeIdBottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n\n if (!self.nodesInRelativeVertical.includes(nodeIdTop)) {\n self.nodesInRelativeVertical.push(nodeIdTop);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdTop, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdTop)) {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdTop)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(nodeIdTop).getCenterY());\n }\n }\n if (!self.nodesInRelativeVertical.includes(nodeIdBottom)) {\n self.nodesInRelativeVertical.push(nodeIdBottom);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdBottom, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdBottom)) {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdBottom)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(nodeIdBottom).getCenterY());\n }\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeIdTop).push({ bottom: nodeIdBottom, gap: constraint.gap });\n self.nodeToRelativeConstraintMapVertical.get(nodeIdBottom).push({ top: nodeIdTop, gap: constraint.gap });\n }\n });\n } else {\n var subGraphOnHorizontal = new Map(); // subgraph from vertical RP constraints\n var subGraphOnVertical = new Map(); // subgraph from vertical RP constraints\n\n // construct subgraphs from relative placement constraints \n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var left = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var right = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n if (subGraphOnHorizontal.has(left)) {\n subGraphOnHorizontal.get(left).push(right);\n } else {\n subGraphOnHorizontal.set(left, [right]);\n }\n if (subGraphOnHorizontal.has(right)) {\n subGraphOnHorizontal.get(right).push(left);\n } else {\n subGraphOnHorizontal.set(right, [left]);\n }\n } else {\n var top = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var bottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n if (subGraphOnVertical.has(top)) {\n subGraphOnVertical.get(top).push(bottom);\n } else {\n subGraphOnVertical.set(top, [bottom]);\n }\n if (subGraphOnVertical.has(bottom)) {\n subGraphOnVertical.get(bottom).push(top);\n } else {\n subGraphOnVertical.set(bottom, [top]);\n }\n }\n });\n\n // function to construct components from a given graph \n // also returns an array that keeps whether each component contains fixed node\n var constructComponents = function constructComponents(graph, fixedNodes) {\n var components = [];\n var isFixed = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n isFixed[count] = false;\n var currentNode = key;\n queue.push(currentNode);\n visited.add(currentNode);\n components[count].push(currentNode);\n\n while (queue.length != 0) {\n currentNode = queue.shift();\n if (fixedNodes.has(currentNode)) {\n isFixed[count] = true;\n }\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor)) {\n queue.push(neighbor);\n visited.add(neighbor);\n components[count].push(neighbor);\n }\n });\n }\n count++;\n }\n });\n\n return { components: components, isFixed: isFixed };\n };\n\n var resultOnHorizontal = constructComponents(subGraphOnHorizontal, self.fixedNodesOnHorizontal);\n this.componentsOnHorizontal = resultOnHorizontal.components;\n this.fixedComponentsOnHorizontal = resultOnHorizontal.isFixed;\n var resultOnVertical = constructComponents(subGraphOnVertical, self.fixedNodesOnVertical);\n this.componentsOnVertical = resultOnVertical.components;\n this.fixedComponentsOnVertical = resultOnVertical.isFixed;\n }\n }\n};\n\n// updates node displacements based on constraints\nCoSELayout.prototype.updateDisplacements = function () {\n var self = this;\n if (this.constraints.fixedNodeConstraint) {\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n var fixedNode = self.idToNodeMap.get(nodeData.nodeId);\n fixedNode.displacementX = 0;\n fixedNode.displacementY = 0;\n });\n }\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var allVerticalAlignments = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < allVerticalAlignments.length; i++) {\n var totalDisplacementX = 0;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allVerticalAlignments[i][j])) {\n totalDisplacementX = 0;\n break;\n }\n totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX;\n }\n var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i].length;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX = averageDisplacementX;\n }\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var allHorizontalAlignments = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < allHorizontalAlignments.length; i++) {\n var totalDisplacementY = 0;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allHorizontalAlignments[i][j])) {\n totalDisplacementY = 0;\n break;\n }\n totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY;\n }\n var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i].length;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY = averageDisplacementY;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n // shuffle array to randomize node processing order\n if (this.totalIterations % 10 == 0) {\n this.shuffle(this.nodesInRelativeHorizontal);\n this.shuffle(this.nodesInRelativeVertical);\n }\n\n this.nodesInRelativeHorizontal.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeId)[0]).displacementX;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementX;\n }\n self.nodeToRelativeConstraintMapHorizontal.get(nodeId).forEach(function (constraint) {\n if (constraint.right) {\n var diff = self.nodeToTempPositionMapHorizontal.get(constraint.right) - self.nodeToTempPositionMapHorizontal.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapHorizontal.get(nodeId) - self.nodeToTempPositionMapHorizontal.get(constraint.left) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapHorizontal.set(nodeId, self.nodeToTempPositionMapHorizontal.get(nodeId) + displacement);\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n self.dummyToNodeForVerticalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n }\n }\n });\n\n this.nodesInRelativeVertical.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeId)[0]).displacementY;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementY;\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeId).forEach(function (constraint) {\n if (constraint.bottom) {\n var diff = self.nodeToTempPositionMapVertical.get(constraint.bottom) - self.nodeToTempPositionMapVertical.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapVertical.get(nodeId) - self.nodeToTempPositionMapVertical.get(constraint.top) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapVertical.set(nodeId, self.nodeToTempPositionMapVertical.get(nodeId) + displacement);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n self.dummyToNodeForHorizontalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n }\n }\n });\n } else {\n for (var i = 0; i < this.componentsOnHorizontal.length; i++) {\n var component = this.componentsOnHorizontal[i];\n if (this.fixedComponentsOnHorizontal[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForVerticalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementX;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = averageDisplacement;\n }\n }\n }\n }\n\n for (var i = 0; i < this.componentsOnVertical.length; i++) {\n var component = this.componentsOnVertical[i];\n if (this.fixedComponentsOnVertical[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementY;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = averageDisplacement;\n }\n }\n }\n }\n }\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n compoundNode.setCenter(tiledZeroDegreePack[id].centerX, tiledZeroDegreePack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n var labelMarginLeft = lCompoundNode.labelMarginLeft;\n var labelMarginTop = lCompoundNode.labelMarginTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n var labelMarginLeft = compoundNode.labelMarginLeft;\n var labelMarginTop = compoundNode.labelMarginTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) {\n x += compoundHorizontalMargin + compoundLabelMarginLeft;\n y += compoundVerticalMargin + compoundLabelMarginTop;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n compoundNode.setCenter(self.tiledMemberPack[id].centerX, self.tiledMemberPack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var horizontalOrg = this.tileNodesByFavoringDim(nodes, minWidth, true);\n var verticalOrg = this.tileNodesByFavoringDim(nodes, minWidth, false);\n\n var horizontalRatio = this.getOrgRatio(horizontalOrg);\n var verticalRatio = this.getOrgRatio(verticalOrg);\n var bestOrg;\n\n // the best ratio is the one that is closer to 1 since the ratios are already normalized\n // and the best organization is the one that has the best ratio\n if (verticalRatio < horizontalRatio) {\n bestOrg = verticalOrg;\n } else {\n bestOrg = horizontalOrg;\n }\n\n return bestOrg;\n};\n\n// get the width/height ratio of the organization that is normalized so that it will not be less than 1\nCoSELayout.prototype.getOrgRatio = function (organization) {\n // get dimensions and calculate the initial ratio\n var width = organization.width;\n var height = organization.height;\n var ratio = width / height;\n\n // if the initial ratio is less then 1 then inverse it\n if (ratio < 1) {\n ratio = 1 / ratio;\n }\n\n // return the normalized ratio\n return ratio;\n};\n\n/*\n * Calculates the ideal width for the rows. This method assumes that\n * each node has the same sizes and calculates the ideal row width that\n * approximates a square shaped complex accordingly. However, since nodes would\n * have different sizes some rows would have different sizes and the resulting\n * shape would not be an exact square.\n */\nCoSELayout.prototype.calcIdealRowWidth = function (members, favorHorizontalDim) {\n // To approximate a square shaped complex we need to make complex width equal to complex height.\n // To achieve this we need to solve the following equation system for hc:\n // (x + bx) * hc - bx = (y + by) * vc - by, hc * vc = n\n // where x is the avarage width of the nodes, y is the avarage height of nodes\n // bx and by are the buffer sizes in horizontal and vertical dimensions accordingly,\n // hc and vc are the number of rows in horizontal and vertical dimensions\n // n is number of members.\n\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n\n // number of members\n var membersSize = members.length;\n\n // sum of the width of all members\n var totalWidth = 0;\n\n // sum of the height of all members\n var totalHeight = 0;\n\n var maxWidth = 0;\n\n // traverse all members to calculate total width and total height and get the maximum members width\n members.forEach(function (node) {\n totalWidth += node.getWidth();\n totalHeight += node.getHeight();\n\n if (node.getWidth() > maxWidth) {\n maxWidth = node.getWidth();\n }\n });\n\n // average width of the members\n var averageWidth = totalWidth / membersSize;\n\n // average height of the members\n var averageHeight = totalHeight / membersSize;\n\n // solving the initial equation system for the hc yields the following second degree equation:\n // hc^2 * (x+bx) + hc * (by - bx) - n * (y + by) = 0\n\n // the delta value to solve the equation above for hc\n var delta = Math.pow(verticalPadding - horizontalPadding, 2) + 4 * (averageWidth + horizontalPadding) * (averageHeight + verticalPadding) * membersSize;\n\n // solve the equation using delta value to calculate the horizontal count\n // that represents the number of nodes in an ideal row\n var horizontalCountDouble = (horizontalPadding - verticalPadding + Math.sqrt(delta)) / (2 * (averageWidth + horizontalPadding));\n // round the calculated horizontal count up or down according to the favored dimension\n var horizontalCount;\n\n if (favorHorizontalDim) {\n horizontalCount = Math.ceil(horizontalCountDouble);\n // if horizontalCount count is not a float value then both of rounding to floor and ceil\n // will yield the same values. Instead of repeating the same calculation try going up\n // while favoring horizontal dimension in such cases\n if (horizontalCount == horizontalCountDouble) {\n horizontalCount++;\n }\n } else {\n horizontalCount = Math.floor(horizontalCountDouble);\n }\n\n // ideal width to be calculated\n var idealWidth = horizontalCount * (averageWidth + horizontalPadding) - horizontalPadding;\n\n // if max width is bigger than calculated ideal width reset ideal width to it\n if (maxWidth > idealWidth) {\n idealWidth = maxWidth;\n }\n\n // add the left-right margins to the ideal row width\n idealWidth += horizontalPadding * 2;\n\n // return the ideal row width1\n return idealWidth;\n};\n\nCoSELayout.prototype.tileNodesByFavoringDim = function (nodes, minWidth, favorHorizontalDim) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var tilingCompareBy = CoSEConstants.TILING_COMPARE_BY;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding,\n centerX: 0,\n centerY: 0\n };\n\n if (tilingCompareBy) {\n organization.idealRowWidth = this.calcIdealRowWidth(nodes, favorHorizontalDim);\n }\n\n var getNodeArea = function getNodeArea(n) {\n return n.rect.width * n.rect.height;\n };\n\n var areaCompareFcn = function areaCompareFcn(n1, n2) {\n return getNodeArea(n2) - getNodeArea(n1);\n };\n\n // Sort the nodes in descending order of their areas\n nodes.sort(function (n1, n2) {\n var cmpBy = areaCompareFcn;\n if (organization.idealRowWidth) {\n cmpBy = tilingCompareBy;\n return cmpBy(n1.id, n2.id);\n }\n return cmpBy(n1, n2);\n });\n\n // Create the organization -> calculate compound center\n var sumCenterX = 0;\n var sumCenterY = 0;\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n sumCenterX += lNode.getCenterX();\n sumCenterY += lNode.getCenterY();\n }\n\n organization.centerX = sumCenterX / nodes.length;\n organization.centerY = sumCenterY / nodes.length;\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n var rowIndex = organization.rows.length - 1;\n if (!organization.idealRowWidth) {\n rowIndex = this.getShortestRowIndex(organization);\n }\n this.insertNodeToRow(organization, lNode, rowIndex, minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n // if there is an ideal row width specified use it instead of checking the aspect ratio\n if (organization.idealRowWidth) {\n var lastRowIndex = organization.rows.length - 1;\n var lastRowWidth = organization.rowWidth[lastRowIndex];\n\n // check and return if ideal row width will be exceed if the node is added to the row\n return lastRowWidth + extraWidth + organization.horizontalPadding <= organization.idealRowWidth;\n }\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n if (CoSEConstants.PURE_INCREMENTAL) {\n var otherEnd = node.getEdges()[0].getOtherEnd(node);\n var relativePosition = new DimensionD(node.getCenterX() - otherEnd.getCenterX(), node.getCenterY() - otherEnd.getCenterY());\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner(), relativePosition]);\n } else {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n }\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n\n if (CoSEConstants.PURE_INCREMENTAL) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeData[3].getWidth(), nodeToConnect.getCenterY() + nodeData[3].getHeight());\n } else {\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n\n/***/ 991:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutNode = __webpack_require__(551).FDLayoutNode;\nvar IMath = __webpack_require__(551).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.calculateDisplacement = function () {\n var layout = this.graphManager.getLayout();\n // this check is for compound nodes that contain fixed nodes\n if (this.getChild() != null && this.fixedNodeWeight) {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight;\n } else {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n }\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // non-empty compound node, propogate movement to children as well\n if (this.child && this.child.getNodes().length > 0) {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n\n // a simple node or an empty compound node, move it\n if (this.child == null || this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n }\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n\n/***/ 902:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar CoSEConstants = __webpack_require__(806);\nvar LinkedList = __webpack_require__(551).LinkedList;\nvar Matrix = __webpack_require__(551).Matrix;\nvar SVD = __webpack_require__(551).SVD;\n\nfunction ConstraintHandler() {}\n\nConstraintHandler.handleConstraints = function (layout) {\n // let layout = this.graphManager.getLayout();\n\n // get constraints from layout\n var constraints = {};\n constraints.fixedNodeConstraint = layout.constraints.fixedNodeConstraint;\n constraints.alignmentConstraint = layout.constraints.alignmentConstraint;\n constraints.relativePlacementConstraint = layout.constraints.relativePlacementConstraint;\n\n var idToNodeMap = new Map();\n var nodeIndexes = new Map();\n var xCoords = [];\n var yCoords = [];\n\n var allNodes = layout.getAllNodes();\n var index = 0;\n // fill index map and coordinates\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n if (node.getChild() == null) {\n nodeIndexes.set(node.id, index++);\n xCoords.push(node.getCenterX());\n yCoords.push(node.getCenterY());\n idToNodeMap.set(node.id, node);\n }\n }\n\n // if there exists relative placement constraint without gap value, set it to default \n if (constraints.relativePlacementConstraint) {\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (!constraint.gap && constraint.gap != 0) {\n if (constraint.left) {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.left).getWidth() / 2 + idToNodeMap.get(constraint.right).getWidth() / 2;\n } else {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.top).getHeight() / 2 + idToNodeMap.get(constraint.bottom).getHeight() / 2;\n }\n }\n });\n }\n\n /* auxiliary functions */\n\n // calculate difference between two position objects\n var calculatePositionDiff = function calculatePositionDiff(pos1, pos2) {\n return { x: pos1.x - pos2.x, y: pos1.y - pos2.y };\n };\n\n // calculate average position of the nodes\n var calculateAvgPosition = function calculateAvgPosition(nodeIdSet) {\n var xPosSum = 0;\n var yPosSum = 0;\n nodeIdSet.forEach(function (nodeId) {\n xPosSum += xCoords[nodeIndexes.get(nodeId)];\n yPosSum += yCoords[nodeIndexes.get(nodeId)];\n });\n\n return { x: xPosSum / nodeIdSet.size, y: yPosSum / nodeIdSet.size };\n };\n\n // find an appropriate positioning for the nodes in a given graph according to relative placement constraints\n // this function also takes the fixed nodes and alignment constraints into account\n // graph: dag to be evaluated, direction: \"horizontal\" or \"vertical\", \n // fixedNodes: set of fixed nodes to consider during evaluation, dummyPositions: appropriate coordinates of the dummy nodes \n var findAppropriatePositionForRelativePlacement = function findAppropriatePositionForRelativePlacement(graph, direction, fixedNodes, dummyPositions, componentSources) {\n\n // find union of two sets\n function setUnion(setA, setB) {\n var union = new Set(setA);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var elem = _step.value;\n\n union.add(elem);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return union;\n }\n\n // find indegree count for each node\n var inDegrees = new Map();\n\n graph.forEach(function (value, key) {\n inDegrees.set(key, 0);\n });\n graph.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n inDegrees.set(adjacent.id, inDegrees.get(adjacent.id) + 1);\n });\n });\n\n var positionMap = new Map(); // keeps the position for each node\n var pastMap = new Map(); // keeps the predecessors(past) of a node\n var queue = new LinkedList();\n inDegrees.forEach(function (value, key) {\n if (value == 0) {\n queue.push(key);\n if (!fixedNodes) {\n if (direction == \"horizontal\") {\n positionMap.set(key, nodeIndexes.has(key) ? xCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n } else {\n positionMap.set(key, nodeIndexes.has(key) ? yCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n }\n }\n } else {\n positionMap.set(key, Number.NEGATIVE_INFINITY);\n }\n if (fixedNodes) {\n pastMap.set(key, new Set([key]));\n }\n });\n\n // align sources of each component in enforcement phase\n if (fixedNodes) {\n componentSources.forEach(function (component) {\n var fixedIds = [];\n component.forEach(function (nodeId) {\n if (fixedNodes.has(nodeId)) {\n fixedIds.push(nodeId);\n }\n });\n if (fixedIds.length > 0) {\n var position = 0;\n fixedIds.forEach(function (fixedId) {\n if (direction == \"horizontal\") {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? xCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n } else {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? yCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n }\n });\n position = position / fixedIds.length;\n component.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) {\n positionMap.set(nodeId, position);\n }\n });\n } else {\n var _position = 0;\n component.forEach(function (nodeId) {\n if (direction == \"horizontal\") {\n _position += nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n _position += nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n });\n _position = _position / component.length;\n component.forEach(function (nodeId) {\n positionMap.set(nodeId, _position);\n });\n }\n });\n }\n\n // calculate positions of the nodes\n\n var _loop = function _loop() {\n var currentNode = queue.shift();\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (positionMap.get(neighbor.id) < positionMap.get(currentNode) + neighbor.gap) {\n if (fixedNodes && fixedNodes.has(neighbor.id)) {\n var fixedPosition = void 0;\n if (direction == \"horizontal\") {\n fixedPosition = nodeIndexes.has(neighbor.id) ? xCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n } else {\n fixedPosition = nodeIndexes.has(neighbor.id) ? yCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n }\n positionMap.set(neighbor.id, fixedPosition); // TODO: may do unnecessary work\n if (fixedPosition < positionMap.get(currentNode) + neighbor.gap) {\n var diff = positionMap.get(currentNode) + neighbor.gap - fixedPosition;\n pastMap.get(currentNode).forEach(function (nodeId) {\n positionMap.set(nodeId, positionMap.get(nodeId) - diff);\n });\n }\n } else {\n positionMap.set(neighbor.id, positionMap.get(currentNode) + neighbor.gap);\n }\n }\n inDegrees.set(neighbor.id, inDegrees.get(neighbor.id) - 1);\n if (inDegrees.get(neighbor.id) == 0) {\n queue.push(neighbor.id);\n }\n if (fixedNodes) {\n pastMap.set(neighbor.id, setUnion(pastMap.get(currentNode), pastMap.get(neighbor.id)));\n }\n });\n };\n\n while (queue.length != 0) {\n _loop();\n }\n\n // readjust position of the nodes after enforcement\n if (fixedNodes) {\n // find indegree count for each node\n var sinkNodes = new Set();\n\n graph.forEach(function (value, key) {\n if (value.length == 0) {\n sinkNodes.add(key);\n }\n });\n\n var _components = [];\n pastMap.forEach(function (value, key) {\n if (sinkNodes.has(key)) {\n var isFixedComponent = false;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = value[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var nodeId = _step2.value;\n\n if (fixedNodes.has(nodeId)) {\n isFixedComponent = true;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n if (!isFixedComponent) {\n var isExist = false;\n var existAt = void 0;\n _components.forEach(function (component, index) {\n if (component.has([].concat(_toConsumableArray(value))[0])) {\n isExist = true;\n existAt = index;\n }\n });\n if (!isExist) {\n _components.push(new Set(value));\n } else {\n value.forEach(function (ele) {\n _components[existAt].add(ele);\n });\n }\n }\n }\n });\n\n _components.forEach(function (component, index) {\n var minBefore = Number.POSITIVE_INFINITY;\n var minAfter = Number.POSITIVE_INFINITY;\n var maxBefore = Number.NEGATIVE_INFINITY;\n var maxAfter = Number.NEGATIVE_INFINITY;\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = component[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var nodeId = _step3.value;\n\n var posBefore = void 0;\n if (direction == \"horizontal\") {\n posBefore = nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n posBefore = nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n var posAfter = positionMap.get(nodeId);\n if (posBefore < minBefore) {\n minBefore = posBefore;\n }\n if (posBefore > maxBefore) {\n maxBefore = posBefore;\n }\n if (posAfter < minAfter) {\n minAfter = posAfter;\n }\n if (posAfter > maxAfter) {\n maxAfter = posAfter;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n var diff = (minBefore + maxBefore) / 2 - (minAfter + maxAfter) / 2;\n\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = component[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _nodeId = _step4.value;\n\n positionMap.set(_nodeId, positionMap.get(_nodeId) + diff);\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n });\n }\n\n return positionMap;\n };\n\n // find transformation based on rel. placement constraints if there are both alignment and rel. placement constraints\n // or if there are only rel. placement contraints where the largest component isn't sufficiently large\n var applyReflectionForRelativePlacement = function applyReflectionForRelativePlacement(relativePlacementConstraints) {\n // variables to count votes\n var reflectOnY = 0,\n notReflectOnY = 0;\n var reflectOnX = 0,\n notReflectOnX = 0;\n\n relativePlacementConstraints.forEach(function (constraint) {\n if (constraint.left) {\n xCoords[nodeIndexes.get(constraint.left)] - xCoords[nodeIndexes.get(constraint.right)] >= 0 ? reflectOnY++ : notReflectOnY++;\n } else {\n yCoords[nodeIndexes.get(constraint.top)] - yCoords[nodeIndexes.get(constraint.bottom)] >= 0 ? reflectOnX++ : notReflectOnX++;\n }\n });\n\n if (reflectOnY > notReflectOnY && reflectOnX > notReflectOnX) {\n for (var _i = 0; _i < nodeIndexes.size; _i++) {\n xCoords[_i] = -1 * xCoords[_i];\n yCoords[_i] = -1 * yCoords[_i];\n }\n } else if (reflectOnY > notReflectOnY) {\n for (var _i2 = 0; _i2 < nodeIndexes.size; _i2++) {\n xCoords[_i2] = -1 * xCoords[_i2];\n }\n } else if (reflectOnX > notReflectOnX) {\n for (var _i3 = 0; _i3 < nodeIndexes.size; _i3++) {\n yCoords[_i3] = -1 * yCoords[_i3];\n }\n }\n };\n\n // find weakly connected components in undirected graph\n var findComponents = function findComponents(graph) {\n // find weakly connected components in dag\n var components = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n var _currentNode = key;\n queue.push(_currentNode);\n visited.add(_currentNode);\n components[count].push(_currentNode);\n\n while (queue.length != 0) {\n _currentNode = queue.shift();\n var neighbors = graph.get(_currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor.id)) {\n queue.push(neighbor.id);\n visited.add(neighbor.id);\n components[count].push(neighbor.id);\n }\n });\n }\n count++;\n }\n });\n return components;\n };\n\n // return undirected version of given dag\n var dagToUndirected = function dagToUndirected(dag) {\n var undirected = new Map();\n\n dag.forEach(function (value, key) {\n undirected.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n undirected.get(key).push(adjacent);\n undirected.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return undirected;\n };\n\n // return reversed (directions inverted) version of given dag\n var dagToReversed = function dagToReversed(dag) {\n var reversed = new Map();\n\n dag.forEach(function (value, key) {\n reversed.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n reversed.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return reversed;\n };\n\n /**** apply transformation to the initial draft layout to better align with constrained nodes ****/\n // solve the Orthogonal Procrustean Problem to rotate and/or reflect initial draft layout\n // here we follow the solution in Chapter 20.2 of Borg, I. & Groenen, P. (2005) Modern Multidimensional Scaling: Theory and Applications \n\n /* construct source and target configurations */\n\n var targetMatrix = []; // A - target configuration\n var sourceMatrix = []; // B - source configuration \n var standardTransformation = false; // false for no transformation, true for standart (Procrustes) transformation (rotation and/or reflection)\n var reflectionType = false; // false/true for reflection check, 'reflectOnX', 'reflectOnY' or 'reflectOnBoth' for reflection type if necessary\n var fixedNodes = new Set();\n var dag = new Map(); // adjacency list to keep directed acyclic graph (dag) that consists of relative placement constraints\n var dagUndirected = new Map(); // undirected version of the dag\n var components = []; // weakly connected components\n\n // fill fixedNodes collection to use later\n if (constraints.fixedNodeConstraint) {\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n fixedNodes.add(nodeData.nodeId);\n });\n }\n\n // construct dag from relative placement constraints \n if (constraints.relativePlacementConstraint) {\n // construct both directed and undirected version of the dag\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n if (dag.has(constraint.left)) {\n dag.get(constraint.left).push({ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" });\n } else {\n dag.set(constraint.left, [{ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" }]);\n }\n if (!dag.has(constraint.right)) {\n dag.set(constraint.right, []);\n }\n } else {\n if (dag.has(constraint.top)) {\n dag.get(constraint.top).push({ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" });\n } else {\n dag.set(constraint.top, [{ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" }]);\n }\n if (!dag.has(constraint.bottom)) {\n dag.set(constraint.bottom, []);\n }\n }\n });\n\n dagUndirected = dagToUndirected(dag);\n components = findComponents(dagUndirected);\n }\n\n if (CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING) {\n // first check fixed node constraint\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 1) {\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n targetMatrix[i] = [nodeData.position.x, nodeData.position.y];\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeData.nodeId)], yCoords[nodeIndexes.get(nodeData.nodeId)]];\n });\n standardTransformation = true;\n } else if (constraints.alignmentConstraint) {\n (function () {\n // then check alignment constraint\n var count = 0;\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlign = constraints.alignmentConstraint.vertical;\n\n var _loop2 = function _loop2(_i4) {\n var alignmentSet = new Set();\n verticalAlign[_i4].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n verticalAlign[_i4].forEach(function (nodeId) {\n targetMatrix[count] = [xPos, yCoords[nodeIndexes.get(nodeId)]];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i4 = 0; _i4 < verticalAlign.length; _i4++) {\n _loop2(_i4);\n }\n standardTransformation = true;\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop3 = function _loop3(_i5) {\n var alignmentSet = new Set();\n horizontalAlign[_i5].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n horizontalAlign[_i5].forEach(function (nodeId) {\n targetMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yPos];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i5 = 0; _i5 < horizontalAlign.length; _i5++) {\n _loop3(_i5);\n }\n standardTransformation = true;\n }\n if (constraints.relativePlacementConstraint) {\n reflectionType = true;\n }\n })();\n } else if (constraints.relativePlacementConstraint) {\n // finally check relative placement constraint\n // find largest component in dag\n var largestComponentSize = 0;\n var largestComponentIndex = 0;\n for (var _i6 = 0; _i6 < components.length; _i6++) {\n if (components[_i6].length > largestComponentSize) {\n largestComponentSize = components[_i6].length;\n largestComponentIndex = _i6;\n }\n }\n // if largest component isn't dominant, then take the votes for reflection\n if (largestComponentSize < dagUndirected.size / 2) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n standardTransformation = false;\n reflectionType = false;\n } else {\n // use largest component for transformation\n // construct horizontal and vertical subgraphs in the largest component\n var subGraphOnHorizontal = new Map();\n var subGraphOnVertical = new Map();\n var constraintsInlargestComponent = [];\n\n components[largestComponentIndex].forEach(function (nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n if (adjacent.direction == \"horizontal\") {\n if (subGraphOnHorizontal.has(nodeId)) {\n subGraphOnHorizontal.get(nodeId).push(adjacent);\n } else {\n subGraphOnHorizontal.set(nodeId, [adjacent]);\n }\n if (!subGraphOnHorizontal.has(adjacent.id)) {\n subGraphOnHorizontal.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ left: nodeId, right: adjacent.id });\n } else {\n if (subGraphOnVertical.has(nodeId)) {\n subGraphOnVertical.get(nodeId).push(adjacent);\n } else {\n subGraphOnVertical.set(nodeId, [adjacent]);\n }\n if (!subGraphOnVertical.has(adjacent.id)) {\n subGraphOnVertical.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ top: nodeId, bottom: adjacent.id });\n }\n });\n });\n\n applyReflectionForRelativePlacement(constraintsInlargestComponent);\n reflectionType = false;\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(subGraphOnHorizontal, \"horizontal\");\n var positionMapVertical = findAppropriatePositionForRelativePlacement(subGraphOnVertical, \"vertical\");\n\n // construct source and target configuration\n components[largestComponentIndex].forEach(function (nodeId, i) {\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n targetMatrix[i] = [];\n if (positionMapHorizontal.has(nodeId)) {\n targetMatrix[i][0] = positionMapHorizontal.get(nodeId);\n } else {\n targetMatrix[i][0] = xCoords[nodeIndexes.get(nodeId)];\n }\n if (positionMapVertical.has(nodeId)) {\n targetMatrix[i][1] = positionMapVertical.get(nodeId);\n } else {\n targetMatrix[i][1] = yCoords[nodeIndexes.get(nodeId)];\n }\n });\n\n standardTransformation = true;\n }\n }\n\n // if transformation is required, then calculate and apply transformation matrix\n if (standardTransformation) {\n /* calculate transformation matrix */\n var transformationMatrix = void 0;\n var targetMatrixTranspose = Matrix.transpose(targetMatrix); // A'\n var sourceMatrixTranspose = Matrix.transpose(sourceMatrix); // B'\n\n // centralize transpose matrices\n for (var _i7 = 0; _i7 < targetMatrixTranspose.length; _i7++) {\n targetMatrixTranspose[_i7] = Matrix.multGamma(targetMatrixTranspose[_i7]);\n sourceMatrixTranspose[_i7] = Matrix.multGamma(sourceMatrixTranspose[_i7]);\n }\n\n // do actual calculation for transformation matrix\n var tempMatrix = Matrix.multMat(targetMatrixTranspose, Matrix.transpose(sourceMatrixTranspose)); // tempMatrix = A'B\n var SVDResult = SVD.svd(tempMatrix); // SVD(A'B) = USV', svd function returns U, S and V \n transformationMatrix = Matrix.multMat(SVDResult.V, Matrix.transpose(SVDResult.U)); // transformationMatrix = T = VU'\n\n /* apply found transformation matrix to obtain final draft layout */\n for (var _i8 = 0; _i8 < nodeIndexes.size; _i8++) {\n var temp1 = [xCoords[_i8], yCoords[_i8]];\n var temp2 = [transformationMatrix[0][0], transformationMatrix[1][0]];\n var temp3 = [transformationMatrix[0][1], transformationMatrix[1][1]];\n xCoords[_i8] = Matrix.dotProduct(temp1, temp2);\n yCoords[_i8] = Matrix.dotProduct(temp1, temp3);\n }\n\n // applied only both alignment and rel. placement constraints exist\n if (reflectionType) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n }\n }\n }\n\n if (CoSEConstants.ENFORCE_CONSTRAINTS) {\n /**** enforce constraints on the transformed draft layout ****/\n\n /* first enforce fixed node constraint */\n\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 0) {\n var translationAmount = { x: 0, y: 0 };\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n var posInTheory = { x: xCoords[nodeIndexes.get(nodeData.nodeId)], y: yCoords[nodeIndexes.get(nodeData.nodeId)] };\n var posDesired = nodeData.position;\n var posDiff = calculatePositionDiff(posDesired, posInTheory);\n translationAmount.x += posDiff.x;\n translationAmount.y += posDiff.y;\n });\n translationAmount.x /= constraints.fixedNodeConstraint.length;\n translationAmount.y /= constraints.fixedNodeConstraint.length;\n\n xCoords.forEach(function (value, i) {\n xCoords[i] += translationAmount.x;\n });\n\n yCoords.forEach(function (value, i) {\n yCoords[i] += translationAmount.y;\n });\n\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n xCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.x;\n yCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.y;\n });\n }\n\n /* then enforce alignment constraint */\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var xAlign = constraints.alignmentConstraint.vertical;\n\n var _loop4 = function _loop4(_i9) {\n var alignmentSet = new Set();\n xAlign[_i9].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) xCoords[nodeIndexes.get(nodeId)] = xPos;\n });\n };\n\n for (var _i9 = 0; _i9 < xAlign.length; _i9++) {\n _loop4(_i9);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var yAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop5 = function _loop5(_i10) {\n var alignmentSet = new Set();\n yAlign[_i10].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = yCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) yCoords[nodeIndexes.get(nodeId)] = yPos;\n });\n };\n\n for (var _i10 = 0; _i10 < yAlign.length; _i10++) {\n _loop5(_i10);\n }\n }\n }\n\n /* finally enforce relative placement constraint */\n\n if (constraints.relativePlacementConstraint) {\n (function () {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n var dummyToNodeForVerticalAlignment = new Map();\n var dummyToNodeForHorizontalAlignment = new Map();\n var dummyPositionsForVerticalAlignment = new Map();\n var dummyPositionsForHorizontalAlignment = new Map();\n var fixedNodesOnHorizontal = new Set();\n var fixedNodesOnVertical = new Set();\n\n // fill maps and sets \n fixedNodes.forEach(function (nodeId) {\n fixedNodesOnHorizontal.add(nodeId);\n fixedNodesOnVertical.add(nodeId);\n });\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlignment = constraints.alignmentConstraint.vertical;\n\n var _loop6 = function _loop6(_i11) {\n dummyToNodeForVerticalAlignment.set(\"dummy\" + _i11, []);\n verticalAlignment[_i11].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + _i11);\n dummyToNodeForVerticalAlignment.get(\"dummy\" + _i11).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnHorizontal.add(\"dummy\" + _i11);\n }\n });\n dummyPositionsForVerticalAlignment.set(\"dummy\" + _i11, xCoords[nodeIndexes.get(verticalAlignment[_i11][0])]);\n };\n\n for (var _i11 = 0; _i11 < verticalAlignment.length; _i11++) {\n _loop6(_i11);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = constraints.alignmentConstraint.horizontal;\n\n var _loop7 = function _loop7(_i12) {\n dummyToNodeForHorizontalAlignment.set(\"dummy\" + _i12, []);\n horizontalAlignment[_i12].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + _i12);\n dummyToNodeForHorizontalAlignment.get(\"dummy\" + _i12).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnVertical.add(\"dummy\" + _i12);\n }\n });\n dummyPositionsForHorizontalAlignment.set(\"dummy\" + _i12, yCoords[nodeIndexes.get(horizontalAlignment[_i12][0])]);\n };\n\n for (var _i12 = 0; _i12 < horizontalAlignment.length; _i12++) {\n _loop7(_i12);\n }\n }\n }\n\n // construct horizontal and vertical dags (subgraphs) from overall dag\n var dagOnHorizontal = new Map();\n var dagOnVertical = new Map();\n\n var _loop8 = function _loop8(nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n var sourceId = void 0;\n var targetNode = void 0;\n if (adjacent[\"direction\"] == \"horizontal\") {\n sourceId = nodeToDummyForVerticalAlignment.get(nodeId) ? nodeToDummyForVerticalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForVerticalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForVerticalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnHorizontal.has(sourceId)) {\n dagOnHorizontal.get(sourceId).push(targetNode);\n } else {\n dagOnHorizontal.set(sourceId, [targetNode]);\n }\n if (!dagOnHorizontal.has(targetNode.id)) {\n dagOnHorizontal.set(targetNode.id, []);\n }\n } else {\n sourceId = nodeToDummyForHorizontalAlignment.get(nodeId) ? nodeToDummyForHorizontalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForHorizontalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForHorizontalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnVertical.has(sourceId)) {\n dagOnVertical.get(sourceId).push(targetNode);\n } else {\n dagOnVertical.set(sourceId, [targetNode]);\n }\n if (!dagOnVertical.has(targetNode.id)) {\n dagOnVertical.set(targetNode.id, []);\n }\n }\n });\n };\n\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = dag.keys()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var nodeId = _step5.value;\n\n _loop8(nodeId);\n }\n\n // find source nodes of each component in horizontal and vertical dags\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n var undirectedOnHorizontal = dagToUndirected(dagOnHorizontal);\n var undirectedOnVertical = dagToUndirected(dagOnVertical);\n var componentsOnHorizontal = findComponents(undirectedOnHorizontal);\n var componentsOnVertical = findComponents(undirectedOnVertical);\n var reversedDagOnHorizontal = dagToReversed(dagOnHorizontal);\n var reversedDagOnVertical = dagToReversed(dagOnVertical);\n var componentSourcesOnHorizontal = [];\n var componentSourcesOnVertical = [];\n\n componentsOnHorizontal.forEach(function (component, index) {\n componentSourcesOnHorizontal[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnHorizontal.get(nodeId).length == 0) {\n componentSourcesOnHorizontal[index].push(nodeId);\n }\n });\n });\n\n componentsOnVertical.forEach(function (component, index) {\n componentSourcesOnVertical[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnVertical.get(nodeId).length == 0) {\n componentSourcesOnVertical[index].push(nodeId);\n }\n });\n });\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(dagOnHorizontal, \"horizontal\", fixedNodesOnHorizontal, dummyPositionsForVerticalAlignment, componentSourcesOnHorizontal);\n var positionMapVertical = findAppropriatePositionForRelativePlacement(dagOnVertical, \"vertical\", fixedNodesOnVertical, dummyPositionsForHorizontalAlignment, componentSourcesOnVertical);\n\n // update positions of the nodes based on relative placement constraints\n\n var _loop9 = function _loop9(key) {\n if (dummyToNodeForVerticalAlignment.get(key)) {\n dummyToNodeForVerticalAlignment.get(key).forEach(function (nodeId) {\n xCoords[nodeIndexes.get(nodeId)] = positionMapHorizontal.get(key);\n });\n } else {\n xCoords[nodeIndexes.get(key)] = positionMapHorizontal.get(key);\n }\n };\n\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = positionMapHorizontal.keys()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var key = _step6.value;\n\n _loop9(key);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n var _loop10 = function _loop10(key) {\n if (dummyToNodeForHorizontalAlignment.get(key)) {\n dummyToNodeForHorizontalAlignment.get(key).forEach(function (nodeId) {\n yCoords[nodeIndexes.get(nodeId)] = positionMapVertical.get(key);\n });\n } else {\n yCoords[nodeIndexes.get(key)] = positionMapVertical.get(key);\n }\n };\n\n var _iteratorNormalCompletion7 = true;\n var _didIteratorError7 = false;\n var _iteratorError7 = undefined;\n\n try {\n for (var _iterator7 = positionMapVertical.keys()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n var key = _step7.value;\n\n _loop10(key);\n }\n } catch (err) {\n _didIteratorError7 = true;\n _iteratorError7 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion7 && _iterator7.return) {\n _iterator7.return();\n }\n } finally {\n if (_didIteratorError7) {\n throw _iteratorError7;\n }\n }\n }\n })();\n }\n }\n\n // assign new coordinates to nodes after constraint handling\n for (var _i13 = 0; _i13 < allNodes.length; _i13++) {\n var _node = allNodes[_i13];\n if (_node.getChild() == null) {\n _node.setCenter(xCoords[nodeIndexes.get(_node.id)], yCoords[nodeIndexes.get(_node.id)]);\n }\n }\n};\n\nmodule.exports = ConstraintHandler;\n\n/***/ }),\n\n/***/ 551:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__551__;\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\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(45);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeFcose\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeFcose\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__140__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 658:\n/***/ ((module) => {\n\n\n\n// Simple, internal Object.assign() polyfill for options objects etc.\n\nmodule.exports = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n srcs[_key - 1] = arguments[_key];\n }\n\n srcs.forEach(function (src) {\n Object.keys(src).forEach(function (k) {\n return tgt[k] = src[k];\n });\n });\n\n return tgt;\n};\n\n/***/ }),\n\n/***/ 548:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\n/*\n * Auxiliary functions\n */\n\nvar LinkedList = __webpack_require__(140).layoutBase.LinkedList;\n\nvar auxiliary = {};\n\n// get the top most nodes\nauxiliary.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n// find disconnected components and create dummy nodes that connect them\nauxiliary.connectComponents = function (cy, eles, topMostNodes, dummyNodes) {\n var queue = new LinkedList();\n var visited = new Set();\n var visitedTopMostNodes = [];\n var currentNeighbor = void 0;\n var minDegreeNode = void 0;\n var minDegree = void 0;\n\n var isConnected = false;\n var count = 1;\n var nodesConnectedToDummy = [];\n var components = [];\n\n var _loop = function _loop() {\n var cmpt = cy.collection();\n components.push(cmpt);\n\n var currentNode = topMostNodes[0];\n var childrenOfCurrentNode = cy.collection();\n childrenOfCurrentNode.merge(currentNode).merge(currentNode.descendants().intersection(eles));\n visitedTopMostNodes.push(currentNode);\n\n childrenOfCurrentNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n });\n\n var _loop2 = function _loop2() {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n var neighborNodes = cy.collection();\n currentNode.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(currentNode.edgesWith(node)).length > 0) {\n neighborNodes.merge(node);\n }\n });\n\n for (var i = 0; i < neighborNodes.length; i++) {\n var neighborNode = neighborNodes[i];\n currentNeighbor = topMostNodes.intersection(neighborNode.union(neighborNode.ancestors()));\n if (currentNeighbor != null && !visited.has(currentNeighbor[0])) {\n var childrenOfNeighbor = currentNeighbor.union(currentNeighbor.descendants());\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n if (topMostNodes.has(node)) {\n visitedTopMostNodes.push(node);\n }\n });\n }\n }\n };\n\n while (queue.length != 0) {\n _loop2();\n }\n\n cmpt.forEach(function (node) {\n eles.intersection(node.connectedEdges()).forEach(function (e) {\n // connectedEdges() usually cached\n if (cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e);\n }\n });\n });\n\n if (visitedTopMostNodes.length == topMostNodes.length) {\n isConnected = true;\n }\n\n if (!isConnected || isConnected && count > 1) {\n minDegreeNode = visitedTopMostNodes[0];\n minDegree = minDegreeNode.connectedEdges().length;\n visitedTopMostNodes.forEach(function (node) {\n if (node.connectedEdges().length < minDegree) {\n minDegree = node.connectedEdges().length;\n minDegreeNode = node;\n }\n });\n nodesConnectedToDummy.push(minDegreeNode.id());\n // TO DO: Check efficiency of this part\n var temp = cy.collection();\n temp.merge(visitedTopMostNodes[0]);\n visitedTopMostNodes.forEach(function (node) {\n temp.merge(node);\n });\n visitedTopMostNodes = [];\n topMostNodes = topMostNodes.difference(temp);\n count++;\n }\n };\n\n do {\n _loop();\n } while (!isConnected);\n\n if (dummyNodes) {\n if (nodesConnectedToDummy.length > 0) {\n dummyNodes.set('dummy' + (dummyNodes.size + 1), nodesConnectedToDummy);\n }\n }\n return components;\n};\n\n// relocates componentResult to originalCenter if there is no fixedNodeConstraint\nauxiliary.relocateComponent = function (originalCenter, componentResult, options) {\n if (!options.fixedNodeConstraint) {\n var minXCoord = Number.POSITIVE_INFINITY;\n var maxXCoord = Number.NEGATIVE_INFINITY;\n var minYCoord = Number.POSITIVE_INFINITY;\n var maxYCoord = Number.NEGATIVE_INFINITY;\n if (options.quality == \"draft\") {\n // calculate current bounding box\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = componentResult.nodeIndexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref = _step.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var key = _ref2[0];\n var value = _ref2[1];\n\n var cyNode = options.cy.getElementById(key);\n if (cyNode) {\n var nodeBB = cyNode.boundingBox();\n var leftX = componentResult.xCoords[value] - nodeBB.w / 2;\n var rightX = componentResult.xCoords[value] + nodeBB.w / 2;\n var topY = componentResult.yCoords[value] - nodeBB.h / 2;\n var bottomY = componentResult.yCoords[value] + nodeBB.h / 2;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n }\n }\n // find difference between current and original center\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n componentResult.xCoords = componentResult.xCoords.map(function (x) {\n return x + diffOnX;\n });\n componentResult.yCoords = componentResult.yCoords.map(function (y) {\n return y + diffOnY;\n });\n } else {\n // calculate current bounding box\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n var leftX = node.getRect().x;\n var rightX = node.getRect().x + node.getRect().width;\n var topY = node.getRect().y;\n var bottomY = node.getRect().y + node.getRect().height;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n });\n // find difference between current and original center\n var _diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var _diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n node.setCenter(node.getCenterX() + _diffOnX, node.getCenterY() + _diffOnY);\n });\n }\n }\n};\n\nauxiliary.calcBoundingBox = function (parentNode, xCoords, yCoords, nodeIndexes) {\n // calculate bounds\n var left = Number.MAX_SAFE_INTEGER;\n var right = Number.MIN_SAFE_INTEGER;\n var top = Number.MAX_SAFE_INTEGER;\n var bottom = Number.MIN_SAFE_INTEGER;\n var nodeLeft = void 0;\n var nodeRight = void 0;\n var nodeTop = void 0;\n var nodeBottom = void 0;\n\n var nodes = parentNode.descendants().not(\":parent\");\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var node = nodes[i];\n\n nodeLeft = xCoords[nodeIndexes.get(node.id())] - node.width() / 2;\n nodeRight = xCoords[nodeIndexes.get(node.id())] + node.width() / 2;\n nodeTop = yCoords[nodeIndexes.get(node.id())] - node.height() / 2;\n nodeBottom = yCoords[nodeIndexes.get(node.id())] + node.height() / 2;\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingBox = {};\n boundingBox.topLeftX = left;\n boundingBox.topLeftY = top;\n boundingBox.width = right - left;\n boundingBox.height = bottom - top;\n return boundingBox;\n};\n\n// This function finds and returns parent nodes whose all children are hidden\nauxiliary.calcParentsWithoutChildren = function (cy, eles) {\n var parentsWithoutChildren = cy.collection();\n eles.nodes(':parent').forEach(function (parent) {\n var check = false;\n parent.children().forEach(function (child) {\n if (child.css('display') != 'none') {\n check = true;\n }\n });\n if (!check) {\n parentsWithoutChildren.merge(parent);\n }\n });\n\n return parentsWithoutChildren;\n};\n\nmodule.exports = auxiliary;\n\n/***/ }),\n\n/***/ 816:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the postprocessing part that applies CoSE layout over the spectral layout\n*/\n\nvar aux = __webpack_require__(548);\nvar CoSELayout = __webpack_require__(140).CoSELayout;\nvar CoSENode = __webpack_require__(140).CoSENode;\nvar PointD = __webpack_require__(140).layoutBase.PointD;\nvar DimensionD = __webpack_require__(140).layoutBase.DimensionD;\nvar LayoutConstants = __webpack_require__(140).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(140).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(140).CoSEConstants;\n\n// main function that cose layout is processed\nvar coseLayout = function coseLayout(options, spectralResult) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var edges = eles.edges();\n\n var nodeIndexes = void 0;\n var xCoords = void 0;\n var yCoords = void 0;\n var idToLNode = {};\n\n if (options.randomize) {\n nodeIndexes = spectralResult[\"nodeIndexes\"];\n xCoords = spectralResult[\"xCoords\"];\n yCoords = spectralResult[\"yCoords\"];\n }\n\n var isFn = function isFn(fn) {\n return typeof fn === 'function';\n };\n\n var optFn = function optFn(opt, ele) {\n if (isFn(opt)) {\n return opt(ele);\n } else {\n return opt;\n }\n };\n\n /**** Postprocessing functions ****/\n\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n\n // transfer cytoscape nodes to cose nodes\n var processChildrenList = function processChildrenList(parent, children, layout, options) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = null;\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n children_of_children = theChild.children();\n }\n var theNode = void 0;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n if (options.randomize) {\n if (!theChild.isParent()) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(xCoords[nodeIndexes.get(theChild.id())] - dimensions.w / 2, yCoords[nodeIndexes.get(theChild.id())] - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n var parentInfo = aux.calcBoundingBox(theChild, xCoords, yCoords, nodeIndexes);\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parentInfo.width, parentInfo.height)));\n } else {\n // for the parentsWithoutChildren\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n }\n } else {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node and repulsion value\n theNode.id = theChild.data(\"id\");\n theNode.nodeRepulsion = optFn(options.nodeRepulsion, theChild);\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to both compound and simple nodes if labels will be included in node dimensions\n //These properties will be used while updating bounds of compounds during iterations or tiling\n //and will be used for simple nodes while transferring final positions to cytoscape\n if (options.nodeDimensionsIncludeLabels) {\n theNode.labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).w;\n theNode.labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).h;\n theNode.labelPosVertical = theChild.css(\"text-valign\");\n theNode.labelPosHorizontal = theChild.css(\"text-halign\");\n }\n\n // Map the layout node\n idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph = void 0;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n processChildrenList(theNewGraph, children_of_children, layout, options);\n }\n }\n };\n\n // transfer cytoscape edges to cose edges\n var processEdges = function processEdges(layout, gm, edges) {\n var idealLengthTotal = 0;\n var edgeCount = 0;\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = idToLNode[edge.data(\"source\")];\n var targetNode = idToLNode[edge.data(\"target\")];\n if (sourceNode && targetNode && sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n e1.idealLength = optFn(options.idealEdgeLength, edge);\n e1.edgeElasticity = optFn(options.edgeElasticity, edge);\n idealLengthTotal += e1.idealLength;\n edgeCount++;\n }\n }\n // we need to update the ideal edge length constant with the avg. ideal length value after processing edges\n // in case there is no edge, use other options\n if (options.idealEdgeLength != null) {\n if (edgeCount > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount;else if (!isFn(options.idealEdgeLength)) // in case there is no edge, but option gives a value to use\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;else // in case there is no edge and we cannot get a value from option (because it's a function)\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\n // we need to update these constant values based on the ideal edge length constant\n CoSEConstants.MIN_REPULSION_DIST = FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\n CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n }\n };\n\n // transfer cytoscape constraints to cose layout\n var processConstraints = function processConstraints(layout, options) {\n // get nodes to be fixed\n if (options.fixedNodeConstraint) {\n layout.constraints[\"fixedNodeConstraint\"] = options.fixedNodeConstraint;\n }\n // get nodes to be aligned\n if (options.alignmentConstraint) {\n layout.constraints[\"alignmentConstraint\"] = options.alignmentConstraint;\n }\n // get nodes to be relatively placed\n if (options.relativePlacementConstraint) {\n layout.constraints[\"relativePlacementConstraint\"] = options.relativePlacementConstraint;\n }\n };\n\n /**** Apply postprocessing ****/\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options.tilingCompareBy;\n\n if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 0;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true;\n CoSEConstants.PURE_INCREMENTAL = !options.randomize;\n LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options.uniformNodeDimensions;\n\n // This part is for debug/demo purpose\n if (options.step == \"transformed\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"enforced\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"cose\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n if (options.step == \"all\") {\n if (options.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n\n if (options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint) {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false;\n } else {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true;\n }\n\n var coseLayout = new CoSELayout();\n var gm = coseLayout.newGraphManager();\n\n processChildrenList(gm.addRoot(), aux.getTopMostNodes(nodes), coseLayout, options);\n processEdges(coseLayout, gm, edges);\n processConstraints(coseLayout, options);\n\n coseLayout.runLayout();\n\n return idToLNode;\n};\n\nmodule.exports = { coseLayout: coseLayout };\n\n/***/ }),\n\n/***/ 212:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n The implementation of the fcose layout algorithm\n*/\n\nvar assign = __webpack_require__(658);\nvar aux = __webpack_require__(548);\n\nvar _require = __webpack_require__(657),\n spectralLayout = _require.spectralLayout;\n\nvar _require2 = __webpack_require__(816),\n coseLayout = _require2.coseLayout;\n\nvar defaults = Object.freeze({\n\n // 'draft', 'default' or 'proof' \n // - 'draft' only applies spectral layout \n // - 'default' improves the quality with subsequent CoSE layout (fast cooling rate)\n // - 'proof' improves the quality with subsequent CoSE layout (slow cooling rate) \n quality: \"default\",\n // Use random node positions at beginning of layout\n // if this is set to false, then quality option must be \"proof\"\n randomize: true,\n // Whether or not to animate the layout\n animate: true,\n // Duration of animation in ms, if enabled\n animationDuration: 1000,\n // Easing of animation, if enabled\n animationEasing: undefined,\n // Fit the viewport to the repositioned nodes\n fit: true,\n // Padding around layout\n padding: 30,\n // Whether to include labels in node dimensions. Valid in \"proof\" quality\n nodeDimensionsIncludeLabels: false,\n // Whether or not simple nodes (non-compound nodes) are of uniform dimensions\n uniformNodeDimensions: false,\n // Whether to pack disconnected components - valid only if randomize: true\n packComponents: true,\n // Layout step - all, transformed, enforced, cose - for debug purpose only\n step: \"all\",\n\n /* spectral layout options */\n\n // False for random, true for greedy\n samplingType: true,\n // Sample size to construct distance matrix\n sampleSize: 25,\n // Separation amount between nodes\n nodeSeparation: 75,\n // Power iteration tolerance\n piTol: 0.0000001,\n\n /* CoSE layout options */\n\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 4500;\n },\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 50;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 0.45;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // The function that specifies the criteria for comparing nodes while sorting them during tiling operation.\n // Takes the node id as a parameter and the default tiling operation is perfomed when this option is not set.\n tilingCompareBy: undefined,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout \n initialEnergyOnIncremental: 0.3,\n\n /* constraint options */\n\n // Fix required nodes to predefined positions\n // [{nodeId: 'n1', position: {x: 100, y: 200}, {...}]\n fixedNodeConstraint: undefined,\n // Align required nodes in vertical/horizontal direction\n // {vertical: [['n1', 'n2')], ['n3', 'n4']], horizontal: ['n2', 'n4']}\n alignmentConstraint: undefined,\n // Place two nodes relatively in vertical/horizontal direction \n // [{top: 'n1', bottom: 'n2', gap: 100}, {left: 'n3', right: 'n4', gap: 75}]\n relativePlacementConstraint: undefined,\n\n /* layout event callbacks */\n ready: function ready() {}, // on layoutready\n stop: function stop() {} // on layoutstop\n});\n\nvar Layout = function () {\n function Layout(options) {\n _classCallCheck(this, Layout);\n\n this.options = assign({}, defaults, options);\n }\n\n _createClass(Layout, [{\n key: 'run',\n value: function run() {\n var layout = this;\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n\n var spectralResult = [];\n var xCoords = void 0;\n var yCoords = void 0;\n var coseResult = [];\n var components = void 0;\n var componentCenters = [];\n\n // basic validity check for constraint inputs \n if (options.fixedNodeConstraint && (!Array.isArray(options.fixedNodeConstraint) || options.fixedNodeConstraint.length == 0)) {\n options.fixedNodeConstraint = undefined;\n }\n\n if (options.alignmentConstraint) {\n if (options.alignmentConstraint.vertical && (!Array.isArray(options.alignmentConstraint.vertical) || options.alignmentConstraint.vertical.length == 0)) {\n options.alignmentConstraint.vertical = undefined;\n }\n if (options.alignmentConstraint.horizontal && (!Array.isArray(options.alignmentConstraint.horizontal) || options.alignmentConstraint.horizontal.length == 0)) {\n options.alignmentConstraint.horizontal = undefined;\n }\n }\n\n if (options.relativePlacementConstraint && (!Array.isArray(options.relativePlacementConstraint) || options.relativePlacementConstraint.length == 0)) {\n options.relativePlacementConstraint = undefined;\n }\n\n // if any constraint exists, set some options\n var constraintExist = options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint;\n if (constraintExist) {\n // constraints work with these options\n options.tile = false;\n options.packComponents = false;\n }\n\n // decide component packing is enabled or not\n var layUtil = void 0;\n var packingEnabled = false;\n if (cy.layoutUtilities && options.packComponents) {\n layUtil = cy.layoutUtilities(\"get\");\n if (!layUtil) layUtil = cy.layoutUtilities();\n packingEnabled = true;\n }\n\n if (eles.nodes().length > 0) {\n // if packing is not enabled, perform layout on the whole graph\n if (!packingEnabled) {\n // store component center\n var boundingBox = options.eles.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n // apply spectral layout\n if (options.randomize) {\n var result = spectralLayout(options);\n spectralResult.push(result);\n }\n // apply cose layout as postprocessing\n if (options.quality == \"default\" || options.quality == \"proof\") {\n coseResult.push(coseLayout(options, spectralResult[0]));\n aux.relocateComponent(componentCenters[0], coseResult[0], options); // relocate center to original position\n } else {\n aux.relocateComponent(componentCenters[0], spectralResult[0], options); // relocate center to original position\n }\n } else {\n // packing is enabled\n var topMostNodes = aux.getTopMostNodes(options.eles.nodes());\n components = aux.connectComponents(cy, options.eles, topMostNodes);\n // store component centers\n components.forEach(function (component) {\n var boundingBox = component.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n });\n\n //send each component to spectral layout if randomized\n if (options.randomize) {\n components.forEach(function (component) {\n options.eles = component;\n spectralResult.push(spectralLayout(options));\n });\n }\n\n if (options.quality == \"default\" || options.quality == \"proof\") {\n var toBeTiledNodes = cy.collection();\n if (options.tile) {\n // behave nodes to be tiled as one component\n var nodeIndexes = new Map();\n var _xCoords = [];\n var _yCoords = [];\n var count = 0;\n var tempSpectralResult = { nodeIndexes: nodeIndexes, xCoords: _xCoords, yCoords: _yCoords };\n var indexesToBeDeleted = [];\n components.forEach(function (component, index) {\n if (component.edges().length == 0) {\n component.nodes().forEach(function (node, i) {\n toBeTiledNodes.merge(component.nodes()[i]);\n if (!node.isParent()) {\n tempSpectralResult.nodeIndexes.set(component.nodes()[i].id(), count++);\n tempSpectralResult.xCoords.push(component.nodes()[0].position().x);\n tempSpectralResult.yCoords.push(component.nodes()[0].position().y);\n }\n });\n indexesToBeDeleted.push(index);\n }\n });\n if (toBeTiledNodes.length > 1) {\n var _boundingBox = toBeTiledNodes.boundingBox();\n componentCenters.push({ x: _boundingBox.x1 + _boundingBox.w / 2, y: _boundingBox.y1 + _boundingBox.h / 2 });\n components.push(toBeTiledNodes);\n spectralResult.push(tempSpectralResult);\n for (var i = indexesToBeDeleted.length - 1; i >= 0; i--) {\n components.splice(indexesToBeDeleted[i], 1);\n spectralResult.splice(indexesToBeDeleted[i], 1);\n componentCenters.splice(indexesToBeDeleted[i], 1);\n };\n }\n }\n components.forEach(function (component, index) {\n // send each component to cose layout\n options.eles = component;\n coseResult.push(coseLayout(options, spectralResult[index]));\n aux.relocateComponent(componentCenters[index], coseResult[index], options); // relocate center to original position\n });\n } else {\n components.forEach(function (component, index) {\n aux.relocateComponent(componentCenters[index], spectralResult[index], options); // relocate center to original position\n });\n }\n\n // packing\n var componentsEvaluated = new Set();\n if (components.length > 1) {\n var subgraphs = [];\n var hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n components.forEach(function (component, index) {\n var nodeIndexes = void 0;\n if (options.quality == \"draft\") {\n nodeIndexes = spectralResult[index].nodeIndexes;\n }\n\n if (component.nodes().not(hiddenEles).length > 0) {\n var subgraph = {};\n subgraph.edges = [];\n subgraph.nodes = [];\n var nodeIndex = void 0;\n component.nodes().not(hiddenEles).forEach(function (node) {\n if (options.quality == \"draft\") {\n if (!node.isParent()) {\n nodeIndex = nodeIndexes.get(node.id());\n subgraph.nodes.push({ x: spectralResult[index].xCoords[nodeIndex] - node.boundingbox().w / 2, y: spectralResult[index].yCoords[nodeIndex] - node.boundingbox().h / 2, width: node.boundingbox().w, height: node.boundingbox().h });\n } else {\n var parentInfo = aux.calcBoundingBox(node, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n subgraph.nodes.push({ x: parentInfo.topLeftX, y: parentInfo.topLeftY, width: parentInfo.width, height: parentInfo.height });\n }\n } else {\n if (coseResult[index][node.id()]) {\n subgraph.nodes.push({ x: coseResult[index][node.id()].getLeft(), y: coseResult[index][node.id()].getTop(), width: coseResult[index][node.id()].getWidth(), height: coseResult[index][node.id()].getHeight() });\n }\n }\n });\n component.edges().forEach(function (edge) {\n var source = edge.source();\n var target = edge.target();\n if (source.css(\"display\") != \"none\" && target.css(\"display\") != \"none\") {\n if (options.quality == \"draft\") {\n var sourceNodeIndex = nodeIndexes.get(source.id());\n var targetNodeIndex = nodeIndexes.get(target.id());\n var sourceCenter = [];\n var targetCenter = [];\n if (source.isParent()) {\n var parentInfo = aux.calcBoundingBox(source, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n sourceCenter.push(parentInfo.topLeftX + parentInfo.width / 2);\n sourceCenter.push(parentInfo.topLeftY + parentInfo.height / 2);\n } else {\n sourceCenter.push(spectralResult[index].xCoords[sourceNodeIndex]);\n sourceCenter.push(spectralResult[index].yCoords[sourceNodeIndex]);\n }\n if (target.isParent()) {\n var _parentInfo = aux.calcBoundingBox(target, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n targetCenter.push(_parentInfo.topLeftX + _parentInfo.width / 2);\n targetCenter.push(_parentInfo.topLeftY + _parentInfo.height / 2);\n } else {\n targetCenter.push(spectralResult[index].xCoords[targetNodeIndex]);\n targetCenter.push(spectralResult[index].yCoords[targetNodeIndex]);\n }\n subgraph.edges.push({ startX: sourceCenter[0], startY: sourceCenter[1], endX: targetCenter[0], endY: targetCenter[1] });\n } else {\n if (coseResult[index][source.id()] && coseResult[index][target.id()]) {\n subgraph.edges.push({ startX: coseResult[index][source.id()].getCenterX(), startY: coseResult[index][source.id()].getCenterY(), endX: coseResult[index][target.id()].getCenterX(), endY: coseResult[index][target.id()].getCenterY() });\n }\n }\n }\n });\n if (subgraph.nodes.length > 0) {\n subgraphs.push(subgraph);\n componentsEvaluated.add(index);\n }\n }\n });\n var shiftResult = layUtil.packComponents(subgraphs, options.randomize).shifts;\n if (options.quality == \"draft\") {\n spectralResult.forEach(function (result, index) {\n var newXCoords = result.xCoords.map(function (x) {\n return x + shiftResult[index].dx;\n });\n var newYCoords = result.yCoords.map(function (y) {\n return y + shiftResult[index].dy;\n });\n result.xCoords = newXCoords;\n result.yCoords = newYCoords;\n });\n } else {\n var _count = 0;\n componentsEvaluated.forEach(function (index) {\n Object.keys(coseResult[index]).forEach(function (item) {\n var nodeRectangle = coseResult[index][item];\n nodeRectangle.setCenter(nodeRectangle.getCenterX() + shiftResult[_count].dx, nodeRectangle.getCenterY() + shiftResult[_count].dy);\n });\n _count++;\n });\n }\n }\n }\n }\n\n // get each element's calculated position\n var getPositions = function getPositions(ele, i) {\n if (options.quality == \"default\" || options.quality == \"proof\") {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var pos = void 0;\n var node = void 0;\n var theId = ele.data('id');\n coseResult.forEach(function (result) {\n if (theId in result) {\n pos = { x: result[theId].getRect().getCenterX(), y: result[theId].getRect().getCenterY() };\n node = result[theId];\n }\n });\n if (options.nodeDimensionsIncludeLabels) {\n if (node.labelWidth) {\n if (node.labelPosHorizontal == \"left\") {\n pos.x += node.labelWidth / 2;\n } else if (node.labelPosHorizontal == \"right\") {\n pos.x -= node.labelWidth / 2;\n }\n }\n if (node.labelHeight) {\n if (node.labelPosVertical == \"top\") {\n pos.y += node.labelHeight / 2;\n } else if (node.labelPosVertical == \"bottom\") {\n pos.y -= node.labelHeight / 2;\n }\n }\n }\n if (pos == undefined) pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: pos.x,\n y: pos.y\n };\n } else {\n var _pos = void 0;\n spectralResult.forEach(function (result) {\n var index = result.nodeIndexes.get(ele.id());\n if (index != undefined) {\n _pos = { x: result.xCoords[index], y: result.yCoords[index] };\n }\n });\n if (_pos == undefined) _pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: _pos.x,\n y: _pos.y\n };\n }\n };\n\n // quality = \"draft\" and randomize = false are contradictive so in that case positions don't change\n if (options.quality == \"default\" || options.quality == \"proof\" || options.randomize) {\n // transfer calculated positions to nodes (positions of only simple nodes are evaluated, compounds are positioned automatically)\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n var _hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n options.eles = eles.not(_hiddenEles);\n\n eles.nodes().not(\":parent\").not(_hiddenEles).layoutPositions(layout, options, getPositions);\n\n if (parentsWithoutChildren.length > 0) {\n parentsWithoutChildren.forEach(function (ele) {\n ele.position(getPositions(ele));\n });\n }\n } else {\n console.log(\"If randomize option is set to false, then quality option must be 'default' or 'proof'.\");\n }\n }\n }]);\n\n return Layout;\n}();\n\nmodule.exports = Layout;\n\n/***/ }),\n\n/***/ 657:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the spectral layout that is the first part of the fcose layout algorithm\n*/\n\nvar aux = __webpack_require__(548);\nvar Matrix = __webpack_require__(140).layoutBase.Matrix;\nvar SVD = __webpack_require__(140).layoutBase.SVD;\n\n// main function that spectral layout is processed\nvar spectralLayout = function spectralLayout(options) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var parentNodes = eles.nodes(\":parent\");\n\n var dummyNodes = new Map(); // map to keep dummy nodes and their neighbors\n var nodeIndexes = new Map(); // map to keep indexes to nodes\n var parentChildMap = new Map(); // mapping btw. compound and its representative node \n var allNodesNeighborhood = []; // array to keep neighborhood of all nodes\n var xCoords = [];\n var yCoords = [];\n\n var samplesColumn = []; // sampled vertices\n var minDistancesColumn = [];\n var C = []; // column sampling matrix\n var PHI = []; // intersection of column and row sampling matrices \n var INV = []; // inverse of PHI \n\n var firstSample = void 0; // the first sampled node\n var nodeSize = void 0;\n\n var infinity = 100000000;\n var small = 0.000000001;\n\n var piTol = options.piTol;\n var samplingType = options.samplingType; // false for random, true for greedy\n var nodeSeparation = options.nodeSeparation;\n var sampleSize = void 0;\n\n /**** Spectral-preprocessing functions ****/\n\n /**** Spectral layout functions ****/\n\n // determine which columns to be sampled\n var randomSampleCR = function randomSampleCR() {\n var sample = 0;\n var count = 0;\n var flag = false;\n\n while (count < sampleSize) {\n sample = Math.floor(Math.random() * nodeSize);\n\n flag = false;\n for (var i = 0; i < count; i++) {\n if (samplesColumn[i] == sample) {\n flag = true;\n break;\n }\n }\n\n if (!flag) {\n samplesColumn[count] = sample;\n count++;\n } else {\n continue;\n }\n }\n };\n\n // takes the index of the node(pivot) to initiate BFS as a parameter\n var BFS = function BFS(pivot, index, samplingMethod) {\n var path = []; // the front of the path\n var front = 0; // the back of the path\n var back = 0;\n var current = 0;\n var temp = void 0;\n var distance = [];\n\n var max_dist = 0; // the furthest node to be returned\n var max_ind = 1;\n\n for (var i = 0; i < nodeSize; i++) {\n distance[i] = infinity;\n }\n\n path[back] = pivot;\n distance[pivot] = 0;\n\n while (back >= front) {\n current = path[front++];\n var neighbors = allNodesNeighborhood[current];\n for (var _i = 0; _i < neighbors.length; _i++) {\n temp = nodeIndexes.get(neighbors[_i]);\n if (distance[temp] == infinity) {\n distance[temp] = distance[current] + 1;\n path[++back] = temp;\n }\n }\n C[current][index] = distance[current] * nodeSeparation;\n }\n\n if (samplingMethod) {\n for (var _i2 = 0; _i2 < nodeSize; _i2++) {\n if (C[_i2][index] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C[_i2][index];\n }\n\n for (var _i3 = 0; _i3 < nodeSize; _i3++) {\n if (minDistancesColumn[_i3] > max_dist) {\n max_dist = minDistancesColumn[_i3];\n max_ind = _i3;\n }\n }\n }\n return max_ind;\n };\n\n // apply BFS to all nodes or selected samples\n var allBFS = function allBFS(samplingMethod) {\n\n var sample = void 0;\n\n if (!samplingMethod) {\n randomSampleCR();\n\n // call BFS\n for (var i = 0; i < sampleSize; i++) {\n BFS(samplesColumn[i], i, samplingMethod, false);\n }\n } else {\n sample = Math.floor(Math.random() * nodeSize);\n firstSample = sample;\n\n for (var _i4 = 0; _i4 < nodeSize; _i4++) {\n minDistancesColumn[_i4] = infinity;\n }\n\n for (var _i5 = 0; _i5 < sampleSize; _i5++) {\n samplesColumn[_i5] = sample;\n sample = BFS(sample, _i5, samplingMethod);\n }\n }\n\n // form the squared distances for C\n for (var _i6 = 0; _i6 < nodeSize; _i6++) {\n for (var j = 0; j < sampleSize; j++) {\n C[_i6][j] *= C[_i6][j];\n }\n }\n\n // form PHI\n for (var _i7 = 0; _i7 < sampleSize; _i7++) {\n PHI[_i7] = [];\n }\n\n for (var _i8 = 0; _i8 < sampleSize; _i8++) {\n for (var _j = 0; _j < sampleSize; _j++) {\n PHI[_i8][_j] = C[samplesColumn[_j]][_i8];\n }\n }\n };\n\n // perform the SVD algorithm and apply a regularization step\n var sample = function sample() {\n\n var SVDResult = SVD.svd(PHI);\n\n var a_q = SVDResult.S;\n var a_u = SVDResult.U;\n var a_v = SVDResult.V;\n\n var max_s = a_q[0] * a_q[0] * a_q[0];\n\n var a_Sig = [];\n\n // regularization\n for (var i = 0; i < sampleSize; i++) {\n a_Sig[i] = [];\n for (var j = 0; j < sampleSize; j++) {\n a_Sig[i][j] = 0;\n if (i == j) {\n a_Sig[i][j] = a_q[i] / (a_q[i] * a_q[i] + max_s / (a_q[i] * a_q[i]));\n }\n }\n }\n\n INV = Matrix.multMat(Matrix.multMat(a_v, a_Sig), Matrix.transpose(a_u));\n };\n\n // calculate final coordinates \n var powerIteration = function powerIteration() {\n // two largest eigenvalues\n var theta1 = void 0;\n var theta2 = void 0;\n\n // initial guesses for eigenvectors\n var Y1 = [];\n var Y2 = [];\n\n var V1 = [];\n var V2 = [];\n\n for (var i = 0; i < nodeSize; i++) {\n Y1[i] = Math.random();\n Y2[i] = Math.random();\n }\n\n Y1 = Matrix.normalize(Y1);\n Y2 = Matrix.normalize(Y2);\n\n var count = 0;\n // to keep track of the improvement ratio in power iteration\n var current = small;\n var previous = small;\n\n var temp = void 0;\n\n while (true) {\n count++;\n\n for (var _i9 = 0; _i9 < nodeSize; _i9++) {\n V1[_i9] = Y1[_i9];\n }\n\n Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C, INV));\n theta1 = Matrix.dotProduct(V1, Y1);\n Y1 = Matrix.normalize(Y1);\n\n current = Matrix.dotProduct(V1, Y1);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i10 = 0; _i10 < nodeSize; _i10++) {\n V1[_i10] = Y1[_i10];\n }\n\n count = 0;\n previous = small;\n while (true) {\n count++;\n\n for (var _i11 = 0; _i11 < nodeSize; _i11++) {\n V2[_i11] = Y2[_i11];\n }\n\n V2 = Matrix.minusOp(V2, Matrix.multCons(V1, Matrix.dotProduct(V1, V2)));\n Y2 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V2), C, INV));\n theta2 = Matrix.dotProduct(V2, Y2);\n Y2 = Matrix.normalize(Y2);\n\n current = Matrix.dotProduct(V2, Y2);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i12 = 0; _i12 < nodeSize; _i12++) {\n V2[_i12] = Y2[_i12];\n }\n\n // theta1 now contains dominant eigenvalue\n // theta2 now contains the second-largest eigenvalue\n // V1 now contains theta1's eigenvector\n // V2 now contains theta2's eigenvector\n\n //populate the two vectors\n xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1)));\n yCoords = Matrix.multCons(V2, Math.sqrt(Math.abs(theta2)));\n };\n\n /**** Preparation for spectral layout (Preprocessing) ****/\n\n // connect disconnected components (first top level, then inside of each compound node)\n aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes), dummyNodes);\n\n parentNodes.forEach(function (ele) {\n aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes);\n });\n\n // assign indexes to nodes (first real, then dummy nodes)\n var index = 0;\n for (var i = 0; i < nodes.length; i++) {\n if (!nodes[i].isParent()) {\n nodeIndexes.set(nodes[i].id(), index++);\n }\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = dummyNodes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n nodeIndexes.set(key, index++);\n }\n\n // instantiate the neighborhood matrix\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n for (var _i13 = 0; _i13 < nodeIndexes.size; _i13++) {\n allNodesNeighborhood[_i13] = [];\n }\n\n // form a parent-child map to keep representative node of each compound node \n parentNodes.forEach(function (ele) {\n var children = ele.children().intersection(eles);\n\n // let random = 0;\n while (children.nodes(\":childless\").length == 0) {\n // random = Math.floor(Math.random() * children.nodes().length); // if all children are compound then proceed randomly\n children = children.nodes()[0].children().intersection(eles);\n }\n // select the representative node - we can apply different methods here\n // random = Math.floor(Math.random() * children.nodes(\":childless\").length);\n var index = 0;\n var min = children.nodes(\":childless\")[0].connectedEdges().length;\n children.nodes(\":childless\").forEach(function (ele2, i) {\n if (ele2.connectedEdges().length < min) {\n min = ele2.connectedEdges().length;\n index = i;\n }\n });\n parentChildMap.set(ele.id(), children.nodes(\":childless\")[index].id());\n });\n\n // add neighborhood relations (first real, then dummy nodes)\n nodes.forEach(function (ele) {\n var eleIndex = void 0;\n\n if (ele.isParent()) eleIndex = nodeIndexes.get(parentChildMap.get(ele.id()));else eleIndex = nodeIndexes.get(ele.id());\n\n ele.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(ele.edgesWith(node)).length > 0) {\n if (node.isParent()) allNodesNeighborhood[eleIndex].push(parentChildMap.get(node.id()));else allNodesNeighborhood[eleIndex].push(node.id());\n }\n });\n });\n\n var _loop = function _loop(_key) {\n var eleIndex = nodeIndexes.get(_key);\n var disconnectedId = void 0;\n dummyNodes.get(_key).forEach(function (id) {\n if (cy.getElementById(id).isParent()) disconnectedId = parentChildMap.get(id);else disconnectedId = id;\n\n allNodesNeighborhood[eleIndex].push(disconnectedId);\n allNodesNeighborhood[nodeIndexes.get(disconnectedId)].push(_key);\n });\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = dummyNodes.keys()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _key = _step2.value;\n\n _loop(_key);\n }\n\n // nodeSize now only considers the size of transformed graph\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n nodeSize = nodeIndexes.size;\n\n var spectralResult = void 0;\n\n // If number of nodes in transformed graph is 1 or 2, either SVD or powerIteration causes problem\n // So skip spectral and layout the graph with cose\n if (nodeSize > 2) {\n // if # of nodes in transformed graph is smaller than sample size,\n // then use # of nodes as sample size\n sampleSize = nodeSize < options.sampleSize ? nodeSize : options.sampleSize;\n\n // instantiates the partial matrices that will be used in spectral layout\n for (var _i14 = 0; _i14 < nodeSize; _i14++) {\n C[_i14] = [];\n }\n for (var _i15 = 0; _i15 < sampleSize; _i15++) {\n INV[_i15] = [];\n }\n\n /**** Apply spectral layout ****/\n\n if (options.quality == \"draft\" || options.step == \"all\") {\n allBFS(samplingType);\n sample();\n powerIteration();\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n } else {\n nodeIndexes.forEach(function (value, key) {\n xCoords.push(cy.getElementById(key).position(\"x\"));\n yCoords.push(cy.getElementById(key).position(\"y\"));\n });\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n }\n return spectralResult;\n } else {\n var iterator = nodeIndexes.keys();\n var firstNode = cy.getElementById(iterator.next().value);\n var firstNodePos = firstNode.position();\n var firstNodeWidth = firstNode.outerWidth();\n xCoords.push(firstNodePos.x);\n yCoords.push(firstNodePos.y);\n if (nodeSize == 2) {\n var secondNode = cy.getElementById(iterator.next().value);\n var secondNodeWidth = secondNode.outerWidth();\n xCoords.push(firstNodePos.x + firstNodeWidth / 2 + secondNodeWidth / 2 + options.idealEdgeLength);\n yCoords.push(firstNodePos.y);\n }\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n return spectralResult;\n }\n};\n\nmodule.exports = { spectralLayout: spectralLayout };\n\n/***/ }),\n\n/***/ 579:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar impl = __webpack_require__(212);\n\n// registers the extension on a cytoscape lib ref\nvar register = function register(cytoscape) {\n if (!cytoscape) {\n return;\n } // can't register if cytoscape unspecified\n\n cytoscape('layout', 'fcose', impl); // register with cytoscape.js\n};\n\nif (typeof cytoscape !== 'undefined') {\n // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ }),\n\n/***/ 140:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__140__;\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\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(579);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n createText,\n getIconSVG,\n registerIconPacks,\n unknownIcon\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge,\n getEdgeId\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n sanitizeText,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/architecture/architectureParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/architecture/architectureTypes.ts\nvar ArchitectureDirectionName = {\n L: \"left\",\n R: \"right\",\n T: \"top\",\n B: \"bottom\"\n};\nvar ArchitectureDirectionArrow = {\n L: /* @__PURE__ */ __name((scale) => `${scale},${scale / 2} 0,${scale} 0,0`, \"L\"),\n R: /* @__PURE__ */ __name((scale) => `0,${scale / 2} ${scale},0 ${scale},${scale}`, \"R\"),\n T: /* @__PURE__ */ __name((scale) => `0,0 ${scale},0 ${scale / 2},${scale}`, \"T\"),\n B: /* @__PURE__ */ __name((scale) => `${scale / 2},0 ${scale},${scale} 0,${scale}`, \"B\")\n};\nvar ArchitectureDirectionArrowShift = {\n L: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, \"L\"),\n R: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, \"R\"),\n T: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, \"T\"),\n B: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, \"B\")\n};\nvar getOppositeArchitectureDirection = /* @__PURE__ */ __name(function(x) {\n if (isArchitectureDirectionX(x)) {\n return x === \"L\" ? \"R\" : \"L\";\n } else {\n return x === \"T\" ? \"B\" : \"T\";\n }\n}, \"getOppositeArchitectureDirection\");\nvar isArchitectureDirection = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"L\" || temp === \"R\" || temp === \"T\" || temp === \"B\";\n}, \"isArchitectureDirection\");\nvar isArchitectureDirectionX = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"L\" || temp === \"R\";\n}, \"isArchitectureDirectionX\");\nvar isArchitectureDirectionY = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"T\" || temp === \"B\";\n}, \"isArchitectureDirectionY\");\nvar isArchitectureDirectionXY = /* @__PURE__ */ __name(function(a, b) {\n const aX_bY = isArchitectureDirectionX(a) && isArchitectureDirectionY(b);\n const aY_bX = isArchitectureDirectionY(a) && isArchitectureDirectionX(b);\n return aX_bY || aY_bX;\n}, \"isArchitectureDirectionXY\");\nvar isArchitecturePairXY = /* @__PURE__ */ __name(function(pair) {\n const lhs = pair[0];\n const rhs = pair[1];\n const aX_bY = isArchitectureDirectionX(lhs) && isArchitectureDirectionY(rhs);\n const aY_bX = isArchitectureDirectionY(lhs) && isArchitectureDirectionX(rhs);\n return aX_bY || aY_bX;\n}, \"isArchitecturePairXY\");\nvar isValidArchitectureDirectionPair = /* @__PURE__ */ __name(function(x) {\n return x !== \"LL\" && x !== \"RR\" && x !== \"TT\" && x !== \"BB\";\n}, \"isValidArchitectureDirectionPair\");\nvar getArchitectureDirectionPair = /* @__PURE__ */ __name(function(sourceDir, targetDir) {\n const pair = `${sourceDir}${targetDir}`;\n return isValidArchitectureDirectionPair(pair) ? pair : void 0;\n}, \"getArchitectureDirectionPair\");\nvar shiftPositionByArchitectureDirectionPair = /* @__PURE__ */ __name(function([x, y], pair) {\n const lhs = pair[0];\n const rhs = pair[1];\n if (isArchitectureDirectionX(lhs)) {\n if (isArchitectureDirectionY(rhs)) {\n return [x + (lhs === \"L\" ? -1 : 1), y + (rhs === \"T\" ? 1 : -1)];\n } else {\n return [x + (lhs === \"L\" ? -1 : 1), y];\n }\n } else {\n if (isArchitectureDirectionX(rhs)) {\n return [x + (rhs === \"L\" ? 1 : -1), y + (lhs === \"T\" ? 1 : -1)];\n } else {\n return [x, y + (lhs === \"T\" ? 1 : -1)];\n }\n }\n}, \"shiftPositionByArchitectureDirectionPair\");\nvar getArchitectureDirectionXYFactors = /* @__PURE__ */ __name(function(pair) {\n if (pair === \"LT\" || pair === \"TL\") {\n return [1, 1];\n } else if (pair === \"BL\" || pair === \"LB\") {\n return [1, -1];\n } else if (pair === \"BR\" || pair === \"RB\") {\n return [-1, -1];\n } else {\n return [-1, 1];\n }\n}, \"getArchitectureDirectionXYFactors\");\nvar getArchitectureDirectionAlignment = /* @__PURE__ */ __name(function(a, b) {\n if (isArchitectureDirectionXY(a, b)) {\n return \"bend\";\n } else if (isArchitectureDirectionX(a)) {\n return \"horizontal\";\n }\n return \"vertical\";\n}, \"getArchitectureDirectionAlignment\");\nvar isArchitectureService = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp.type === \"service\";\n}, \"isArchitectureService\");\nvar isArchitectureJunction = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp.type === \"junction\";\n}, \"isArchitectureJunction\");\nvar edgeData = /* @__PURE__ */ __name((edge) => {\n return edge.data();\n}, \"edgeData\");\nvar nodeData = /* @__PURE__ */ __name((node) => {\n return node.data();\n}, \"nodeData\");\n\n// src/diagrams/architecture/architectureDb.ts\nvar DEFAULT_ARCHITECTURE_CONFIG = defaultConfig_default.architecture;\nvar ArchitectureDB = class {\n constructor() {\n this.nodes = {};\n this.groups = {};\n this.edges = [];\n this.registeredIds = {};\n this.elements = {};\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n this.clear();\n }\n static {\n __name(this, \"ArchitectureDB\");\n }\n clear() {\n this.nodes = {};\n this.groups = {};\n this.edges = [];\n this.registeredIds = {};\n this.dataStructures = void 0;\n this.elements = {};\n clear();\n }\n addService({\n id,\n icon,\n in: parent,\n title,\n iconText\n }) {\n if (this.registeredIds[id] !== void 0) {\n throw new Error(\n `The service id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== void 0) {\n if (id === parent) {\n throw new Error(`The service [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds[parent] === void 0) {\n throw new Error(\n `The service [${id}]'s parent does not exist. Please make sure the parent is created before this service`\n );\n }\n if (this.registeredIds[parent] === \"node\") {\n throw new Error(`The service [${id}]'s parent is not a group`);\n }\n }\n this.registeredIds[id] = \"node\";\n this.nodes[id] = {\n id,\n type: \"service\",\n icon,\n iconText,\n title,\n edges: [],\n in: parent\n };\n }\n getServices() {\n return Object.values(this.nodes).filter(isArchitectureService);\n }\n addJunction({ id, in: parent }) {\n this.registeredIds[id] = \"node\";\n this.nodes[id] = {\n id,\n type: \"junction\",\n edges: [],\n in: parent\n };\n }\n getJunctions() {\n return Object.values(this.nodes).filter(isArchitectureJunction);\n }\n getNodes() {\n return Object.values(this.nodes);\n }\n getNode(id) {\n return this.nodes[id] ?? null;\n }\n addGroup({ id, icon, in: parent, title }) {\n if (this.registeredIds?.[id] !== void 0) {\n throw new Error(\n `The group id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== void 0) {\n if (id === parent) {\n throw new Error(`The group [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds?.[parent] === void 0) {\n throw new Error(\n `The group [${id}]'s parent does not exist. Please make sure the parent is created before this group`\n );\n }\n if (this.registeredIds?.[parent] === \"node\") {\n throw new Error(`The group [${id}]'s parent is not a group`);\n }\n }\n this.registeredIds[id] = \"group\";\n this.groups[id] = {\n id,\n icon,\n title,\n in: parent\n };\n }\n getGroups() {\n return Object.values(this.groups);\n }\n addEdge({\n lhsId,\n rhsId,\n lhsDir,\n rhsDir,\n lhsInto,\n rhsInto,\n lhsGroup,\n rhsGroup,\n title\n }) {\n if (!isArchitectureDirection(lhsDir)) {\n throw new Error(\n `Invalid direction given for left hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(lhsDir)}`\n );\n }\n if (!isArchitectureDirection(rhsDir)) {\n throw new Error(\n `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(rhsDir)}`\n );\n }\n if (this.nodes[lhsId] === void 0 && this.groups[lhsId] === void 0) {\n throw new Error(\n `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n if (this.nodes[rhsId] === void 0 && this.groups[rhsId] === void 0) {\n throw new Error(\n `The right-hand id [${rhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n const lhsGroupId = this.nodes[lhsId].in;\n const rhsGroupId = this.nodes[rhsId].in;\n if (lhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The left-hand id [${lhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n if (rhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The right-hand id [${rhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n const edge = {\n lhsId,\n lhsDir,\n lhsInto,\n lhsGroup,\n rhsId,\n rhsDir,\n rhsInto,\n rhsGroup,\n title\n };\n this.edges.push(edge);\n if (this.nodes[lhsId] && this.nodes[rhsId]) {\n this.nodes[lhsId].edges.push(this.edges[this.edges.length - 1]);\n this.nodes[rhsId].edges.push(this.edges[this.edges.length - 1]);\n }\n }\n getEdges() {\n return this.edges;\n }\n /**\n * Returns the current diagram's adjacency list, spatial map, & group alignments.\n * If they have not been created, run the algorithms to generate them.\n * @returns\n */\n getDataStructures() {\n if (this.dataStructures === void 0) {\n const groupAlignments = {};\n const adjList = Object.entries(this.nodes).reduce((prevOuter, [id, service]) => {\n prevOuter[id] = service.edges.reduce((prevInner, edge) => {\n const lhsGroupId = this.getNode(edge.lhsId)?.in;\n const rhsGroupId = this.getNode(edge.rhsId)?.in;\n if (lhsGroupId && rhsGroupId && lhsGroupId !== rhsGroupId) {\n const alignment = getArchitectureDirectionAlignment(edge.lhsDir, edge.rhsDir);\n if (alignment !== \"bend\") {\n groupAlignments[lhsGroupId] ??= {};\n groupAlignments[lhsGroupId][rhsGroupId] = alignment;\n groupAlignments[rhsGroupId] ??= {};\n groupAlignments[rhsGroupId][lhsGroupId] = alignment;\n }\n }\n if (edge.lhsId === id) {\n const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir);\n if (pair) {\n prevInner[pair] = edge.rhsId;\n }\n } else {\n const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir);\n if (pair) {\n prevInner[pair] = edge.lhsId;\n }\n }\n return prevInner;\n }, {});\n return prevOuter;\n }, {});\n const firstId = Object.keys(adjList)[0];\n const visited = { [firstId]: 1 };\n const notVisited = Object.keys(adjList).reduce(\n (prev, id) => id === firstId ? prev : { ...prev, [id]: 1 },\n {}\n );\n const BFS = /* @__PURE__ */ __name((startingId) => {\n const spatialMap = { [startingId]: [0, 0] };\n const queue = [startingId];\n while (queue.length > 0) {\n const id = queue.shift();\n if (id) {\n visited[id] = 1;\n delete notVisited[id];\n const adj = adjList[id];\n const [posX, posY] = spatialMap[id];\n Object.entries(adj).forEach(([dir, rhsId]) => {\n if (!visited[rhsId]) {\n spatialMap[rhsId] = shiftPositionByArchitectureDirectionPair(\n [posX, posY],\n dir\n );\n queue.push(rhsId);\n }\n });\n }\n }\n return spatialMap;\n }, \"BFS\");\n const spatialMaps = [BFS(firstId)];\n while (Object.keys(notVisited).length > 0) {\n spatialMaps.push(BFS(Object.keys(notVisited)[0]));\n }\n this.dataStructures = {\n adjList,\n spatialMaps,\n groupAlignments\n };\n }\n return this.dataStructures;\n }\n setElementForId(id, element) {\n this.elements[id] = element;\n }\n getElementById(id) {\n return this.elements[id];\n }\n getConfig() {\n return cleanAndMerge({\n ...DEFAULT_ARCHITECTURE_CONFIG,\n ...getConfig().architecture\n });\n }\n getConfigField(field) {\n return this.getConfig()[field];\n }\n};\n\n// src/diagrams/architecture/architectureParser.ts\nvar populateDb = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n ast.groups.map((group) => db.addGroup(group));\n ast.services.map((service) => db.addService({ ...service, type: \"service\" }));\n ast.junctions.map((service) => db.addJunction({ ...service, type: \"junction\" }));\n ast.edges.map((edge) => db.addEdge(edge));\n}, \"populateDb\");\nvar parser = {\n parser: {\n // @ts-expect-error - ArchitectureDB is not assignable to DiagramDB\n yy: void 0\n },\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"architecture\", input);\n log.debug(ast);\n const db = parser.parser?.yy;\n if (!(db instanceof ArchitectureDB)) {\n throw new Error(\n \"parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n populateDb(ast, db);\n }, \"parse\")\n};\n\n// src/diagrams/architecture/architectureStyles.ts\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .edge {\n stroke-width: ${options.archEdgeWidth};\n stroke: ${options.archEdgeColor};\n fill: none;\n }\n\n .arrow {\n fill: ${options.archEdgeArrowColor};\n }\n\n .node-bkg {\n fill: none;\n stroke: ${options.archGroupBorderColor};\n stroke-width: ${options.archGroupBorderWidth};\n stroke-dasharray: 8;\n }\n .node-icon-text {\n display: flex; \n align-items: center;\n }\n \n .node-icon-text > div {\n color: #fff;\n margin: 1px;\n height: fit-content;\n text-align: center;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n }\n`, \"getStyles\");\nvar architectureStyles_default = getStyles;\n\n// src/diagrams/architecture/architectureRenderer.ts\nimport cytoscape from \"cytoscape\";\nimport fcose from \"cytoscape-fcose\";\nimport { select } from \"d3\";\n\n// src/diagrams/architecture/architectureIcons.ts\nvar wrapIcon = /* @__PURE__ */ __name((icon) => {\n return `${icon}`;\n}, \"wrapIcon\");\nvar architectureIcons = {\n prefix: \"mermaid-architecture\",\n height: 80,\n width: 80,\n icons: {\n database: {\n body: wrapIcon(\n ''\n )\n },\n server: {\n body: wrapIcon(\n ''\n )\n },\n disk: {\n body: wrapIcon(\n ''\n )\n },\n internet: {\n body: wrapIcon(\n ''\n )\n },\n cloud: {\n body: wrapIcon(\n ''\n )\n },\n unknown: unknownIcon,\n blank: {\n body: wrapIcon(\"\")\n }\n }\n};\n\n// src/diagrams/architecture/svgDraw.ts\nvar drawEdges = /* @__PURE__ */ __name(async function(edgesEl, cy, db) {\n const padding = db.getConfigField(\"padding\");\n const iconSize = db.getConfigField(\"iconSize\");\n const halfIconSize = iconSize / 2;\n const arrowSize = iconSize / 6;\n const halfArrowSize = arrowSize / 2;\n await Promise.all(\n cy.edges().map(async (edge) => {\n const {\n source,\n sourceDir,\n sourceArrow,\n sourceGroup,\n target,\n targetDir,\n targetArrow,\n targetGroup,\n label\n } = edgeData(edge);\n let { x: startX, y: startY } = edge[0].sourceEndpoint();\n const { x: midX, y: midY } = edge[0].midpoint();\n let { x: endX, y: endY } = edge[0].targetEndpoint();\n const groupEdgeShift = padding + 4;\n if (sourceGroup) {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === \"L\" ? -groupEdgeShift : groupEdgeShift;\n } else {\n startY += sourceDir === \"T\" ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n if (targetGroup) {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === \"L\" ? -groupEdgeShift : groupEdgeShift;\n } else {\n endY += targetDir === \"T\" ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n if (!sourceGroup && db.getNode(source)?.type === \"junction\") {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === \"L\" ? halfIconSize : -halfIconSize;\n } else {\n startY += sourceDir === \"T\" ? halfIconSize : -halfIconSize;\n }\n }\n if (!targetGroup && db.getNode(target)?.type === \"junction\") {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === \"L\" ? halfIconSize : -halfIconSize;\n } else {\n endY += targetDir === \"T\" ? halfIconSize : -halfIconSize;\n }\n }\n if (edge[0]._private.rscratch) {\n const g = edgesEl.insert(\"g\");\n g.insert(\"path\").attr(\"d\", `M ${startX},${startY} L ${midX},${midY} L${endX},${endY} `).attr(\"class\", \"edge\").attr(\"id\", getEdgeId(source, target, { prefix: \"L\" }));\n if (sourceArrow) {\n const xShift = isArchitectureDirectionX(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startX, arrowSize) : startX - halfArrowSize;\n const yShift = isArchitectureDirectionY(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startY, arrowSize) : startY - halfArrowSize;\n g.insert(\"polygon\").attr(\"points\", ArchitectureDirectionArrow[sourceDir](arrowSize)).attr(\"transform\", `translate(${xShift},${yShift})`).attr(\"class\", \"arrow\");\n }\n if (targetArrow) {\n const xShift = isArchitectureDirectionX(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endX, arrowSize) : endX - halfArrowSize;\n const yShift = isArchitectureDirectionY(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endY, arrowSize) : endY - halfArrowSize;\n g.insert(\"polygon\").attr(\"points\", ArchitectureDirectionArrow[targetDir](arrowSize)).attr(\"transform\", `translate(${xShift},${yShift})`).attr(\"class\", \"arrow\");\n }\n if (label) {\n const axis = !isArchitectureDirectionXY(sourceDir, targetDir) ? isArchitectureDirectionX(sourceDir) ? \"X\" : \"Y\" : \"XY\";\n let width = 0;\n if (axis === \"X\") {\n width = Math.abs(startX - endX);\n } else if (axis === \"Y\") {\n width = Math.abs(startY - endY) / 1.5;\n } else {\n width = Math.abs(startX - endX) / 2;\n }\n const textElem = g.append(\"g\");\n await createText(\n textElem,\n label,\n {\n useHtmlLabels: false,\n width,\n classes: \"architecture-service-label\"\n },\n getConfig2()\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\");\n if (axis === \"X\") {\n textElem.attr(\"transform\", \"translate(\" + midX + \", \" + midY + \")\");\n } else if (axis === \"Y\") {\n textElem.attr(\"transform\", \"translate(\" + midX + \", \" + midY + \") rotate(-90)\");\n } else if (axis === \"XY\") {\n const pair = getArchitectureDirectionPair(sourceDir, targetDir);\n if (pair && isArchitecturePairXY(pair)) {\n const bboxOrig = textElem.node().getBoundingClientRect();\n const [x, y] = getArchitectureDirectionXYFactors(pair);\n textElem.attr(\"dominant-baseline\", \"auto\").attr(\"transform\", `rotate(${-1 * x * y * 45})`);\n const bboxNew = textElem.node().getBoundingClientRect();\n textElem.attr(\n \"transform\",\n `\n translate(${midX}, ${midY - bboxOrig.height / 2})\n translate(${x * bboxNew.width / 2}, ${y * bboxNew.height / 2})\n rotate(${-1 * x * y * 45}, 0, ${bboxOrig.height / 2})\n `\n );\n }\n }\n }\n }\n })\n );\n}, \"drawEdges\");\nvar drawGroups = /* @__PURE__ */ __name(async function(groupsEl, cy, db) {\n const padding = db.getConfigField(\"padding\");\n const groupIconSize = padding * 0.75;\n const fontSize = db.getConfigField(\"fontSize\");\n const iconSize = db.getConfigField(\"iconSize\");\n const halfIconSize = iconSize / 2;\n await Promise.all(\n cy.nodes().map(async (node) => {\n const data = nodeData(node);\n if (data.type === \"group\") {\n const { h, w, x1, y1 } = node.boundingBox();\n const groupsNode = groupsEl.append(\"rect\");\n groupsNode.attr(\"id\", `group-${data.id}`).attr(\"x\", x1 + halfIconSize).attr(\"y\", y1 + halfIconSize).attr(\"width\", w).attr(\"height\", h).attr(\"class\", \"node-bkg\");\n const groupLabelContainer = groupsEl.append(\"g\");\n let shiftedX1 = x1;\n let shiftedY1 = y1;\n if (data.icon) {\n const bkgElem = groupLabelContainer.append(\"g\");\n bkgElem.html(\n `${await getIconSVG(data.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n bkgElem.attr(\n \"transform\",\n \"translate(\" + (shiftedX1 + halfIconSize + 1) + \", \" + (shiftedY1 + halfIconSize + 1) + \")\"\n );\n shiftedX1 += groupIconSize;\n shiftedY1 += fontSize / 2 - 1 - 2;\n }\n if (data.label) {\n const textElem = groupLabelContainer.append(\"g\");\n await createText(\n textElem,\n data.label,\n {\n useHtmlLabels: false,\n width: w,\n classes: \"architecture-service-label\"\n },\n getConfig2()\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"start\").attr(\"text-anchor\", \"start\");\n textElem.attr(\n \"transform\",\n \"translate(\" + (shiftedX1 + halfIconSize + 4) + \", \" + (shiftedY1 + halfIconSize + 2) + \")\"\n );\n }\n db.setElementForId(data.id, groupsNode);\n }\n })\n );\n}, \"drawGroups\");\nvar drawServices = /* @__PURE__ */ __name(async function(db, elem, services) {\n const config = getConfig2();\n for (const service of services) {\n const serviceElem = elem.append(\"g\");\n const iconSize = db.getConfigField(\"iconSize\");\n if (service.title) {\n const textElem = serviceElem.append(\"g\");\n await createText(\n textElem,\n service.title,\n {\n useHtmlLabels: false,\n width: iconSize * 1.5,\n classes: \"architecture-service-label\"\n },\n config\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\");\n textElem.attr(\"transform\", \"translate(\" + iconSize / 2 + \", \" + iconSize + \")\");\n }\n const bkgElem = serviceElem.append(\"g\");\n if (service.icon) {\n bkgElem.html(\n `${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n } else if (service.iconText) {\n bkgElem.html(\n `${await getIconSVG(\"blank\", { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n const textElemContainer = bkgElem.append(\"g\");\n const fo = textElemContainer.append(\"foreignObject\").attr(\"width\", iconSize).attr(\"height\", iconSize);\n const divElem = fo.append(\"div\").attr(\"class\", \"node-icon-text\").attr(\"style\", `height: ${iconSize}px;`).append(\"div\").html(sanitizeText(service.iconText, config));\n const fontSize = parseInt(\n window.getComputedStyle(divElem.node(), null).getPropertyValue(\"font-size\").replace(/\\D/g, \"\")\n ) ?? 16;\n divElem.attr(\"style\", `-webkit-line-clamp: ${Math.floor((iconSize - 2) / fontSize)};`);\n } else {\n bkgElem.append(\"path\").attr(\"class\", \"node-bkg\").attr(\"id\", \"node-\" + service.id).attr(\n \"d\",\n `M0 ${iconSize} v${-iconSize} q0,-5 5,-5 h${iconSize} q5,0 5,5 v${iconSize} H0 Z`\n );\n }\n serviceElem.attr(\"id\", `service-${service.id}`).attr(\"class\", \"architecture-service\");\n const { width, height } = serviceElem.node().getBBox();\n service.width = width;\n service.height = height;\n db.setElementForId(service.id, serviceElem);\n }\n return 0;\n}, \"drawServices\");\nvar drawJunctions = /* @__PURE__ */ __name(function(db, elem, junctions) {\n junctions.forEach((junction) => {\n const junctionElem = elem.append(\"g\");\n const iconSize = db.getConfigField(\"iconSize\");\n const bkgElem = junctionElem.append(\"g\");\n bkgElem.append(\"rect\").attr(\"id\", \"node-\" + junction.id).attr(\"fill-opacity\", \"0\").attr(\"width\", iconSize).attr(\"height\", iconSize);\n junctionElem.attr(\"class\", \"architecture-junction\");\n const { width, height } = junctionElem._groups[0][0].getBBox();\n junctionElem.width = width;\n junctionElem.height = height;\n db.setElementForId(junction.id, junctionElem);\n });\n}, \"drawJunctions\");\n\n// src/diagrams/architecture/architectureRenderer.ts\nregisterIconPacks([\n {\n name: architectureIcons.prefix,\n icons: architectureIcons\n }\n]);\ncytoscape.use(fcose);\nfunction addServices(services, cy, db) {\n services.forEach((service) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"service\",\n id: service.id,\n icon: service.icon,\n label: service.title,\n parent: service.in,\n width: db.getConfigField(\"iconSize\"),\n height: db.getConfigField(\"iconSize\")\n },\n classes: \"node-service\"\n });\n });\n}\n__name(addServices, \"addServices\");\nfunction addJunctions(junctions, cy, db) {\n junctions.forEach((junction) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"junction\",\n id: junction.id,\n parent: junction.in,\n width: db.getConfigField(\"iconSize\"),\n height: db.getConfigField(\"iconSize\")\n },\n classes: \"node-junction\"\n });\n });\n}\n__name(addJunctions, \"addJunctions\");\nfunction positionNodes(db, cy) {\n cy.nodes().map((node) => {\n const data = nodeData(node);\n if (data.type === \"group\") {\n return;\n }\n data.x = node.position().x;\n data.y = node.position().y;\n const nodeElem = db.getElementById(data.id);\n nodeElem.attr(\"transform\", \"translate(\" + (data.x || 0) + \",\" + (data.y || 0) + \")\");\n });\n}\n__name(positionNodes, \"positionNodes\");\nfunction addGroups(groups, cy) {\n groups.forEach((group) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"group\",\n id: group.id,\n icon: group.icon,\n label: group.title,\n parent: group.in\n },\n classes: \"node-group\"\n });\n });\n}\n__name(addGroups, \"addGroups\");\nfunction addEdges(edges, cy) {\n edges.forEach((parsedEdge) => {\n const { lhsId, rhsId, lhsInto, lhsGroup, rhsInto, lhsDir, rhsDir, rhsGroup, title } = parsedEdge;\n const edgeType = isArchitectureDirectionXY(parsedEdge.lhsDir, parsedEdge.rhsDir) ? \"segments\" : \"straight\";\n const edge = {\n id: `${lhsId}-${rhsId}`,\n label: title,\n source: lhsId,\n sourceDir: lhsDir,\n sourceArrow: lhsInto,\n sourceGroup: lhsGroup,\n sourceEndpoint: lhsDir === \"L\" ? \"0 50%\" : lhsDir === \"R\" ? \"100% 50%\" : lhsDir === \"T\" ? \"50% 0\" : \"50% 100%\",\n target: rhsId,\n targetDir: rhsDir,\n targetArrow: rhsInto,\n targetGroup: rhsGroup,\n targetEndpoint: rhsDir === \"L\" ? \"0 50%\" : rhsDir === \"R\" ? \"100% 50%\" : rhsDir === \"T\" ? \"50% 0\" : \"50% 100%\"\n };\n cy.add({\n group: \"edges\",\n data: edge,\n classes: edgeType\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction getAlignments(db, spatialMaps, groupAlignments) {\n const flattenAlignments = /* @__PURE__ */ __name((alignmentObj, alignmentDir) => {\n return Object.entries(alignmentObj).reduce(\n (prev, [dir, alignments2]) => {\n let cnt = 0;\n const arr = Object.entries(alignments2);\n if (arr.length === 1) {\n prev[dir] = arr[0][1];\n return prev;\n }\n for (let i = 0; i < arr.length - 1; i++) {\n for (let j = i + 1; j < arr.length; j++) {\n const [aGroupId, aNodeIds] = arr[i];\n const [bGroupId, bNodeIds] = arr[j];\n const alignment = groupAlignments[aGroupId]?.[bGroupId];\n if (alignment === alignmentDir) {\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds];\n } else if (aGroupId === \"default\" || bGroupId === \"default\") {\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds];\n } else {\n const keyA = `${dir}-${cnt++}`;\n prev[keyA] = aNodeIds;\n const keyB = `${dir}-${cnt++}`;\n prev[keyB] = bNodeIds;\n }\n }\n }\n return prev;\n },\n {}\n );\n }, \"flattenAlignments\");\n const alignments = spatialMaps.map((spatialMap) => {\n const horizontalAlignments = {};\n const verticalAlignments = {};\n Object.entries(spatialMap).forEach(([id, [x, y]]) => {\n const nodeGroup = db.getNode(id)?.in ?? \"default\";\n horizontalAlignments[y] ??= {};\n horizontalAlignments[y][nodeGroup] ??= [];\n horizontalAlignments[y][nodeGroup].push(id);\n verticalAlignments[x] ??= {};\n verticalAlignments[x][nodeGroup] ??= [];\n verticalAlignments[x][nodeGroup].push(id);\n });\n return {\n horiz: Object.values(flattenAlignments(horizontalAlignments, \"horizontal\")).filter(\n (arr) => arr.length > 1\n ),\n vert: Object.values(flattenAlignments(verticalAlignments, \"vertical\")).filter(\n (arr) => arr.length > 1\n )\n };\n });\n const [horizontal, vertical] = alignments.reduce(\n ([prevHoriz, prevVert], { horiz, vert }) => {\n return [\n [...prevHoriz, ...horiz],\n [...prevVert, ...vert]\n ];\n },\n [[], []]\n );\n return {\n horizontal,\n vertical\n };\n}\n__name(getAlignments, \"getAlignments\");\nfunction getRelativeConstraints(spatialMaps, db) {\n const relativeConstraints = [];\n const posToStr = /* @__PURE__ */ __name((pos) => `${pos[0]},${pos[1]}`, \"posToStr\");\n const strToPos = /* @__PURE__ */ __name((pos) => pos.split(\",\").map((p) => parseInt(p)), \"strToPos\");\n spatialMaps.forEach((spatialMap) => {\n const invSpatialMap = Object.fromEntries(\n Object.entries(spatialMap).map(([id, pos]) => [posToStr(pos), id])\n );\n const queue = [posToStr([0, 0])];\n const visited = {};\n const directions = {\n L: [-1, 0],\n R: [1, 0],\n T: [0, 1],\n B: [0, -1]\n };\n while (queue.length > 0) {\n const curr = queue.shift();\n if (curr) {\n visited[curr] = 1;\n const currId = invSpatialMap[curr];\n if (currId) {\n const currPos = strToPos(curr);\n Object.entries(directions).forEach(([dir, shift]) => {\n const newPos = posToStr([currPos[0] + shift[0], currPos[1] + shift[1]]);\n const newId = invSpatialMap[newPos];\n if (newId && !visited[newPos]) {\n queue.push(newPos);\n relativeConstraints.push({\n [ArchitectureDirectionName[dir]]: newId,\n [ArchitectureDirectionName[getOppositeArchitectureDirection(dir)]]: currId,\n gap: 1.5 * db.getConfigField(\"iconSize\")\n });\n }\n });\n }\n }\n }\n });\n return relativeConstraints;\n}\n__name(getRelativeConstraints, \"getRelativeConstraints\");\nfunction layoutArchitecture(services, junctions, groups, edges, db, { spatialMaps, groupAlignments }) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"straight\",\n label: \"data(label)\",\n \"source-endpoint\": \"data(sourceEndpoint)\",\n \"target-endpoint\": \"data(targetEndpoint)\"\n }\n },\n {\n selector: \"edge.segments\",\n style: {\n \"curve-style\": \"segments\",\n \"segment-weights\": \"0\",\n \"segment-distances\": [0.5],\n // @ts-ignore Incorrect library types\n \"edge-distances\": \"endpoints\",\n \"source-endpoint\": \"data(sourceEndpoint)\",\n \"target-endpoint\": \"data(targetEndpoint)\"\n }\n },\n {\n selector: \"node\",\n style: {\n // @ts-ignore Incorrect library types\n \"compound-sizing-wrt-labels\": \"include\"\n }\n },\n {\n selector: \"node[label]\",\n style: {\n \"text-valign\": \"bottom\",\n \"text-halign\": \"center\",\n \"font-size\": `${db.getConfigField(\"fontSize\")}px`\n }\n },\n {\n selector: \".node-service\",\n style: {\n label: \"data(label)\",\n width: \"data(width)\",\n height: \"data(height)\"\n }\n },\n {\n selector: \".node-junction\",\n style: {\n width: \"data(width)\",\n height: \"data(height)\"\n }\n },\n {\n selector: \".node-group\",\n style: {\n // @ts-ignore Incorrect library types\n padding: `${db.getConfigField(\"padding\")}px`\n }\n }\n ],\n layout: {\n name: \"grid\",\n boundingBox: {\n x1: 0,\n x2: 100,\n y1: 0,\n y2: 100\n }\n }\n });\n renderEl.remove();\n addGroups(groups, cy);\n addServices(services, cy, db);\n addJunctions(junctions, cy, db);\n addEdges(edges, cy);\n const alignmentConstraint = getAlignments(db, spatialMaps, groupAlignments);\n const relativePlacementConstraint = getRelativeConstraints(spatialMaps, db);\n const layout = cy.layout({\n name: \"fcose\",\n quality: \"proof\",\n styleEnabled: false,\n animate: false,\n nodeDimensionsIncludeLabels: false,\n // Adjust the edge parameters if it passes through the border of a group\n // Hacky fix for: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose/issues/67\n idealEdgeLength(edge) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity = parentA === parentB ? 1.5 * db.getConfigField(\"iconSize\") : 0.5 * db.getConfigField(\"iconSize\");\n return elasticity;\n },\n edgeElasticity(edge) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity = parentA === parentB ? 0.45 : 1e-3;\n return elasticity;\n },\n alignmentConstraint,\n relativePlacementConstraint\n });\n layout.one(\"layoutstop\", () => {\n function getSegmentWeights(source, target, pointX, pointY) {\n let W, D;\n const { x: sX, y: sY } = source;\n const { x: tX, y: tY } = target;\n D = (pointY - sY + (sX - pointX) * (sY - tY) / (sX - tX)) / Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2));\n W = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D, 2));\n const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2));\n W = W / distAB;\n let delta1 = (tX - sX) * (pointY - sY) - (tY - sY) * (pointX - sX);\n switch (true) {\n case delta1 >= 0:\n delta1 = 1;\n break;\n case delta1 < 0:\n delta1 = -1;\n break;\n }\n let delta2 = (tX - sX) * (pointX - sX) + (tY - sY) * (pointY - sY);\n switch (true) {\n case delta2 >= 0:\n delta2 = 1;\n break;\n case delta2 < 0:\n delta2 = -1;\n break;\n }\n D = Math.abs(D) * delta1;\n W = W * delta2;\n return {\n distances: D,\n weights: W\n };\n }\n __name(getSegmentWeights, \"getSegmentWeights\");\n cy.startBatch();\n for (const edge of Object.values(cy.edges())) {\n if (edge.data?.()) {\n const { x: sX, y: sY } = edge.source().position();\n const { x: tX, y: tY } = edge.target().position();\n if (sX !== tX && sY !== tY) {\n const sEP = edge.sourceEndpoint();\n const tEP = edge.targetEndpoint();\n const { sourceDir } = edgeData(edge);\n const [pointX, pointY] = isArchitectureDirectionY(sourceDir) ? [sEP.x, tEP.y] : [tEP.x, sEP.y];\n const { weights, distances } = getSegmentWeights(sEP, tEP, pointX, pointY);\n edge.style(\"segment-distances\", distances);\n edge.style(\"segment-weights\", weights);\n }\n }\n }\n cy.endBatch();\n layout.run();\n });\n layout.run();\n cy.ready((e) => {\n log.info(\"Ready\", e);\n resolve(cy);\n });\n });\n}\n__name(layoutArchitecture, \"layoutArchitecture\");\nvar draw = /* @__PURE__ */ __name(async (text, id, _version, diagObj) => {\n const db = diagObj.db;\n const services = db.getServices();\n const junctions = db.getJunctions();\n const groups = db.getGroups();\n const edges = db.getEdges();\n const ds = db.getDataStructures();\n const svg = selectSvgElement(id);\n const edgesElem = svg.append(\"g\");\n edgesElem.attr(\"class\", \"architecture-edges\");\n const servicesElem = svg.append(\"g\");\n servicesElem.attr(\"class\", \"architecture-services\");\n const groupElem = svg.append(\"g\");\n groupElem.attr(\"class\", \"architecture-groups\");\n await drawServices(db, servicesElem, services);\n drawJunctions(db, servicesElem, junctions);\n const cy = await layoutArchitecture(services, junctions, groups, edges, db, ds);\n await drawEdges(edgesElem, cy, db);\n await drawGroups(groupElem, cy, db);\n positionNodes(db, cy);\n setupGraphViewbox(void 0, svg, db.getConfigField(\"padding\"), db.getConfigField(\"useMaxWidth\"));\n}, \"draw\");\nvar renderer = { draw };\n\n// src/diagrams/architecture/architectureDiagram.ts\nvar diagram = {\n parser,\n get db() {\n return new ArchitectureDB();\n },\n renderer,\n styles: architectureStyles_default\n};\nexport {\n diagram\n};\n"],"names":["root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","FDLayoutConstants","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","edgesToRemove","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","Ex","Ey","Lx","Ly","disc","t1","t2","intersections","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","originalIdealLength","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Matrix","array1","array2","array","constant","product","magnitude","sum","_i","C","INV","temp1","temp2","_i2","_sum","_j","_i3","_sum2","_j2","Quicksort","A","compareFunction","SVD","nu","dims","allocate","e","work","wantu","nct","nrt","lhs","rhs","t","_i4","_i5","_i6","_i7","_i8","_t","_i9","_i10","_j3","_i11","_k","_j4","_t2","_i12","_i13","_i14","_i15","_i16","_k2","_j5","_t3","_i17","_i18","_i19","pp","eps","tiny","_k3","kase","ks","_t4","f","_j6","_t5","cs","sn","_i20","_f","_j7","_t6","_cs","_sn","_i21","scale","sp","spm1","epm1","sk","ek","shift","_f2","g","_j8","_t7","_cs2","_sn2","_i22","_i23","_i24","_t8","_i25","_i26","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","diag","up","maxOf","indices","inProcessAlignments","indexes","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE__551__","__webpack_modules__","__unused_webpack_exports","coseBase","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","ConstraintHandler","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","calculateCompoundWeight","compoundNode","fixedNodeWeight","nodeData","nodeToDummyForVerticalAlignment","nodeToDummyForHorizontalAlignment","nodeId","verticalAlignment","horizontalAlignment","constraint","nodeIdLeft","nodeIdRight","nodeIdTop","nodeIdBottom","subGraphOnHorizontal","subGraphOnVertical","constructComponents","fixedNodes","components","isFixed","count","neighbor","resultOnHorizontal","resultOnVertical","fixedNode","allVerticalAlignments","totalDisplacementX","averageDisplacementX","allHorizontalAlignments","totalDisplacementY","averageDisplacementY","displacement","diff","component","actualNodes","averageDisplacement","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","lCompoundNode","horizontalMargin","verticalMargin","labelMarginLeft","labelMarginTop","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","compoundLabelMarginLeft","compoundLabelMarginTop","row","maxHeight","lnode","minWidth","horizontalOrg","verticalOrg","horizontalRatio","verticalRatio","bestOrg","ratio","members","favorHorizontalDim","verticalPadding","horizontalPadding","membersSize","totalWidth","totalHeight","maxWidth","averageWidth","averageHeight","delta","horizontalCountDouble","horizontalCount","idealWidth","tilingCompareBy","getNodeArea","n","areaCompareFcn","n1","n2","cmpBy","sumCenterX","sumCenterY","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","lastRowIndex","lastRowWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","relativePosition","prunedNodesInStep","lengthOfPrunedNodesInStep","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","dX","dY","pred1","processed","constraints","idToNodeMap","nodeIndexes","xCoords","yCoords","calculatePositionDiff","pos1","pos2","calculateAvgPosition","nodeIdSet","xPosSum","yPosSum","findAppropriatePositionForRelativePlacement","direction","dummyPositions","componentSources","setUnion","setA","setB","union","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","elem","err","inDegrees","adjacent","positionMap","pastMap","fixedIds","position","fixedId","_position","_loop","fixedPosition","sinkNodes","_components","isFixedComponent","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","isExist","existAt","ele","minBefore","minAfter","maxBefore","maxAfter","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","posBefore","posAfter","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_iterator4","_step4","_nodeId","applyReflectionForRelativePlacement","relativePlacementConstraints","reflectOnY","notReflectOnY","reflectOnX","notReflectOnX","findComponents","_currentNode","dagToUndirected","dag","undirected","dagToReversed","reversed","targetMatrix","sourceMatrix","standardTransformation","reflectionType","dagUndirected","verticalAlign","_loop2","alignmentSet","xPos","horizontalAlign","_loop3","yPos","largestComponentSize","largestComponentIndex","constraintsInlargestComponent","positionMapHorizontal","positionMapVertical","transformationMatrix","targetMatrixTranspose","sourceMatrixTranspose","tempMatrix","SVDResult","temp3","translationAmount","posInTheory","posDesired","posDiff","xAlign","_loop4","yAlign","_loop5","dummyToNodeForVerticalAlignment","dummyToNodeForHorizontalAlignment","dummyPositionsForVerticalAlignment","dummyPositionsForHorizontalAlignment","fixedNodesOnHorizontal","fixedNodesOnVertical","_loop6","_loop7","dagOnHorizontal","dagOnVertical","_loop8","sourceId","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_iterator5","_step5","undirectedOnHorizontal","undirectedOnVertical","componentsOnHorizontal","componentsOnVertical","reversedDagOnHorizontal","reversedDagOnVertical","componentSourcesOnHorizontal","componentSourcesOnVertical","_loop9","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_iterator6","_step6","_loop10","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_iterator7","_step7","_node","__webpack_module_cache__","cachedModule","__webpack_exports__","__WEBPACK_EXTERNAL_MODULE__140__","tgt","_len","srcs","_key","src","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","auxiliary","nodesMap","roots","eles","topMostNodes","visitedTopMostNodes","minDegreeNode","minDegree","isConnected","nodesConnectedToDummy","cmpt","childrenOfCurrentNode","neighborNodes","neighborNode","originalCenter","componentResult","options","minXCoord","maxXCoord","minYCoord","maxYCoord","_ref","_ref2","cyNode","nodeBB","leftX","rightX","topY","bottomY","diffOnX","diffOnY","item","_diffOnX","_diffOnY","boundingBox","parentsWithoutChildren","check","aux","coseLayout","spectralResult","idToLNode","isFn","fn","optFn","opt","processChildrenList","children_of_children","theNode","dimensions","parentInfo","theNewGraph","processEdges","idealLengthTotal","edgeCount","e1","processConstraints","assign","_require","spectralLayout","_require2","defaults","coseResult","componentCenters","constraintExist","layUtil","packingEnabled","toBeTiledNodes","_xCoords","_yCoords","tempSpectralResult","indexesToBeDeleted","_boundingBox","componentsEvaluated","subgraphs","hiddenEles","subgraph","nodeIndex","sourceNodeIndex","targetNodeIndex","sourceCenter","targetCenter","_parentInfo","shiftResult","newXCoords","newYCoords","_count","nodeRectangle","getPositions","pos","_pos","_hiddenEles","parentNodes","parentChildMap","allNodesNeighborhood","samplesColumn","minDistancesColumn","PHI","nodeSize","infinity","small","piTol","samplingType","nodeSeparation","sampleSize","randomSampleCR","sample","flag","BFS","pivot","samplingMethod","front","back","max_dist","max_ind","allBFS","a_q","a_u","a_v","max_s","a_Sig","powerIteration","theta1","theta2","Y1","Y2","V1","V2","previous","ele2","eleIndex","disconnectedId","iterator","firstNodePos","firstNodeWidth","secondNodeWidth","impl","register","cytoscape","ArchitectureDirectionName","ArchitectureDirectionArrow","__name","ArchitectureDirectionArrowShift","orig","arrowSize","_arrowSize","getOppositeArchitectureDirection","isArchitectureDirectionX","isArchitectureDirection","isArchitectureDirectionY","isArchitectureDirectionXY","aX_bY","aY_bX","isArchitecturePairXY","pair","isValidArchitectureDirectionPair","getArchitectureDirectionPair","sourceDir","targetDir","shiftPositionByArchitectureDirectionPair","getArchitectureDirectionXYFactors","getArchitectureDirectionAlignment","isArchitectureService","isArchitectureJunction","edgeData","DEFAULT_ARCHITECTURE_CONFIG","defaultConfig_default","ArchitectureDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","clear","icon","title","iconText","_b","_c","lhsId","rhsId","lhsDir","rhsDir","lhsInto","rhsInto","lhsGroup","rhsGroup","lhsGroupId","rhsGroupId","groupAlignments","adjList","prevOuter","service","prevInner","alignment","firstId","notVisited","startingId","spatialMap","adj","posX","posY","dir","spatialMaps","element","cleanAndMerge","getConfig","field","populateDb","ast","db","populateCommonDb","group","parser","input","parse","log","getStyles","architectureStyles_default","wrapIcon","architectureIcons","unknownIcon","drawEdges","edgesEl","padding","iconSize","halfIconSize","halfArrowSize","sourceArrow","sourceGroup","targetArrow","targetGroup","label","midX","midY","endX","endY","groupEdgeShift","getEdgeId","xShift","yShift","axis","textElem","createText","getConfig2","bboxOrig","bboxNew","drawGroups","groupsEl","groupIconSize","fontSize","groupsNode","groupLabelContainer","shiftedX1","shiftedY1","bkgElem","getIconSVG","drawServices","services","config","serviceElem","divElem","sanitizeText","drawJunctions","junctions","junction","junctionElem","registerIconPacks","fcose","addServices","addJunctions","positionNodes","addGroups","groups","addEdges","parsedEdge","edgeType","getAlignments","flattenAlignments","alignmentObj","alignmentDir","alignments2","cnt","aGroupId","aNodeIds","bGroupId","bNodeIds","keyA","keyB","alignments","horizontalAlignments","verticalAlignments","nodeGroup","horizontal","vertical","prevHoriz","prevVert","horiz","vert","getRelativeConstraints","relativeConstraints","posToStr","strToPos","invSpatialMap","curr","currId","currPos","newPos","newId","layoutArchitecture","resolve","renderEl","select","alignmentConstraint","relativePlacementConstraint","parentA","parentB","getSegmentWeights","pointX","pointY","W","D","sX","sY","tX","tY","distAB","delta1","delta2","sEP","tEP","weights","distances","draw","text","_version","diagObj","ds","svg","selectSvgElement","edgesElem","servicesElem","groupElem","setupGraphViewbox","renderer","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file +{"version":3,"file":"architectureDiagram-VXUJARFQ-CSLO5JFe.js","sources":["../../../../../webui/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.js","../../../../../webui/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.js","../../../../../webui/node_modules/cytoscape-fcose/cytoscape-fcose.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/architectureDiagram-VXUJARFQ.mjs"],"sourcesContent":["(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[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 28);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(5);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth) {\n if (this.labelPosHorizontal == \"left\") {\n this.rect.x -= this.labelWidth;\n this.setWidth(width + this.labelWidth);\n } else if (this.labelPosHorizontal == \"center\" && this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n } else if (this.labelPosHorizontal == \"right\") {\n this.setWidth(width + this.labelWidth);\n }\n }\n\n if (this.labelHeight) {\n if (this.labelPosVertical == \"top\") {\n this.rect.y -= this.labelHeight;\n this.setHeight(height + this.labelHeight);\n } else if (this.labelPosVertical == \"center\" && this.labelHeight > height) {\n this.rect.y -= (this.labelHeight - height) / 2;\n this.setHeight(this.labelHeight);\n } else if (this.labelPosVertical == \"bottom\") {\n this.setHeight(height + this.labelHeight);\n }\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(6); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n var edgesToRemove = [];\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n edgesToRemove.push(edge);\n }\n }\n\n // Remove invalid edges from graph manager\n for (var i = 0; i < edgesToRemove.length; i++) {\n this.remove(edgesToRemove[i]);\n }\n\n // Invalid edges are cleared, so return false\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n/**\n * This method checks and calculates the intersection of \n * a line segment and a circle.\n */\nIGeometry.findCircleLineIntersections = function (Ex, Ey, Lx, Ly, Cx, Cy, r) {\n\n // E is the starting point of the ray,\n // L is the end point of the ray,\n // C is the center of sphere you're testing against\n // r is the radius of that sphere\n\n // Compute:\n // d = L - E ( Direction vector of ray, from start to end )\n // f = E - C ( Vector from center sphere to ray start )\n\n // Then the intersection is found by..\n // P = E + t * d\n // This is a parametric equation:\n // Px = Ex + tdx\n // Py = Ey + tdy\n\n // get a, b, c values\n var a = (Lx - Ex) * (Lx - Ex) + (Ly - Ey) * (Ly - Ey);\n var b = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey));\n var c = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r * r;\n\n // get discriminant\n var disc = b * b - 4 * a * c;\n if (disc >= 0) {\n // insert into quadratic formula\n var t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var intersections = null;\n if (t1 >= 0 && t1 <= 1) {\n // t1 is the intersection, and it's closer than t2\n // (since t1 uses -b - discriminant)\n // Impale, Poke\n return [t1];\n }\n\n // here t1 didn't intersect so we are either started\n // inside the sphere or completely past it\n if (t2 >= 0 && t2 <= 1) {\n // ExitWound\n return [t2];\n }\n\n return intersections;\n } else return null;\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(6);\nvar PointD = __webpack_require__(5);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(29);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(5);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(4);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var originalIdealLength;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n originalIdealLength = edge.idealLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += originalIdealLength * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n // Reassign this attribute by using new constant value\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = edge.edgeElasticity * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n // Here we use half of the nodes' repulsion values for backward compatibility\n repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n\n // Ideal length and elasticity value for this edge\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.edgeElasticity = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n\n // Repulsion value of this node\n this.nodeRepulsion = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Some matrix (1d and 2d array) operations\nfunction Matrix() {}\n\n/**\n * matrix multiplication\n * array1, array2 and result are 2d arrays\n */\nMatrix.multMat = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = [];\n for (var j = 0; j < array2[0].length; j++) {\n result[i][j] = 0;\n for (var k = 0; k < array1[0].length; k++) {\n result[i][j] += array1[i][k] * array2[k][j];\n }\n }\n }\n return result;\n};\n\n/**\n * matrix transpose\n * array and result are 2d arrays\n */\nMatrix.transpose = function (array) {\n var result = [];\n\n for (var i = 0; i < array[0].length; i++) {\n result[i] = [];\n for (var j = 0; j < array.length; j++) {\n result[i][j] = array[j][i];\n }\n }\n\n return result;\n};\n\n/**\n * multiply array with constant\n * array and result are 1d arrays\n */\nMatrix.multCons = function (array, constant) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] * constant;\n }\n\n return result;\n};\n\n/**\n * substract two arrays\n * array1, array2 and result are 1d arrays\n */\nMatrix.minusOp = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = array1[i] - array2[i];\n }\n\n return result;\n};\n\n/**\n * dot product of two arrays with same size\n * array1 and array2 are 1d arrays\n */\nMatrix.dotProduct = function (array1, array2) {\n var product = 0;\n\n for (var i = 0; i < array1.length; i++) {\n product += array1[i] * array2[i];\n }\n\n return product;\n};\n\n/**\n * magnitude of an array\n * array is 1d array\n */\nMatrix.mag = function (array) {\n return Math.sqrt(this.dotProduct(array, array));\n};\n\n/**\n * normalization of an array\n * array and result are 1d array\n */\nMatrix.normalize = function (array) {\n var result = [];\n var magnitude = this.mag(array);\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] / magnitude;\n }\n\n return result;\n};\n\n/**\n * multiply an array with centering matrix\n * array and result are 1d array\n */\nMatrix.multGamma = function (array) {\n var result = [];\n var sum = 0;\n\n for (var i = 0; i < array.length; i++) {\n sum += array[i];\n }\n\n sum *= -1 / array.length;\n\n for (var _i = 0; _i < array.length; _i++) {\n result[_i] = sum + array[_i];\n }\n return result;\n};\n\n/**\n * a special matrix multiplication\n * result = 0.5 * C * INV * C^T * array\n * array and result are 1d, C and INV are 2d arrays\n */\nMatrix.multL = function (array, C, INV) {\n var result = [];\n var temp1 = [];\n var temp2 = [];\n\n // multiply by C^T\n for (var i = 0; i < C[0].length; i++) {\n var sum = 0;\n for (var j = 0; j < C.length; j++) {\n sum += -0.5 * C[j][i] * array[j];\n }\n temp1[i] = sum;\n }\n // multiply the result by INV\n for (var _i2 = 0; _i2 < INV.length; _i2++) {\n var _sum = 0;\n for (var _j = 0; _j < INV.length; _j++) {\n _sum += INV[_i2][_j] * temp1[_j];\n }\n temp2[_i2] = _sum;\n }\n // multiply the result by C\n for (var _i3 = 0; _i3 < C.length; _i3++) {\n var _sum2 = 0;\n for (var _j2 = 0; _j2 < C[0].length; _j2++) {\n _sum2 += C[_i3][_j2] * temp2[_j2];\n }\n result[_i3] = _sum2;\n }\n\n return result;\n};\n\nmodule.exports = Matrix;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Singular Value Decomposition implementation\nfunction SVD() {};\n\n/* Below singular value decomposition (svd) code including hypot function is adopted from https://github.com/dragonfly-ai/JamaJS\n Some changes are applied to make the code compatible with the fcose code and to make it independent from Jama.\n Input matrix is changed to a 2D array instead of Jama matrix. Matrix dimensions are taken according to 2D array instead of using Jama functions.\n An object that includes singular value components is created for return. \n The types of input parameters of the hypot function are removed. \n let is used instead of var for the variable initialization.\n*/\n/*\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*/\n\nSVD.svd = function (A) {\n this.U = null;\n this.V = null;\n this.s = null;\n this.m = 0;\n this.n = 0;\n this.m = A.length;\n this.n = A[0].length;\n var nu = Math.min(this.m, this.n);\n this.s = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(Math.min(this.m + 1, this.n));\n this.U = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.m, nu]);\n this.V = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.n, this.n]);\n var e = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.n);\n var work = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.m);\n var wantu = true;\n var wantv = true;\n var nct = Math.min(this.m - 1, this.n);\n var nrt = Math.max(0, Math.min(this.n - 2, this.m));\n for (var k = 0; k < Math.max(nct, nrt); k++) {\n if (k < nct) {\n this.s[k] = 0;\n for (var i = k; i < this.m; i++) {\n this.s[k] = SVD.hypot(this.s[k], A[i][k]);\n }\n ;\n if (this.s[k] !== 0.0) {\n if (A[k][k] < 0.0) {\n this.s[k] = -this.s[k];\n }\n for (var _i = k; _i < this.m; _i++) {\n A[_i][k] /= this.s[k];\n }\n ;\n A[k][k] += 1.0;\n }\n this.s[k] = -this.s[k];\n }\n for (var j = k + 1; j < this.n; j++) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k < nct, this.s[k] !== 0.0)) {\n var t = 0;\n for (var _i2 = k; _i2 < this.m; _i2++) {\n t += A[_i2][k] * A[_i2][j];\n }\n ;\n t = -t / A[k][k];\n for (var _i3 = k; _i3 < this.m; _i3++) {\n A[_i3][j] += t * A[_i3][k];\n }\n ;\n }\n e[j] = A[k][j];\n }\n ;\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(wantu, k < nct)) {\n for (var _i4 = k; _i4 < this.m; _i4++) {\n this.U[_i4][k] = A[_i4][k];\n }\n ;\n }\n if (k < nrt) {\n e[k] = 0;\n for (var _i5 = k + 1; _i5 < this.n; _i5++) {\n e[k] = SVD.hypot(e[k], e[_i5]);\n }\n ;\n if (e[k] !== 0.0) {\n if (e[k + 1] < 0.0) {\n e[k] = -e[k];\n }\n for (var _i6 = k + 1; _i6 < this.n; _i6++) {\n e[_i6] /= e[k];\n }\n ;\n e[k + 1] += 1.0;\n }\n e[k] = -e[k];\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k + 1 < this.m, e[k] !== 0.0)) {\n for (var _i7 = k + 1; _i7 < this.m; _i7++) {\n work[_i7] = 0.0;\n }\n ;\n for (var _j = k + 1; _j < this.n; _j++) {\n for (var _i8 = k + 1; _i8 < this.m; _i8++) {\n work[_i8] += e[_j] * A[_i8][_j];\n }\n ;\n }\n ;\n for (var _j2 = k + 1; _j2 < this.n; _j2++) {\n var _t = -e[_j2] / e[k + 1];\n for (var _i9 = k + 1; _i9 < this.m; _i9++) {\n A[_i9][_j2] += _t * work[_i9];\n }\n ;\n }\n ;\n }\n if (wantv) {\n for (var _i10 = k + 1; _i10 < this.n; _i10++) {\n this.V[_i10][k] = e[_i10];\n };\n }\n }\n };\n var p = Math.min(this.n, this.m + 1);\n if (nct < this.n) {\n this.s[nct] = A[nct][nct];\n }\n if (this.m < p) {\n this.s[p - 1] = 0.0;\n }\n if (nrt + 1 < p) {\n e[nrt] = A[nrt][p - 1];\n }\n e[p - 1] = 0.0;\n if (wantu) {\n for (var _j3 = nct; _j3 < nu; _j3++) {\n for (var _i11 = 0; _i11 < this.m; _i11++) {\n this.U[_i11][_j3] = 0.0;\n }\n ;\n this.U[_j3][_j3] = 1.0;\n };\n for (var _k = nct - 1; _k >= 0; _k--) {\n if (this.s[_k] !== 0.0) {\n for (var _j4 = _k + 1; _j4 < nu; _j4++) {\n var _t2 = 0;\n for (var _i12 = _k; _i12 < this.m; _i12++) {\n _t2 += this.U[_i12][_k] * this.U[_i12][_j4];\n };\n _t2 = -_t2 / this.U[_k][_k];\n for (var _i13 = _k; _i13 < this.m; _i13++) {\n this.U[_i13][_j4] += _t2 * this.U[_i13][_k];\n };\n };\n for (var _i14 = _k; _i14 < this.m; _i14++) {\n this.U[_i14][_k] = -this.U[_i14][_k];\n };\n this.U[_k][_k] = 1.0 + this.U[_k][_k];\n for (var _i15 = 0; _i15 < _k - 1; _i15++) {\n this.U[_i15][_k] = 0.0;\n };\n } else {\n for (var _i16 = 0; _i16 < this.m; _i16++) {\n this.U[_i16][_k] = 0.0;\n };\n this.U[_k][_k] = 1.0;\n }\n };\n }\n if (wantv) {\n for (var _k2 = this.n - 1; _k2 >= 0; _k2--) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(_k2 < nrt, e[_k2] !== 0.0)) {\n for (var _j5 = _k2 + 1; _j5 < nu; _j5++) {\n var _t3 = 0;\n for (var _i17 = _k2 + 1; _i17 < this.n; _i17++) {\n _t3 += this.V[_i17][_k2] * this.V[_i17][_j5];\n };\n _t3 = -_t3 / this.V[_k2 + 1][_k2];\n for (var _i18 = _k2 + 1; _i18 < this.n; _i18++) {\n this.V[_i18][_j5] += _t3 * this.V[_i18][_k2];\n };\n };\n }\n for (var _i19 = 0; _i19 < this.n; _i19++) {\n this.V[_i19][_k2] = 0.0;\n };\n this.V[_k2][_k2] = 1.0;\n };\n }\n var pp = p - 1;\n var iter = 0;\n var eps = Math.pow(2.0, -52.0);\n var tiny = Math.pow(2.0, -966.0);\n while (p > 0) {\n var _k3 = void 0;\n var kase = void 0;\n for (_k3 = p - 2; _k3 >= -1; _k3--) {\n if (_k3 === -1) {\n break;\n }\n if (Math.abs(e[_k3]) <= tiny + eps * (Math.abs(this.s[_k3]) + Math.abs(this.s[_k3 + 1]))) {\n e[_k3] = 0.0;\n break;\n }\n };\n if (_k3 === p - 2) {\n kase = 4;\n } else {\n var ks = void 0;\n for (ks = p - 1; ks >= _k3; ks--) {\n if (ks === _k3) {\n break;\n }\n var _t4 = (ks !== p ? Math.abs(e[ks]) : 0.0) + (ks !== _k3 + 1 ? Math.abs(e[ks - 1]) : 0.0);\n if (Math.abs(this.s[ks]) <= tiny + eps * _t4) {\n this.s[ks] = 0.0;\n break;\n }\n };\n if (ks === _k3) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n _k3 = ks;\n }\n }\n _k3++;\n switch (kase) {\n case 1:\n {\n var f = e[p - 2];\n e[p - 2] = 0.0;\n for (var _j6 = p - 2; _j6 >= _k3; _j6--) {\n var _t5 = SVD.hypot(this.s[_j6], f);\n var cs = this.s[_j6] / _t5;\n var sn = f / _t5;\n this.s[_j6] = _t5;\n if (_j6 !== _k3) {\n f = -sn * e[_j6 - 1];\n e[_j6 - 1] = cs * e[_j6 - 1];\n }\n if (wantv) {\n for (var _i20 = 0; _i20 < this.n; _i20++) {\n _t5 = cs * this.V[_i20][_j6] + sn * this.V[_i20][p - 1];\n this.V[_i20][p - 1] = -sn * this.V[_i20][_j6] + cs * this.V[_i20][p - 1];\n this.V[_i20][_j6] = _t5;\n };\n }\n };\n };\n break;\n case 2:\n {\n var _f = e[_k3 - 1];\n e[_k3 - 1] = 0.0;\n for (var _j7 = _k3; _j7 < p; _j7++) {\n var _t6 = SVD.hypot(this.s[_j7], _f);\n var _cs = this.s[_j7] / _t6;\n var _sn = _f / _t6;\n this.s[_j7] = _t6;\n _f = -_sn * e[_j7];\n e[_j7] = _cs * e[_j7];\n if (wantu) {\n for (var _i21 = 0; _i21 < this.m; _i21++) {\n _t6 = _cs * this.U[_i21][_j7] + _sn * this.U[_i21][_k3 - 1];\n this.U[_i21][_k3 - 1] = -_sn * this.U[_i21][_j7] + _cs * this.U[_i21][_k3 - 1];\n this.U[_i21][_j7] = _t6;\n };\n }\n };\n };\n break;\n case 3:\n {\n var scale = Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[p - 1]), Math.abs(this.s[p - 2])), Math.abs(e[p - 2])), Math.abs(this.s[_k3])), Math.abs(e[_k3]));\n var sp = this.s[p - 1] / scale;\n var spm1 = this.s[p - 2] / scale;\n var epm1 = e[p - 2] / scale;\n var sk = this.s[_k3] / scale;\n var ek = e[_k3] / scale;\n var b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2.0;\n var c = sp * epm1 * (sp * epm1);\n var shift = 0.0;\n if (function (lhs, rhs) {\n return lhs || rhs;\n }(b !== 0.0, c !== 0.0)) {\n shift = Math.sqrt(b * b + c);\n if (b < 0.0) {\n shift = -shift;\n }\n shift = c / (b + shift);\n }\n var _f2 = (sk + sp) * (sk - sp) + shift;\n var g = sk * ek;\n for (var _j8 = _k3; _j8 < p - 1; _j8++) {\n var _t7 = SVD.hypot(_f2, g);\n var _cs2 = _f2 / _t7;\n var _sn2 = g / _t7;\n if (_j8 !== _k3) {\n e[_j8 - 1] = _t7;\n }\n _f2 = _cs2 * this.s[_j8] + _sn2 * e[_j8];\n e[_j8] = _cs2 * e[_j8] - _sn2 * this.s[_j8];\n g = _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = _cs2 * this.s[_j8 + 1];\n if (wantv) {\n for (var _i22 = 0; _i22 < this.n; _i22++) {\n _t7 = _cs2 * this.V[_i22][_j8] + _sn2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8 + 1] = -_sn2 * this.V[_i22][_j8] + _cs2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8] = _t7;\n };\n }\n _t7 = SVD.hypot(_f2, g);\n _cs2 = _f2 / _t7;\n _sn2 = g / _t7;\n this.s[_j8] = _t7;\n _f2 = _cs2 * e[_j8] + _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = -_sn2 * e[_j8] + _cs2 * this.s[_j8 + 1];\n g = _sn2 * e[_j8 + 1];\n e[_j8 + 1] = _cs2 * e[_j8 + 1];\n if (wantu && _j8 < this.m - 1) {\n for (var _i23 = 0; _i23 < this.m; _i23++) {\n _t7 = _cs2 * this.U[_i23][_j8] + _sn2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8 + 1] = -_sn2 * this.U[_i23][_j8] + _cs2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8] = _t7;\n };\n }\n };\n e[p - 2] = _f2;\n iter = iter + 1;\n };\n break;\n case 4:\n {\n if (this.s[_k3] <= 0.0) {\n this.s[_k3] = this.s[_k3] < 0.0 ? -this.s[_k3] : 0.0;\n if (wantv) {\n for (var _i24 = 0; _i24 <= pp; _i24++) {\n this.V[_i24][_k3] = -this.V[_i24][_k3];\n };\n }\n }\n while (_k3 < pp) {\n if (this.s[_k3] >= this.s[_k3 + 1]) {\n break;\n }\n var _t8 = this.s[_k3];\n this.s[_k3] = this.s[_k3 + 1];\n this.s[_k3 + 1] = _t8;\n if (wantv && _k3 < this.n - 1) {\n for (var _i25 = 0; _i25 < this.n; _i25++) {\n _t8 = this.V[_i25][_k3 + 1];\n this.V[_i25][_k3 + 1] = this.V[_i25][_k3];\n this.V[_i25][_k3] = _t8;\n };\n }\n if (wantu && _k3 < this.m - 1) {\n for (var _i26 = 0; _i26 < this.m; _i26++) {\n _t8 = this.U[_i26][_k3 + 1];\n this.U[_i26][_k3 + 1] = this.U[_i26][_k3];\n this.U[_i26][_k3] = _t8;\n };\n }\n _k3++;\n };\n iter = 0;\n p--;\n };\n break;\n }\n };\n var result = { U: this.U, V: this.V, S: this.s };\n return result;\n};\n\n// sqrt(a^2 + b^2) without under/overflow.\nSVD.hypot = function (a, b) {\n var r = void 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n r = Math.abs(a) * Math.sqrt(1 + r * r);\n } else if (b != 0) {\n r = a / b;\n r = Math.abs(b) * Math.sqrt(1 + r * r);\n } else {\n r = 0.0;\n }\n return r;\n};\n\nmodule.exports = SVD;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(4);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(5);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(25);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(6);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(7);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(27);\nlayoutBase.Matrix = __webpack_require__(24);\nlayoutBase.SVD = __webpack_require__(26);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__551__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 45:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(551);\ncoseBase.CoSEConstants = __webpack_require__(806);\ncoseBase.CoSEEdge = __webpack_require__(767);\ncoseBase.CoSEGraph = __webpack_require__(880);\ncoseBase.CoSEGraphManager = __webpack_require__(578);\ncoseBase.CoSELayout = __webpack_require__(765);\ncoseBase.CoSENode = __webpack_require__(991);\ncoseBase.ConstraintHandler = __webpack_require__(902);\n\nmodule.exports = coseBase;\n\n/***/ }),\n\n/***/ 806:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\nCoSEConstants.ENFORCE_CONSTRAINTS = true;\nCoSEConstants.APPLY_LAYOUT = true;\nCoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS = true;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true; // this should be set to false if there will be a constraint\n// This constant is for differentiating whether actual layout algorithm that uses cose-base wants to apply only incremental layout or \n// an incremental layout on top of a randomized layout. If it is only incremental layout, then this constant should be true.\nCoSEConstants.PURE_INCREMENTAL = CoSEConstants.DEFAULT_INCREMENTAL;\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n\n/***/ 767:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutEdge = __webpack_require__(551).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n\n/***/ 880:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraph = __webpack_require__(551).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n\n/***/ 578:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraphManager = __webpack_require__(551).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n\n/***/ 765:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayout = __webpack_require__(551).FDLayout;\nvar CoSEGraphManager = __webpack_require__(578);\nvar CoSEGraph = __webpack_require__(880);\nvar CoSENode = __webpack_require__(991);\nvar CoSEEdge = __webpack_require__(767);\nvar CoSEConstants = __webpack_require__(806);\nvar ConstraintHandler = __webpack_require__(902);\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(551).LayoutConstants;\nvar Point = __webpack_require__(551).Point;\nvar PointD = __webpack_require__(551).PointD;\nvar DimensionD = __webpack_require__(551).DimensionD;\nvar Layout = __webpack_require__(551).Layout;\nvar Integer = __webpack_require__(551).Integer;\nvar IGeometry = __webpack_require__(551).IGeometry;\nvar LGraph = __webpack_require__(551).LGraph;\nvar Transform = __webpack_require__(551).Transform;\nvar LinkedList = __webpack_require__(551).LinkedList;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n this.constraints = {}; // keep layout constraints\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n }\n};\n\n// This method is used to set CoSE related parameters used by spring embedder.\nCoSELayout.prototype.initSpringEmbedder = function () {\n FDLayout.prototype.initSpringEmbedder.call(this);\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = 0.04;\n this.coolingAdjuster = 1;\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n if (Object.keys(this.constraints).length > 0) {\n ConstraintHandler.handleConstraints(this);\n this.initConstraintVariables();\n }\n\n this.initSpringEmbedder();\n if (CoSEConstants.APPLY_LAYOUT) {\n this.runSpringEmbedder();\n }\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2;else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2 * ((100 - this.afterGrowthIterations) / 100);else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\n// overrides moveNodes method in FDLayout\nCoSELayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n // calculate displacement for each node \n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.calculateDisplacement();\n }\n\n if (Object.keys(this.constraints).length > 0) {\n this.updateDisplacements();\n }\n\n // move each node\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\n// constraint related methods: initConstraintVariables and updateDisplacements\n\n// initialize constraint related variables\nCoSELayout.prototype.initConstraintVariables = function () {\n var self = this;\n this.idToNodeMap = new Map();\n this.fixedNodeSet = new Set();\n\n var allNodes = this.graphManager.getAllNodes();\n\n // fill idToNodeMap\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n this.idToNodeMap.set(node.id, node);\n }\n\n // calculate fixed node weight for given compound node\n var calculateCompoundWeight = function calculateCompoundWeight(compoundNode) {\n var nodes = compoundNode.getChild().getNodes();\n var node;\n var fixedNodeWeight = 0;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n if (self.fixedNodeSet.has(node.id)) {\n fixedNodeWeight += 100;\n }\n } else {\n fixedNodeWeight += calculateCompoundWeight(node);\n }\n }\n return fixedNodeWeight;\n };\n\n if (this.constraints.fixedNodeConstraint) {\n // fill fixedNodeSet\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n self.fixedNodeSet.add(nodeData.nodeId);\n });\n\n // assign fixed node weights to compounds if they contain fixed nodes\n var allNodes = this.graphManager.getAllNodes();\n var node;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getChild() != null) {\n var fixedNodeWeight = calculateCompoundWeight(node);\n if (fixedNodeWeight > 0) {\n node.fixedNodeWeight = fixedNodeWeight;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n this.dummyToNodeForVerticalAlignment = new Map();\n this.dummyToNodeForHorizontalAlignment = new Map();\n this.fixedNodesOnHorizontal = new Set();\n this.fixedNodesOnVertical = new Set();\n\n // fill maps and sets\n this.fixedNodeSet.forEach(function (nodeId) {\n self.fixedNodesOnHorizontal.add(nodeId);\n self.fixedNodesOnVertical.add(nodeId);\n });\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var verticalAlignment = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < verticalAlignment.length; i++) {\n this.dummyToNodeForVerticalAlignment.set(\"dummy\" + i, []);\n verticalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForVerticalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnHorizontal.add(\"dummy\" + i);\n }\n });\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < horizontalAlignment.length; i++) {\n this.dummyToNodeForHorizontalAlignment.set(\"dummy\" + i, []);\n horizontalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForHorizontalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnVertical.add(\"dummy\" + i);\n }\n });\n }\n }\n }\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n\n this.shuffle = function (array) {\n var j, x, i;\n for (i = array.length - 1; i >= 2 * array.length / 3; i--) {\n j = Math.floor(Math.random() * (i + 1));\n x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n };\n\n this.nodesInRelativeHorizontal = [];\n this.nodesInRelativeVertical = [];\n this.nodeToRelativeConstraintMapHorizontal = new Map();\n this.nodeToRelativeConstraintMapVertical = new Map();\n this.nodeToTempPositionMapHorizontal = new Map();\n this.nodeToTempPositionMapVertical = new Map();\n\n // fill arrays and maps\n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var nodeIdLeft = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var nodeIdRight = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n\n if (!self.nodesInRelativeHorizontal.includes(nodeIdLeft)) {\n self.nodesInRelativeHorizontal.push(nodeIdLeft);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdLeft, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdLeft)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdLeft)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(nodeIdLeft).getCenterX());\n }\n }\n if (!self.nodesInRelativeHorizontal.includes(nodeIdRight)) {\n self.nodesInRelativeHorizontal.push(nodeIdRight);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdRight, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdRight)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdRight)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(nodeIdRight).getCenterX());\n }\n }\n\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdLeft).push({ right: nodeIdRight, gap: constraint.gap });\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdRight).push({ left: nodeIdLeft, gap: constraint.gap });\n } else {\n var nodeIdTop = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var nodeIdBottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n\n if (!self.nodesInRelativeVertical.includes(nodeIdTop)) {\n self.nodesInRelativeVertical.push(nodeIdTop);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdTop, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdTop)) {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdTop)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(nodeIdTop).getCenterY());\n }\n }\n if (!self.nodesInRelativeVertical.includes(nodeIdBottom)) {\n self.nodesInRelativeVertical.push(nodeIdBottom);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdBottom, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdBottom)) {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdBottom)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(nodeIdBottom).getCenterY());\n }\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeIdTop).push({ bottom: nodeIdBottom, gap: constraint.gap });\n self.nodeToRelativeConstraintMapVertical.get(nodeIdBottom).push({ top: nodeIdTop, gap: constraint.gap });\n }\n });\n } else {\n var subGraphOnHorizontal = new Map(); // subgraph from vertical RP constraints\n var subGraphOnVertical = new Map(); // subgraph from vertical RP constraints\n\n // construct subgraphs from relative placement constraints \n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var left = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var right = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n if (subGraphOnHorizontal.has(left)) {\n subGraphOnHorizontal.get(left).push(right);\n } else {\n subGraphOnHorizontal.set(left, [right]);\n }\n if (subGraphOnHorizontal.has(right)) {\n subGraphOnHorizontal.get(right).push(left);\n } else {\n subGraphOnHorizontal.set(right, [left]);\n }\n } else {\n var top = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var bottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n if (subGraphOnVertical.has(top)) {\n subGraphOnVertical.get(top).push(bottom);\n } else {\n subGraphOnVertical.set(top, [bottom]);\n }\n if (subGraphOnVertical.has(bottom)) {\n subGraphOnVertical.get(bottom).push(top);\n } else {\n subGraphOnVertical.set(bottom, [top]);\n }\n }\n });\n\n // function to construct components from a given graph \n // also returns an array that keeps whether each component contains fixed node\n var constructComponents = function constructComponents(graph, fixedNodes) {\n var components = [];\n var isFixed = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n isFixed[count] = false;\n var currentNode = key;\n queue.push(currentNode);\n visited.add(currentNode);\n components[count].push(currentNode);\n\n while (queue.length != 0) {\n currentNode = queue.shift();\n if (fixedNodes.has(currentNode)) {\n isFixed[count] = true;\n }\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor)) {\n queue.push(neighbor);\n visited.add(neighbor);\n components[count].push(neighbor);\n }\n });\n }\n count++;\n }\n });\n\n return { components: components, isFixed: isFixed };\n };\n\n var resultOnHorizontal = constructComponents(subGraphOnHorizontal, self.fixedNodesOnHorizontal);\n this.componentsOnHorizontal = resultOnHorizontal.components;\n this.fixedComponentsOnHorizontal = resultOnHorizontal.isFixed;\n var resultOnVertical = constructComponents(subGraphOnVertical, self.fixedNodesOnVertical);\n this.componentsOnVertical = resultOnVertical.components;\n this.fixedComponentsOnVertical = resultOnVertical.isFixed;\n }\n }\n};\n\n// updates node displacements based on constraints\nCoSELayout.prototype.updateDisplacements = function () {\n var self = this;\n if (this.constraints.fixedNodeConstraint) {\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n var fixedNode = self.idToNodeMap.get(nodeData.nodeId);\n fixedNode.displacementX = 0;\n fixedNode.displacementY = 0;\n });\n }\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var allVerticalAlignments = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < allVerticalAlignments.length; i++) {\n var totalDisplacementX = 0;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allVerticalAlignments[i][j])) {\n totalDisplacementX = 0;\n break;\n }\n totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX;\n }\n var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i].length;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX = averageDisplacementX;\n }\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var allHorizontalAlignments = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < allHorizontalAlignments.length; i++) {\n var totalDisplacementY = 0;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allHorizontalAlignments[i][j])) {\n totalDisplacementY = 0;\n break;\n }\n totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY;\n }\n var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i].length;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY = averageDisplacementY;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n // shuffle array to randomize node processing order\n if (this.totalIterations % 10 == 0) {\n this.shuffle(this.nodesInRelativeHorizontal);\n this.shuffle(this.nodesInRelativeVertical);\n }\n\n this.nodesInRelativeHorizontal.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeId)[0]).displacementX;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementX;\n }\n self.nodeToRelativeConstraintMapHorizontal.get(nodeId).forEach(function (constraint) {\n if (constraint.right) {\n var diff = self.nodeToTempPositionMapHorizontal.get(constraint.right) - self.nodeToTempPositionMapHorizontal.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapHorizontal.get(nodeId) - self.nodeToTempPositionMapHorizontal.get(constraint.left) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapHorizontal.set(nodeId, self.nodeToTempPositionMapHorizontal.get(nodeId) + displacement);\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n self.dummyToNodeForVerticalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n }\n }\n });\n\n this.nodesInRelativeVertical.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeId)[0]).displacementY;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementY;\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeId).forEach(function (constraint) {\n if (constraint.bottom) {\n var diff = self.nodeToTempPositionMapVertical.get(constraint.bottom) - self.nodeToTempPositionMapVertical.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapVertical.get(nodeId) - self.nodeToTempPositionMapVertical.get(constraint.top) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapVertical.set(nodeId, self.nodeToTempPositionMapVertical.get(nodeId) + displacement);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n self.dummyToNodeForHorizontalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n }\n }\n });\n } else {\n for (var i = 0; i < this.componentsOnHorizontal.length; i++) {\n var component = this.componentsOnHorizontal[i];\n if (this.fixedComponentsOnHorizontal[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForVerticalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementX;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = averageDisplacement;\n }\n }\n }\n }\n\n for (var i = 0; i < this.componentsOnVertical.length; i++) {\n var component = this.componentsOnVertical[i];\n if (this.fixedComponentsOnVertical[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementY;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = averageDisplacement;\n }\n }\n }\n }\n }\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n compoundNode.setCenter(tiledZeroDegreePack[id].centerX, tiledZeroDegreePack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n var labelMarginLeft = lCompoundNode.labelMarginLeft;\n var labelMarginTop = lCompoundNode.labelMarginTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n var labelMarginLeft = compoundNode.labelMarginLeft;\n var labelMarginTop = compoundNode.labelMarginTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) {\n x += compoundHorizontalMargin + compoundLabelMarginLeft;\n y += compoundVerticalMargin + compoundLabelMarginTop;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n compoundNode.setCenter(self.tiledMemberPack[id].centerX, self.tiledMemberPack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var horizontalOrg = this.tileNodesByFavoringDim(nodes, minWidth, true);\n var verticalOrg = this.tileNodesByFavoringDim(nodes, minWidth, false);\n\n var horizontalRatio = this.getOrgRatio(horizontalOrg);\n var verticalRatio = this.getOrgRatio(verticalOrg);\n var bestOrg;\n\n // the best ratio is the one that is closer to 1 since the ratios are already normalized\n // and the best organization is the one that has the best ratio\n if (verticalRatio < horizontalRatio) {\n bestOrg = verticalOrg;\n } else {\n bestOrg = horizontalOrg;\n }\n\n return bestOrg;\n};\n\n// get the width/height ratio of the organization that is normalized so that it will not be less than 1\nCoSELayout.prototype.getOrgRatio = function (organization) {\n // get dimensions and calculate the initial ratio\n var width = organization.width;\n var height = organization.height;\n var ratio = width / height;\n\n // if the initial ratio is less then 1 then inverse it\n if (ratio < 1) {\n ratio = 1 / ratio;\n }\n\n // return the normalized ratio\n return ratio;\n};\n\n/*\n * Calculates the ideal width for the rows. This method assumes that\n * each node has the same sizes and calculates the ideal row width that\n * approximates a square shaped complex accordingly. However, since nodes would\n * have different sizes some rows would have different sizes and the resulting\n * shape would not be an exact square.\n */\nCoSELayout.prototype.calcIdealRowWidth = function (members, favorHorizontalDim) {\n // To approximate a square shaped complex we need to make complex width equal to complex height.\n // To achieve this we need to solve the following equation system for hc:\n // (x + bx) * hc - bx = (y + by) * vc - by, hc * vc = n\n // where x is the avarage width of the nodes, y is the avarage height of nodes\n // bx and by are the buffer sizes in horizontal and vertical dimensions accordingly,\n // hc and vc are the number of rows in horizontal and vertical dimensions\n // n is number of members.\n\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n\n // number of members\n var membersSize = members.length;\n\n // sum of the width of all members\n var totalWidth = 0;\n\n // sum of the height of all members\n var totalHeight = 0;\n\n var maxWidth = 0;\n\n // traverse all members to calculate total width and total height and get the maximum members width\n members.forEach(function (node) {\n totalWidth += node.getWidth();\n totalHeight += node.getHeight();\n\n if (node.getWidth() > maxWidth) {\n maxWidth = node.getWidth();\n }\n });\n\n // average width of the members\n var averageWidth = totalWidth / membersSize;\n\n // average height of the members\n var averageHeight = totalHeight / membersSize;\n\n // solving the initial equation system for the hc yields the following second degree equation:\n // hc^2 * (x+bx) + hc * (by - bx) - n * (y + by) = 0\n\n // the delta value to solve the equation above for hc\n var delta = Math.pow(verticalPadding - horizontalPadding, 2) + 4 * (averageWidth + horizontalPadding) * (averageHeight + verticalPadding) * membersSize;\n\n // solve the equation using delta value to calculate the horizontal count\n // that represents the number of nodes in an ideal row\n var horizontalCountDouble = (horizontalPadding - verticalPadding + Math.sqrt(delta)) / (2 * (averageWidth + horizontalPadding));\n // round the calculated horizontal count up or down according to the favored dimension\n var horizontalCount;\n\n if (favorHorizontalDim) {\n horizontalCount = Math.ceil(horizontalCountDouble);\n // if horizontalCount count is not a float value then both of rounding to floor and ceil\n // will yield the same values. Instead of repeating the same calculation try going up\n // while favoring horizontal dimension in such cases\n if (horizontalCount == horizontalCountDouble) {\n horizontalCount++;\n }\n } else {\n horizontalCount = Math.floor(horizontalCountDouble);\n }\n\n // ideal width to be calculated\n var idealWidth = horizontalCount * (averageWidth + horizontalPadding) - horizontalPadding;\n\n // if max width is bigger than calculated ideal width reset ideal width to it\n if (maxWidth > idealWidth) {\n idealWidth = maxWidth;\n }\n\n // add the left-right margins to the ideal row width\n idealWidth += horizontalPadding * 2;\n\n // return the ideal row width1\n return idealWidth;\n};\n\nCoSELayout.prototype.tileNodesByFavoringDim = function (nodes, minWidth, favorHorizontalDim) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var tilingCompareBy = CoSEConstants.TILING_COMPARE_BY;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding,\n centerX: 0,\n centerY: 0\n };\n\n if (tilingCompareBy) {\n organization.idealRowWidth = this.calcIdealRowWidth(nodes, favorHorizontalDim);\n }\n\n var getNodeArea = function getNodeArea(n) {\n return n.rect.width * n.rect.height;\n };\n\n var areaCompareFcn = function areaCompareFcn(n1, n2) {\n return getNodeArea(n2) - getNodeArea(n1);\n };\n\n // Sort the nodes in descending order of their areas\n nodes.sort(function (n1, n2) {\n var cmpBy = areaCompareFcn;\n if (organization.idealRowWidth) {\n cmpBy = tilingCompareBy;\n return cmpBy(n1.id, n2.id);\n }\n return cmpBy(n1, n2);\n });\n\n // Create the organization -> calculate compound center\n var sumCenterX = 0;\n var sumCenterY = 0;\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n sumCenterX += lNode.getCenterX();\n sumCenterY += lNode.getCenterY();\n }\n\n organization.centerX = sumCenterX / nodes.length;\n organization.centerY = sumCenterY / nodes.length;\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n var rowIndex = organization.rows.length - 1;\n if (!organization.idealRowWidth) {\n rowIndex = this.getShortestRowIndex(organization);\n }\n this.insertNodeToRow(organization, lNode, rowIndex, minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n // if there is an ideal row width specified use it instead of checking the aspect ratio\n if (organization.idealRowWidth) {\n var lastRowIndex = organization.rows.length - 1;\n var lastRowWidth = organization.rowWidth[lastRowIndex];\n\n // check and return if ideal row width will be exceed if the node is added to the row\n return lastRowWidth + extraWidth + organization.horizontalPadding <= organization.idealRowWidth;\n }\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n if (CoSEConstants.PURE_INCREMENTAL) {\n var otherEnd = node.getEdges()[0].getOtherEnd(node);\n var relativePosition = new DimensionD(node.getCenterX() - otherEnd.getCenterX(), node.getCenterY() - otherEnd.getCenterY());\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner(), relativePosition]);\n } else {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n }\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n\n if (CoSEConstants.PURE_INCREMENTAL) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeData[3].getWidth(), nodeToConnect.getCenterY() + nodeData[3].getHeight());\n } else {\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n\n/***/ 991:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutNode = __webpack_require__(551).FDLayoutNode;\nvar IMath = __webpack_require__(551).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.calculateDisplacement = function () {\n var layout = this.graphManager.getLayout();\n // this check is for compound nodes that contain fixed nodes\n if (this.getChild() != null && this.fixedNodeWeight) {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight;\n } else {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n }\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // non-empty compound node, propogate movement to children as well\n if (this.child && this.child.getNodes().length > 0) {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n\n // a simple node or an empty compound node, move it\n if (this.child == null || this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n }\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n\n/***/ 902:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar CoSEConstants = __webpack_require__(806);\nvar LinkedList = __webpack_require__(551).LinkedList;\nvar Matrix = __webpack_require__(551).Matrix;\nvar SVD = __webpack_require__(551).SVD;\n\nfunction ConstraintHandler() {}\n\nConstraintHandler.handleConstraints = function (layout) {\n // let layout = this.graphManager.getLayout();\n\n // get constraints from layout\n var constraints = {};\n constraints.fixedNodeConstraint = layout.constraints.fixedNodeConstraint;\n constraints.alignmentConstraint = layout.constraints.alignmentConstraint;\n constraints.relativePlacementConstraint = layout.constraints.relativePlacementConstraint;\n\n var idToNodeMap = new Map();\n var nodeIndexes = new Map();\n var xCoords = [];\n var yCoords = [];\n\n var allNodes = layout.getAllNodes();\n var index = 0;\n // fill index map and coordinates\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n if (node.getChild() == null) {\n nodeIndexes.set(node.id, index++);\n xCoords.push(node.getCenterX());\n yCoords.push(node.getCenterY());\n idToNodeMap.set(node.id, node);\n }\n }\n\n // if there exists relative placement constraint without gap value, set it to default \n if (constraints.relativePlacementConstraint) {\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (!constraint.gap && constraint.gap != 0) {\n if (constraint.left) {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.left).getWidth() / 2 + idToNodeMap.get(constraint.right).getWidth() / 2;\n } else {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.top).getHeight() / 2 + idToNodeMap.get(constraint.bottom).getHeight() / 2;\n }\n }\n });\n }\n\n /* auxiliary functions */\n\n // calculate difference between two position objects\n var calculatePositionDiff = function calculatePositionDiff(pos1, pos2) {\n return { x: pos1.x - pos2.x, y: pos1.y - pos2.y };\n };\n\n // calculate average position of the nodes\n var calculateAvgPosition = function calculateAvgPosition(nodeIdSet) {\n var xPosSum = 0;\n var yPosSum = 0;\n nodeIdSet.forEach(function (nodeId) {\n xPosSum += xCoords[nodeIndexes.get(nodeId)];\n yPosSum += yCoords[nodeIndexes.get(nodeId)];\n });\n\n return { x: xPosSum / nodeIdSet.size, y: yPosSum / nodeIdSet.size };\n };\n\n // find an appropriate positioning for the nodes in a given graph according to relative placement constraints\n // this function also takes the fixed nodes and alignment constraints into account\n // graph: dag to be evaluated, direction: \"horizontal\" or \"vertical\", \n // fixedNodes: set of fixed nodes to consider during evaluation, dummyPositions: appropriate coordinates of the dummy nodes \n var findAppropriatePositionForRelativePlacement = function findAppropriatePositionForRelativePlacement(graph, direction, fixedNodes, dummyPositions, componentSources) {\n\n // find union of two sets\n function setUnion(setA, setB) {\n var union = new Set(setA);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var elem = _step.value;\n\n union.add(elem);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return union;\n }\n\n // find indegree count for each node\n var inDegrees = new Map();\n\n graph.forEach(function (value, key) {\n inDegrees.set(key, 0);\n });\n graph.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n inDegrees.set(adjacent.id, inDegrees.get(adjacent.id) + 1);\n });\n });\n\n var positionMap = new Map(); // keeps the position for each node\n var pastMap = new Map(); // keeps the predecessors(past) of a node\n var queue = new LinkedList();\n inDegrees.forEach(function (value, key) {\n if (value == 0) {\n queue.push(key);\n if (!fixedNodes) {\n if (direction == \"horizontal\") {\n positionMap.set(key, nodeIndexes.has(key) ? xCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n } else {\n positionMap.set(key, nodeIndexes.has(key) ? yCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n }\n }\n } else {\n positionMap.set(key, Number.NEGATIVE_INFINITY);\n }\n if (fixedNodes) {\n pastMap.set(key, new Set([key]));\n }\n });\n\n // align sources of each component in enforcement phase\n if (fixedNodes) {\n componentSources.forEach(function (component) {\n var fixedIds = [];\n component.forEach(function (nodeId) {\n if (fixedNodes.has(nodeId)) {\n fixedIds.push(nodeId);\n }\n });\n if (fixedIds.length > 0) {\n var position = 0;\n fixedIds.forEach(function (fixedId) {\n if (direction == \"horizontal\") {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? xCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n } else {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? yCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n }\n });\n position = position / fixedIds.length;\n component.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) {\n positionMap.set(nodeId, position);\n }\n });\n } else {\n var _position = 0;\n component.forEach(function (nodeId) {\n if (direction == \"horizontal\") {\n _position += nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n _position += nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n });\n _position = _position / component.length;\n component.forEach(function (nodeId) {\n positionMap.set(nodeId, _position);\n });\n }\n });\n }\n\n // calculate positions of the nodes\n\n var _loop = function _loop() {\n var currentNode = queue.shift();\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (positionMap.get(neighbor.id) < positionMap.get(currentNode) + neighbor.gap) {\n if (fixedNodes && fixedNodes.has(neighbor.id)) {\n var fixedPosition = void 0;\n if (direction == \"horizontal\") {\n fixedPosition = nodeIndexes.has(neighbor.id) ? xCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n } else {\n fixedPosition = nodeIndexes.has(neighbor.id) ? yCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n }\n positionMap.set(neighbor.id, fixedPosition); // TODO: may do unnecessary work\n if (fixedPosition < positionMap.get(currentNode) + neighbor.gap) {\n var diff = positionMap.get(currentNode) + neighbor.gap - fixedPosition;\n pastMap.get(currentNode).forEach(function (nodeId) {\n positionMap.set(nodeId, positionMap.get(nodeId) - diff);\n });\n }\n } else {\n positionMap.set(neighbor.id, positionMap.get(currentNode) + neighbor.gap);\n }\n }\n inDegrees.set(neighbor.id, inDegrees.get(neighbor.id) - 1);\n if (inDegrees.get(neighbor.id) == 0) {\n queue.push(neighbor.id);\n }\n if (fixedNodes) {\n pastMap.set(neighbor.id, setUnion(pastMap.get(currentNode), pastMap.get(neighbor.id)));\n }\n });\n };\n\n while (queue.length != 0) {\n _loop();\n }\n\n // readjust position of the nodes after enforcement\n if (fixedNodes) {\n // find indegree count for each node\n var sinkNodes = new Set();\n\n graph.forEach(function (value, key) {\n if (value.length == 0) {\n sinkNodes.add(key);\n }\n });\n\n var _components = [];\n pastMap.forEach(function (value, key) {\n if (sinkNodes.has(key)) {\n var isFixedComponent = false;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = value[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var nodeId = _step2.value;\n\n if (fixedNodes.has(nodeId)) {\n isFixedComponent = true;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n if (!isFixedComponent) {\n var isExist = false;\n var existAt = void 0;\n _components.forEach(function (component, index) {\n if (component.has([].concat(_toConsumableArray(value))[0])) {\n isExist = true;\n existAt = index;\n }\n });\n if (!isExist) {\n _components.push(new Set(value));\n } else {\n value.forEach(function (ele) {\n _components[existAt].add(ele);\n });\n }\n }\n }\n });\n\n _components.forEach(function (component, index) {\n var minBefore = Number.POSITIVE_INFINITY;\n var minAfter = Number.POSITIVE_INFINITY;\n var maxBefore = Number.NEGATIVE_INFINITY;\n var maxAfter = Number.NEGATIVE_INFINITY;\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = component[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var nodeId = _step3.value;\n\n var posBefore = void 0;\n if (direction == \"horizontal\") {\n posBefore = nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n posBefore = nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n var posAfter = positionMap.get(nodeId);\n if (posBefore < minBefore) {\n minBefore = posBefore;\n }\n if (posBefore > maxBefore) {\n maxBefore = posBefore;\n }\n if (posAfter < minAfter) {\n minAfter = posAfter;\n }\n if (posAfter > maxAfter) {\n maxAfter = posAfter;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n var diff = (minBefore + maxBefore) / 2 - (minAfter + maxAfter) / 2;\n\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = component[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _nodeId = _step4.value;\n\n positionMap.set(_nodeId, positionMap.get(_nodeId) + diff);\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n });\n }\n\n return positionMap;\n };\n\n // find transformation based on rel. placement constraints if there are both alignment and rel. placement constraints\n // or if there are only rel. placement contraints where the largest component isn't sufficiently large\n var applyReflectionForRelativePlacement = function applyReflectionForRelativePlacement(relativePlacementConstraints) {\n // variables to count votes\n var reflectOnY = 0,\n notReflectOnY = 0;\n var reflectOnX = 0,\n notReflectOnX = 0;\n\n relativePlacementConstraints.forEach(function (constraint) {\n if (constraint.left) {\n xCoords[nodeIndexes.get(constraint.left)] - xCoords[nodeIndexes.get(constraint.right)] >= 0 ? reflectOnY++ : notReflectOnY++;\n } else {\n yCoords[nodeIndexes.get(constraint.top)] - yCoords[nodeIndexes.get(constraint.bottom)] >= 0 ? reflectOnX++ : notReflectOnX++;\n }\n });\n\n if (reflectOnY > notReflectOnY && reflectOnX > notReflectOnX) {\n for (var _i = 0; _i < nodeIndexes.size; _i++) {\n xCoords[_i] = -1 * xCoords[_i];\n yCoords[_i] = -1 * yCoords[_i];\n }\n } else if (reflectOnY > notReflectOnY) {\n for (var _i2 = 0; _i2 < nodeIndexes.size; _i2++) {\n xCoords[_i2] = -1 * xCoords[_i2];\n }\n } else if (reflectOnX > notReflectOnX) {\n for (var _i3 = 0; _i3 < nodeIndexes.size; _i3++) {\n yCoords[_i3] = -1 * yCoords[_i3];\n }\n }\n };\n\n // find weakly connected components in undirected graph\n var findComponents = function findComponents(graph) {\n // find weakly connected components in dag\n var components = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n var _currentNode = key;\n queue.push(_currentNode);\n visited.add(_currentNode);\n components[count].push(_currentNode);\n\n while (queue.length != 0) {\n _currentNode = queue.shift();\n var neighbors = graph.get(_currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor.id)) {\n queue.push(neighbor.id);\n visited.add(neighbor.id);\n components[count].push(neighbor.id);\n }\n });\n }\n count++;\n }\n });\n return components;\n };\n\n // return undirected version of given dag\n var dagToUndirected = function dagToUndirected(dag) {\n var undirected = new Map();\n\n dag.forEach(function (value, key) {\n undirected.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n undirected.get(key).push(adjacent);\n undirected.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return undirected;\n };\n\n // return reversed (directions inverted) version of given dag\n var dagToReversed = function dagToReversed(dag) {\n var reversed = new Map();\n\n dag.forEach(function (value, key) {\n reversed.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n reversed.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return reversed;\n };\n\n /**** apply transformation to the initial draft layout to better align with constrained nodes ****/\n // solve the Orthogonal Procrustean Problem to rotate and/or reflect initial draft layout\n // here we follow the solution in Chapter 20.2 of Borg, I. & Groenen, P. (2005) Modern Multidimensional Scaling: Theory and Applications \n\n /* construct source and target configurations */\n\n var targetMatrix = []; // A - target configuration\n var sourceMatrix = []; // B - source configuration \n var standardTransformation = false; // false for no transformation, true for standart (Procrustes) transformation (rotation and/or reflection)\n var reflectionType = false; // false/true for reflection check, 'reflectOnX', 'reflectOnY' or 'reflectOnBoth' for reflection type if necessary\n var fixedNodes = new Set();\n var dag = new Map(); // adjacency list to keep directed acyclic graph (dag) that consists of relative placement constraints\n var dagUndirected = new Map(); // undirected version of the dag\n var components = []; // weakly connected components\n\n // fill fixedNodes collection to use later\n if (constraints.fixedNodeConstraint) {\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n fixedNodes.add(nodeData.nodeId);\n });\n }\n\n // construct dag from relative placement constraints \n if (constraints.relativePlacementConstraint) {\n // construct both directed and undirected version of the dag\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n if (dag.has(constraint.left)) {\n dag.get(constraint.left).push({ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" });\n } else {\n dag.set(constraint.left, [{ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" }]);\n }\n if (!dag.has(constraint.right)) {\n dag.set(constraint.right, []);\n }\n } else {\n if (dag.has(constraint.top)) {\n dag.get(constraint.top).push({ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" });\n } else {\n dag.set(constraint.top, [{ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" }]);\n }\n if (!dag.has(constraint.bottom)) {\n dag.set(constraint.bottom, []);\n }\n }\n });\n\n dagUndirected = dagToUndirected(dag);\n components = findComponents(dagUndirected);\n }\n\n if (CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING) {\n // first check fixed node constraint\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 1) {\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n targetMatrix[i] = [nodeData.position.x, nodeData.position.y];\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeData.nodeId)], yCoords[nodeIndexes.get(nodeData.nodeId)]];\n });\n standardTransformation = true;\n } else if (constraints.alignmentConstraint) {\n (function () {\n // then check alignment constraint\n var count = 0;\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlign = constraints.alignmentConstraint.vertical;\n\n var _loop2 = function _loop2(_i4) {\n var alignmentSet = new Set();\n verticalAlign[_i4].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n verticalAlign[_i4].forEach(function (nodeId) {\n targetMatrix[count] = [xPos, yCoords[nodeIndexes.get(nodeId)]];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i4 = 0; _i4 < verticalAlign.length; _i4++) {\n _loop2(_i4);\n }\n standardTransformation = true;\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop3 = function _loop3(_i5) {\n var alignmentSet = new Set();\n horizontalAlign[_i5].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n horizontalAlign[_i5].forEach(function (nodeId) {\n targetMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yPos];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i5 = 0; _i5 < horizontalAlign.length; _i5++) {\n _loop3(_i5);\n }\n standardTransformation = true;\n }\n if (constraints.relativePlacementConstraint) {\n reflectionType = true;\n }\n })();\n } else if (constraints.relativePlacementConstraint) {\n // finally check relative placement constraint\n // find largest component in dag\n var largestComponentSize = 0;\n var largestComponentIndex = 0;\n for (var _i6 = 0; _i6 < components.length; _i6++) {\n if (components[_i6].length > largestComponentSize) {\n largestComponentSize = components[_i6].length;\n largestComponentIndex = _i6;\n }\n }\n // if largest component isn't dominant, then take the votes for reflection\n if (largestComponentSize < dagUndirected.size / 2) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n standardTransformation = false;\n reflectionType = false;\n } else {\n // use largest component for transformation\n // construct horizontal and vertical subgraphs in the largest component\n var subGraphOnHorizontal = new Map();\n var subGraphOnVertical = new Map();\n var constraintsInlargestComponent = [];\n\n components[largestComponentIndex].forEach(function (nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n if (adjacent.direction == \"horizontal\") {\n if (subGraphOnHorizontal.has(nodeId)) {\n subGraphOnHorizontal.get(nodeId).push(adjacent);\n } else {\n subGraphOnHorizontal.set(nodeId, [adjacent]);\n }\n if (!subGraphOnHorizontal.has(adjacent.id)) {\n subGraphOnHorizontal.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ left: nodeId, right: adjacent.id });\n } else {\n if (subGraphOnVertical.has(nodeId)) {\n subGraphOnVertical.get(nodeId).push(adjacent);\n } else {\n subGraphOnVertical.set(nodeId, [adjacent]);\n }\n if (!subGraphOnVertical.has(adjacent.id)) {\n subGraphOnVertical.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ top: nodeId, bottom: adjacent.id });\n }\n });\n });\n\n applyReflectionForRelativePlacement(constraintsInlargestComponent);\n reflectionType = false;\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(subGraphOnHorizontal, \"horizontal\");\n var positionMapVertical = findAppropriatePositionForRelativePlacement(subGraphOnVertical, \"vertical\");\n\n // construct source and target configuration\n components[largestComponentIndex].forEach(function (nodeId, i) {\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n targetMatrix[i] = [];\n if (positionMapHorizontal.has(nodeId)) {\n targetMatrix[i][0] = positionMapHorizontal.get(nodeId);\n } else {\n targetMatrix[i][0] = xCoords[nodeIndexes.get(nodeId)];\n }\n if (positionMapVertical.has(nodeId)) {\n targetMatrix[i][1] = positionMapVertical.get(nodeId);\n } else {\n targetMatrix[i][1] = yCoords[nodeIndexes.get(nodeId)];\n }\n });\n\n standardTransformation = true;\n }\n }\n\n // if transformation is required, then calculate and apply transformation matrix\n if (standardTransformation) {\n /* calculate transformation matrix */\n var transformationMatrix = void 0;\n var targetMatrixTranspose = Matrix.transpose(targetMatrix); // A'\n var sourceMatrixTranspose = Matrix.transpose(sourceMatrix); // B'\n\n // centralize transpose matrices\n for (var _i7 = 0; _i7 < targetMatrixTranspose.length; _i7++) {\n targetMatrixTranspose[_i7] = Matrix.multGamma(targetMatrixTranspose[_i7]);\n sourceMatrixTranspose[_i7] = Matrix.multGamma(sourceMatrixTranspose[_i7]);\n }\n\n // do actual calculation for transformation matrix\n var tempMatrix = Matrix.multMat(targetMatrixTranspose, Matrix.transpose(sourceMatrixTranspose)); // tempMatrix = A'B\n var SVDResult = SVD.svd(tempMatrix); // SVD(A'B) = USV', svd function returns U, S and V \n transformationMatrix = Matrix.multMat(SVDResult.V, Matrix.transpose(SVDResult.U)); // transformationMatrix = T = VU'\n\n /* apply found transformation matrix to obtain final draft layout */\n for (var _i8 = 0; _i8 < nodeIndexes.size; _i8++) {\n var temp1 = [xCoords[_i8], yCoords[_i8]];\n var temp2 = [transformationMatrix[0][0], transformationMatrix[1][0]];\n var temp3 = [transformationMatrix[0][1], transformationMatrix[1][1]];\n xCoords[_i8] = Matrix.dotProduct(temp1, temp2);\n yCoords[_i8] = Matrix.dotProduct(temp1, temp3);\n }\n\n // applied only both alignment and rel. placement constraints exist\n if (reflectionType) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n }\n }\n }\n\n if (CoSEConstants.ENFORCE_CONSTRAINTS) {\n /**** enforce constraints on the transformed draft layout ****/\n\n /* first enforce fixed node constraint */\n\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 0) {\n var translationAmount = { x: 0, y: 0 };\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n var posInTheory = { x: xCoords[nodeIndexes.get(nodeData.nodeId)], y: yCoords[nodeIndexes.get(nodeData.nodeId)] };\n var posDesired = nodeData.position;\n var posDiff = calculatePositionDiff(posDesired, posInTheory);\n translationAmount.x += posDiff.x;\n translationAmount.y += posDiff.y;\n });\n translationAmount.x /= constraints.fixedNodeConstraint.length;\n translationAmount.y /= constraints.fixedNodeConstraint.length;\n\n xCoords.forEach(function (value, i) {\n xCoords[i] += translationAmount.x;\n });\n\n yCoords.forEach(function (value, i) {\n yCoords[i] += translationAmount.y;\n });\n\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n xCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.x;\n yCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.y;\n });\n }\n\n /* then enforce alignment constraint */\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var xAlign = constraints.alignmentConstraint.vertical;\n\n var _loop4 = function _loop4(_i9) {\n var alignmentSet = new Set();\n xAlign[_i9].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) xCoords[nodeIndexes.get(nodeId)] = xPos;\n });\n };\n\n for (var _i9 = 0; _i9 < xAlign.length; _i9++) {\n _loop4(_i9);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var yAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop5 = function _loop5(_i10) {\n var alignmentSet = new Set();\n yAlign[_i10].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = yCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) yCoords[nodeIndexes.get(nodeId)] = yPos;\n });\n };\n\n for (var _i10 = 0; _i10 < yAlign.length; _i10++) {\n _loop5(_i10);\n }\n }\n }\n\n /* finally enforce relative placement constraint */\n\n if (constraints.relativePlacementConstraint) {\n (function () {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n var dummyToNodeForVerticalAlignment = new Map();\n var dummyToNodeForHorizontalAlignment = new Map();\n var dummyPositionsForVerticalAlignment = new Map();\n var dummyPositionsForHorizontalAlignment = new Map();\n var fixedNodesOnHorizontal = new Set();\n var fixedNodesOnVertical = new Set();\n\n // fill maps and sets \n fixedNodes.forEach(function (nodeId) {\n fixedNodesOnHorizontal.add(nodeId);\n fixedNodesOnVertical.add(nodeId);\n });\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlignment = constraints.alignmentConstraint.vertical;\n\n var _loop6 = function _loop6(_i11) {\n dummyToNodeForVerticalAlignment.set(\"dummy\" + _i11, []);\n verticalAlignment[_i11].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + _i11);\n dummyToNodeForVerticalAlignment.get(\"dummy\" + _i11).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnHorizontal.add(\"dummy\" + _i11);\n }\n });\n dummyPositionsForVerticalAlignment.set(\"dummy\" + _i11, xCoords[nodeIndexes.get(verticalAlignment[_i11][0])]);\n };\n\n for (var _i11 = 0; _i11 < verticalAlignment.length; _i11++) {\n _loop6(_i11);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = constraints.alignmentConstraint.horizontal;\n\n var _loop7 = function _loop7(_i12) {\n dummyToNodeForHorizontalAlignment.set(\"dummy\" + _i12, []);\n horizontalAlignment[_i12].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + _i12);\n dummyToNodeForHorizontalAlignment.get(\"dummy\" + _i12).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnVertical.add(\"dummy\" + _i12);\n }\n });\n dummyPositionsForHorizontalAlignment.set(\"dummy\" + _i12, yCoords[nodeIndexes.get(horizontalAlignment[_i12][0])]);\n };\n\n for (var _i12 = 0; _i12 < horizontalAlignment.length; _i12++) {\n _loop7(_i12);\n }\n }\n }\n\n // construct horizontal and vertical dags (subgraphs) from overall dag\n var dagOnHorizontal = new Map();\n var dagOnVertical = new Map();\n\n var _loop8 = function _loop8(nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n var sourceId = void 0;\n var targetNode = void 0;\n if (adjacent[\"direction\"] == \"horizontal\") {\n sourceId = nodeToDummyForVerticalAlignment.get(nodeId) ? nodeToDummyForVerticalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForVerticalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForVerticalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnHorizontal.has(sourceId)) {\n dagOnHorizontal.get(sourceId).push(targetNode);\n } else {\n dagOnHorizontal.set(sourceId, [targetNode]);\n }\n if (!dagOnHorizontal.has(targetNode.id)) {\n dagOnHorizontal.set(targetNode.id, []);\n }\n } else {\n sourceId = nodeToDummyForHorizontalAlignment.get(nodeId) ? nodeToDummyForHorizontalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForHorizontalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForHorizontalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnVertical.has(sourceId)) {\n dagOnVertical.get(sourceId).push(targetNode);\n } else {\n dagOnVertical.set(sourceId, [targetNode]);\n }\n if (!dagOnVertical.has(targetNode.id)) {\n dagOnVertical.set(targetNode.id, []);\n }\n }\n });\n };\n\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = dag.keys()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var nodeId = _step5.value;\n\n _loop8(nodeId);\n }\n\n // find source nodes of each component in horizontal and vertical dags\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n var undirectedOnHorizontal = dagToUndirected(dagOnHorizontal);\n var undirectedOnVertical = dagToUndirected(dagOnVertical);\n var componentsOnHorizontal = findComponents(undirectedOnHorizontal);\n var componentsOnVertical = findComponents(undirectedOnVertical);\n var reversedDagOnHorizontal = dagToReversed(dagOnHorizontal);\n var reversedDagOnVertical = dagToReversed(dagOnVertical);\n var componentSourcesOnHorizontal = [];\n var componentSourcesOnVertical = [];\n\n componentsOnHorizontal.forEach(function (component, index) {\n componentSourcesOnHorizontal[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnHorizontal.get(nodeId).length == 0) {\n componentSourcesOnHorizontal[index].push(nodeId);\n }\n });\n });\n\n componentsOnVertical.forEach(function (component, index) {\n componentSourcesOnVertical[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnVertical.get(nodeId).length == 0) {\n componentSourcesOnVertical[index].push(nodeId);\n }\n });\n });\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(dagOnHorizontal, \"horizontal\", fixedNodesOnHorizontal, dummyPositionsForVerticalAlignment, componentSourcesOnHorizontal);\n var positionMapVertical = findAppropriatePositionForRelativePlacement(dagOnVertical, \"vertical\", fixedNodesOnVertical, dummyPositionsForHorizontalAlignment, componentSourcesOnVertical);\n\n // update positions of the nodes based on relative placement constraints\n\n var _loop9 = function _loop9(key) {\n if (dummyToNodeForVerticalAlignment.get(key)) {\n dummyToNodeForVerticalAlignment.get(key).forEach(function (nodeId) {\n xCoords[nodeIndexes.get(nodeId)] = positionMapHorizontal.get(key);\n });\n } else {\n xCoords[nodeIndexes.get(key)] = positionMapHorizontal.get(key);\n }\n };\n\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = positionMapHorizontal.keys()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var key = _step6.value;\n\n _loop9(key);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n var _loop10 = function _loop10(key) {\n if (dummyToNodeForHorizontalAlignment.get(key)) {\n dummyToNodeForHorizontalAlignment.get(key).forEach(function (nodeId) {\n yCoords[nodeIndexes.get(nodeId)] = positionMapVertical.get(key);\n });\n } else {\n yCoords[nodeIndexes.get(key)] = positionMapVertical.get(key);\n }\n };\n\n var _iteratorNormalCompletion7 = true;\n var _didIteratorError7 = false;\n var _iteratorError7 = undefined;\n\n try {\n for (var _iterator7 = positionMapVertical.keys()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n var key = _step7.value;\n\n _loop10(key);\n }\n } catch (err) {\n _didIteratorError7 = true;\n _iteratorError7 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion7 && _iterator7.return) {\n _iterator7.return();\n }\n } finally {\n if (_didIteratorError7) {\n throw _iteratorError7;\n }\n }\n }\n })();\n }\n }\n\n // assign new coordinates to nodes after constraint handling\n for (var _i13 = 0; _i13 < allNodes.length; _i13++) {\n var _node = allNodes[_i13];\n if (_node.getChild() == null) {\n _node.setCenter(xCoords[nodeIndexes.get(_node.id)], yCoords[nodeIndexes.get(_node.id)]);\n }\n }\n};\n\nmodule.exports = ConstraintHandler;\n\n/***/ }),\n\n/***/ 551:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__551__;\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\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(45);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeFcose\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeFcose\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__140__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 658:\n/***/ ((module) => {\n\n\n\n// Simple, internal Object.assign() polyfill for options objects etc.\n\nmodule.exports = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n srcs[_key - 1] = arguments[_key];\n }\n\n srcs.forEach(function (src) {\n Object.keys(src).forEach(function (k) {\n return tgt[k] = src[k];\n });\n });\n\n return tgt;\n};\n\n/***/ }),\n\n/***/ 548:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\n/*\n * Auxiliary functions\n */\n\nvar LinkedList = __webpack_require__(140).layoutBase.LinkedList;\n\nvar auxiliary = {};\n\n// get the top most nodes\nauxiliary.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n// find disconnected components and create dummy nodes that connect them\nauxiliary.connectComponents = function (cy, eles, topMostNodes, dummyNodes) {\n var queue = new LinkedList();\n var visited = new Set();\n var visitedTopMostNodes = [];\n var currentNeighbor = void 0;\n var minDegreeNode = void 0;\n var minDegree = void 0;\n\n var isConnected = false;\n var count = 1;\n var nodesConnectedToDummy = [];\n var components = [];\n\n var _loop = function _loop() {\n var cmpt = cy.collection();\n components.push(cmpt);\n\n var currentNode = topMostNodes[0];\n var childrenOfCurrentNode = cy.collection();\n childrenOfCurrentNode.merge(currentNode).merge(currentNode.descendants().intersection(eles));\n visitedTopMostNodes.push(currentNode);\n\n childrenOfCurrentNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n });\n\n var _loop2 = function _loop2() {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n var neighborNodes = cy.collection();\n currentNode.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(currentNode.edgesWith(node)).length > 0) {\n neighborNodes.merge(node);\n }\n });\n\n for (var i = 0; i < neighborNodes.length; i++) {\n var neighborNode = neighborNodes[i];\n currentNeighbor = topMostNodes.intersection(neighborNode.union(neighborNode.ancestors()));\n if (currentNeighbor != null && !visited.has(currentNeighbor[0])) {\n var childrenOfNeighbor = currentNeighbor.union(currentNeighbor.descendants());\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n if (topMostNodes.has(node)) {\n visitedTopMostNodes.push(node);\n }\n });\n }\n }\n };\n\n while (queue.length != 0) {\n _loop2();\n }\n\n cmpt.forEach(function (node) {\n eles.intersection(node.connectedEdges()).forEach(function (e) {\n // connectedEdges() usually cached\n if (cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e);\n }\n });\n });\n\n if (visitedTopMostNodes.length == topMostNodes.length) {\n isConnected = true;\n }\n\n if (!isConnected || isConnected && count > 1) {\n minDegreeNode = visitedTopMostNodes[0];\n minDegree = minDegreeNode.connectedEdges().length;\n visitedTopMostNodes.forEach(function (node) {\n if (node.connectedEdges().length < minDegree) {\n minDegree = node.connectedEdges().length;\n minDegreeNode = node;\n }\n });\n nodesConnectedToDummy.push(minDegreeNode.id());\n // TO DO: Check efficiency of this part\n var temp = cy.collection();\n temp.merge(visitedTopMostNodes[0]);\n visitedTopMostNodes.forEach(function (node) {\n temp.merge(node);\n });\n visitedTopMostNodes = [];\n topMostNodes = topMostNodes.difference(temp);\n count++;\n }\n };\n\n do {\n _loop();\n } while (!isConnected);\n\n if (dummyNodes) {\n if (nodesConnectedToDummy.length > 0) {\n dummyNodes.set('dummy' + (dummyNodes.size + 1), nodesConnectedToDummy);\n }\n }\n return components;\n};\n\n// relocates componentResult to originalCenter if there is no fixedNodeConstraint\nauxiliary.relocateComponent = function (originalCenter, componentResult, options) {\n if (!options.fixedNodeConstraint) {\n var minXCoord = Number.POSITIVE_INFINITY;\n var maxXCoord = Number.NEGATIVE_INFINITY;\n var minYCoord = Number.POSITIVE_INFINITY;\n var maxYCoord = Number.NEGATIVE_INFINITY;\n if (options.quality == \"draft\") {\n // calculate current bounding box\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = componentResult.nodeIndexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref = _step.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var key = _ref2[0];\n var value = _ref2[1];\n\n var cyNode = options.cy.getElementById(key);\n if (cyNode) {\n var nodeBB = cyNode.boundingBox();\n var leftX = componentResult.xCoords[value] - nodeBB.w / 2;\n var rightX = componentResult.xCoords[value] + nodeBB.w / 2;\n var topY = componentResult.yCoords[value] - nodeBB.h / 2;\n var bottomY = componentResult.yCoords[value] + nodeBB.h / 2;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n }\n }\n // find difference between current and original center\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n componentResult.xCoords = componentResult.xCoords.map(function (x) {\n return x + diffOnX;\n });\n componentResult.yCoords = componentResult.yCoords.map(function (y) {\n return y + diffOnY;\n });\n } else {\n // calculate current bounding box\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n var leftX = node.getRect().x;\n var rightX = node.getRect().x + node.getRect().width;\n var topY = node.getRect().y;\n var bottomY = node.getRect().y + node.getRect().height;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n });\n // find difference between current and original center\n var _diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var _diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n node.setCenter(node.getCenterX() + _diffOnX, node.getCenterY() + _diffOnY);\n });\n }\n }\n};\n\nauxiliary.calcBoundingBox = function (parentNode, xCoords, yCoords, nodeIndexes) {\n // calculate bounds\n var left = Number.MAX_SAFE_INTEGER;\n var right = Number.MIN_SAFE_INTEGER;\n var top = Number.MAX_SAFE_INTEGER;\n var bottom = Number.MIN_SAFE_INTEGER;\n var nodeLeft = void 0;\n var nodeRight = void 0;\n var nodeTop = void 0;\n var nodeBottom = void 0;\n\n var nodes = parentNode.descendants().not(\":parent\");\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var node = nodes[i];\n\n nodeLeft = xCoords[nodeIndexes.get(node.id())] - node.width() / 2;\n nodeRight = xCoords[nodeIndexes.get(node.id())] + node.width() / 2;\n nodeTop = yCoords[nodeIndexes.get(node.id())] - node.height() / 2;\n nodeBottom = yCoords[nodeIndexes.get(node.id())] + node.height() / 2;\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingBox = {};\n boundingBox.topLeftX = left;\n boundingBox.topLeftY = top;\n boundingBox.width = right - left;\n boundingBox.height = bottom - top;\n return boundingBox;\n};\n\n// This function finds and returns parent nodes whose all children are hidden\nauxiliary.calcParentsWithoutChildren = function (cy, eles) {\n var parentsWithoutChildren = cy.collection();\n eles.nodes(':parent').forEach(function (parent) {\n var check = false;\n parent.children().forEach(function (child) {\n if (child.css('display') != 'none') {\n check = true;\n }\n });\n if (!check) {\n parentsWithoutChildren.merge(parent);\n }\n });\n\n return parentsWithoutChildren;\n};\n\nmodule.exports = auxiliary;\n\n/***/ }),\n\n/***/ 816:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the postprocessing part that applies CoSE layout over the spectral layout\n*/\n\nvar aux = __webpack_require__(548);\nvar CoSELayout = __webpack_require__(140).CoSELayout;\nvar CoSENode = __webpack_require__(140).CoSENode;\nvar PointD = __webpack_require__(140).layoutBase.PointD;\nvar DimensionD = __webpack_require__(140).layoutBase.DimensionD;\nvar LayoutConstants = __webpack_require__(140).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(140).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(140).CoSEConstants;\n\n// main function that cose layout is processed\nvar coseLayout = function coseLayout(options, spectralResult) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var edges = eles.edges();\n\n var nodeIndexes = void 0;\n var xCoords = void 0;\n var yCoords = void 0;\n var idToLNode = {};\n\n if (options.randomize) {\n nodeIndexes = spectralResult[\"nodeIndexes\"];\n xCoords = spectralResult[\"xCoords\"];\n yCoords = spectralResult[\"yCoords\"];\n }\n\n var isFn = function isFn(fn) {\n return typeof fn === 'function';\n };\n\n var optFn = function optFn(opt, ele) {\n if (isFn(opt)) {\n return opt(ele);\n } else {\n return opt;\n }\n };\n\n /**** Postprocessing functions ****/\n\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n\n // transfer cytoscape nodes to cose nodes\n var processChildrenList = function processChildrenList(parent, children, layout, options) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = null;\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n children_of_children = theChild.children();\n }\n var theNode = void 0;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n if (options.randomize) {\n if (!theChild.isParent()) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(xCoords[nodeIndexes.get(theChild.id())] - dimensions.w / 2, yCoords[nodeIndexes.get(theChild.id())] - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n var parentInfo = aux.calcBoundingBox(theChild, xCoords, yCoords, nodeIndexes);\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parentInfo.width, parentInfo.height)));\n } else {\n // for the parentsWithoutChildren\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n }\n } else {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node and repulsion value\n theNode.id = theChild.data(\"id\");\n theNode.nodeRepulsion = optFn(options.nodeRepulsion, theChild);\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to both compound and simple nodes if labels will be included in node dimensions\n //These properties will be used while updating bounds of compounds during iterations or tiling\n //and will be used for simple nodes while transferring final positions to cytoscape\n if (options.nodeDimensionsIncludeLabels) {\n theNode.labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).w;\n theNode.labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).h;\n theNode.labelPosVertical = theChild.css(\"text-valign\");\n theNode.labelPosHorizontal = theChild.css(\"text-halign\");\n }\n\n // Map the layout node\n idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph = void 0;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n processChildrenList(theNewGraph, children_of_children, layout, options);\n }\n }\n };\n\n // transfer cytoscape edges to cose edges\n var processEdges = function processEdges(layout, gm, edges) {\n var idealLengthTotal = 0;\n var edgeCount = 0;\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = idToLNode[edge.data(\"source\")];\n var targetNode = idToLNode[edge.data(\"target\")];\n if (sourceNode && targetNode && sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n e1.idealLength = optFn(options.idealEdgeLength, edge);\n e1.edgeElasticity = optFn(options.edgeElasticity, edge);\n idealLengthTotal += e1.idealLength;\n edgeCount++;\n }\n }\n // we need to update the ideal edge length constant with the avg. ideal length value after processing edges\n // in case there is no edge, use other options\n if (options.idealEdgeLength != null) {\n if (edgeCount > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount;else if (!isFn(options.idealEdgeLength)) // in case there is no edge, but option gives a value to use\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;else // in case there is no edge and we cannot get a value from option (because it's a function)\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\n // we need to update these constant values based on the ideal edge length constant\n CoSEConstants.MIN_REPULSION_DIST = FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\n CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n }\n };\n\n // transfer cytoscape constraints to cose layout\n var processConstraints = function processConstraints(layout, options) {\n // get nodes to be fixed\n if (options.fixedNodeConstraint) {\n layout.constraints[\"fixedNodeConstraint\"] = options.fixedNodeConstraint;\n }\n // get nodes to be aligned\n if (options.alignmentConstraint) {\n layout.constraints[\"alignmentConstraint\"] = options.alignmentConstraint;\n }\n // get nodes to be relatively placed\n if (options.relativePlacementConstraint) {\n layout.constraints[\"relativePlacementConstraint\"] = options.relativePlacementConstraint;\n }\n };\n\n /**** Apply postprocessing ****/\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options.tilingCompareBy;\n\n if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 0;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true;\n CoSEConstants.PURE_INCREMENTAL = !options.randomize;\n LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options.uniformNodeDimensions;\n\n // This part is for debug/demo purpose\n if (options.step == \"transformed\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"enforced\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"cose\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n if (options.step == \"all\") {\n if (options.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n\n if (options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint) {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false;\n } else {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true;\n }\n\n var coseLayout = new CoSELayout();\n var gm = coseLayout.newGraphManager();\n\n processChildrenList(gm.addRoot(), aux.getTopMostNodes(nodes), coseLayout, options);\n processEdges(coseLayout, gm, edges);\n processConstraints(coseLayout, options);\n\n coseLayout.runLayout();\n\n return idToLNode;\n};\n\nmodule.exports = { coseLayout: coseLayout };\n\n/***/ }),\n\n/***/ 212:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n The implementation of the fcose layout algorithm\n*/\n\nvar assign = __webpack_require__(658);\nvar aux = __webpack_require__(548);\n\nvar _require = __webpack_require__(657),\n spectralLayout = _require.spectralLayout;\n\nvar _require2 = __webpack_require__(816),\n coseLayout = _require2.coseLayout;\n\nvar defaults = Object.freeze({\n\n // 'draft', 'default' or 'proof' \n // - 'draft' only applies spectral layout \n // - 'default' improves the quality with subsequent CoSE layout (fast cooling rate)\n // - 'proof' improves the quality with subsequent CoSE layout (slow cooling rate) \n quality: \"default\",\n // Use random node positions at beginning of layout\n // if this is set to false, then quality option must be \"proof\"\n randomize: true,\n // Whether or not to animate the layout\n animate: true,\n // Duration of animation in ms, if enabled\n animationDuration: 1000,\n // Easing of animation, if enabled\n animationEasing: undefined,\n // Fit the viewport to the repositioned nodes\n fit: true,\n // Padding around layout\n padding: 30,\n // Whether to include labels in node dimensions. Valid in \"proof\" quality\n nodeDimensionsIncludeLabels: false,\n // Whether or not simple nodes (non-compound nodes) are of uniform dimensions\n uniformNodeDimensions: false,\n // Whether to pack disconnected components - valid only if randomize: true\n packComponents: true,\n // Layout step - all, transformed, enforced, cose - for debug purpose only\n step: \"all\",\n\n /* spectral layout options */\n\n // False for random, true for greedy\n samplingType: true,\n // Sample size to construct distance matrix\n sampleSize: 25,\n // Separation amount between nodes\n nodeSeparation: 75,\n // Power iteration tolerance\n piTol: 0.0000001,\n\n /* CoSE layout options */\n\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 4500;\n },\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 50;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 0.45;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // The function that specifies the criteria for comparing nodes while sorting them during tiling operation.\n // Takes the node id as a parameter and the default tiling operation is perfomed when this option is not set.\n tilingCompareBy: undefined,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout \n initialEnergyOnIncremental: 0.3,\n\n /* constraint options */\n\n // Fix required nodes to predefined positions\n // [{nodeId: 'n1', position: {x: 100, y: 200}, {...}]\n fixedNodeConstraint: undefined,\n // Align required nodes in vertical/horizontal direction\n // {vertical: [['n1', 'n2')], ['n3', 'n4']], horizontal: ['n2', 'n4']}\n alignmentConstraint: undefined,\n // Place two nodes relatively in vertical/horizontal direction \n // [{top: 'n1', bottom: 'n2', gap: 100}, {left: 'n3', right: 'n4', gap: 75}]\n relativePlacementConstraint: undefined,\n\n /* layout event callbacks */\n ready: function ready() {}, // on layoutready\n stop: function stop() {} // on layoutstop\n});\n\nvar Layout = function () {\n function Layout(options) {\n _classCallCheck(this, Layout);\n\n this.options = assign({}, defaults, options);\n }\n\n _createClass(Layout, [{\n key: 'run',\n value: function run() {\n var layout = this;\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n\n var spectralResult = [];\n var xCoords = void 0;\n var yCoords = void 0;\n var coseResult = [];\n var components = void 0;\n var componentCenters = [];\n\n // basic validity check for constraint inputs \n if (options.fixedNodeConstraint && (!Array.isArray(options.fixedNodeConstraint) || options.fixedNodeConstraint.length == 0)) {\n options.fixedNodeConstraint = undefined;\n }\n\n if (options.alignmentConstraint) {\n if (options.alignmentConstraint.vertical && (!Array.isArray(options.alignmentConstraint.vertical) || options.alignmentConstraint.vertical.length == 0)) {\n options.alignmentConstraint.vertical = undefined;\n }\n if (options.alignmentConstraint.horizontal && (!Array.isArray(options.alignmentConstraint.horizontal) || options.alignmentConstraint.horizontal.length == 0)) {\n options.alignmentConstraint.horizontal = undefined;\n }\n }\n\n if (options.relativePlacementConstraint && (!Array.isArray(options.relativePlacementConstraint) || options.relativePlacementConstraint.length == 0)) {\n options.relativePlacementConstraint = undefined;\n }\n\n // if any constraint exists, set some options\n var constraintExist = options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint;\n if (constraintExist) {\n // constraints work with these options\n options.tile = false;\n options.packComponents = false;\n }\n\n // decide component packing is enabled or not\n var layUtil = void 0;\n var packingEnabled = false;\n if (cy.layoutUtilities && options.packComponents) {\n layUtil = cy.layoutUtilities(\"get\");\n if (!layUtil) layUtil = cy.layoutUtilities();\n packingEnabled = true;\n }\n\n if (eles.nodes().length > 0) {\n // if packing is not enabled, perform layout on the whole graph\n if (!packingEnabled) {\n // store component center\n var boundingBox = options.eles.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n // apply spectral layout\n if (options.randomize) {\n var result = spectralLayout(options);\n spectralResult.push(result);\n }\n // apply cose layout as postprocessing\n if (options.quality == \"default\" || options.quality == \"proof\") {\n coseResult.push(coseLayout(options, spectralResult[0]));\n aux.relocateComponent(componentCenters[0], coseResult[0], options); // relocate center to original position\n } else {\n aux.relocateComponent(componentCenters[0], spectralResult[0], options); // relocate center to original position\n }\n } else {\n // packing is enabled\n var topMostNodes = aux.getTopMostNodes(options.eles.nodes());\n components = aux.connectComponents(cy, options.eles, topMostNodes);\n // store component centers\n components.forEach(function (component) {\n var boundingBox = component.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n });\n\n //send each component to spectral layout if randomized\n if (options.randomize) {\n components.forEach(function (component) {\n options.eles = component;\n spectralResult.push(spectralLayout(options));\n });\n }\n\n if (options.quality == \"default\" || options.quality == \"proof\") {\n var toBeTiledNodes = cy.collection();\n if (options.tile) {\n // behave nodes to be tiled as one component\n var nodeIndexes = new Map();\n var _xCoords = [];\n var _yCoords = [];\n var count = 0;\n var tempSpectralResult = { nodeIndexes: nodeIndexes, xCoords: _xCoords, yCoords: _yCoords };\n var indexesToBeDeleted = [];\n components.forEach(function (component, index) {\n if (component.edges().length == 0) {\n component.nodes().forEach(function (node, i) {\n toBeTiledNodes.merge(component.nodes()[i]);\n if (!node.isParent()) {\n tempSpectralResult.nodeIndexes.set(component.nodes()[i].id(), count++);\n tempSpectralResult.xCoords.push(component.nodes()[0].position().x);\n tempSpectralResult.yCoords.push(component.nodes()[0].position().y);\n }\n });\n indexesToBeDeleted.push(index);\n }\n });\n if (toBeTiledNodes.length > 1) {\n var _boundingBox = toBeTiledNodes.boundingBox();\n componentCenters.push({ x: _boundingBox.x1 + _boundingBox.w / 2, y: _boundingBox.y1 + _boundingBox.h / 2 });\n components.push(toBeTiledNodes);\n spectralResult.push(tempSpectralResult);\n for (var i = indexesToBeDeleted.length - 1; i >= 0; i--) {\n components.splice(indexesToBeDeleted[i], 1);\n spectralResult.splice(indexesToBeDeleted[i], 1);\n componentCenters.splice(indexesToBeDeleted[i], 1);\n };\n }\n }\n components.forEach(function (component, index) {\n // send each component to cose layout\n options.eles = component;\n coseResult.push(coseLayout(options, spectralResult[index]));\n aux.relocateComponent(componentCenters[index], coseResult[index], options); // relocate center to original position\n });\n } else {\n components.forEach(function (component, index) {\n aux.relocateComponent(componentCenters[index], spectralResult[index], options); // relocate center to original position\n });\n }\n\n // packing\n var componentsEvaluated = new Set();\n if (components.length > 1) {\n var subgraphs = [];\n var hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n components.forEach(function (component, index) {\n var nodeIndexes = void 0;\n if (options.quality == \"draft\") {\n nodeIndexes = spectralResult[index].nodeIndexes;\n }\n\n if (component.nodes().not(hiddenEles).length > 0) {\n var subgraph = {};\n subgraph.edges = [];\n subgraph.nodes = [];\n var nodeIndex = void 0;\n component.nodes().not(hiddenEles).forEach(function (node) {\n if (options.quality == \"draft\") {\n if (!node.isParent()) {\n nodeIndex = nodeIndexes.get(node.id());\n subgraph.nodes.push({ x: spectralResult[index].xCoords[nodeIndex] - node.boundingbox().w / 2, y: spectralResult[index].yCoords[nodeIndex] - node.boundingbox().h / 2, width: node.boundingbox().w, height: node.boundingbox().h });\n } else {\n var parentInfo = aux.calcBoundingBox(node, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n subgraph.nodes.push({ x: parentInfo.topLeftX, y: parentInfo.topLeftY, width: parentInfo.width, height: parentInfo.height });\n }\n } else {\n if (coseResult[index][node.id()]) {\n subgraph.nodes.push({ x: coseResult[index][node.id()].getLeft(), y: coseResult[index][node.id()].getTop(), width: coseResult[index][node.id()].getWidth(), height: coseResult[index][node.id()].getHeight() });\n }\n }\n });\n component.edges().forEach(function (edge) {\n var source = edge.source();\n var target = edge.target();\n if (source.css(\"display\") != \"none\" && target.css(\"display\") != \"none\") {\n if (options.quality == \"draft\") {\n var sourceNodeIndex = nodeIndexes.get(source.id());\n var targetNodeIndex = nodeIndexes.get(target.id());\n var sourceCenter = [];\n var targetCenter = [];\n if (source.isParent()) {\n var parentInfo = aux.calcBoundingBox(source, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n sourceCenter.push(parentInfo.topLeftX + parentInfo.width / 2);\n sourceCenter.push(parentInfo.topLeftY + parentInfo.height / 2);\n } else {\n sourceCenter.push(spectralResult[index].xCoords[sourceNodeIndex]);\n sourceCenter.push(spectralResult[index].yCoords[sourceNodeIndex]);\n }\n if (target.isParent()) {\n var _parentInfo = aux.calcBoundingBox(target, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n targetCenter.push(_parentInfo.topLeftX + _parentInfo.width / 2);\n targetCenter.push(_parentInfo.topLeftY + _parentInfo.height / 2);\n } else {\n targetCenter.push(spectralResult[index].xCoords[targetNodeIndex]);\n targetCenter.push(spectralResult[index].yCoords[targetNodeIndex]);\n }\n subgraph.edges.push({ startX: sourceCenter[0], startY: sourceCenter[1], endX: targetCenter[0], endY: targetCenter[1] });\n } else {\n if (coseResult[index][source.id()] && coseResult[index][target.id()]) {\n subgraph.edges.push({ startX: coseResult[index][source.id()].getCenterX(), startY: coseResult[index][source.id()].getCenterY(), endX: coseResult[index][target.id()].getCenterX(), endY: coseResult[index][target.id()].getCenterY() });\n }\n }\n }\n });\n if (subgraph.nodes.length > 0) {\n subgraphs.push(subgraph);\n componentsEvaluated.add(index);\n }\n }\n });\n var shiftResult = layUtil.packComponents(subgraphs, options.randomize).shifts;\n if (options.quality == \"draft\") {\n spectralResult.forEach(function (result, index) {\n var newXCoords = result.xCoords.map(function (x) {\n return x + shiftResult[index].dx;\n });\n var newYCoords = result.yCoords.map(function (y) {\n return y + shiftResult[index].dy;\n });\n result.xCoords = newXCoords;\n result.yCoords = newYCoords;\n });\n } else {\n var _count = 0;\n componentsEvaluated.forEach(function (index) {\n Object.keys(coseResult[index]).forEach(function (item) {\n var nodeRectangle = coseResult[index][item];\n nodeRectangle.setCenter(nodeRectangle.getCenterX() + shiftResult[_count].dx, nodeRectangle.getCenterY() + shiftResult[_count].dy);\n });\n _count++;\n });\n }\n }\n }\n }\n\n // get each element's calculated position\n var getPositions = function getPositions(ele, i) {\n if (options.quality == \"default\" || options.quality == \"proof\") {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var pos = void 0;\n var node = void 0;\n var theId = ele.data('id');\n coseResult.forEach(function (result) {\n if (theId in result) {\n pos = { x: result[theId].getRect().getCenterX(), y: result[theId].getRect().getCenterY() };\n node = result[theId];\n }\n });\n if (options.nodeDimensionsIncludeLabels) {\n if (node.labelWidth) {\n if (node.labelPosHorizontal == \"left\") {\n pos.x += node.labelWidth / 2;\n } else if (node.labelPosHorizontal == \"right\") {\n pos.x -= node.labelWidth / 2;\n }\n }\n if (node.labelHeight) {\n if (node.labelPosVertical == \"top\") {\n pos.y += node.labelHeight / 2;\n } else if (node.labelPosVertical == \"bottom\") {\n pos.y -= node.labelHeight / 2;\n }\n }\n }\n if (pos == undefined) pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: pos.x,\n y: pos.y\n };\n } else {\n var _pos = void 0;\n spectralResult.forEach(function (result) {\n var index = result.nodeIndexes.get(ele.id());\n if (index != undefined) {\n _pos = { x: result.xCoords[index], y: result.yCoords[index] };\n }\n });\n if (_pos == undefined) _pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: _pos.x,\n y: _pos.y\n };\n }\n };\n\n // quality = \"draft\" and randomize = false are contradictive so in that case positions don't change\n if (options.quality == \"default\" || options.quality == \"proof\" || options.randomize) {\n // transfer calculated positions to nodes (positions of only simple nodes are evaluated, compounds are positioned automatically)\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n var _hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n options.eles = eles.not(_hiddenEles);\n\n eles.nodes().not(\":parent\").not(_hiddenEles).layoutPositions(layout, options, getPositions);\n\n if (parentsWithoutChildren.length > 0) {\n parentsWithoutChildren.forEach(function (ele) {\n ele.position(getPositions(ele));\n });\n }\n } else {\n console.log(\"If randomize option is set to false, then quality option must be 'default' or 'proof'.\");\n }\n }\n }]);\n\n return Layout;\n}();\n\nmodule.exports = Layout;\n\n/***/ }),\n\n/***/ 657:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the spectral layout that is the first part of the fcose layout algorithm\n*/\n\nvar aux = __webpack_require__(548);\nvar Matrix = __webpack_require__(140).layoutBase.Matrix;\nvar SVD = __webpack_require__(140).layoutBase.SVD;\n\n// main function that spectral layout is processed\nvar spectralLayout = function spectralLayout(options) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var parentNodes = eles.nodes(\":parent\");\n\n var dummyNodes = new Map(); // map to keep dummy nodes and their neighbors\n var nodeIndexes = new Map(); // map to keep indexes to nodes\n var parentChildMap = new Map(); // mapping btw. compound and its representative node \n var allNodesNeighborhood = []; // array to keep neighborhood of all nodes\n var xCoords = [];\n var yCoords = [];\n\n var samplesColumn = []; // sampled vertices\n var minDistancesColumn = [];\n var C = []; // column sampling matrix\n var PHI = []; // intersection of column and row sampling matrices \n var INV = []; // inverse of PHI \n\n var firstSample = void 0; // the first sampled node\n var nodeSize = void 0;\n\n var infinity = 100000000;\n var small = 0.000000001;\n\n var piTol = options.piTol;\n var samplingType = options.samplingType; // false for random, true for greedy\n var nodeSeparation = options.nodeSeparation;\n var sampleSize = void 0;\n\n /**** Spectral-preprocessing functions ****/\n\n /**** Spectral layout functions ****/\n\n // determine which columns to be sampled\n var randomSampleCR = function randomSampleCR() {\n var sample = 0;\n var count = 0;\n var flag = false;\n\n while (count < sampleSize) {\n sample = Math.floor(Math.random() * nodeSize);\n\n flag = false;\n for (var i = 0; i < count; i++) {\n if (samplesColumn[i] == sample) {\n flag = true;\n break;\n }\n }\n\n if (!flag) {\n samplesColumn[count] = sample;\n count++;\n } else {\n continue;\n }\n }\n };\n\n // takes the index of the node(pivot) to initiate BFS as a parameter\n var BFS = function BFS(pivot, index, samplingMethod) {\n var path = []; // the front of the path\n var front = 0; // the back of the path\n var back = 0;\n var current = 0;\n var temp = void 0;\n var distance = [];\n\n var max_dist = 0; // the furthest node to be returned\n var max_ind = 1;\n\n for (var i = 0; i < nodeSize; i++) {\n distance[i] = infinity;\n }\n\n path[back] = pivot;\n distance[pivot] = 0;\n\n while (back >= front) {\n current = path[front++];\n var neighbors = allNodesNeighborhood[current];\n for (var _i = 0; _i < neighbors.length; _i++) {\n temp = nodeIndexes.get(neighbors[_i]);\n if (distance[temp] == infinity) {\n distance[temp] = distance[current] + 1;\n path[++back] = temp;\n }\n }\n C[current][index] = distance[current] * nodeSeparation;\n }\n\n if (samplingMethod) {\n for (var _i2 = 0; _i2 < nodeSize; _i2++) {\n if (C[_i2][index] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C[_i2][index];\n }\n\n for (var _i3 = 0; _i3 < nodeSize; _i3++) {\n if (minDistancesColumn[_i3] > max_dist) {\n max_dist = minDistancesColumn[_i3];\n max_ind = _i3;\n }\n }\n }\n return max_ind;\n };\n\n // apply BFS to all nodes or selected samples\n var allBFS = function allBFS(samplingMethod) {\n\n var sample = void 0;\n\n if (!samplingMethod) {\n randomSampleCR();\n\n // call BFS\n for (var i = 0; i < sampleSize; i++) {\n BFS(samplesColumn[i], i, samplingMethod, false);\n }\n } else {\n sample = Math.floor(Math.random() * nodeSize);\n firstSample = sample;\n\n for (var _i4 = 0; _i4 < nodeSize; _i4++) {\n minDistancesColumn[_i4] = infinity;\n }\n\n for (var _i5 = 0; _i5 < sampleSize; _i5++) {\n samplesColumn[_i5] = sample;\n sample = BFS(sample, _i5, samplingMethod);\n }\n }\n\n // form the squared distances for C\n for (var _i6 = 0; _i6 < nodeSize; _i6++) {\n for (var j = 0; j < sampleSize; j++) {\n C[_i6][j] *= C[_i6][j];\n }\n }\n\n // form PHI\n for (var _i7 = 0; _i7 < sampleSize; _i7++) {\n PHI[_i7] = [];\n }\n\n for (var _i8 = 0; _i8 < sampleSize; _i8++) {\n for (var _j = 0; _j < sampleSize; _j++) {\n PHI[_i8][_j] = C[samplesColumn[_j]][_i8];\n }\n }\n };\n\n // perform the SVD algorithm and apply a regularization step\n var sample = function sample() {\n\n var SVDResult = SVD.svd(PHI);\n\n var a_q = SVDResult.S;\n var a_u = SVDResult.U;\n var a_v = SVDResult.V;\n\n var max_s = a_q[0] * a_q[0] * a_q[0];\n\n var a_Sig = [];\n\n // regularization\n for (var i = 0; i < sampleSize; i++) {\n a_Sig[i] = [];\n for (var j = 0; j < sampleSize; j++) {\n a_Sig[i][j] = 0;\n if (i == j) {\n a_Sig[i][j] = a_q[i] / (a_q[i] * a_q[i] + max_s / (a_q[i] * a_q[i]));\n }\n }\n }\n\n INV = Matrix.multMat(Matrix.multMat(a_v, a_Sig), Matrix.transpose(a_u));\n };\n\n // calculate final coordinates \n var powerIteration = function powerIteration() {\n // two largest eigenvalues\n var theta1 = void 0;\n var theta2 = void 0;\n\n // initial guesses for eigenvectors\n var Y1 = [];\n var Y2 = [];\n\n var V1 = [];\n var V2 = [];\n\n for (var i = 0; i < nodeSize; i++) {\n Y1[i] = Math.random();\n Y2[i] = Math.random();\n }\n\n Y1 = Matrix.normalize(Y1);\n Y2 = Matrix.normalize(Y2);\n\n var count = 0;\n // to keep track of the improvement ratio in power iteration\n var current = small;\n var previous = small;\n\n var temp = void 0;\n\n while (true) {\n count++;\n\n for (var _i9 = 0; _i9 < nodeSize; _i9++) {\n V1[_i9] = Y1[_i9];\n }\n\n Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C, INV));\n theta1 = Matrix.dotProduct(V1, Y1);\n Y1 = Matrix.normalize(Y1);\n\n current = Matrix.dotProduct(V1, Y1);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i10 = 0; _i10 < nodeSize; _i10++) {\n V1[_i10] = Y1[_i10];\n }\n\n count = 0;\n previous = small;\n while (true) {\n count++;\n\n for (var _i11 = 0; _i11 < nodeSize; _i11++) {\n V2[_i11] = Y2[_i11];\n }\n\n V2 = Matrix.minusOp(V2, Matrix.multCons(V1, Matrix.dotProduct(V1, V2)));\n Y2 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V2), C, INV));\n theta2 = Matrix.dotProduct(V2, Y2);\n Y2 = Matrix.normalize(Y2);\n\n current = Matrix.dotProduct(V2, Y2);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i12 = 0; _i12 < nodeSize; _i12++) {\n V2[_i12] = Y2[_i12];\n }\n\n // theta1 now contains dominant eigenvalue\n // theta2 now contains the second-largest eigenvalue\n // V1 now contains theta1's eigenvector\n // V2 now contains theta2's eigenvector\n\n //populate the two vectors\n xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1)));\n yCoords = Matrix.multCons(V2, Math.sqrt(Math.abs(theta2)));\n };\n\n /**** Preparation for spectral layout (Preprocessing) ****/\n\n // connect disconnected components (first top level, then inside of each compound node)\n aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes), dummyNodes);\n\n parentNodes.forEach(function (ele) {\n aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes);\n });\n\n // assign indexes to nodes (first real, then dummy nodes)\n var index = 0;\n for (var i = 0; i < nodes.length; i++) {\n if (!nodes[i].isParent()) {\n nodeIndexes.set(nodes[i].id(), index++);\n }\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = dummyNodes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n nodeIndexes.set(key, index++);\n }\n\n // instantiate the neighborhood matrix\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n for (var _i13 = 0; _i13 < nodeIndexes.size; _i13++) {\n allNodesNeighborhood[_i13] = [];\n }\n\n // form a parent-child map to keep representative node of each compound node \n parentNodes.forEach(function (ele) {\n var children = ele.children().intersection(eles);\n\n // let random = 0;\n while (children.nodes(\":childless\").length == 0) {\n // random = Math.floor(Math.random() * children.nodes().length); // if all children are compound then proceed randomly\n children = children.nodes()[0].children().intersection(eles);\n }\n // select the representative node - we can apply different methods here\n // random = Math.floor(Math.random() * children.nodes(\":childless\").length);\n var index = 0;\n var min = children.nodes(\":childless\")[0].connectedEdges().length;\n children.nodes(\":childless\").forEach(function (ele2, i) {\n if (ele2.connectedEdges().length < min) {\n min = ele2.connectedEdges().length;\n index = i;\n }\n });\n parentChildMap.set(ele.id(), children.nodes(\":childless\")[index].id());\n });\n\n // add neighborhood relations (first real, then dummy nodes)\n nodes.forEach(function (ele) {\n var eleIndex = void 0;\n\n if (ele.isParent()) eleIndex = nodeIndexes.get(parentChildMap.get(ele.id()));else eleIndex = nodeIndexes.get(ele.id());\n\n ele.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(ele.edgesWith(node)).length > 0) {\n if (node.isParent()) allNodesNeighborhood[eleIndex].push(parentChildMap.get(node.id()));else allNodesNeighborhood[eleIndex].push(node.id());\n }\n });\n });\n\n var _loop = function _loop(_key) {\n var eleIndex = nodeIndexes.get(_key);\n var disconnectedId = void 0;\n dummyNodes.get(_key).forEach(function (id) {\n if (cy.getElementById(id).isParent()) disconnectedId = parentChildMap.get(id);else disconnectedId = id;\n\n allNodesNeighborhood[eleIndex].push(disconnectedId);\n allNodesNeighborhood[nodeIndexes.get(disconnectedId)].push(_key);\n });\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = dummyNodes.keys()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _key = _step2.value;\n\n _loop(_key);\n }\n\n // nodeSize now only considers the size of transformed graph\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n nodeSize = nodeIndexes.size;\n\n var spectralResult = void 0;\n\n // If number of nodes in transformed graph is 1 or 2, either SVD or powerIteration causes problem\n // So skip spectral and layout the graph with cose\n if (nodeSize > 2) {\n // if # of nodes in transformed graph is smaller than sample size,\n // then use # of nodes as sample size\n sampleSize = nodeSize < options.sampleSize ? nodeSize : options.sampleSize;\n\n // instantiates the partial matrices that will be used in spectral layout\n for (var _i14 = 0; _i14 < nodeSize; _i14++) {\n C[_i14] = [];\n }\n for (var _i15 = 0; _i15 < sampleSize; _i15++) {\n INV[_i15] = [];\n }\n\n /**** Apply spectral layout ****/\n\n if (options.quality == \"draft\" || options.step == \"all\") {\n allBFS(samplingType);\n sample();\n powerIteration();\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n } else {\n nodeIndexes.forEach(function (value, key) {\n xCoords.push(cy.getElementById(key).position(\"x\"));\n yCoords.push(cy.getElementById(key).position(\"y\"));\n });\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n }\n return spectralResult;\n } else {\n var iterator = nodeIndexes.keys();\n var firstNode = cy.getElementById(iterator.next().value);\n var firstNodePos = firstNode.position();\n var firstNodeWidth = firstNode.outerWidth();\n xCoords.push(firstNodePos.x);\n yCoords.push(firstNodePos.y);\n if (nodeSize == 2) {\n var secondNode = cy.getElementById(iterator.next().value);\n var secondNodeWidth = secondNode.outerWidth();\n xCoords.push(firstNodePos.x + firstNodeWidth / 2 + secondNodeWidth / 2 + options.idealEdgeLength);\n yCoords.push(firstNodePos.y);\n }\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n return spectralResult;\n }\n};\n\nmodule.exports = { spectralLayout: spectralLayout };\n\n/***/ }),\n\n/***/ 579:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar impl = __webpack_require__(212);\n\n// registers the extension on a cytoscape lib ref\nvar register = function register(cytoscape) {\n if (!cytoscape) {\n return;\n } // can't register if cytoscape unspecified\n\n cytoscape('layout', 'fcose', impl); // register with cytoscape.js\n};\n\nif (typeof cytoscape !== 'undefined') {\n // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ }),\n\n/***/ 140:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__140__;\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\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(579);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n createText,\n getIconSVG,\n registerIconPacks,\n unknownIcon\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge,\n getEdgeId\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n sanitizeText,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/architecture/architectureParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/architecture/architectureTypes.ts\nvar ArchitectureDirectionName = {\n L: \"left\",\n R: \"right\",\n T: \"top\",\n B: \"bottom\"\n};\nvar ArchitectureDirectionArrow = {\n L: /* @__PURE__ */ __name((scale) => `${scale},${scale / 2} 0,${scale} 0,0`, \"L\"),\n R: /* @__PURE__ */ __name((scale) => `0,${scale / 2} ${scale},0 ${scale},${scale}`, \"R\"),\n T: /* @__PURE__ */ __name((scale) => `0,0 ${scale},0 ${scale / 2},${scale}`, \"T\"),\n B: /* @__PURE__ */ __name((scale) => `${scale / 2},0 ${scale},${scale} 0,${scale}`, \"B\")\n};\nvar ArchitectureDirectionArrowShift = {\n L: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, \"L\"),\n R: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, \"R\"),\n T: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, \"T\"),\n B: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, \"B\")\n};\nvar getOppositeArchitectureDirection = /* @__PURE__ */ __name(function(x) {\n if (isArchitectureDirectionX(x)) {\n return x === \"L\" ? \"R\" : \"L\";\n } else {\n return x === \"T\" ? \"B\" : \"T\";\n }\n}, \"getOppositeArchitectureDirection\");\nvar isArchitectureDirection = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"L\" || temp === \"R\" || temp === \"T\" || temp === \"B\";\n}, \"isArchitectureDirection\");\nvar isArchitectureDirectionX = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"L\" || temp === \"R\";\n}, \"isArchitectureDirectionX\");\nvar isArchitectureDirectionY = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp === \"T\" || temp === \"B\";\n}, \"isArchitectureDirectionY\");\nvar isArchitectureDirectionXY = /* @__PURE__ */ __name(function(a, b) {\n const aX_bY = isArchitectureDirectionX(a) && isArchitectureDirectionY(b);\n const aY_bX = isArchitectureDirectionY(a) && isArchitectureDirectionX(b);\n return aX_bY || aY_bX;\n}, \"isArchitectureDirectionXY\");\nvar isArchitecturePairXY = /* @__PURE__ */ __name(function(pair) {\n const lhs = pair[0];\n const rhs = pair[1];\n const aX_bY = isArchitectureDirectionX(lhs) && isArchitectureDirectionY(rhs);\n const aY_bX = isArchitectureDirectionY(lhs) && isArchitectureDirectionX(rhs);\n return aX_bY || aY_bX;\n}, \"isArchitecturePairXY\");\nvar isValidArchitectureDirectionPair = /* @__PURE__ */ __name(function(x) {\n return x !== \"LL\" && x !== \"RR\" && x !== \"TT\" && x !== \"BB\";\n}, \"isValidArchitectureDirectionPair\");\nvar getArchitectureDirectionPair = /* @__PURE__ */ __name(function(sourceDir, targetDir) {\n const pair = `${sourceDir}${targetDir}`;\n return isValidArchitectureDirectionPair(pair) ? pair : void 0;\n}, \"getArchitectureDirectionPair\");\nvar shiftPositionByArchitectureDirectionPair = /* @__PURE__ */ __name(function([x, y], pair) {\n const lhs = pair[0];\n const rhs = pair[1];\n if (isArchitectureDirectionX(lhs)) {\n if (isArchitectureDirectionY(rhs)) {\n return [x + (lhs === \"L\" ? -1 : 1), y + (rhs === \"T\" ? 1 : -1)];\n } else {\n return [x + (lhs === \"L\" ? -1 : 1), y];\n }\n } else {\n if (isArchitectureDirectionX(rhs)) {\n return [x + (rhs === \"L\" ? 1 : -1), y + (lhs === \"T\" ? 1 : -1)];\n } else {\n return [x, y + (lhs === \"T\" ? 1 : -1)];\n }\n }\n}, \"shiftPositionByArchitectureDirectionPair\");\nvar getArchitectureDirectionXYFactors = /* @__PURE__ */ __name(function(pair) {\n if (pair === \"LT\" || pair === \"TL\") {\n return [1, 1];\n } else if (pair === \"BL\" || pair === \"LB\") {\n return [1, -1];\n } else if (pair === \"BR\" || pair === \"RB\") {\n return [-1, -1];\n } else {\n return [-1, 1];\n }\n}, \"getArchitectureDirectionXYFactors\");\nvar getArchitectureDirectionAlignment = /* @__PURE__ */ __name(function(a, b) {\n if (isArchitectureDirectionXY(a, b)) {\n return \"bend\";\n } else if (isArchitectureDirectionX(a)) {\n return \"horizontal\";\n }\n return \"vertical\";\n}, \"getArchitectureDirectionAlignment\");\nvar isArchitectureService = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp.type === \"service\";\n}, \"isArchitectureService\");\nvar isArchitectureJunction = /* @__PURE__ */ __name(function(x) {\n const temp = x;\n return temp.type === \"junction\";\n}, \"isArchitectureJunction\");\nvar edgeData = /* @__PURE__ */ __name((edge) => {\n return edge.data();\n}, \"edgeData\");\nvar nodeData = /* @__PURE__ */ __name((node) => {\n return node.data();\n}, \"nodeData\");\n\n// src/diagrams/architecture/architectureDb.ts\nvar DEFAULT_ARCHITECTURE_CONFIG = defaultConfig_default.architecture;\nvar ArchitectureDB = class {\n constructor() {\n this.nodes = {};\n this.groups = {};\n this.edges = [];\n this.registeredIds = {};\n this.elements = {};\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n this.clear();\n }\n static {\n __name(this, \"ArchitectureDB\");\n }\n clear() {\n this.nodes = {};\n this.groups = {};\n this.edges = [];\n this.registeredIds = {};\n this.dataStructures = void 0;\n this.elements = {};\n clear();\n }\n addService({\n id,\n icon,\n in: parent,\n title,\n iconText\n }) {\n if (this.registeredIds[id] !== void 0) {\n throw new Error(\n `The service id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== void 0) {\n if (id === parent) {\n throw new Error(`The service [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds[parent] === void 0) {\n throw new Error(\n `The service [${id}]'s parent does not exist. Please make sure the parent is created before this service`\n );\n }\n if (this.registeredIds[parent] === \"node\") {\n throw new Error(`The service [${id}]'s parent is not a group`);\n }\n }\n this.registeredIds[id] = \"node\";\n this.nodes[id] = {\n id,\n type: \"service\",\n icon,\n iconText,\n title,\n edges: [],\n in: parent\n };\n }\n getServices() {\n return Object.values(this.nodes).filter(isArchitectureService);\n }\n addJunction({ id, in: parent }) {\n this.registeredIds[id] = \"node\";\n this.nodes[id] = {\n id,\n type: \"junction\",\n edges: [],\n in: parent\n };\n }\n getJunctions() {\n return Object.values(this.nodes).filter(isArchitectureJunction);\n }\n getNodes() {\n return Object.values(this.nodes);\n }\n getNode(id) {\n return this.nodes[id] ?? null;\n }\n addGroup({ id, icon, in: parent, title }) {\n if (this.registeredIds?.[id] !== void 0) {\n throw new Error(\n `The group id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== void 0) {\n if (id === parent) {\n throw new Error(`The group [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds?.[parent] === void 0) {\n throw new Error(\n `The group [${id}]'s parent does not exist. Please make sure the parent is created before this group`\n );\n }\n if (this.registeredIds?.[parent] === \"node\") {\n throw new Error(`The group [${id}]'s parent is not a group`);\n }\n }\n this.registeredIds[id] = \"group\";\n this.groups[id] = {\n id,\n icon,\n title,\n in: parent\n };\n }\n getGroups() {\n return Object.values(this.groups);\n }\n addEdge({\n lhsId,\n rhsId,\n lhsDir,\n rhsDir,\n lhsInto,\n rhsInto,\n lhsGroup,\n rhsGroup,\n title\n }) {\n if (!isArchitectureDirection(lhsDir)) {\n throw new Error(\n `Invalid direction given for left hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(lhsDir)}`\n );\n }\n if (!isArchitectureDirection(rhsDir)) {\n throw new Error(\n `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(rhsDir)}`\n );\n }\n if (this.nodes[lhsId] === void 0 && this.groups[lhsId] === void 0) {\n throw new Error(\n `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n if (this.nodes[rhsId] === void 0 && this.groups[rhsId] === void 0) {\n throw new Error(\n `The right-hand id [${rhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n const lhsGroupId = this.nodes[lhsId].in;\n const rhsGroupId = this.nodes[rhsId].in;\n if (lhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The left-hand id [${lhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n if (rhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The right-hand id [${rhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n const edge = {\n lhsId,\n lhsDir,\n lhsInto,\n lhsGroup,\n rhsId,\n rhsDir,\n rhsInto,\n rhsGroup,\n title\n };\n this.edges.push(edge);\n if (this.nodes[lhsId] && this.nodes[rhsId]) {\n this.nodes[lhsId].edges.push(this.edges[this.edges.length - 1]);\n this.nodes[rhsId].edges.push(this.edges[this.edges.length - 1]);\n }\n }\n getEdges() {\n return this.edges;\n }\n /**\n * Returns the current diagram's adjacency list, spatial map, & group alignments.\n * If they have not been created, run the algorithms to generate them.\n * @returns\n */\n getDataStructures() {\n if (this.dataStructures === void 0) {\n const groupAlignments = {};\n const adjList = Object.entries(this.nodes).reduce((prevOuter, [id, service]) => {\n prevOuter[id] = service.edges.reduce((prevInner, edge) => {\n const lhsGroupId = this.getNode(edge.lhsId)?.in;\n const rhsGroupId = this.getNode(edge.rhsId)?.in;\n if (lhsGroupId && rhsGroupId && lhsGroupId !== rhsGroupId) {\n const alignment = getArchitectureDirectionAlignment(edge.lhsDir, edge.rhsDir);\n if (alignment !== \"bend\") {\n groupAlignments[lhsGroupId] ??= {};\n groupAlignments[lhsGroupId][rhsGroupId] = alignment;\n groupAlignments[rhsGroupId] ??= {};\n groupAlignments[rhsGroupId][lhsGroupId] = alignment;\n }\n }\n if (edge.lhsId === id) {\n const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir);\n if (pair) {\n prevInner[pair] = edge.rhsId;\n }\n } else {\n const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir);\n if (pair) {\n prevInner[pair] = edge.lhsId;\n }\n }\n return prevInner;\n }, {});\n return prevOuter;\n }, {});\n const firstId = Object.keys(adjList)[0];\n const visited = { [firstId]: 1 };\n const notVisited = Object.keys(adjList).reduce(\n (prev, id) => id === firstId ? prev : { ...prev, [id]: 1 },\n {}\n );\n const BFS = /* @__PURE__ */ __name((startingId) => {\n const spatialMap = { [startingId]: [0, 0] };\n const queue = [startingId];\n while (queue.length > 0) {\n const id = queue.shift();\n if (id) {\n visited[id] = 1;\n delete notVisited[id];\n const adj = adjList[id];\n const [posX, posY] = spatialMap[id];\n Object.entries(adj).forEach(([dir, rhsId]) => {\n if (!visited[rhsId]) {\n spatialMap[rhsId] = shiftPositionByArchitectureDirectionPair(\n [posX, posY],\n dir\n );\n queue.push(rhsId);\n }\n });\n }\n }\n return spatialMap;\n }, \"BFS\");\n const spatialMaps = [BFS(firstId)];\n while (Object.keys(notVisited).length > 0) {\n spatialMaps.push(BFS(Object.keys(notVisited)[0]));\n }\n this.dataStructures = {\n adjList,\n spatialMaps,\n groupAlignments\n };\n }\n return this.dataStructures;\n }\n setElementForId(id, element) {\n this.elements[id] = element;\n }\n getElementById(id) {\n return this.elements[id];\n }\n getConfig() {\n return cleanAndMerge({\n ...DEFAULT_ARCHITECTURE_CONFIG,\n ...getConfig().architecture\n });\n }\n getConfigField(field) {\n return this.getConfig()[field];\n }\n};\n\n// src/diagrams/architecture/architectureParser.ts\nvar populateDb = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n ast.groups.map((group) => db.addGroup(group));\n ast.services.map((service) => db.addService({ ...service, type: \"service\" }));\n ast.junctions.map((service) => db.addJunction({ ...service, type: \"junction\" }));\n ast.edges.map((edge) => db.addEdge(edge));\n}, \"populateDb\");\nvar parser = {\n parser: {\n // @ts-expect-error - ArchitectureDB is not assignable to DiagramDB\n yy: void 0\n },\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"architecture\", input);\n log.debug(ast);\n const db = parser.parser?.yy;\n if (!(db instanceof ArchitectureDB)) {\n throw new Error(\n \"parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n populateDb(ast, db);\n }, \"parse\")\n};\n\n// src/diagrams/architecture/architectureStyles.ts\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .edge {\n stroke-width: ${options.archEdgeWidth};\n stroke: ${options.archEdgeColor};\n fill: none;\n }\n\n .arrow {\n fill: ${options.archEdgeArrowColor};\n }\n\n .node-bkg {\n fill: none;\n stroke: ${options.archGroupBorderColor};\n stroke-width: ${options.archGroupBorderWidth};\n stroke-dasharray: 8;\n }\n .node-icon-text {\n display: flex; \n align-items: center;\n }\n \n .node-icon-text > div {\n color: #fff;\n margin: 1px;\n height: fit-content;\n text-align: center;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n }\n`, \"getStyles\");\nvar architectureStyles_default = getStyles;\n\n// src/diagrams/architecture/architectureRenderer.ts\nimport cytoscape from \"cytoscape\";\nimport fcose from \"cytoscape-fcose\";\nimport { select } from \"d3\";\n\n// src/diagrams/architecture/architectureIcons.ts\nvar wrapIcon = /* @__PURE__ */ __name((icon) => {\n return `${icon}`;\n}, \"wrapIcon\");\nvar architectureIcons = {\n prefix: \"mermaid-architecture\",\n height: 80,\n width: 80,\n icons: {\n database: {\n body: wrapIcon(\n ''\n )\n },\n server: {\n body: wrapIcon(\n ''\n )\n },\n disk: {\n body: wrapIcon(\n ''\n )\n },\n internet: {\n body: wrapIcon(\n ''\n )\n },\n cloud: {\n body: wrapIcon(\n ''\n )\n },\n unknown: unknownIcon,\n blank: {\n body: wrapIcon(\"\")\n }\n }\n};\n\n// src/diagrams/architecture/svgDraw.ts\nvar drawEdges = /* @__PURE__ */ __name(async function(edgesEl, cy, db) {\n const padding = db.getConfigField(\"padding\");\n const iconSize = db.getConfigField(\"iconSize\");\n const halfIconSize = iconSize / 2;\n const arrowSize = iconSize / 6;\n const halfArrowSize = arrowSize / 2;\n await Promise.all(\n cy.edges().map(async (edge) => {\n const {\n source,\n sourceDir,\n sourceArrow,\n sourceGroup,\n target,\n targetDir,\n targetArrow,\n targetGroup,\n label\n } = edgeData(edge);\n let { x: startX, y: startY } = edge[0].sourceEndpoint();\n const { x: midX, y: midY } = edge[0].midpoint();\n let { x: endX, y: endY } = edge[0].targetEndpoint();\n const groupEdgeShift = padding + 4;\n if (sourceGroup) {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === \"L\" ? -groupEdgeShift : groupEdgeShift;\n } else {\n startY += sourceDir === \"T\" ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n if (targetGroup) {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === \"L\" ? -groupEdgeShift : groupEdgeShift;\n } else {\n endY += targetDir === \"T\" ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n if (!sourceGroup && db.getNode(source)?.type === \"junction\") {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === \"L\" ? halfIconSize : -halfIconSize;\n } else {\n startY += sourceDir === \"T\" ? halfIconSize : -halfIconSize;\n }\n }\n if (!targetGroup && db.getNode(target)?.type === \"junction\") {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === \"L\" ? halfIconSize : -halfIconSize;\n } else {\n endY += targetDir === \"T\" ? halfIconSize : -halfIconSize;\n }\n }\n if (edge[0]._private.rscratch) {\n const g = edgesEl.insert(\"g\");\n g.insert(\"path\").attr(\"d\", `M ${startX},${startY} L ${midX},${midY} L${endX},${endY} `).attr(\"class\", \"edge\").attr(\"id\", getEdgeId(source, target, { prefix: \"L\" }));\n if (sourceArrow) {\n const xShift = isArchitectureDirectionX(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startX, arrowSize) : startX - halfArrowSize;\n const yShift = isArchitectureDirectionY(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startY, arrowSize) : startY - halfArrowSize;\n g.insert(\"polygon\").attr(\"points\", ArchitectureDirectionArrow[sourceDir](arrowSize)).attr(\"transform\", `translate(${xShift},${yShift})`).attr(\"class\", \"arrow\");\n }\n if (targetArrow) {\n const xShift = isArchitectureDirectionX(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endX, arrowSize) : endX - halfArrowSize;\n const yShift = isArchitectureDirectionY(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endY, arrowSize) : endY - halfArrowSize;\n g.insert(\"polygon\").attr(\"points\", ArchitectureDirectionArrow[targetDir](arrowSize)).attr(\"transform\", `translate(${xShift},${yShift})`).attr(\"class\", \"arrow\");\n }\n if (label) {\n const axis = !isArchitectureDirectionXY(sourceDir, targetDir) ? isArchitectureDirectionX(sourceDir) ? \"X\" : \"Y\" : \"XY\";\n let width = 0;\n if (axis === \"X\") {\n width = Math.abs(startX - endX);\n } else if (axis === \"Y\") {\n width = Math.abs(startY - endY) / 1.5;\n } else {\n width = Math.abs(startX - endX) / 2;\n }\n const textElem = g.append(\"g\");\n await createText(\n textElem,\n label,\n {\n useHtmlLabels: false,\n width,\n classes: \"architecture-service-label\"\n },\n getConfig2()\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\");\n if (axis === \"X\") {\n textElem.attr(\"transform\", \"translate(\" + midX + \", \" + midY + \")\");\n } else if (axis === \"Y\") {\n textElem.attr(\"transform\", \"translate(\" + midX + \", \" + midY + \") rotate(-90)\");\n } else if (axis === \"XY\") {\n const pair = getArchitectureDirectionPair(sourceDir, targetDir);\n if (pair && isArchitecturePairXY(pair)) {\n const bboxOrig = textElem.node().getBoundingClientRect();\n const [x, y] = getArchitectureDirectionXYFactors(pair);\n textElem.attr(\"dominant-baseline\", \"auto\").attr(\"transform\", `rotate(${-1 * x * y * 45})`);\n const bboxNew = textElem.node().getBoundingClientRect();\n textElem.attr(\n \"transform\",\n `\n translate(${midX}, ${midY - bboxOrig.height / 2})\n translate(${x * bboxNew.width / 2}, ${y * bboxNew.height / 2})\n rotate(${-1 * x * y * 45}, 0, ${bboxOrig.height / 2})\n `\n );\n }\n }\n }\n }\n })\n );\n}, \"drawEdges\");\nvar drawGroups = /* @__PURE__ */ __name(async function(groupsEl, cy, db) {\n const padding = db.getConfigField(\"padding\");\n const groupIconSize = padding * 0.75;\n const fontSize = db.getConfigField(\"fontSize\");\n const iconSize = db.getConfigField(\"iconSize\");\n const halfIconSize = iconSize / 2;\n await Promise.all(\n cy.nodes().map(async (node) => {\n const data = nodeData(node);\n if (data.type === \"group\") {\n const { h, w, x1, y1 } = node.boundingBox();\n const groupsNode = groupsEl.append(\"rect\");\n groupsNode.attr(\"id\", `group-${data.id}`).attr(\"x\", x1 + halfIconSize).attr(\"y\", y1 + halfIconSize).attr(\"width\", w).attr(\"height\", h).attr(\"class\", \"node-bkg\");\n const groupLabelContainer = groupsEl.append(\"g\");\n let shiftedX1 = x1;\n let shiftedY1 = y1;\n if (data.icon) {\n const bkgElem = groupLabelContainer.append(\"g\");\n bkgElem.html(\n `${await getIconSVG(data.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n bkgElem.attr(\n \"transform\",\n \"translate(\" + (shiftedX1 + halfIconSize + 1) + \", \" + (shiftedY1 + halfIconSize + 1) + \")\"\n );\n shiftedX1 += groupIconSize;\n shiftedY1 += fontSize / 2 - 1 - 2;\n }\n if (data.label) {\n const textElem = groupLabelContainer.append(\"g\");\n await createText(\n textElem,\n data.label,\n {\n useHtmlLabels: false,\n width: w,\n classes: \"architecture-service-label\"\n },\n getConfig2()\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"start\").attr(\"text-anchor\", \"start\");\n textElem.attr(\n \"transform\",\n \"translate(\" + (shiftedX1 + halfIconSize + 4) + \", \" + (shiftedY1 + halfIconSize + 2) + \")\"\n );\n }\n db.setElementForId(data.id, groupsNode);\n }\n })\n );\n}, \"drawGroups\");\nvar drawServices = /* @__PURE__ */ __name(async function(db, elem, services) {\n const config = getConfig2();\n for (const service of services) {\n const serviceElem = elem.append(\"g\");\n const iconSize = db.getConfigField(\"iconSize\");\n if (service.title) {\n const textElem = serviceElem.append(\"g\");\n await createText(\n textElem,\n service.title,\n {\n useHtmlLabels: false,\n width: iconSize * 1.5,\n classes: \"architecture-service-label\"\n },\n config\n );\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\");\n textElem.attr(\"transform\", \"translate(\" + iconSize / 2 + \", \" + iconSize + \")\");\n }\n const bkgElem = serviceElem.append(\"g\");\n if (service.icon) {\n bkgElem.html(\n `${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n } else if (service.iconText) {\n bkgElem.html(\n `${await getIconSVG(\"blank\", { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n const textElemContainer = bkgElem.append(\"g\");\n const fo = textElemContainer.append(\"foreignObject\").attr(\"width\", iconSize).attr(\"height\", iconSize);\n const divElem = fo.append(\"div\").attr(\"class\", \"node-icon-text\").attr(\"style\", `height: ${iconSize}px;`).append(\"div\").html(sanitizeText(service.iconText, config));\n const fontSize = parseInt(\n window.getComputedStyle(divElem.node(), null).getPropertyValue(\"font-size\").replace(/\\D/g, \"\")\n ) ?? 16;\n divElem.attr(\"style\", `-webkit-line-clamp: ${Math.floor((iconSize - 2) / fontSize)};`);\n } else {\n bkgElem.append(\"path\").attr(\"class\", \"node-bkg\").attr(\"id\", \"node-\" + service.id).attr(\n \"d\",\n `M0 ${iconSize} v${-iconSize} q0,-5 5,-5 h${iconSize} q5,0 5,5 v${iconSize} H0 Z`\n );\n }\n serviceElem.attr(\"id\", `service-${service.id}`).attr(\"class\", \"architecture-service\");\n const { width, height } = serviceElem.node().getBBox();\n service.width = width;\n service.height = height;\n db.setElementForId(service.id, serviceElem);\n }\n return 0;\n}, \"drawServices\");\nvar drawJunctions = /* @__PURE__ */ __name(function(db, elem, junctions) {\n junctions.forEach((junction) => {\n const junctionElem = elem.append(\"g\");\n const iconSize = db.getConfigField(\"iconSize\");\n const bkgElem = junctionElem.append(\"g\");\n bkgElem.append(\"rect\").attr(\"id\", \"node-\" + junction.id).attr(\"fill-opacity\", \"0\").attr(\"width\", iconSize).attr(\"height\", iconSize);\n junctionElem.attr(\"class\", \"architecture-junction\");\n const { width, height } = junctionElem._groups[0][0].getBBox();\n junctionElem.width = width;\n junctionElem.height = height;\n db.setElementForId(junction.id, junctionElem);\n });\n}, \"drawJunctions\");\n\n// src/diagrams/architecture/architectureRenderer.ts\nregisterIconPacks([\n {\n name: architectureIcons.prefix,\n icons: architectureIcons\n }\n]);\ncytoscape.use(fcose);\nfunction addServices(services, cy, db) {\n services.forEach((service) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"service\",\n id: service.id,\n icon: service.icon,\n label: service.title,\n parent: service.in,\n width: db.getConfigField(\"iconSize\"),\n height: db.getConfigField(\"iconSize\")\n },\n classes: \"node-service\"\n });\n });\n}\n__name(addServices, \"addServices\");\nfunction addJunctions(junctions, cy, db) {\n junctions.forEach((junction) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"junction\",\n id: junction.id,\n parent: junction.in,\n width: db.getConfigField(\"iconSize\"),\n height: db.getConfigField(\"iconSize\")\n },\n classes: \"node-junction\"\n });\n });\n}\n__name(addJunctions, \"addJunctions\");\nfunction positionNodes(db, cy) {\n cy.nodes().map((node) => {\n const data = nodeData(node);\n if (data.type === \"group\") {\n return;\n }\n data.x = node.position().x;\n data.y = node.position().y;\n const nodeElem = db.getElementById(data.id);\n nodeElem.attr(\"transform\", \"translate(\" + (data.x || 0) + \",\" + (data.y || 0) + \")\");\n });\n}\n__name(positionNodes, \"positionNodes\");\nfunction addGroups(groups, cy) {\n groups.forEach((group) => {\n cy.add({\n group: \"nodes\",\n data: {\n type: \"group\",\n id: group.id,\n icon: group.icon,\n label: group.title,\n parent: group.in\n },\n classes: \"node-group\"\n });\n });\n}\n__name(addGroups, \"addGroups\");\nfunction addEdges(edges, cy) {\n edges.forEach((parsedEdge) => {\n const { lhsId, rhsId, lhsInto, lhsGroup, rhsInto, lhsDir, rhsDir, rhsGroup, title } = parsedEdge;\n const edgeType = isArchitectureDirectionXY(parsedEdge.lhsDir, parsedEdge.rhsDir) ? \"segments\" : \"straight\";\n const edge = {\n id: `${lhsId}-${rhsId}`,\n label: title,\n source: lhsId,\n sourceDir: lhsDir,\n sourceArrow: lhsInto,\n sourceGroup: lhsGroup,\n sourceEndpoint: lhsDir === \"L\" ? \"0 50%\" : lhsDir === \"R\" ? \"100% 50%\" : lhsDir === \"T\" ? \"50% 0\" : \"50% 100%\",\n target: rhsId,\n targetDir: rhsDir,\n targetArrow: rhsInto,\n targetGroup: rhsGroup,\n targetEndpoint: rhsDir === \"L\" ? \"0 50%\" : rhsDir === \"R\" ? \"100% 50%\" : rhsDir === \"T\" ? \"50% 0\" : \"50% 100%\"\n };\n cy.add({\n group: \"edges\",\n data: edge,\n classes: edgeType\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction getAlignments(db, spatialMaps, groupAlignments) {\n const flattenAlignments = /* @__PURE__ */ __name((alignmentObj, alignmentDir) => {\n return Object.entries(alignmentObj).reduce(\n (prev, [dir, alignments2]) => {\n let cnt = 0;\n const arr = Object.entries(alignments2);\n if (arr.length === 1) {\n prev[dir] = arr[0][1];\n return prev;\n }\n for (let i = 0; i < arr.length - 1; i++) {\n for (let j = i + 1; j < arr.length; j++) {\n const [aGroupId, aNodeIds] = arr[i];\n const [bGroupId, bNodeIds] = arr[j];\n const alignment = groupAlignments[aGroupId]?.[bGroupId];\n if (alignment === alignmentDir) {\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds];\n } else if (aGroupId === \"default\" || bGroupId === \"default\") {\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds];\n } else {\n const keyA = `${dir}-${cnt++}`;\n prev[keyA] = aNodeIds;\n const keyB = `${dir}-${cnt++}`;\n prev[keyB] = bNodeIds;\n }\n }\n }\n return prev;\n },\n {}\n );\n }, \"flattenAlignments\");\n const alignments = spatialMaps.map((spatialMap) => {\n const horizontalAlignments = {};\n const verticalAlignments = {};\n Object.entries(spatialMap).forEach(([id, [x, y]]) => {\n const nodeGroup = db.getNode(id)?.in ?? \"default\";\n horizontalAlignments[y] ??= {};\n horizontalAlignments[y][nodeGroup] ??= [];\n horizontalAlignments[y][nodeGroup].push(id);\n verticalAlignments[x] ??= {};\n verticalAlignments[x][nodeGroup] ??= [];\n verticalAlignments[x][nodeGroup].push(id);\n });\n return {\n horiz: Object.values(flattenAlignments(horizontalAlignments, \"horizontal\")).filter(\n (arr) => arr.length > 1\n ),\n vert: Object.values(flattenAlignments(verticalAlignments, \"vertical\")).filter(\n (arr) => arr.length > 1\n )\n };\n });\n const [horizontal, vertical] = alignments.reduce(\n ([prevHoriz, prevVert], { horiz, vert }) => {\n return [\n [...prevHoriz, ...horiz],\n [...prevVert, ...vert]\n ];\n },\n [[], []]\n );\n return {\n horizontal,\n vertical\n };\n}\n__name(getAlignments, \"getAlignments\");\nfunction getRelativeConstraints(spatialMaps, db) {\n const relativeConstraints = [];\n const posToStr = /* @__PURE__ */ __name((pos) => `${pos[0]},${pos[1]}`, \"posToStr\");\n const strToPos = /* @__PURE__ */ __name((pos) => pos.split(\",\").map((p) => parseInt(p)), \"strToPos\");\n spatialMaps.forEach((spatialMap) => {\n const invSpatialMap = Object.fromEntries(\n Object.entries(spatialMap).map(([id, pos]) => [posToStr(pos), id])\n );\n const queue = [posToStr([0, 0])];\n const visited = {};\n const directions = {\n L: [-1, 0],\n R: [1, 0],\n T: [0, 1],\n B: [0, -1]\n };\n while (queue.length > 0) {\n const curr = queue.shift();\n if (curr) {\n visited[curr] = 1;\n const currId = invSpatialMap[curr];\n if (currId) {\n const currPos = strToPos(curr);\n Object.entries(directions).forEach(([dir, shift]) => {\n const newPos = posToStr([currPos[0] + shift[0], currPos[1] + shift[1]]);\n const newId = invSpatialMap[newPos];\n if (newId && !visited[newPos]) {\n queue.push(newPos);\n relativeConstraints.push({\n [ArchitectureDirectionName[dir]]: newId,\n [ArchitectureDirectionName[getOppositeArchitectureDirection(dir)]]: currId,\n gap: 1.5 * db.getConfigField(\"iconSize\")\n });\n }\n });\n }\n }\n }\n });\n return relativeConstraints;\n}\n__name(getRelativeConstraints, \"getRelativeConstraints\");\nfunction layoutArchitecture(services, junctions, groups, edges, db, { spatialMaps, groupAlignments }) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"straight\",\n label: \"data(label)\",\n \"source-endpoint\": \"data(sourceEndpoint)\",\n \"target-endpoint\": \"data(targetEndpoint)\"\n }\n },\n {\n selector: \"edge.segments\",\n style: {\n \"curve-style\": \"segments\",\n \"segment-weights\": \"0\",\n \"segment-distances\": [0.5],\n // @ts-ignore Incorrect library types\n \"edge-distances\": \"endpoints\",\n \"source-endpoint\": \"data(sourceEndpoint)\",\n \"target-endpoint\": \"data(targetEndpoint)\"\n }\n },\n {\n selector: \"node\",\n style: {\n // @ts-ignore Incorrect library types\n \"compound-sizing-wrt-labels\": \"include\"\n }\n },\n {\n selector: \"node[label]\",\n style: {\n \"text-valign\": \"bottom\",\n \"text-halign\": \"center\",\n \"font-size\": `${db.getConfigField(\"fontSize\")}px`\n }\n },\n {\n selector: \".node-service\",\n style: {\n label: \"data(label)\",\n width: \"data(width)\",\n height: \"data(height)\"\n }\n },\n {\n selector: \".node-junction\",\n style: {\n width: \"data(width)\",\n height: \"data(height)\"\n }\n },\n {\n selector: \".node-group\",\n style: {\n // @ts-ignore Incorrect library types\n padding: `${db.getConfigField(\"padding\")}px`\n }\n }\n ],\n layout: {\n name: \"grid\",\n boundingBox: {\n x1: 0,\n x2: 100,\n y1: 0,\n y2: 100\n }\n }\n });\n renderEl.remove();\n addGroups(groups, cy);\n addServices(services, cy, db);\n addJunctions(junctions, cy, db);\n addEdges(edges, cy);\n const alignmentConstraint = getAlignments(db, spatialMaps, groupAlignments);\n const relativePlacementConstraint = getRelativeConstraints(spatialMaps, db);\n const layout = cy.layout({\n name: \"fcose\",\n quality: \"proof\",\n styleEnabled: false,\n animate: false,\n nodeDimensionsIncludeLabels: false,\n // Adjust the edge parameters if it passes through the border of a group\n // Hacky fix for: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose/issues/67\n idealEdgeLength(edge) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity = parentA === parentB ? 1.5 * db.getConfigField(\"iconSize\") : 0.5 * db.getConfigField(\"iconSize\");\n return elasticity;\n },\n edgeElasticity(edge) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity = parentA === parentB ? 0.45 : 1e-3;\n return elasticity;\n },\n alignmentConstraint,\n relativePlacementConstraint\n });\n layout.one(\"layoutstop\", () => {\n function getSegmentWeights(source, target, pointX, pointY) {\n let W, D;\n const { x: sX, y: sY } = source;\n const { x: tX, y: tY } = target;\n D = (pointY - sY + (sX - pointX) * (sY - tY) / (sX - tX)) / Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2));\n W = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D, 2));\n const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2));\n W = W / distAB;\n let delta1 = (tX - sX) * (pointY - sY) - (tY - sY) * (pointX - sX);\n switch (true) {\n case delta1 >= 0:\n delta1 = 1;\n break;\n case delta1 < 0:\n delta1 = -1;\n break;\n }\n let delta2 = (tX - sX) * (pointX - sX) + (tY - sY) * (pointY - sY);\n switch (true) {\n case delta2 >= 0:\n delta2 = 1;\n break;\n case delta2 < 0:\n delta2 = -1;\n break;\n }\n D = Math.abs(D) * delta1;\n W = W * delta2;\n return {\n distances: D,\n weights: W\n };\n }\n __name(getSegmentWeights, \"getSegmentWeights\");\n cy.startBatch();\n for (const edge of Object.values(cy.edges())) {\n if (edge.data?.()) {\n const { x: sX, y: sY } = edge.source().position();\n const { x: tX, y: tY } = edge.target().position();\n if (sX !== tX && sY !== tY) {\n const sEP = edge.sourceEndpoint();\n const tEP = edge.targetEndpoint();\n const { sourceDir } = edgeData(edge);\n const [pointX, pointY] = isArchitectureDirectionY(sourceDir) ? [sEP.x, tEP.y] : [tEP.x, sEP.y];\n const { weights, distances } = getSegmentWeights(sEP, tEP, pointX, pointY);\n edge.style(\"segment-distances\", distances);\n edge.style(\"segment-weights\", weights);\n }\n }\n }\n cy.endBatch();\n layout.run();\n });\n layout.run();\n cy.ready((e) => {\n log.info(\"Ready\", e);\n resolve(cy);\n });\n });\n}\n__name(layoutArchitecture, \"layoutArchitecture\");\nvar draw = /* @__PURE__ */ __name(async (text, id, _version, diagObj) => {\n const db = diagObj.db;\n const services = db.getServices();\n const junctions = db.getJunctions();\n const groups = db.getGroups();\n const edges = db.getEdges();\n const ds = db.getDataStructures();\n const svg = selectSvgElement(id);\n const edgesElem = svg.append(\"g\");\n edgesElem.attr(\"class\", \"architecture-edges\");\n const servicesElem = svg.append(\"g\");\n servicesElem.attr(\"class\", \"architecture-services\");\n const groupElem = svg.append(\"g\");\n groupElem.attr(\"class\", \"architecture-groups\");\n await drawServices(db, servicesElem, services);\n drawJunctions(db, servicesElem, junctions);\n const cy = await layoutArchitecture(services, junctions, groups, edges, db, ds);\n await drawEdges(edgesElem, cy, db);\n await drawGroups(groupElem, cy, db);\n positionNodes(db, cy);\n setupGraphViewbox(void 0, svg, db.getConfigField(\"padding\"), db.getConfigField(\"useMaxWidth\"));\n}, \"draw\");\nvar renderer = { draw };\n\n// src/diagrams/architecture/architectureDiagram.ts\nvar diagram = {\n parser,\n get db() {\n return new ArchitectureDB();\n },\n renderer,\n styles: architectureStyles_default\n};\nexport {\n diagram\n};\n"],"names":["root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","FDLayoutConstants","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","edgesToRemove","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","Ex","Ey","Lx","Ly","disc","t1","t2","intersections","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","originalIdealLength","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Matrix","array1","array2","array","constant","product","magnitude","sum","_i","C","INV","temp1","temp2","_i2","_sum","_j","_i3","_sum2","_j2","Quicksort","A","compareFunction","SVD","nu","dims","allocate","e","work","wantu","nct","nrt","lhs","rhs","t","_i4","_i5","_i6","_i7","_i8","_t","_i9","_i10","_j3","_i11","_k","_j4","_t2","_i12","_i13","_i14","_i15","_i16","_k2","_j5","_t3","_i17","_i18","_i19","pp","eps","tiny","_k3","kase","ks","_t4","f","_j6","_t5","cs","sn","_i20","_f","_j7","_t6","_cs","_sn","_i21","scale","sp","spm1","epm1","sk","ek","shift","_f2","g","_j8","_t7","_cs2","_sn2","_i22","_i23","_i24","_t8","_i25","_i26","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","diag","up","maxOf","indices","inProcessAlignments","indexes","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE__551__","__webpack_modules__","__unused_webpack_exports","coseBase","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","ConstraintHandler","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","calculateCompoundWeight","compoundNode","fixedNodeWeight","nodeData","nodeToDummyForVerticalAlignment","nodeToDummyForHorizontalAlignment","nodeId","verticalAlignment","horizontalAlignment","constraint","nodeIdLeft","nodeIdRight","nodeIdTop","nodeIdBottom","subGraphOnHorizontal","subGraphOnVertical","constructComponents","fixedNodes","components","isFixed","count","neighbor","resultOnHorizontal","resultOnVertical","fixedNode","allVerticalAlignments","totalDisplacementX","averageDisplacementX","allHorizontalAlignments","totalDisplacementY","averageDisplacementY","displacement","diff","component","actualNodes","averageDisplacement","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","lCompoundNode","horizontalMargin","verticalMargin","labelMarginLeft","labelMarginTop","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","compoundLabelMarginLeft","compoundLabelMarginTop","row","maxHeight","lnode","minWidth","horizontalOrg","verticalOrg","horizontalRatio","verticalRatio","bestOrg","ratio","members","favorHorizontalDim","verticalPadding","horizontalPadding","membersSize","totalWidth","totalHeight","maxWidth","averageWidth","averageHeight","delta","horizontalCountDouble","horizontalCount","idealWidth","tilingCompareBy","getNodeArea","n","areaCompareFcn","n1","n2","cmpBy","sumCenterX","sumCenterY","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","lastRowIndex","lastRowWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","relativePosition","prunedNodesInStep","lengthOfPrunedNodesInStep","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","dX","dY","pred1","processed","constraints","idToNodeMap","nodeIndexes","xCoords","yCoords","calculatePositionDiff","pos1","pos2","calculateAvgPosition","nodeIdSet","xPosSum","yPosSum","findAppropriatePositionForRelativePlacement","direction","dummyPositions","componentSources","setUnion","setA","setB","union","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","elem","err","inDegrees","adjacent","positionMap","pastMap","fixedIds","position","fixedId","_position","_loop","fixedPosition","sinkNodes","_components","isFixedComponent","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","isExist","existAt","ele","minBefore","minAfter","maxBefore","maxAfter","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","posBefore","posAfter","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_iterator4","_step4","_nodeId","applyReflectionForRelativePlacement","relativePlacementConstraints","reflectOnY","notReflectOnY","reflectOnX","notReflectOnX","findComponents","_currentNode","dagToUndirected","dag","undirected","dagToReversed","reversed","targetMatrix","sourceMatrix","standardTransformation","reflectionType","dagUndirected","verticalAlign","_loop2","alignmentSet","xPos","horizontalAlign","_loop3","yPos","largestComponentSize","largestComponentIndex","constraintsInlargestComponent","positionMapHorizontal","positionMapVertical","transformationMatrix","targetMatrixTranspose","sourceMatrixTranspose","tempMatrix","SVDResult","temp3","translationAmount","posInTheory","posDesired","posDiff","xAlign","_loop4","yAlign","_loop5","dummyToNodeForVerticalAlignment","dummyToNodeForHorizontalAlignment","dummyPositionsForVerticalAlignment","dummyPositionsForHorizontalAlignment","fixedNodesOnHorizontal","fixedNodesOnVertical","_loop6","_loop7","dagOnHorizontal","dagOnVertical","_loop8","sourceId","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_iterator5","_step5","undirectedOnHorizontal","undirectedOnVertical","componentsOnHorizontal","componentsOnVertical","reversedDagOnHorizontal","reversedDagOnVertical","componentSourcesOnHorizontal","componentSourcesOnVertical","_loop9","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_iterator6","_step6","_loop10","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_iterator7","_step7","_node","__webpack_module_cache__","cachedModule","__webpack_exports__","__WEBPACK_EXTERNAL_MODULE__140__","tgt","_len","srcs","_key","src","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","auxiliary","nodesMap","roots","eles","topMostNodes","visitedTopMostNodes","minDegreeNode","minDegree","isConnected","nodesConnectedToDummy","cmpt","childrenOfCurrentNode","neighborNodes","neighborNode","originalCenter","componentResult","options","minXCoord","maxXCoord","minYCoord","maxYCoord","_ref","_ref2","cyNode","nodeBB","leftX","rightX","topY","bottomY","diffOnX","diffOnY","item","_diffOnX","_diffOnY","boundingBox","parentsWithoutChildren","check","aux","coseLayout","spectralResult","idToLNode","isFn","fn","optFn","opt","processChildrenList","children_of_children","theNode","dimensions","parentInfo","theNewGraph","processEdges","idealLengthTotal","edgeCount","e1","processConstraints","assign","_require","spectralLayout","_require2","defaults","coseResult","componentCenters","constraintExist","layUtil","packingEnabled","toBeTiledNodes","_xCoords","_yCoords","tempSpectralResult","indexesToBeDeleted","_boundingBox","componentsEvaluated","subgraphs","hiddenEles","subgraph","nodeIndex","sourceNodeIndex","targetNodeIndex","sourceCenter","targetCenter","_parentInfo","shiftResult","newXCoords","newYCoords","_count","nodeRectangle","getPositions","pos","_pos","_hiddenEles","parentNodes","parentChildMap","allNodesNeighborhood","samplesColumn","minDistancesColumn","PHI","nodeSize","infinity","small","piTol","samplingType","nodeSeparation","sampleSize","randomSampleCR","sample","flag","BFS","pivot","samplingMethod","front","back","max_dist","max_ind","allBFS","a_q","a_u","a_v","max_s","a_Sig","powerIteration","theta1","theta2","Y1","Y2","V1","V2","previous","ele2","eleIndex","disconnectedId","iterator","firstNodePos","firstNodeWidth","secondNodeWidth","impl","register","cytoscape","ArchitectureDirectionName","ArchitectureDirectionArrow","__name","ArchitectureDirectionArrowShift","orig","arrowSize","_arrowSize","getOppositeArchitectureDirection","isArchitectureDirectionX","isArchitectureDirection","isArchitectureDirectionY","isArchitectureDirectionXY","aX_bY","aY_bX","isArchitecturePairXY","pair","isValidArchitectureDirectionPair","getArchitectureDirectionPair","sourceDir","targetDir","shiftPositionByArchitectureDirectionPair","getArchitectureDirectionXYFactors","getArchitectureDirectionAlignment","isArchitectureService","isArchitectureJunction","edgeData","DEFAULT_ARCHITECTURE_CONFIG","defaultConfig_default","ArchitectureDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","clear","icon","title","iconText","_b","_c","lhsId","rhsId","lhsDir","rhsDir","lhsInto","rhsInto","lhsGroup","rhsGroup","lhsGroupId","rhsGroupId","groupAlignments","adjList","prevOuter","service","prevInner","alignment","firstId","notVisited","startingId","spatialMap","adj","posX","posY","dir","spatialMaps","element","cleanAndMerge","getConfig","field","populateDb","ast","db","populateCommonDb","group","parser","input","parse","log","getStyles","architectureStyles_default","wrapIcon","architectureIcons","unknownIcon","drawEdges","edgesEl","padding","iconSize","halfIconSize","halfArrowSize","sourceArrow","sourceGroup","targetArrow","targetGroup","label","midX","midY","endX","endY","groupEdgeShift","getEdgeId","xShift","yShift","axis","textElem","createText","getConfig2","bboxOrig","bboxNew","drawGroups","groupsEl","groupIconSize","fontSize","groupsNode","groupLabelContainer","shiftedX1","shiftedY1","bkgElem","getIconSVG","drawServices","services","config","serviceElem","divElem","sanitizeText","drawJunctions","junctions","junction","junctionElem","registerIconPacks","fcose","addServices","addJunctions","positionNodes","addGroups","groups","addEdges","parsedEdge","edgeType","getAlignments","flattenAlignments","alignmentObj","alignmentDir","alignments2","cnt","aGroupId","aNodeIds","bGroupId","bNodeIds","keyA","keyB","alignments","horizontalAlignments","verticalAlignments","nodeGroup","horizontal","vertical","prevHoriz","prevVert","horiz","vert","getRelativeConstraints","relativeConstraints","posToStr","strToPos","invSpatialMap","curr","currId","currPos","newPos","newId","layoutArchitecture","resolve","renderEl","select","alignmentConstraint","relativePlacementConstraint","parentA","parentB","getSegmentWeights","pointX","pointY","W","D","sX","sY","tX","tY","distAB","delta1","delta2","sEP","tEP","weights","distances","draw","text","_version","diagObj","ds","svg","selectSvgElement","edgesElem","servicesElem","groupElem","setupGraphViewbox","renderer","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js b/massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js similarity index 82% rename from massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js rename to massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js index 3f2f2d6bb..48a3e5b5b 100644 --- a/massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js +++ b/massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js @@ -1,2 +1,2 @@ -import{at as n}from"./index-yx4Z55Qu.js";var p=(function(){function o(t,i,e){e===void 0&&(e={}),this.status="idle",this.options=e,this.sandboxSetup=i,this.iframeSelector=t}return o.prototype.updateOptions=function(t){n(this.options,t)||(this.options=t,this.updateSandbox())},o.prototype.updateSandbox=function(t,i){throw t===void 0&&(t=this.sandboxSetup),Error("Method not implemented")},o.prototype.destroy=function(){throw Error("Method not implemented")},o.prototype.dispatch=function(t){throw Error("Method not implemented")},o.prototype.listen=function(t){throw Error("Method not implemented")},o})();export{p as S}; -//# sourceMappingURL=base-80a1f760-Byw-bEXF.js.map +import{at as n}from"./index-DbSnkTMx.js";var p=(function(){function o(t,i,e){e===void 0&&(e={}),this.status="idle",this.options=e,this.sandboxSetup=i,this.iframeSelector=t}return o.prototype.updateOptions=function(t){n(this.options,t)||(this.options=t,this.updateSandbox())},o.prototype.updateSandbox=function(t,i){throw t===void 0&&(t=this.sandboxSetup),Error("Method not implemented")},o.prototype.destroy=function(){throw Error("Method not implemented")},o.prototype.dispatch=function(t){throw Error("Method not implemented")},o.prototype.listen=function(t){throw Error("Method not implemented")},o})();export{p as S}; +//# sourceMappingURL=base-80a1f760-CNB8plsN.js.map diff --git a/massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js.map b/massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js.map similarity index 97% rename from massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js.map rename to massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js.map index 5d2af097b..bcf4dacbf 100644 --- a/massgen/frontend/web/static/assets/base-80a1f760-Byw-bEXF.js.map +++ b/massgen/frontend/web/static/assets/base-80a1f760-CNB8plsN.js.map @@ -1 +1 @@ -{"version":3,"file":"base-80a1f760-Byw-bEXF.js","sources":["../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/base-80a1f760.mjs"],"sourcesContent":["import { dequal } from 'dequal';\n\nvar SandpackClient = /** @class */ (function () {\n function SandpackClient(iframeSelector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n this.status = \"idle\";\n this.options = options;\n this.sandboxSetup = sandboxSetup;\n this.iframeSelector = iframeSelector;\n }\n /**\n * Clients handles\n */\n SandpackClient.prototype.updateOptions = function (options) {\n if (!dequal(this.options, options)) {\n this.options = options;\n this.updateSandbox();\n }\n };\n SandpackClient.prototype.updateSandbox = function (_sandboxSetup, _isInitializationCompile) {\n if (_sandboxSetup === void 0) { _sandboxSetup = this.sandboxSetup; }\n throw Error(\"Method not implemented\");\n };\n SandpackClient.prototype.destroy = function () {\n throw Error(\"Method not implemented\");\n };\n /**\n * Bundler communication\n */\n SandpackClient.prototype.dispatch = function (_message) {\n throw Error(\"Method not implemented\");\n };\n SandpackClient.prototype.listen = function (_listener) {\n throw Error(\"Method not implemented\");\n };\n return SandpackClient;\n}());\n\nexport { SandpackClient as S };\n"],"names":["SandpackClient","iframeSelector","sandboxSetup","options","dequal","_sandboxSetup","_isInitializationCompile","_message","_listener"],"mappings":"yCAEG,IAACA,GAAgC,UAAY,CAC5C,SAASA,EAAeC,EAAgBC,EAAcC,EAAS,CACvDA,IAAY,SAAUA,EAAU,CAAA,GACpC,KAAK,OAAS,OACd,KAAK,QAAUA,EACf,KAAK,aAAeD,EACpB,KAAK,eAAiBD,CAC1B,CAIA,OAAAD,EAAe,UAAU,cAAgB,SAAUG,EAAS,CACnDC,EAAO,KAAK,QAASD,CAAO,IAC7B,KAAK,QAAUA,EACf,KAAK,cAAa,EAE1B,EACAH,EAAe,UAAU,cAAgB,SAAUK,EAAeC,EAA0B,CACxF,MAAID,IAAkB,SAAUA,EAAgB,KAAK,cAC/C,MAAM,wBAAwB,CACxC,EACAL,EAAe,UAAU,QAAU,UAAY,CAC3C,MAAM,MAAM,wBAAwB,CACxC,EAIAA,EAAe,UAAU,SAAW,SAAUO,EAAU,CACpD,MAAM,MAAM,wBAAwB,CACxC,EACAP,EAAe,UAAU,OAAS,SAAUQ,EAAW,CACnD,MAAM,MAAM,wBAAwB,CACxC,EACOR,CACX,GAAC","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"base-80a1f760-CNB8plsN.js","sources":["../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/base-80a1f760.mjs"],"sourcesContent":["import { dequal } from 'dequal';\n\nvar SandpackClient = /** @class */ (function () {\n function SandpackClient(iframeSelector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n this.status = \"idle\";\n this.options = options;\n this.sandboxSetup = sandboxSetup;\n this.iframeSelector = iframeSelector;\n }\n /**\n * Clients handles\n */\n SandpackClient.prototype.updateOptions = function (options) {\n if (!dequal(this.options, options)) {\n this.options = options;\n this.updateSandbox();\n }\n };\n SandpackClient.prototype.updateSandbox = function (_sandboxSetup, _isInitializationCompile) {\n if (_sandboxSetup === void 0) { _sandboxSetup = this.sandboxSetup; }\n throw Error(\"Method not implemented\");\n };\n SandpackClient.prototype.destroy = function () {\n throw Error(\"Method not implemented\");\n };\n /**\n * Bundler communication\n */\n SandpackClient.prototype.dispatch = function (_message) {\n throw Error(\"Method not implemented\");\n };\n SandpackClient.prototype.listen = function (_listener) {\n throw Error(\"Method not implemented\");\n };\n return SandpackClient;\n}());\n\nexport { SandpackClient as S };\n"],"names":["SandpackClient","iframeSelector","sandboxSetup","options","dequal","_sandboxSetup","_isInitializationCompile","_message","_listener"],"mappings":"yCAEG,IAACA,GAAgC,UAAY,CAC5C,SAASA,EAAeC,EAAgBC,EAAcC,EAAS,CACvDA,IAAY,SAAUA,EAAU,CAAA,GACpC,KAAK,OAAS,OACd,KAAK,QAAUA,EACf,KAAK,aAAeD,EACpB,KAAK,eAAiBD,CAC1B,CAIA,OAAAD,EAAe,UAAU,cAAgB,SAAUG,EAAS,CACnDC,EAAO,KAAK,QAASD,CAAO,IAC7B,KAAK,QAAUA,EACf,KAAK,cAAa,EAE1B,EACAH,EAAe,UAAU,cAAgB,SAAUK,EAAeC,EAA0B,CACxF,MAAID,IAAkB,SAAUA,EAAgB,KAAK,cAC/C,MAAM,wBAAwB,CACxC,EACAL,EAAe,UAAU,QAAU,UAAY,CAC3C,MAAM,MAAM,wBAAwB,CACxC,EAIAA,EAAe,UAAU,SAAW,SAAUO,EAAU,CACpD,MAAM,MAAM,wBAAwB,CACxC,EACAP,EAAe,UAAU,OAAS,SAAUQ,EAAW,CACnD,MAAM,MAAM,wBAAwB,CACxC,EACOR,CACX,GAAC","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js b/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js similarity index 99% rename from massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js rename to massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js index 9cb1af3b7..5f534b236 100644 --- a/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js +++ b/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js @@ -1,4 +1,4 @@ -import{g as de}from"./chunk-FMBD7UC4-LU2vPcC6.js";import{_ as d,E as st,d as R,e as ge,l as m,y as ue,A as pe,c as z,ai as fe,R as xe,S as ye,O as be,aj as Z,ak as Ht,al as we,u as et,k as me,am as Le,an as yt,i as bt,ao as Se}from"./index-yx4Z55Qu.js";import{c as ve}from"./clone-DEFp9e4A.js";import{G as Ee}from"./graph-4lxArx4u.js";import{c as _e}from"./channel-5fWG1b_w.js";import"./_baseUniq-LXHsPSjj.js";var wt=(function(){var e=d(function(N,x,g,p){for(g=g||{},p=N.length;p--;g[N[p]]=x);return g},"o"),t=[1,15],a=[1,7],i=[1,13],l=[1,14],s=[1,19],r=[1,16],n=[1,17],o=[1,18],u=[8,30],h=[8,10,21,28,29,30,31,39,43,46],y=[1,23],b=[1,24],L=[8,10,15,16,21,28,29,30,31,39,43,46],E=[8,10,15,16,21,27,28,29,30,31,39,43,46],D=[1,49],v={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:d(function(x,g,p,w,S,c,_){var f=c.length-1;switch(S){case 4:w.getLogger().debug("Rule: separator (NL) ");break;case 5:w.getLogger().debug("Rule: separator (Space) ");break;case 6:w.getLogger().debug("Rule: separator (EOF) ");break;case 7:w.getLogger().debug("Rule: hierarchy: ",c[f-1]),w.setHierarchy(c[f-1]);break;case 8:w.getLogger().debug("Stop NL ");break;case 9:w.getLogger().debug("Stop EOF ");break;case 10:w.getLogger().debug("Stop NL2 ");break;case 11:w.getLogger().debug("Stop EOF2 ");break;case 12:w.getLogger().debug("Rule: statement: ",c[f]),typeof c[f].length=="number"?this.$=c[f]:this.$=[c[f]];break;case 13:w.getLogger().debug("Rule: statement #2: ",c[f-1]),this.$=[c[f-1]].concat(c[f]);break;case 14:w.getLogger().debug("Rule: link: ",c[f],x),this.$={edgeTypeStr:c[f],label:""};break;case 15:w.getLogger().debug("Rule: LABEL link: ",c[f-3],c[f-1],c[f]),this.$={edgeTypeStr:c[f],label:c[f-1]};break;case 18:const A=parseInt(c[f]),O=w.generateId();this.$={id:O,type:"space",label:"",width:A,children:[]};break;case 23:w.getLogger().debug("Rule: (nodeStatement link node) ",c[f-2],c[f-1],c[f]," typestr: ",c[f-1].edgeTypeStr);const X=w.edgeStrToEdgeData(c[f-1].edgeTypeStr);this.$=[{id:c[f-2].id,label:c[f-2].label,type:c[f-2].type,directions:c[f-2].directions},{id:c[f-2].id+"-"+c[f].id,start:c[f-2].id,end:c[f].id,label:c[f-1].label,type:"edge",directions:c[f].directions,arrowTypeEnd:X,arrowTypeStart:"arrow_open"},{id:c[f].id,label:c[f].label,type:w.typeStr2Type(c[f].typeStr),directions:c[f].directions}];break;case 24:w.getLogger().debug("Rule: nodeStatement (abc88 node size) ",c[f-1],c[f]),this.$={id:c[f-1].id,label:c[f-1].label,type:w.typeStr2Type(c[f-1].typeStr),directions:c[f-1].directions,widthInColumns:parseInt(c[f],10)};break;case 25:w.getLogger().debug("Rule: nodeStatement (node) ",c[f]),this.$={id:c[f].id,label:c[f].label,type:w.typeStr2Type(c[f].typeStr),directions:c[f].directions,widthInColumns:1};break;case 26:w.getLogger().debug("APA123",this?this:"na"),w.getLogger().debug("COLUMNS: ",c[f]),this.$={type:"column-setting",columns:c[f]==="auto"?-1:parseInt(c[f])};break;case 27:w.getLogger().debug("Rule: id-block statement : ",c[f-2],c[f-1]),w.generateId(),this.$={...c[f-2],type:"composite",children:c[f-1]};break;case 28:w.getLogger().debug("Rule: blockStatement : ",c[f-2],c[f-1],c[f]);const P=w.generateId();this.$={id:P,type:"composite",label:"",children:c[f-1]};break;case 29:w.getLogger().debug("Rule: node (NODE_ID separator): ",c[f]),this.$={id:c[f]};break;case 30:w.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",c[f-1],c[f]),this.$={id:c[f-1],label:c[f].label,typeStr:c[f].typeStr,directions:c[f].directions};break;case 31:w.getLogger().debug("Rule: dirList: ",c[f]),this.$=[c[f]];break;case 32:w.getLogger().debug("Rule: dirList: ",c[f-1],c[f]),this.$=[c[f-1]].concat(c[f]);break;case 33:w.getLogger().debug("Rule: nodeShapeNLabel: ",c[f-2],c[f-1],c[f]),this.$={typeStr:c[f-2]+c[f],label:c[f-1]};break;case 34:w.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",c[f-3],c[f-2]," #3:",c[f-1],c[f]),this.$={typeStr:c[f-3]+c[f],label:c[f-2],directions:c[f-1]};break;case 35:case 36:this.$={type:"classDef",id:c[f-1].trim(),css:c[f].trim()};break;case 37:this.$={type:"applyClass",id:c[f-1].trim(),styleClass:c[f].trim()};break;case 38:this.$={type:"applyStyles",id:c[f-1].trim(),stylesStr:c[f].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:t,11:3,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{8:[1,20]},e(u,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:t,21:a,28:i,29:l,31:s,39:r,43:n,46:o}),e(h,[2,16],{14:22,15:y,16:b}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(L,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,31:s},{10:t,11:27,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},e(E,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},e(u,[2,13]),{26:35,31:s},{31:[2,14]},{17:[1,36]},e(L,[2,24]),{10:t,11:37,13:4,14:22,15:y,16:b,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},e(E,[2,30]),{18:[1,43]},{18:[1,44]},e(L,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{36:[1,47]},{33:48,34:D},{15:[1,50]},e(h,[2,27]),e(E,[2,33]),{38:[1,51]},{33:52,34:D,38:[2,31]},{31:[2,15]},e(E,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:d(function(x,g){if(g.recoverable)this.trace(x);else{var p=new Error(x);throw p.hash=g,p}},"parseError"),parse:d(function(x){var g=this,p=[0],w=[],S=[null],c=[],_=this.table,f="",A=0,O=0,X=2,P=1,J=c.slice.call(arguments,1),M=Object.create(this.lexer),Q={yy:{}};for(var ut in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ut)&&(Q.yy[ut]=this.yy[ut]);M.setInput(x,Q.yy),Q.yy.lexer=M,Q.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var pt=M.yylloc;c.push(pt);var oe=M.options&&M.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(H){p.length=p.length-2*H,S.length=S.length-H,c.length=c.length-H}d(he,"popStack");function Tt(){var H;return H=w.pop()||M.lex()||P,typeof H!="number"&&(H instanceof Array&&(w=H,H=w.pop()),H=g.symbols_[H]||H),H}d(Tt,"lex");for(var Y,$,U,ft,tt={},it,q,Ct,nt;;){if($=p[p.length-1],this.defaultActions[$]?U=this.defaultActions[$]:((Y===null||typeof Y>"u")&&(Y=Tt()),U=_[$]&&_[$][Y]),typeof U>"u"||!U.length||!U[0]){var xt="";nt=[];for(it in _[$])this.terminals_[it]&&it>X&&nt.push("'"+this.terminals_[it]+"'");M.showPosition?xt="Parse error on line "+(A+1)+`: +import{g as de}from"./chunk-FMBD7UC4-DgHqX2i6.js";import{_ as d,E as st,d as R,e as ge,l as m,y as ue,A as pe,c as z,ai as fe,R as xe,S as ye,O as be,aj as Z,ak as Ht,al as we,u as et,k as me,am as Le,an as yt,i as bt,ao as Se}from"./index-DbSnkTMx.js";import{c as ve}from"./clone-OwIowIht.js";import{G as Ee}from"./graph-ClFPgZSo.js";import{c as _e}from"./channel-B_f67D__.js";import"./_baseUniq-CR-Qd8A8.js";var wt=(function(){var e=d(function(N,x,g,p){for(g=g||{},p=N.length;p--;g[N[p]]=x);return g},"o"),t=[1,15],a=[1,7],i=[1,13],l=[1,14],s=[1,19],r=[1,16],n=[1,17],o=[1,18],u=[8,30],h=[8,10,21,28,29,30,31,39,43,46],y=[1,23],b=[1,24],L=[8,10,15,16,21,28,29,30,31,39,43,46],E=[8,10,15,16,21,27,28,29,30,31,39,43,46],D=[1,49],v={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:d(function(x,g,p,w,S,c,_){var f=c.length-1;switch(S){case 4:w.getLogger().debug("Rule: separator (NL) ");break;case 5:w.getLogger().debug("Rule: separator (Space) ");break;case 6:w.getLogger().debug("Rule: separator (EOF) ");break;case 7:w.getLogger().debug("Rule: hierarchy: ",c[f-1]),w.setHierarchy(c[f-1]);break;case 8:w.getLogger().debug("Stop NL ");break;case 9:w.getLogger().debug("Stop EOF ");break;case 10:w.getLogger().debug("Stop NL2 ");break;case 11:w.getLogger().debug("Stop EOF2 ");break;case 12:w.getLogger().debug("Rule: statement: ",c[f]),typeof c[f].length=="number"?this.$=c[f]:this.$=[c[f]];break;case 13:w.getLogger().debug("Rule: statement #2: ",c[f-1]),this.$=[c[f-1]].concat(c[f]);break;case 14:w.getLogger().debug("Rule: link: ",c[f],x),this.$={edgeTypeStr:c[f],label:""};break;case 15:w.getLogger().debug("Rule: LABEL link: ",c[f-3],c[f-1],c[f]),this.$={edgeTypeStr:c[f],label:c[f-1]};break;case 18:const A=parseInt(c[f]),O=w.generateId();this.$={id:O,type:"space",label:"",width:A,children:[]};break;case 23:w.getLogger().debug("Rule: (nodeStatement link node) ",c[f-2],c[f-1],c[f]," typestr: ",c[f-1].edgeTypeStr);const X=w.edgeStrToEdgeData(c[f-1].edgeTypeStr);this.$=[{id:c[f-2].id,label:c[f-2].label,type:c[f-2].type,directions:c[f-2].directions},{id:c[f-2].id+"-"+c[f].id,start:c[f-2].id,end:c[f].id,label:c[f-1].label,type:"edge",directions:c[f].directions,arrowTypeEnd:X,arrowTypeStart:"arrow_open"},{id:c[f].id,label:c[f].label,type:w.typeStr2Type(c[f].typeStr),directions:c[f].directions}];break;case 24:w.getLogger().debug("Rule: nodeStatement (abc88 node size) ",c[f-1],c[f]),this.$={id:c[f-1].id,label:c[f-1].label,type:w.typeStr2Type(c[f-1].typeStr),directions:c[f-1].directions,widthInColumns:parseInt(c[f],10)};break;case 25:w.getLogger().debug("Rule: nodeStatement (node) ",c[f]),this.$={id:c[f].id,label:c[f].label,type:w.typeStr2Type(c[f].typeStr),directions:c[f].directions,widthInColumns:1};break;case 26:w.getLogger().debug("APA123",this?this:"na"),w.getLogger().debug("COLUMNS: ",c[f]),this.$={type:"column-setting",columns:c[f]==="auto"?-1:parseInt(c[f])};break;case 27:w.getLogger().debug("Rule: id-block statement : ",c[f-2],c[f-1]),w.generateId(),this.$={...c[f-2],type:"composite",children:c[f-1]};break;case 28:w.getLogger().debug("Rule: blockStatement : ",c[f-2],c[f-1],c[f]);const P=w.generateId();this.$={id:P,type:"composite",label:"",children:c[f-1]};break;case 29:w.getLogger().debug("Rule: node (NODE_ID separator): ",c[f]),this.$={id:c[f]};break;case 30:w.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",c[f-1],c[f]),this.$={id:c[f-1],label:c[f].label,typeStr:c[f].typeStr,directions:c[f].directions};break;case 31:w.getLogger().debug("Rule: dirList: ",c[f]),this.$=[c[f]];break;case 32:w.getLogger().debug("Rule: dirList: ",c[f-1],c[f]),this.$=[c[f-1]].concat(c[f]);break;case 33:w.getLogger().debug("Rule: nodeShapeNLabel: ",c[f-2],c[f-1],c[f]),this.$={typeStr:c[f-2]+c[f],label:c[f-1]};break;case 34:w.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",c[f-3],c[f-2]," #3:",c[f-1],c[f]),this.$={typeStr:c[f-3]+c[f],label:c[f-2],directions:c[f-1]};break;case 35:case 36:this.$={type:"classDef",id:c[f-1].trim(),css:c[f].trim()};break;case 37:this.$={type:"applyClass",id:c[f-1].trim(),styleClass:c[f].trim()};break;case 38:this.$={type:"applyStyles",id:c[f-1].trim(),stylesStr:c[f].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:t,11:3,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{8:[1,20]},e(u,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:t,21:a,28:i,29:l,31:s,39:r,43:n,46:o}),e(h,[2,16],{14:22,15:y,16:b}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(L,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,31:s},{10:t,11:27,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},e(E,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},e(u,[2,13]),{26:35,31:s},{31:[2,14]},{17:[1,36]},e(L,[2,24]),{10:t,11:37,13:4,14:22,15:y,16:b,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:i,29:l,31:s,39:r,43:n,46:o},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},e(E,[2,30]),{18:[1,43]},{18:[1,44]},e(L,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{36:[1,47]},{33:48,34:D},{15:[1,50]},e(h,[2,27]),e(E,[2,33]),{38:[1,51]},{33:52,34:D,38:[2,31]},{31:[2,15]},e(E,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:d(function(x,g){if(g.recoverable)this.trace(x);else{var p=new Error(x);throw p.hash=g,p}},"parseError"),parse:d(function(x){var g=this,p=[0],w=[],S=[null],c=[],_=this.table,f="",A=0,O=0,X=2,P=1,J=c.slice.call(arguments,1),M=Object.create(this.lexer),Q={yy:{}};for(var ut in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ut)&&(Q.yy[ut]=this.yy[ut]);M.setInput(x,Q.yy),Q.yy.lexer=M,Q.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var pt=M.yylloc;c.push(pt);var oe=M.options&&M.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(H){p.length=p.length-2*H,S.length=S.length-H,c.length=c.length-H}d(he,"popStack");function Tt(){var H;return H=w.pop()||M.lex()||P,typeof H!="number"&&(H instanceof Array&&(w=H,H=w.pop()),H=g.symbols_[H]||H),H}d(Tt,"lex");for(var Y,$,U,ft,tt={},it,q,Ct,nt;;){if($=p[p.length-1],this.defaultActions[$]?U=this.defaultActions[$]:((Y===null||typeof Y>"u")&&(Y=Tt()),U=_[$]&&_[$][Y]),typeof U>"u"||!U.length||!U[0]){var xt="";nt=[];for(it in _[$])this.terminals_[it]&&it>X&&nt.push("'"+this.terminals_[it]+"'");M.showPosition?xt="Parse error on line "+(A+1)+`: `+M.showPosition()+` Expecting `+nt.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":xt="Parse error on line "+(A+1)+": Unexpected "+(Y==P?"end of input":"'"+(this.terminals_[Y]||Y)+"'"),this.parseError(xt,{text:M.match,token:this.terminals_[Y]||Y,line:M.yylineno,loc:pt,expected:nt})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+Y);switch(U[0]){case 1:p.push(Y),S.push(M.yytext),c.push(M.yylloc),p.push(U[1]),Y=null,O=M.yyleng,f=M.yytext,A=M.yylineno,pt=M.yylloc;break;case 2:if(q=this.productions_[U[1]][1],tt.$=S[S.length-q],tt._$={first_line:c[c.length-(q||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(q||1)].first_column,last_column:c[c.length-1].last_column},oe&&(tt._$.range=[c[c.length-(q||1)].range[0],c[c.length-1].range[1]]),ft=this.performAction.apply(tt,[f,O,A,Q.yy,U[1],S,c].concat(J)),typeof ft<"u")return ft;q&&(p=p.slice(0,-1*q*2),S=S.slice(0,-1*q),c=c.slice(0,-1*q)),p.push(this.productions_[U[1]][0]),S.push(tt.$),c.push(tt._$),Ct=_[p[p.length-2]][p[p.length-1]],p.push(Ct);break;case 3:return!0}}return!0},"parse")},T=(function(){var N={EOF:1,parseError:d(function(g,p){if(this.yy.parser)this.yy.parser.parseError(g,p);else throw new Error(g)},"parseError"),setInput:d(function(x,g){return this.yy=g||this.yy||{},this._input=x,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var x=this._input[0];this.yytext+=x,this.yyleng++,this.offset++,this.match+=x,this.matched+=x;var g=x.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),x},"input"),unput:d(function(x){var g=x.length,p=x.split(/(?:\r\n?|\n)/g);this._input=x+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var w=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),p.length-1&&(this.yylineno-=p.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:p?(p.length===w.length?this.yylloc.first_column:0)+w[w.length-p.length].length-p[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(x){this.unput(this.match.slice(x))},"less"),pastInput:d(function(){var x=this.matched.substr(0,this.matched.length-this.match.length);return(x.length>20?"...":"")+x.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var x=this.match;return x.length<20&&(x+=this._input.substr(0,20-x.length)),(x.substr(0,20)+(x.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var x=this.pastInput(),g=new Array(x.length+1).join("-");return x+this.upcomingInput()+` @@ -120,4 +120,4 @@ Expecting `+nt.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":xt="Parse error outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(a)} node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);const i=e.x,l=e.y,s=Math.abs(i-a.x),r=e.width/2;let n=a.xMath.abs(i-t.x)*o){let y=a.y{m.debug("abc88 cutPathAtIntersect",e,t);let a=[],i=e[0],l=!1;return e.forEach(s=>{if(!gr(t,s)&&!l){const r=ur(t,i,s);let n=!1;a.forEach(o=>{n=n||o.x===r.x&&o.y===r.y}),a.some(o=>o.x===r.x&&o.y===r.y)||a.push(r),l=!0}else i=s,l||a.push(s)}),a},"cutPathAtIntersect"),pr=d(function(e,t,a,i,l,s,r){let n=a.points;m.debug("abc88 InsertEdge: edge=",a,"e=",t);let o=!1;const u=s.node(t.v);var h=s.node(t.w);h!=null&&h.intersect&&(u!=null&&u.intersect)&&(n=n.slice(1,a.points.length-1),n.unshift(u.intersect(n[0])),n.push(h.intersect(n[n.length-1]))),a.toCluster&&(m.debug("to cluster abc88",i[a.toCluster]),n=zt(a.points,i[a.toCluster].node),o=!0),a.fromCluster&&(m.debug("from cluster abc88",i[a.fromCluster]),n=zt(n.reverse(),i[a.fromCluster].node).reverse(),o=!0);const y=n.filter(x=>!Number.isNaN(x.y));let b=ye;a.curve&&(l==="graph"||l==="flowchart")&&(b=a.curve);const{x:L,y:E}=fe(a),D=xe().x(L).y(E).curve(b);let v;switch(a.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(a.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}const T=e.append("path").attr("d",D(y)).attr("id",a.id).attr("class"," "+v+(a.classes?" "+a.classes:"")).attr("style",a.style);let k="";(z().flowchart.arrowMarkerAbsolute||z().state.arrowMarkerAbsolute)&&(k=be(!0)),cr(T,a,k,r,l);let N={};return o&&(N.updatedPath=n),N.originalPath=a.points,N},"insertEdge"),fr=d(e=>{const t=new Set;for(const a of e)switch(a){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(a);break}return t},"expandAndDeduplicateDirections"),xr=d((e,t,a)=>{const i=fr(e),l=2,s=t.height+2*a.padding,r=s/l,n=t.width+2*r+a.padding,o=a.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:r,y:0},{x:n/2,y:2*o},{x:n-r,y:0},{x:n,y:0},{x:n,y:-s/3},{x:n+2*o,y:-s/2},{x:n,y:-2*s/3},{x:n,y:-s},{x:n-r,y:-s},{x:n/2,y:-s-2*o},{x:r,y:-s},{x:0,y:-s},{x:0,y:-2*s/3},{x:-2*o,y:-s/2},{x:0,y:-s/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:r,y:0},{x:n-r,y:0},{x:n,y:-s/2},{x:n-r,y:-s},{x:r,y:-s},{x:0,y:-s/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:r,y:-s},{x:n-r,y:-s},{x:n,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:n,y:-r},{x:n,y:-s+r},{x:0,y:-s}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:n,y:0},{x:0,y:-r},{x:0,y:-s+r},{x:n,y:-s}]:i.has("right")&&i.has("left")?[{x:r,y:0},{x:r,y:-o},{x:n-r,y:-o},{x:n-r,y:0},{x:n,y:-s/2},{x:n-r,y:-s},{x:n-r,y:-s+o},{x:r,y:-s+o},{x:r,y:-s},{x:0,y:-s/2}]:i.has("up")&&i.has("down")?[{x:n/2,y:0},{x:0,y:-o},{x:r,y:-o},{x:r,y:-s+o},{x:0,y:-s+o},{x:n/2,y:-s},{x:n,y:-s+o},{x:n-r,y:-s+o},{x:n-r,y:-o},{x:n,y:-o}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:n,y:-r},{x:0,y:-s}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:n,y:0},{x:0,y:-s}]:i.has("left")&&i.has("up")?[{x:n,y:0},{x:0,y:-r},{x:n,y:-s}]:i.has("left")&&i.has("down")?[{x:n,y:0},{x:0,y:0},{x:n,y:-s}]:i.has("right")?[{x:r,y:-o},{x:r,y:-o},{x:n-r,y:-o},{x:n-r,y:0},{x:n,y:-s/2},{x:n-r,y:-s},{x:n-r,y:-s+o},{x:r,y:-s+o},{x:r,y:-s+o}]:i.has("left")?[{x:r,y:0},{x:r,y:-o},{x:n-r,y:-o},{x:n-r,y:-s+o},{x:r,y:-s+o},{x:r,y:-s},{x:0,y:-s/2}]:i.has("up")?[{x:r,y:-o},{x:r,y:-s+o},{x:0,y:-s+o},{x:n/2,y:-s},{x:n,y:-s+o},{x:n-r,y:-s+o},{x:n-r,y:-o}]:i.has("down")?[{x:n/2,y:0},{x:0,y:-o},{x:r,y:-o},{x:r,y:-s+o},{x:n-r,y:-s+o},{x:n-r,y:-o},{x:n,y:-o}]:[{x:0,y:0}]},"getArrowPoints");function Jt(e,t){return e.intersect(t)}d(Jt,"intersectNode");var yr=Jt;function Qt(e,t,a,i){var l=e.x,s=e.y,r=l-i.x,n=s-i.y,o=Math.sqrt(t*t*n*n+a*a*r*r),u=Math.abs(t*a*r/o);i.x0}d(vt,"sameSign");var wr=ee,mr=re;function re(e,t,a){var i=e.x,l=e.y,s=[],r=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(E){r=Math.min(r,E.x),n=Math.min(n,E.y)}):(r=Math.min(r,t.x),n=Math.min(n,t.y));for(var o=i-e.width/2-r,u=l-e.height/2-n,h=0;h1&&s.sort(function(E,D){var v=E.x-a.x,T=E.y-a.y,k=Math.sqrt(v*v+T*T),N=D.x-a.x,x=D.y-a.y,g=Math.sqrt(N*N+x*x);return k{var a=e.x,i=e.y,l=t.x-a,s=t.y-i,r=e.width/2,n=e.height/2,o,u;return Math.abs(s)*r>Math.abs(l)*n?(s<0&&(n=-n),o=s===0?0:n*l/s,u=n):(l<0&&(r=-r),o=r,u=l===0?0:r*s/l),{x:a+o,y:i+u}},"intersectRect"),Sr=Lr,C={node:yr,circle:br,ellipse:$t,polygon:mr,rect:Sr},F=d(async(e,t,a,i)=>{const l=z();let s;const r=t.useHtmlLabels||Z(l.flowchart.htmlLabels);a?s=a:s="node default";const n=e.insert("g").attr("class",s).attr("id",t.domId||t.id),o=n.insert("g").attr("class","label").attr("style",t.labelStyle);let u;t.labelText===void 0?u="":u=typeof t.labelText=="string"?t.labelText:t.labelText[0];const h=o.node();let y;t.labelType==="markdown"?y=Ht(o,bt(yt(u),l),{useHtmlLabels:r,width:t.width||l.flowchart.wrappingWidth,classes:"markdown-node-label"},l):y=h.appendChild(await j(bt(yt(u),l),t.labelStyle,!1,i));let b=y.getBBox();const L=t.padding/2;if(Z(l.flowchart.htmlLabels)){const E=y.children[0],D=R(y),v=E.getElementsByTagName("img");if(v){const T=u.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(k=>new Promise(N=>{function x(){if(k.style.display="flex",k.style.flexDirection="column",T){const g=l.fontSize?l.fontSize:window.getComputedStyle(document.body).fontSize,w=parseInt(g,10)*5+"px";k.style.minWidth=w,k.style.maxWidth=w}else k.style.width="100%";N(k)}d(x,"setupImage"),setTimeout(()=>{k.complete&&x()}),k.addEventListener("error",x),k.addEventListener("load",x)})))}b=E.getBoundingClientRect(),D.attr("width",b.width),D.attr("height",b.height)}return r?o.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"):o.attr("transform","translate(0, "+-b.height/2+")"),t.centerLabel&&o.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),o.insert("rect",":first-child"),{shapeSvg:n,bbox:b,halfPadding:L,label:o}},"labelHelper"),I=d((e,t)=>{const a=t.node().getBBox();e.width=a.width,e.height=a.height},"updateNodeBounds");function G(e,t,a,i){return e.insert("polygon",":first-child").attr("points",i.map(function(l){return l.x+","+l.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+a/2+")")}d(G,"insertPolygonShape");var vr=d(async(e,t)=>{t.useHtmlLabels||z().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:i,bbox:l,halfPadding:s}=await F(e,t,"node "+t.classes,!0);m.info("Classes = ",t.classes);const r=i.insert("rect",":first-child");return r.attr("rx",t.rx).attr("ry",t.ry).attr("x",-l.width/2-s).attr("y",-l.height/2-s).attr("width",l.width+t.padding).attr("height",l.height+t.padding),I(t,r),t.intersect=function(n){return C.rect(t,n)},i},"note"),Er=vr,At=d(e=>e?" "+e:"","formatClass"),K=d((e,t)=>`${t||"node default"}${At(e.classes)} ${At(e.class)}`,"getClassesFromNode"),Mt=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=l+s,n=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}];m.info("Question main (Circle)");const o=G(a,r,r,n);return o.attr("style",t.style),I(t,o),t.intersect=function(u){return m.warn("Intersect called"),C.polygon(t,n,u)},a},"question"),_r=d((e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=28,l=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return a.insert("polygon",":first-child").attr("points",l.map(function(r){return r.x+","+r.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(r){return C.circle(t,14,r)},a},"choice"),kr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=4,s=i.height+t.padding,r=s/l,n=i.width+2*r+t.padding,o=[{x:r,y:0},{x:n-r,y:0},{x:n,y:-s/2},{x:n-r,y:-s},{x:r,y:-s},{x:0,y:-s/2}],u=G(a,n,s,o);return u.attr("style",t.style),I(t,u),t.intersect=function(h){return C.polygon(t,o,h)},a},"hexagon"),Dr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,void 0,!0),l=2,s=i.height+2*t.padding,r=s/l,n=i.width+2*r+t.padding,o=xr(t.directions,i,t),u=G(a,n,s,o);return u.attr("style",t.style),I(t,u),t.intersect=function(h){return C.polygon(t,o,h)},a},"block_arrow"),Nr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:-s/2,y:0},{x:l,y:0},{x:l,y:-s},{x:-s/2,y:-s},{x:0,y:-s/2}];return G(a,l,s,r).attr("style",t.style),t.width=l+s,t.height=s,t.intersect=function(o){return C.polygon(t,r,o)},a},"rect_left_inv_arrow"),Tr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:-2*s/6,y:0},{x:l-s/6,y:0},{x:l+2*s/6,y:-s},{x:s/6,y:-s}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"lean_right"),Cr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:2*s/6,y:0},{x:l+s/6,y:0},{x:l-2*s/6,y:-s},{x:-s/6,y:-s}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"lean_left"),Ir=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:-2*s/6,y:0},{x:l+2*s/6,y:0},{x:l-s/6,y:-s},{x:s/6,y:-s}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"trapezoid"),Br=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:s/6,y:0},{x:l-s/6,y:0},{x:l+2*s/6,y:-s},{x:-2*s/6,y:-s}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"inv_trapezoid"),Or=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:0,y:0},{x:l+s/2,y:0},{x:l,y:-s/2},{x:l+s/2,y:-s},{x:0,y:-s}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"rect_right_inv_arrow"),Rr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=l/2,r=s/(2.5+l/50),n=i.height+r+t.padding,o="M 0,"+r+" a "+s+","+r+" 0,0,0 "+l+" 0 a "+s+","+r+" 0,0,0 "+-l+" 0 l 0,"+n+" a "+s+","+r+" 0,0,0 "+l+" 0 l 0,"+-n,u=a.attr("label-offset-y",r).insert("path",":first-child").attr("style",t.style).attr("d",o).attr("transform","translate("+-l/2+","+-(n/2+r)+")");return I(t,u),t.intersect=function(h){const y=C.rect(t,h),b=y.x-t.x;if(s!=0&&(Math.abs(b)t.height/2-r)){let L=r*r*(1-b*b/(s*s));L!=0&&(L=Math.sqrt(L)),L=r-L,h.y-t.y>0&&(L=-L),y.y+=L}return y},a},"cylinder"),zr=d(async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await F(e,t,"node "+t.classes+" "+t.class,!0),s=a.insert("rect",":first-child"),r=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,o=t.positioned?-r/2:-i.width/2-l,u=t.positioned?-n/2:-i.height/2-l;if(s.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",o).attr("y",u).attr("width",r).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(dt(s,t.props.borders,r,n),h.delete("borders")),h.forEach(y=>{m.warn(`Unknown node property ${y}`)})}return I(t,s),t.intersect=function(h){return C.rect(t,h)},a},"rect"),Ar=d(async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await F(e,t,"node "+t.classes,!0),s=a.insert("rect",":first-child"),r=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,o=t.positioned?-r/2:-i.width/2-l,u=t.positioned?-n/2:-i.height/2-l;if(s.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",o).attr("y",u).attr("width",r).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(dt(s,t.props.borders,r,n),h.delete("borders")),h.forEach(y=>{m.warn(`Unknown node property ${y}`)})}return I(t,s),t.intersect=function(h){return C.rect(t,h)},a},"composite"),Mr=d(async(e,t)=>{const{shapeSvg:a}=await F(e,t,"label",!0);m.trace("Classes = ",t.class);const i=a.insert("rect",":first-child"),l=0,s=0;if(i.attr("width",l).attr("height",s),a.attr("class","label edgeLabel"),t.props){const r=new Set(Object.keys(t.props));t.props.borders&&(dt(i,t.props.borders,l,s),r.delete("borders")),r.forEach(n=>{m.warn(`Unknown node property ${n}`)})}return I(t,i),t.intersect=function(r){return C.rect(t,r)},a},"labelRect");function dt(e,t,a,i){const l=[],s=d(n=>{l.push(n,0)},"addBorder"),r=d(n=>{l.push(0,n)},"skipBorder");t.includes("t")?(m.debug("add top border"),s(a)):r(a),t.includes("r")?(m.debug("add right border"),s(i)):r(i),t.includes("b")?(m.debug("add bottom border"),s(a)):r(a),t.includes("l")?(m.debug("add left border"),s(i)):r(i),e.attr("stroke-dasharray",l.join(" "))}d(dt,"applyNodePropertyBorders");var Fr=d(async(e,t)=>{let a;t.classes?a="node "+t.classes:a="node default";const i=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),s=i.insert("line"),r=i.insert("g").attr("class","label"),n=t.labelText.flat?t.labelText.flat():t.labelText;let o="";typeof n=="object"?o=n[0]:o=n,m.info("Label text abc79",o,n,typeof n=="object");const u=r.node().appendChild(await j(o,t.labelStyle,!0,!0));let h={width:0,height:0};if(Z(z().flowchart.htmlLabels)){const D=u.children[0],v=R(u);h=D.getBoundingClientRect(),v.attr("width",h.width),v.attr("height",h.height)}m.info("Text 2",n);const y=n.slice(1,n.length);let b=u.getBBox();const L=r.node().appendChild(await j(y.join?y.join("
"):y,t.labelStyle,!0,!0));if(Z(z().flowchart.htmlLabels)){const D=L.children[0],v=R(L);h=D.getBoundingClientRect(),v.attr("width",h.width),v.attr("height",h.height)}const E=t.padding/2;return R(L).attr("transform","translate( "+(h.width>b.width?0:(b.width-h.width)/2)+", "+(b.height+E+5)+")"),R(u).attr("transform","translate( "+(h.width{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.height+t.padding,s=i.width+l/4+t.padding,r=a.insert("rect",":first-child").attr("style",t.style).attr("rx",l/2).attr("ry",l/2).attr("x",-s/2).attr("y",-l/2).attr("width",s).attr("height",l);return I(t,r),t.intersect=function(n){return C.rect(t,n)},a},"stadium"),Pr=d(async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await F(e,t,K(t,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),m.info("Circle main"),I(t,s),t.intersect=function(r){return m.info("Circle intersect",t,i.width/2+l,r),C.circle(t,i.width/2+l,r)},a},"circle"),Yr=d(async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await F(e,t,K(t,void 0),!0),s=5,r=a.insert("g",":first-child"),n=r.insert("circle"),o=r.insert("circle");return r.attr("class",t.class),n.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l+s).attr("width",i.width+t.padding+s*2).attr("height",i.height+t.padding+s*2),o.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),m.info("DoubleCircle main"),I(t,n),t.intersect=function(u){return m.info("DoubleCircle intersect",t,i.width/2+l+s,u),C.circle(t,i.width/2+l+s,u)},a},"doublecircle"),Hr=d(async(e,t)=>{const{shapeSvg:a,bbox:i}=await F(e,t,K(t,void 0),!0),l=i.width+t.padding,s=i.height+t.padding,r=[{x:0,y:0},{x:l,y:0},{x:l,y:-s},{x:0,y:-s},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-s},{x:-8,y:-s},{x:-8,y:0}],n=G(a,l,s,r);return n.attr("style",t.style),I(t,n),t.intersect=function(o){return C.polygon(t,r,o)},a},"subroutine"),Kr=d((e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),I(t,i),t.intersect=function(l){return C.circle(t,7,l)},a},"start"),Ft=d((e,t,a)=>{const i=e.insert("g").attr("class","node default").attr("id",t.domId||t.id);let l=70,s=10;a==="LR"&&(l=10,s=70);const r=i.append("rect").attr("x",-1*l/2).attr("y",-1*s/2).attr("width",l).attr("height",s).attr("class","fork-join");return I(t,r),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(n){return C.rect(t,n)},i},"forkJoin"),Xr=d((e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child"),l=a.insert("circle",":first-child");return l.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),I(t,l),t.intersect=function(s){return C.circle(t,7,s)},a},"end"),Ur=d(async(e,t)=>{var S;const a=t.padding/2,i=4,l=8;let s;t.classes?s="node "+t.classes:s="node default";const r=e.insert("g").attr("class",s).attr("id",t.domId||t.id),n=r.insert("rect",":first-child"),o=r.insert("line"),u=r.insert("line");let h=0,y=i;const b=r.insert("g").attr("class","label");let L=0;const E=(S=t.classData.annotations)==null?void 0:S[0],D=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",v=b.node().appendChild(await j(D,t.labelStyle,!0,!0));let T=v.getBBox();if(Z(z().flowchart.htmlLabels)){const c=v.children[0],_=R(v);T=c.getBoundingClientRect(),_.attr("width",T.width),_.attr("height",T.height)}t.classData.annotations[0]&&(y+=T.height+i,h+=T.width);let k=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(z().flowchart.htmlLabels?k+="<"+t.classData.type+">":k+="<"+t.classData.type+">");const N=b.node().appendChild(await j(k,t.labelStyle,!0,!0));R(N).attr("class","classTitle");let x=N.getBBox();if(Z(z().flowchart.htmlLabels)){const c=N.children[0],_=R(N);x=c.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}y+=x.height+i,x.width>h&&(h=x.width);const g=[];t.classData.members.forEach(async c=>{const _=c.getDisplayDetails();let f=_.displayText;z().flowchart.htmlLabels&&(f=f.replace(//g,">"));const A=b.node().appendChild(await j(f,_.cssStyle?_.cssStyle:t.labelStyle,!0,!0));let O=A.getBBox();if(Z(z().flowchart.htmlLabels)){const X=A.children[0],P=R(A);O=X.getBoundingClientRect(),P.attr("width",O.width),P.attr("height",O.height)}O.width>h&&(h=O.width),y+=O.height+i,g.push(A)}),y+=l;const p=[];if(t.classData.methods.forEach(async c=>{const _=c.getDisplayDetails();let f=_.displayText;z().flowchart.htmlLabels&&(f=f.replace(//g,">"));const A=b.node().appendChild(await j(f,_.cssStyle?_.cssStyle:t.labelStyle,!0,!0));let O=A.getBBox();if(Z(z().flowchart.htmlLabels)){const X=A.children[0],P=R(A);O=X.getBoundingClientRect(),P.attr("width",O.width),P.attr("height",O.height)}O.width>h&&(h=O.width),y+=O.height+i,p.push(A)}),y+=l,E){let c=(h-T.width)/2;R(v).attr("transform","translate( "+(-1*h/2+c)+", "+-1*y/2+")"),L=T.height+i}let w=(h-x.width)/2;return R(N).attr("transform","translate( "+(-1*h/2+w)+", "+(-1*y/2+L)+")"),L+=x.height+i,o.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+L).attr("y2",-y/2-a+l+L),L+=l,g.forEach(c=>{R(c).attr("transform","translate( "+-h/2+", "+(-1*y/2+L+l/2)+")");const _=c==null?void 0:c.getBBox();L+=((_==null?void 0:_.height)??0)+i}),L+=l,u.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+L).attr("y2",-y/2-a+l+L),L+=l,p.forEach(c=>{R(c).attr("transform","translate( "+-h/2+", "+(-1*y/2+L)+")");const _=c==null?void 0:c.getBBox();L+=((_==null?void 0:_.height)??0)+i}),n.attr("style",t.style).attr("class","outer title-state").attr("x",-h/2-a).attr("y",-(y/2)-a).attr("width",h+t.padding).attr("height",y+t.padding),I(t,n),t.intersect=function(c){return C.rect(t,c)},r},"class_box"),Wt={rhombus:Mt,composite:Ar,question:Mt,rect:zr,labelRect:Mr,rectWithTitle:Fr,choice:_r,circle:Pr,doublecircle:Yr,stadium:Wr,hexagon:kr,block_arrow:Dr,rect_left_inv_arrow:Nr,lean_right:Tr,lean_left:Cr,trapezoid:Ir,inv_trapezoid:Br,rect_right_inv_arrow:Or,cylinder:Rr,start:Kr,end:Xr,note:Er,subroutine:Hr,fork:Ft,join:Ft,class_box:Ur},ct={},ae=d(async(e,t,a)=>{let i,l;if(t.link){let s;z().securityLevel==="sandbox"?s="_top":t.linkTarget&&(s=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",s),l=await Wt[t.shape](i,t,a)}else l=await Wt[t.shape](e,t,a),i=l;return t.tooltip&&l.attr("title",t.tooltip),t.class&&l.attr("class","node default "+t.class),ct[t.id]=i,t.haveCallback&&ct[t.id].attr("class",ct[t.id].attr("class")+" clickable"),i},"insertNode"),jr=d(e=>{const t=ct[e.id];m.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");const a=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-a)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},"positionNode");function Nt(e,t,a=!1){var b,L,E;const i=e;let l="default";(((b=i==null?void 0:i.classes)==null?void 0:b.length)||0)>0&&(l=((i==null?void 0:i.classes)??[]).join(" ")),l=l+" flowchart-label";let s=0,r="",n;switch(i.type){case"round":s=5,r="rect";break;case"composite":s=0,r="composite",n=0;break;case"square":r="rect";break;case"diamond":r="question";break;case"hexagon":r="hexagon";break;case"block_arrow":r="block_arrow";break;case"odd":r="rect_left_inv_arrow";break;case"lean_right":r="lean_right";break;case"lean_left":r="lean_left";break;case"trapezoid":r="trapezoid";break;case"inv_trapezoid":r="inv_trapezoid";break;case"rect_left_inv_arrow":r="rect_left_inv_arrow";break;case"circle":r="circle";break;case"ellipse":r="ellipse";break;case"stadium":r="stadium";break;case"subroutine":r="subroutine";break;case"cylinder":r="cylinder";break;case"group":r="rect";break;case"doublecircle":r="doublecircle";break;default:r="rect"}const o=Se((i==null?void 0:i.styles)??[]),u=i.label,h=i.size??{width:0,height:0,x:0,y:0};return{labelStyle:o.labelStyle,shape:r,labelText:u,rx:s,ry:s,class:l,style:o.style,id:i.id,directions:i.directions,width:h.width,height:h.height,x:h.x,y:h.y,positioned:a,intersect:void 0,type:i.type,padding:n??((E=(L=st())==null?void 0:L.block)==null?void 0:E.padding)??0}}d(Nt,"getNodeFromBlock");async function se(e,t,a){const i=Nt(t,a,!1);if(i.type==="group")return;const l=st(),s=await ae(e,i,{config:l}),r=s.node().getBBox(),n=a.getBlock(i.id);n.size={width:r.width,height:r.height,x:0,y:0,node:s},a.setBlock(n),s.remove()}d(se,"calculateBlockSize");async function ie(e,t,a){const i=Nt(t,a,!0);if(a.getBlock(i.id).type!=="space"){const s=st();await ae(e,i,{config:s}),t.intersect=i==null?void 0:i.intersect,jr(i)}}d(ie,"insertBlockPositioned");async function gt(e,t,a,i){for(const l of t)await i(e,l,a),l.children&&await gt(e,l.children,a,i)}d(gt,"performOperations");async function ne(e,t,a){await gt(e,t,a,se)}d(ne,"calculateBlockSizes");async function le(e,t,a){await gt(e,t,a,ie)}d(le,"insertBlocks");async function ce(e,t,a,i,l){const s=new Ee({multigraph:!0,compound:!0});s.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const r of a)r.size&&s.setNode(r.id,{width:r.size.width,height:r.size.height,intersect:r.intersect});for(const r of t)if(r.start&&r.end){const n=i.getBlock(r.start),o=i.getBlock(r.end);if(n!=null&&n.size&&(o!=null&&o.size)){const u=n.size,h=o.size,y=[{x:u.x,y:u.y},{x:u.x+(h.x-u.x)/2,y:u.y+(h.y-u.y)/2},{x:h.x,y:h.y}];pr(e,{v:r.start,w:r.end,name:r.id},{...r,arrowTypeEnd:r.arrowTypeEnd,arrowTypeStart:r.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",s,l),r.label&&(await hr(e,{...r,label:r.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:r.arrowTypeEnd,arrowTypeStart:r.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),dr({...r,x:y[1].x,y:y[1].y},{originalPath:y}))}}}d(ce,"insertEdges");var Vr=d(function(e,t){return t.db.getClasses()},"getClasses"),Gr=d(async function(e,t,a,i){const{securityLevel:l,block:s}=st(),r=i.db;let n;l==="sandbox"&&(n=R("#i"+t));const o=l==="sandbox"?R(n.nodes()[0].contentDocument.body):R("body"),u=l==="sandbox"?o.select(`[id="${t}"]`):R(`[id="${t}"]`);ir(u,["point","circle","cross"],i.type,t);const y=r.getBlocks(),b=r.getBlocksFlat(),L=r.getEdges(),E=u.insert("g").attr("class","block");await ne(E,y,r);const D=Zt(r);if(await le(E,y,r),await ce(E,L,b,r,t),D){const v=D,T=Math.max(1,Math.round(.125*(v.width/v.height))),k=v.height+T+10,N=v.width+10,{useMaxWidth:x}=s;ge(u,k,N,!!x),m.debug("Here Bounds",D,v),u.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Zr={draw:Gr,getClasses:Vr},ra={parser:ke,db:Ue,renderer:Zr,styles:Ve};export{ra as diagram}; -//# sourceMappingURL=blockDiagram-VD42YOAC-8CX8JZj7.js.map +//# sourceMappingURL=blockDiagram-VD42YOAC-BaEv4oIa.js.map diff --git a/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js.map b/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js.map similarity index 99% rename from massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js.map rename to massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js.map index 6f2b055f6..0941e423b 100644 --- a/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-8CX8JZj7.js.map +++ b/massgen/frontend/web/static/assets/blockDiagram-VD42YOAC-BaEv4oIa.js.map @@ -1 +1 @@ -{"version":3,"file":"blockDiagram-VD42YOAC-8CX8JZj7.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-VD42YOAC.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n getLineFunctionsWithOffset\n} from \"./chunk-HN2XXSSU.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n createText,\n replaceIconSubstring\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n decodeEntities,\n getStylesFromArray,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n configureSvgSize,\n evaluate,\n getConfig,\n getConfig2,\n getUrl,\n sanitizeText\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/block/parser/block.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 15], $V1 = [1, 7], $V2 = [1, 13], $V3 = [1, 14], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 10, 21, 28, 29, 30, 31, 39, 43, 46], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 10, 15, 16, 21, 28, 29, 30, 31, 39, 43, 46], $Vd = [8, 10, 15, 16, 21, 27, 28, 29, 30, 31, 39, 43, 46], $Ve = [1, 49];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"spaceLines\": 3, \"SPACELINE\": 4, \"NL\": 5, \"separator\": 6, \"SPACE\": 7, \"EOF\": 8, \"start\": 9, \"BLOCK_DIAGRAM_KEY\": 10, \"document\": 11, \"stop\": 12, \"statement\": 13, \"link\": 14, \"LINK\": 15, \"START_LINK\": 16, \"LINK_LABEL\": 17, \"STR\": 18, \"nodeStatement\": 19, \"columnsStatement\": 20, \"SPACE_BLOCK\": 21, \"blockStatement\": 22, \"classDefStatement\": 23, \"cssClassStatement\": 24, \"styleStatement\": 25, \"node\": 26, \"SIZE\": 27, \"COLUMNS\": 28, \"id-block\": 29, \"end\": 30, \"NODE_ID\": 31, \"nodeShapeNLabel\": 32, \"dirList\": 33, \"DIR\": 34, \"NODE_DSTART\": 35, \"NODE_DEND\": 36, \"BLOCK_ARROW_START\": 37, \"BLOCK_ARROW_END\": 38, \"classDef\": 39, \"CLASSDEF_ID\": 40, \"CLASSDEF_STYLEOPTS\": 41, \"DEFAULT\": 42, \"class\": 43, \"CLASSENTITY_IDS\": 44, \"STYLECLASS\": 45, \"style\": 46, \"STYLE_ENTITY_IDS\": 47, \"STYLE_DEFINITION_DATA\": 48, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACELINE\", 5: \"NL\", 7: \"SPACE\", 8: \"EOF\", 10: \"BLOCK_DIAGRAM_KEY\", 15: \"LINK\", 16: \"START_LINK\", 17: \"LINK_LABEL\", 18: \"STR\", 21: \"SPACE_BLOCK\", 27: \"SIZE\", 28: \"COLUMNS\", 29: \"id-block\", 30: \"end\", 31: \"NODE_ID\", 34: \"DIR\", 35: \"NODE_DSTART\", 36: \"NODE_DEND\", 37: \"BLOCK_ARROW_START\", 38: \"BLOCK_ARROW_END\", 39: \"classDef\", 40: \"CLASSDEF_ID\", 41: \"CLASSDEF_STYLEOPTS\", 42: \"DEFAULT\", 43: \"class\", 44: \"CLASSENTITY_IDS\", 45: \"STYLECLASS\", 46: \"style\", 47: \"STYLE_ENTITY_IDS\", 48: \"STYLE_DEFINITION_DATA\" },\n productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [33, 1], [33, 2], [32, 3], [32, 4], [23, 3], [23, 3], [24, 3], [25, 3]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.getLogger().debug(\"Rule: separator (NL) \");\n break;\n case 5:\n yy.getLogger().debug(\"Rule: separator (Space) \");\n break;\n case 6:\n yy.getLogger().debug(\"Rule: separator (EOF) \");\n break;\n case 7:\n yy.getLogger().debug(\"Rule: hierarchy: \", $$[$0 - 1]);\n yy.setHierarchy($$[$0 - 1]);\n break;\n case 8:\n yy.getLogger().debug(\"Stop NL \");\n break;\n case 9:\n yy.getLogger().debug(\"Stop EOF \");\n break;\n case 10:\n yy.getLogger().debug(\"Stop NL2 \");\n break;\n case 11:\n yy.getLogger().debug(\"Stop EOF2 \");\n break;\n case 12:\n yy.getLogger().debug(\"Rule: statement: \", $$[$0]);\n typeof $$[$0].length === \"number\" ? this.$ = $$[$0] : this.$ = [$$[$0]];\n break;\n case 13:\n yy.getLogger().debug(\"Rule: statement #2: \", $$[$0 - 1]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 14:\n yy.getLogger().debug(\"Rule: link: \", $$[$0], yytext);\n this.$ = { edgeTypeStr: $$[$0], label: \"\" };\n break;\n case 15:\n yy.getLogger().debug(\"Rule: LABEL link: \", $$[$0 - 3], $$[$0 - 1], $$[$0]);\n this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] };\n break;\n case 18:\n const num = parseInt($$[$0]);\n const spaceId = yy.generateId();\n this.$ = { id: spaceId, type: \"space\", label: \"\", width: num, children: [] };\n break;\n case 23:\n yy.getLogger().debug(\"Rule: (nodeStatement link node) \", $$[$0 - 2], $$[$0 - 1], $$[$0], \" typestr: \", $$[$0 - 1].edgeTypeStr);\n const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr);\n this.$ = [\n { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions },\n { id: $$[$0 - 2].id + \"-\" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: \"edge\", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: \"arrow_open\" },\n { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions }\n ];\n break;\n case 24:\n yy.getLogger().debug(\"Rule: nodeStatement (abc88 node size) \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) };\n break;\n case 25:\n yy.getLogger().debug(\"Rule: nodeStatement (node) \", $$[$0]);\n this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 };\n break;\n case 26:\n yy.getLogger().debug(\"APA123\", this ? this : \"na\");\n yy.getLogger().debug(\"COLUMNS: \", $$[$0]);\n this.$ = { type: \"column-setting\", columns: $$[$0] === \"auto\" ? -1 : parseInt($$[$0]) };\n break;\n case 27:\n yy.getLogger().debug(\"Rule: id-block statement : \", $$[$0 - 2], $$[$0 - 1]);\n const id2 = yy.generateId();\n this.$ = { ...$$[$0 - 2], type: \"composite\", children: $$[$0 - 1] };\n break;\n case 28:\n yy.getLogger().debug(\"Rule: blockStatement : \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n const id = yy.generateId();\n this.$ = { id, type: \"composite\", label: \"\", children: $$[$0 - 1] };\n break;\n case 29:\n yy.getLogger().debug(\"Rule: node (NODE_ID separator): \", $$[$0]);\n this.$ = { id: $$[$0] };\n break;\n case 30:\n yy.getLogger().debug(\"Rule: node (NODE_ID nodeShapeNLabel separator): \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };\n break;\n case 31:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0]);\n this.$ = [$$[$0]];\n break;\n case 32:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0 - 1], $$[$0]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 33:\n yy.getLogger().debug(\"Rule: nodeShapeNLabel: \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] };\n break;\n case 34:\n yy.getLogger().debug(\"Rule: BLOCK_ARROW nodeShapeNLabel: \", $$[$0 - 3], $$[$0 - 2], \" #3:\", $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] };\n break;\n case 35:\n case 36:\n this.$ = { type: \"classDef\", id: $$[$0 - 1].trim(), css: $$[$0].trim() };\n break;\n case 37:\n this.$ = { type: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n this.$ = { type: \"applyStyles\", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() };\n break;\n }\n }, \"anonymous\"),\n table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 10: $V0, 11: 3, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 10: $V0, 21: $V1, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 31: $V4 }, { 10: $V0, 11: 27, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 40: [1, 28], 42: [1, 29] }, { 44: [1, 30] }, { 47: [1, 31] }, o($Vd, [2, 29], { 32: 32, 35: [1, 33], 37: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 31: $V4 }, { 31: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 10: $V0, 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 30: [1, 38] }, { 41: [1, 39] }, { 41: [1, 40] }, { 45: [1, 41] }, { 48: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 36: [1, 47] }, { 33: 48, 34: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 38: [1, 51] }, { 33: 52, 34: $Ve, 38: [2, 31] }, { 31: [2, 15] }, o($Vd, [2, 34]), { 38: [2, 32] }],\n defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n yy.getLogger().debug(\"Found block-beta\");\n return 10;\n break;\n case 1:\n yy.getLogger().debug(\"Found id-block\");\n return 29;\n break;\n case 2:\n yy.getLogger().debug(\"Found block\");\n return 10;\n break;\n case 3:\n yy.getLogger().debug(\".\", yy_.yytext);\n break;\n case 4:\n yy.getLogger().debug(\"_\", yy_.yytext);\n break;\n case 5:\n return 5;\n break;\n case 6:\n yy_.yytext = -1;\n return 28;\n break;\n case 7:\n yy_.yytext = yy_.yytext.replace(/columns\\s+/, \"\");\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 28;\n break;\n case 8:\n this.pushState(\"md_string\");\n break;\n case 9:\n return \"MD_STR\";\n break;\n case 10:\n this.popState();\n break;\n case 11:\n this.pushState(\"string\");\n break;\n case 12:\n yy.getLogger().debug(\"LEX: POPPING STR:\", yy_.yytext);\n this.popState();\n break;\n case 13:\n yy.getLogger().debug(\"LEX: STR end:\", yy_.yytext);\n return \"STR\";\n break;\n case 14:\n yy_.yytext = yy_.yytext.replace(/space\\:/, \"\");\n yy.getLogger().debug(\"SPACE NUM (LEX)\", yy_.yytext);\n return 21;\n break;\n case 15:\n yy_.yytext = \"1\";\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 21;\n break;\n case 16:\n return 42;\n break;\n case 17:\n return \"LINKSTYLE\";\n break;\n case 18:\n return \"INTERPOLATE\";\n break;\n case 19:\n this.pushState(\"CLASSDEF\");\n return 39;\n break;\n case 20:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n break;\n case 21:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 40;\n break;\n case 22:\n this.popState();\n return 41;\n break;\n case 23:\n this.pushState(\"CLASS\");\n return 43;\n break;\n case 24:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 44;\n break;\n case 25:\n this.popState();\n return 45;\n break;\n case 26:\n this.pushState(\"STYLE_STMNT\");\n return 46;\n break;\n case 27:\n this.popState();\n this.pushState(\"STYLE_DEFINITION\");\n return 47;\n break;\n case 28:\n this.popState();\n return 48;\n break;\n case 29:\n this.pushState(\"acc_title\");\n return \"acc_title\";\n break;\n case 30:\n this.popState();\n return \"acc_title_value\";\n break;\n case 31:\n this.pushState(\"acc_descr\");\n return \"acc_descr\";\n break;\n case 32:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 33:\n this.pushState(\"acc_descr_multiline\");\n break;\n case 34:\n this.popState();\n break;\n case 35:\n return \"acc_descr_multiline_value\";\n break;\n case 36:\n return 30;\n break;\n case 37:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 38:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 39:\n this.popState();\n yy.getLogger().debug(\"Lex: ))\");\n return \"NODE_DEND\";\n break;\n case 40:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 41:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 42:\n this.popState();\n yy.getLogger().debug(\"Lex: (-\");\n return \"NODE_DEND\";\n break;\n case 43:\n this.popState();\n yy.getLogger().debug(\"Lex: -)\");\n return \"NODE_DEND\";\n break;\n case 44:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 45:\n this.popState();\n yy.getLogger().debug(\"Lex: ]]\");\n return \"NODE_DEND\";\n break;\n case 46:\n this.popState();\n yy.getLogger().debug(\"Lex: (\");\n return \"NODE_DEND\";\n break;\n case 47:\n this.popState();\n yy.getLogger().debug(\"Lex: ])\");\n return \"NODE_DEND\";\n break;\n case 48:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n break;\n case 49:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n break;\n case 50:\n this.popState();\n yy.getLogger().debug(\"Lex: )]\");\n return \"NODE_DEND\";\n break;\n case 51:\n this.popState();\n yy.getLogger().debug(\"Lex: )\");\n return \"NODE_DEND\";\n break;\n case 52:\n this.popState();\n yy.getLogger().debug(\"Lex: ]>\");\n return \"NODE_DEND\";\n break;\n case 53:\n this.popState();\n yy.getLogger().debug(\"Lex: ]\");\n return \"NODE_DEND\";\n break;\n case 54:\n yy.getLogger().debug(\"Lexa: -)\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 55:\n yy.getLogger().debug(\"Lexa: (-\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 56:\n yy.getLogger().debug(\"Lexa: ))\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 57:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 58:\n yy.getLogger().debug(\"Lex: (((\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 59:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 60:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 61:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 62:\n yy.getLogger().debug(\"Lexc: >\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 63:\n yy.getLogger().debug(\"Lexa: ([\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 64:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 65:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 66:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 67:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 68:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 69:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 70:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 71:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 72:\n yy.getLogger().debug(\"Lexa: [\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 73:\n this.pushState(\"BLOCK_ARROW\");\n yy.getLogger().debug(\"LEX ARR START\");\n return 37;\n break;\n case 74:\n yy.getLogger().debug(\"Lex: NODE_ID\", yy_.yytext);\n return 31;\n break;\n case 75:\n yy.getLogger().debug(\"Lex: EOF\", yy_.yytext);\n return 8;\n break;\n case 76:\n this.pushState(\"md_string\");\n break;\n case 77:\n this.pushState(\"md_string\");\n break;\n case 78:\n return \"NODE_DESCR\";\n break;\n case 79:\n this.popState();\n break;\n case 80:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n break;\n case 81:\n yy.getLogger().debug(\"LEX ARR: Starting string\");\n this.pushState(\"string\");\n break;\n case 82:\n yy.getLogger().debug(\"LEX: NODE_DESCR:\", yy_.yytext);\n return \"NODE_DESCR\";\n break;\n case 83:\n yy.getLogger().debug(\"LEX POPPING\");\n this.popState();\n break;\n case 84:\n yy.getLogger().debug(\"Lex: =>BAE\");\n this.pushState(\"ARROW_DIR\");\n break;\n case 85:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (right): dir:\", yy_.yytext);\n return \"DIR\";\n break;\n case 86:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (left):\", yy_.yytext);\n return \"DIR\";\n break;\n case 87:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (x):\", yy_.yytext);\n return \"DIR\";\n break;\n case 88:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (y):\", yy_.yytext);\n return \"DIR\";\n break;\n case 89:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (up):\", yy_.yytext);\n return \"DIR\";\n break;\n case 90:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (down):\", yy_.yytext);\n return \"DIR\";\n break;\n case 91:\n yy_.yytext = \"]>\";\n yy.getLogger().debug(\"Lex (ARROW_DIR end):\", yy_.yytext);\n this.popState();\n this.popState();\n return \"BLOCK_ARROW_END\";\n break;\n case 92:\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n break;\n case 93:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 94:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 95:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 96:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 97:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 98:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 99:\n this.pushState(\"md_string\");\n break;\n case 100:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n return \"LINK_LABEL\";\n break;\n case 101:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n break;\n case 102:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 103:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 104:\n yy.getLogger().debug(\"Lex: COLON\", yy_.yytext);\n yy_.yytext = yy_.yytext.slice(1);\n return 27;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:block-beta\\b)/, /^(?:block:)/, /^(?:block\\b)/, /^(?:[\\s]+)/, /^(?:[\\n]+)/, /^(?:((\\u000D\\u000A)|(\\u000A)))/, /^(?:columns\\s+auto\\b)/, /^(?:columns\\s+[\\d]+)/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:space[:]\\d+)/, /^(?:space\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\s+)/, /^(?:DEFAULT\\s+)/, /^(?:\\w+\\s+)/, /^(?:[^\\n]*)/, /^(?:class\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:style\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:end\\b\\s*)/, /^(?:\\(\\(\\()/, /^(?:\\)\\)\\))/, /^(?:[\\)]\\))/, /^(?:\\}\\})/, /^(?:\\})/, /^(?:\\(-)/, /^(?:-\\))/, /^(?:\\(\\()/, /^(?:\\]\\])/, /^(?:\\()/, /^(?:\\]\\))/, /^(?:\\\\\\])/, /^(?:\\/\\])/, /^(?:\\)\\])/, /^(?:[\\)])/, /^(?:\\]>)/, /^(?:[\\]])/, /^(?:-\\))/, /^(?:\\(-)/, /^(?:\\)\\))/, /^(?:\\))/, /^(?:\\(\\(\\()/, /^(?:\\(\\()/, /^(?:\\{\\{)/, /^(?:\\{)/, /^(?:>)/, /^(?:\\(\\[)/, /^(?:\\()/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\[\\\\)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:\\[)/, /^(?:<\\[)/, /^(?:[^\\(\\[\\n\\-\\)\\{\\}\\s\\<\\>:]+)/, /^(?:$)/, /^(?:[\"][`])/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:\\]>\\s*\\()/, /^(?:,?\\s*right\\s*)/, /^(?:,?\\s*left\\s*)/, /^(?:,?\\s*x\\s*)/, /^(?:,?\\s*y\\s*)/, /^(?:,?\\s*up\\s*)/, /^(?:,?\\s*down\\s*)/, /^(?:\\)\\s*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[\"][`])/, /^(?:[\"])/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?::\\d+)/],\n conditions: { \"STYLE_DEFINITION\": { \"rules\": [28], \"inclusive\": false }, \"STYLE_STMNT\": { \"rules\": [27], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [22], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [20, 21], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [25], \"inclusive\": false }, \"CLASS\": { \"rules\": [24], \"inclusive\": false }, \"LLABEL\": { \"rules\": [99, 100, 101, 102, 103], \"inclusive\": false }, \"ARROW_DIR\": { \"rules\": [85, 86, 87, 88, 89, 90, 91], \"inclusive\": false }, \"BLOCK_ARROW\": { \"rules\": [76, 81, 84], \"inclusive\": false }, \"NODE\": { \"rules\": [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 77, 80], \"inclusive\": false }, \"md_string\": { \"rules\": [9, 10, 78, 79], \"inclusive\": false }, \"space\": { \"rules\": [], \"inclusive\": false }, \"string\": { \"rules\": [12, 13, 82, 83], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [34, 35], \"inclusive\": false }, \"acc_descr\": { \"rules\": [32], \"inclusive\": false }, \"acc_title\": { \"rules\": [30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 14, 15, 16, 17, 18, 19, 23, 26, 29, 31, 33, 36, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 92, 93, 94, 95, 96, 97, 98, 104], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar block_default = parser;\n\n// src/diagrams/block/blockDB.ts\nimport clone from \"lodash-es/clone.js\";\nvar blockDatabase = /* @__PURE__ */ new Map();\nvar edgeList = [];\nvar edgeCount = /* @__PURE__ */ new Map();\nvar COLOR_KEYWORD = \"color\";\nvar FILL_KEYWORD = \"fill\";\nvar BG_FILL = \"bgFill\";\nvar STYLECLASS_SEP = \",\";\nvar config = getConfig2();\nvar classes = /* @__PURE__ */ new Map();\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, config), \"sanitizeText\");\nvar addStyleClass = /* @__PURE__ */ __name(function(id, styleAttributes = \"\") {\n let foundClass = classes.get(id);\n if (!foundClass) {\n foundClass = { id, styles: [], textStyles: [] };\n classes.set(id, foundClass);\n }\n if (styleAttributes !== void 0 && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (RegExp(COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n}, \"addStyleClass\");\nvar addStyle2Node = /* @__PURE__ */ __name(function(id, styles = \"\") {\n const foundBlock = blockDatabase.get(id);\n if (styles !== void 0 && styles !== null) {\n foundBlock.styles = styles.split(STYLECLASS_SEP);\n }\n}, \"addStyle2Node\");\nvar setCssClass = /* @__PURE__ */ __name(function(itemIds, cssClassName) {\n itemIds.split(\",\").forEach(function(id) {\n let foundBlock = blockDatabase.get(id);\n if (foundBlock === void 0) {\n const trimmedId = id.trim();\n foundBlock = { id: trimmedId, type: \"na\", children: [] };\n blockDatabase.set(trimmedId, foundBlock);\n }\n if (!foundBlock.classes) {\n foundBlock.classes = [];\n }\n foundBlock.classes.push(cssClassName);\n });\n}, \"setCssClass\");\nvar populateBlockDatabase = /* @__PURE__ */ __name((_blockList, parent) => {\n const blockList = _blockList.flat();\n const children = [];\n const columnSettingBlock = blockList.find((b) => b?.type === \"column-setting\");\n const column = columnSettingBlock?.columns ?? -1;\n for (const block of blockList) {\n if (typeof column === \"number\" && column > 0 && block.type !== \"column-setting\" && typeof block.widthInColumns === \"number\" && block.widthInColumns > column) {\n log.warn(\n `Block ${block.id} width ${block.widthInColumns} exceeds configured column width ${column}`\n );\n }\n if (block.label) {\n block.label = sanitizeText2(block.label);\n }\n if (block.type === \"classDef\") {\n addStyleClass(block.id, block.css);\n continue;\n }\n if (block.type === \"applyClass\") {\n setCssClass(block.id, block?.styleClass ?? \"\");\n continue;\n }\n if (block.type === \"applyStyles\") {\n if (block?.stylesStr) {\n addStyle2Node(block.id, block?.stylesStr);\n }\n continue;\n }\n if (block.type === \"column-setting\") {\n parent.columns = block.columns ?? -1;\n } else if (block.type === \"edge\") {\n const count = (edgeCount.get(block.id) ?? 0) + 1;\n edgeCount.set(block.id, count);\n block.id = count + \"-\" + block.id;\n edgeList.push(block);\n } else {\n if (!block.label) {\n if (block.type === \"composite\") {\n block.label = \"\";\n } else {\n block.label = block.id;\n }\n }\n const existingBlock = blockDatabase.get(block.id);\n if (existingBlock === void 0) {\n blockDatabase.set(block.id, block);\n } else {\n if (block.type !== \"na\") {\n existingBlock.type = block.type;\n }\n if (block.label !== block.id) {\n existingBlock.label = block.label;\n }\n }\n if (block.children) {\n populateBlockDatabase(block.children, block);\n }\n if (block.type === \"space\") {\n const w = block.width ?? 1;\n for (let j = 0; j < w; j++) {\n const newBlock = clone(block);\n newBlock.id = newBlock.id + \"-\" + j;\n blockDatabase.set(newBlock.id, newBlock);\n children.push(newBlock);\n }\n } else if (existingBlock === void 0) {\n children.push(block);\n }\n }\n }\n parent.children = children;\n}, \"populateBlockDatabase\");\nvar blocks = [];\nvar rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\nvar clear2 = /* @__PURE__ */ __name(() => {\n log.debug(\"Clear called\");\n clear();\n rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\n blockDatabase = /* @__PURE__ */ new Map([[\"root\", rootBlock]]);\n blocks = [];\n classes = /* @__PURE__ */ new Map();\n edgeList = [];\n edgeCount = /* @__PURE__ */ new Map();\n}, \"clear\");\nfunction typeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"[]\":\n return \"square\";\n case \"()\":\n log.debug(\"we have a round\");\n return \"round\";\n case \"(())\":\n return \"circle\";\n case \">]\":\n return \"rect_left_inv_arrow\";\n case \"{}\":\n return \"diamond\";\n case \"{{}}\":\n return \"hexagon\";\n case \"([])\":\n return \"stadium\";\n case \"[[]]\":\n return \"subroutine\";\n case \"[()]\":\n return \"cylinder\";\n case \"((()))\":\n return \"doublecircle\";\n case \"[//]\":\n return \"lean_right\";\n case \"[\\\\\\\\]\":\n return \"lean_left\";\n case \"[/\\\\]\":\n return \"trapezoid\";\n case \"[\\\\/]\":\n return \"inv_trapezoid\";\n case \"<[]>\":\n return \"block_arrow\";\n default:\n return \"na\";\n }\n}\n__name(typeStr2Type, \"typeStr2Type\");\nfunction edgeTypeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"==\":\n return \"thick\";\n default:\n return \"normal\";\n }\n}\n__name(edgeTypeStr2Type, \"edgeTypeStr2Type\");\nfunction edgeStrToEdgeData(typeStr) {\n switch (typeStr.replace(/^[\\s-]+|[\\s-]+$/g, \"\")) {\n case \"x\":\n return \"arrow_cross\";\n case \"o\":\n return \"arrow_circle\";\n case \">\":\n return \"arrow_point\";\n default:\n return \"\";\n }\n}\n__name(edgeStrToEdgeData, \"edgeStrToEdgeData\");\nvar cnt = 0;\nvar generateId = /* @__PURE__ */ __name(() => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n}, \"generateId\");\nvar setHierarchy = /* @__PURE__ */ __name((block) => {\n rootBlock.children = block;\n populateBlockDatabase(block, rootBlock);\n blocks = rootBlock.children;\n}, \"setHierarchy\");\nvar getColumns = /* @__PURE__ */ __name((blockId) => {\n const block = blockDatabase.get(blockId);\n if (!block) {\n return -1;\n }\n if (block.columns) {\n return block.columns;\n }\n if (!block.children) {\n return -1;\n }\n return block.children.length;\n}, \"getColumns\");\nvar getBlocksFlat = /* @__PURE__ */ __name(() => {\n return [...blockDatabase.values()];\n}, \"getBlocksFlat\");\nvar getBlocks = /* @__PURE__ */ __name(() => {\n return blocks || [];\n}, \"getBlocks\");\nvar getEdges = /* @__PURE__ */ __name(() => {\n return edgeList;\n}, \"getEdges\");\nvar getBlock = /* @__PURE__ */ __name((id) => {\n return blockDatabase.get(id);\n}, \"getBlock\");\nvar setBlock = /* @__PURE__ */ __name((block) => {\n blockDatabase.set(block.id, block);\n}, \"setBlock\");\nvar getLogger = /* @__PURE__ */ __name(() => log, \"getLogger\");\nvar getClasses = /* @__PURE__ */ __name(function() {\n return classes;\n}, \"getClasses\");\nvar db = {\n getConfig: /* @__PURE__ */ __name(() => getConfig().block, \"getConfig\"),\n typeStr2Type,\n edgeTypeStr2Type,\n edgeStrToEdgeData,\n getLogger,\n getBlocksFlat,\n getBlocks,\n getEdges,\n setHierarchy,\n getBlock,\n setBlock,\n getColumns,\n getClasses,\n clear: clear2,\n generateId\n};\nvar blockDB_default = db;\n\n// src/diagrams/block/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${fade(options.mainBkg, 0.5)};\n fill: ${fade(options.clusterBkg, 0.5)};\n stroke: ${fade(options.clusterBorder, 0.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/block/blockRenderer.ts\nimport { select as d3select } from \"d3\";\n\n// src/dagre-wrapper/markers.js\nvar insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n}, \"insertMarkers\");\nvar extension = /* @__PURE__ */ __name((elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n}, \"extension\");\nvar composition = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"composition\");\nvar aggregation = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"aggregation\");\nvar dependency = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 6).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"dependency\");\nvar lollipop = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopEnd\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n}, \"lollipop\");\nvar point = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 6).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 4.5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"point\");\nvar circle = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"circle\");\nvar cross = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n}, \"cross\");\nvar barb = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"barb\");\nvar markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb\n};\nvar markers_default = insertMarkers;\n\n// src/diagrams/block/layout.ts\nvar padding = getConfig2()?.block?.padding ?? 8;\nfunction calculateBlockPosition(columns, position) {\n if (columns === 0 || !Number.isInteger(columns)) {\n throw new Error(\"Columns must be an integer !== 0.\");\n }\n if (position < 0 || !Number.isInteger(position)) {\n throw new Error(\"Position must be a non-negative integer.\" + position);\n }\n if (columns < 0) {\n return { px: position, py: 0 };\n }\n if (columns === 1) {\n return { px: 0, py: position };\n }\n const px = position % columns;\n const py = Math.floor(position / columns);\n return { px, py };\n}\n__name(calculateBlockPosition, \"calculateBlockPosition\");\nvar getMaxChildSize = /* @__PURE__ */ __name((block) => {\n let maxWidth = 0;\n let maxHeight = 0;\n for (const child of block.children) {\n const { width, height, x, y } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };\n log.debug(\n \"getMaxChildSize abc95 child:\",\n child.id,\n \"width:\",\n width,\n \"height:\",\n height,\n \"x:\",\n x,\n \"y:\",\n y,\n child.type\n );\n if (child.type === \"space\") {\n continue;\n }\n if (width > maxWidth) {\n maxWidth = width / (block.widthInColumns ?? 1);\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return { width: maxWidth, height: maxHeight };\n}, \"getMaxChildSize\");\nfunction setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) {\n log.debug(\n \"setBlockSizes abc95 (start)\",\n block.id,\n block?.size?.x,\n \"block width =\",\n block?.size,\n \"siblingWidth\",\n siblingWidth\n );\n if (!block?.size?.width) {\n block.size = {\n width: siblingWidth,\n height: siblingHeight,\n x: 0,\n y: 0\n };\n }\n let maxWidth = 0;\n let maxHeight = 0;\n if (block.children?.length > 0) {\n for (const child of block.children) {\n setBlockSizes(child, db2);\n }\n const childSize = getMaxChildSize(block);\n maxWidth = childSize.width;\n maxHeight = childSize.height;\n log.debug(\"setBlockSizes abc95 maxWidth of\", block.id, \":s children is \", maxWidth, maxHeight);\n for (const child of block.children) {\n if (child.size) {\n log.debug(\n `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}`\n );\n child.size.width = maxWidth * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);\n child.size.height = maxHeight;\n child.size.x = 0;\n child.size.y = 0;\n log.debug(\n `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}`\n );\n }\n }\n for (const child of block.children) {\n setBlockSizes(child, db2, maxWidth, maxHeight);\n }\n const columns = block.columns ?? -1;\n let numItems = 0;\n for (const child of block.children) {\n numItems += child.widthInColumns ?? 1;\n }\n let xSize = block.children.length;\n if (columns > 0 && columns < numItems) {\n xSize = columns;\n }\n const ySize = Math.ceil(numItems / xSize);\n let width = xSize * (maxWidth + padding) + padding;\n let height = ySize * (maxHeight + padding) + padding;\n if (width < siblingWidth) {\n log.debug(\n `Detected to small sibling: abc95 ${block.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width}`\n );\n width = siblingWidth;\n height = siblingHeight;\n const childWidth = (siblingWidth - xSize * padding - padding) / xSize;\n const childHeight = (siblingHeight - ySize * padding - padding) / ySize;\n log.debug(\"Size indata abc88\", block.id, \"childWidth\", childWidth, \"maxWidth\", maxWidth);\n log.debug(\"Size indata abc88\", block.id, \"childHeight\", childHeight, \"maxHeight\", maxHeight);\n log.debug(\"Size indata abc88 xSize\", xSize, \"padding\", padding);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n child.size.height = childHeight;\n child.size.x = 0;\n child.size.y = 0;\n }\n }\n }\n log.debug(\n `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, block.size?.width || 0)}`\n );\n if (width < (block?.size?.width || 0)) {\n width = block?.size?.width || 0;\n const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length;\n if (num > 0) {\n const childWidth = (width - num * padding - padding) / num;\n log.debug(\"abc95 (growing to fit) width\", block.id, width, block.size?.width, childWidth);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n }\n }\n }\n }\n block.size = {\n width,\n height,\n x: 0,\n y: 0\n };\n }\n log.debug(\n \"setBlockSizes abc94 (done)\",\n block.id,\n block?.size?.x,\n block?.size?.width,\n block?.size?.y,\n block?.size?.height\n );\n}\n__name(setBlockSizes, \"setBlockSizes\");\nfunction layoutBlocks(block, db2) {\n log.debug(\n `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n const columns = block.columns ?? -1;\n log.debug(\"layoutBlocks columns abc95\", block.id, \"=>\", columns, block);\n if (block.children && // find max width of children\n block.children.length > 0) {\n const width = block?.children[0]?.size?.width ?? 0;\n const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;\n log.debug(\"widthOfChildren 88\", widthOfChildren, \"posX\");\n let columnPos = 0;\n log.debug(\"abc91 block?.size?.x\", block.id, block?.size?.x);\n let startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n let rowPos = 0;\n for (const child of block.children) {\n const parent = block;\n if (!child.size) {\n continue;\n }\n const { width: width2, height } = child.size;\n const { px, py } = calculateBlockPosition(columns, columnPos);\n if (py != rowPos) {\n rowPos = py;\n startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n log.debug(\"New row in layout for block\", block.id, \" and child \", child.id, rowPos);\n }\n log.debug(\n `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent?.size?.x},${parent?.size?.y}) parent: ${parent.id} width: ${width2}${padding}`\n );\n if (parent.size) {\n const halfWidth = width2 / 2;\n child.size.x = startingPosX + padding + halfWidth;\n log.debug(\n `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * (child?.widthInColumns ?? 1) / 2}`\n );\n startingPosX = child.size.x + halfWidth;\n child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding;\n log.debug(\n `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * (child?.widthInColumns ?? 1) / 2}`\n );\n }\n if (child.children) {\n layoutBlocks(child, db2);\n }\n let columnsFilled = child?.widthInColumns ?? 1;\n if (columns > 0) {\n columnsFilled = Math.min(columnsFilled, columns - columnPos % columns);\n }\n columnPos += columnsFilled;\n log.debug(\"abc88 columnsPos\", child, columnPos);\n }\n }\n log.debug(\n `layout blocks (<==layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n}\n__name(layoutBlocks, \"layoutBlocks\");\nfunction findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) {\n if (block.size && block.id !== \"root\") {\n const { x, y, width, height } = block.size;\n if (x - width / 2 < minX) {\n minX = x - width / 2;\n }\n if (y - height / 2 < minY) {\n minY = y - height / 2;\n }\n if (x + width / 2 > maxX) {\n maxX = x + width / 2;\n }\n if (y + height / 2 > maxY) {\n maxY = y + height / 2;\n }\n }\n if (block.children) {\n for (const child of block.children) {\n ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));\n }\n }\n return { minX, minY, maxX, maxY };\n}\n__name(findBounds, \"findBounds\");\nfunction layout(db2) {\n const root = db2.getBlock(\"root\");\n if (!root) {\n return;\n }\n setBlockSizes(root, db2, 0, 0);\n layoutBlocks(root, db2);\n log.debug(\"getBlocks\", JSON.stringify(root, null, 2));\n const { minX, minY, maxX, maxY } = findBounds(root);\n const height = maxY - minY;\n const width = maxX - minX;\n return { x: minX, y: minY, width, height };\n}\n__name(layout, \"layout\");\n\n// src/diagrams/block/renderHelpers.ts\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\n\n// src/dagre-wrapper/createLabel.js\nimport { select } from \"d3\";\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nfunction addHtmlLabel(node, config2) {\n const fo = select(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const span = div.append(\"span\");\n span.html(sanitizeText(label, config2));\n applyStyle(span, node.labelStyle);\n span.attr(\"class\", labelClass);\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\n__name(addHtmlLabel, \"addHtmlLabel\");\nvar createLabel = /* @__PURE__ */ __name(async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n const config2 = getConfig2();\n if (evaluate(config2.flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n log.debug(\"vertexText\" + vertexText);\n const label = await replaceIconSubstring(decodeEntities(vertexText));\n const node = {\n isNode,\n label,\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node, config2);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/dagre-wrapper/edges.js\nimport { line, curveBasis, select as select2 } from \"d3\";\n\n// src/dagre-wrapper/edgeMarker.ts\nvar addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id, diagramType) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, \"start\", edge.arrowTypeStart, url, id, diagramType);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, \"end\", edge.arrowTypeEnd, url, id, diagramType);\n }\n}, \"addEdgeMarkers\");\nvar arrowTypesMap = {\n arrow_cross: \"cross\",\n arrow_point: \"point\",\n arrow_barb: \"barb\",\n arrow_circle: \"circle\",\n aggregation: \"aggregation\",\n extension: \"extension\",\n composition: \"composition\",\n dependency: \"dependency\",\n lollipop: \"lollipop\"\n};\nvar addEdgeMarker = /* @__PURE__ */ __name((svgPath, position, arrowType, url, id, diagramType) => {\n const endMarkerType = arrowTypesMap[arrowType];\n if (!endMarkerType) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return;\n }\n const suffix = position === \"start\" ? \"Start\" : \"End\";\n svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);\n}, \"addEdgeMarker\");\n\n// src/dagre-wrapper/edges.js\nvar edgeLabels = {};\nvar terminalLabels = {};\nvar insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => {\n const config2 = getConfig2();\n const useHtmlLabels = evaluate(config2.flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? createText(\n elem,\n edge.label,\n {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n },\n config2\n ) : await createLabel_default(edge.label, edge.labelStyle);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select2(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = await createLabel_default(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = await createLabel_default(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = await createLabel_default(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = await createLabel_default(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n}, \"insertEdgeLabel\");\nfunction setTerminalWidth(fo, value) {\n if (getConfig2().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\n__name(setTerminalWidth, \"setTerminalWidth\");\nvar positionEdgeLabel = /* @__PURE__ */ __name((edge, paths) => {\n log.debug(\"Moving label abc88 \", edge.id, edge.label, edgeLabels[edge.id], paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig2();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}, \"positionEdgeLabel\");\nvar outsideNode = /* @__PURE__ */ __name((node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n}, \"outsideNode\");\nvar intersection = /* @__PURE__ */ __name((node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n}, \"intersection\");\nvar cutPathAtIntersect = /* @__PURE__ */ __name((_points, boundaryNode) => {\n log.debug(\"abc88 cutPathAtIntersect\", _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n if (!outsideNode(boundaryNode, point2) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point2);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n }\n isInside = true;\n } else {\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n return points;\n}, \"cutPathAtIntersect\");\nvar insertEdge = /* @__PURE__ */ __name(function(elem, e, edge, clusterDb, diagramType, graph, id) {\n let points = edge.points;\n log.debug(\"abc88 InsertEdge: edge=\", edge, \"e=\", e);\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n if (head?.intersect && tail?.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n log.debug(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.debug(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve = curveBasis;\n if (edge.curve && (diagramType === \"graph\" || diagramType === \"flowchart\")) {\n curve = edge.curve;\n }\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if (getConfig2().flowchart.arrowMarkerAbsolute || getConfig2().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n addEdgeMarkers(svgPath, edge, url, id, diagramType);\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n}, \"insertEdge\");\n\n// src/dagre-wrapper/nodes.js\nimport { select as select4 } from \"d3\";\n\n// src/dagre-wrapper/blockArrowHelper.ts\nvar expandAndDeduplicateDirections = /* @__PURE__ */ __name((directions) => {\n const uniqueDirections = /* @__PURE__ */ new Set();\n for (const direction of directions) {\n switch (direction) {\n case \"x\":\n uniqueDirections.add(\"right\");\n uniqueDirections.add(\"left\");\n break;\n case \"y\":\n uniqueDirections.add(\"up\");\n uniqueDirections.add(\"down\");\n break;\n default:\n uniqueDirections.add(direction);\n break;\n }\n }\n return uniqueDirections;\n}, \"expandAndDeduplicateDirections\");\nvar getArrowPoints = /* @__PURE__ */ __name((duplicatedDirections, bbox, node) => {\n const directions = expandAndDeduplicateDirections(duplicatedDirections);\n const f = 2;\n const height = bbox.height + 2 * node.padding;\n const midpoint = height / f;\n const width = bbox.width + 2 * midpoint + node.padding;\n const padding2 = node.padding / 2;\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom\n { x: 0, y: 0 },\n { x: midpoint, y: 0 },\n { x: width / 2, y: 2 * padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: 0 },\n // Right\n { x: width, y: -height / 3 },\n { x: width + 2 * padding2, y: -height / 2 },\n { x: width, y: -2 * height / 3 },\n { x: width, y: -height },\n // Top\n { x: width - midpoint, y: -height },\n { x: width / 2, y: -height - 2 * padding2 },\n { x: midpoint, y: -height },\n // Left\n { x: 0, y: -height },\n { x: 0, y: -2 * height / 3 },\n { x: -2 * padding2, y: -height / 2 },\n { x: 0, y: -height / 3 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: midpoint, y: 0 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: midpoint, y: -height },\n { x: width - midpoint, y: -height },\n { x: width, y: 0 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: width, y: -height + midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: 0, y: -height + midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding2 },\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: 0, y: -height + padding2 },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding2 },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width, y: -padding2 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: 0 },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\")) {\n return [\n { x: midpoint, y: -padding2 },\n { x: midpoint, y: -padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding2 },\n // top left corner of arrow\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 }\n ];\n }\n if (directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding2 },\n // Two points, the right corners\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\")) {\n return [\n // Bottom center\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: 0, y: -height + padding2 },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding2 },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 }\n ];\n }\n if (directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding2 },\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width, y: -padding2 }\n ];\n }\n return [{ x: 0, y: 0 }];\n}, \"getArrowPoints\");\n\n// src/dagre-wrapper/intersect/intersect-node.js\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/dagre-wrapper/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/dagre-wrapper/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point2) {\n return intersect_ellipse_default(node, rx, rx, point2);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/dagre-wrapper/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/dagre-wrapper/intersect/intersect-polygon.js\nvar intersect_polygon_default = intersectPolygon;\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect = intersect_line_default(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\n\n// src/dagre-wrapper/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/dagre-wrapper/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/dagre-wrapper/shapes/util.js\nimport { select as select3 } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes, isNode) => {\n const config2 = getConfig2();\n let classes2;\n const useHtmlLabels = node.useHtmlLabels || evaluate(config2.flowchart.htmlLabels);\n if (!_classes) {\n classes2 = \"node default\";\n } else {\n classes2 = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = createText(\n label,\n sanitizeText(decodeEntities(labelText), config2),\n {\n useHtmlLabels,\n width: node.width || config2.flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n },\n config2\n );\n } else {\n text = textNode.appendChild(\n await createLabel_default(\n sanitizeText(decodeEntities(labelText), config2),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if (evaluate(config2.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select3(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config2.fontSize ? config2.fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n}, \"labelHelper\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/dagre-wrapper/shapes/note.js\nvar note = /* @__PURE__ */ __name(async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig2().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n log.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"note\");\nvar note_default = note;\n\n// src/dagre-wrapper/nodes.js\nvar formatClass = /* @__PURE__ */ __name((str) => {\n if (str) {\n return \" \" + str;\n }\n return \"\";\n}, \"formatClass\");\nvar getClassesFromNode = /* @__PURE__ */ __name((node, otherClasses) => {\n return `${otherClasses ? otherClasses : \"node default\"}${formatClass(node.classes)} ${formatClass(\n node.class\n )}`;\n}, \"getClassesFromNode\");\nvar question = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n log.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n log.warn(\"Intersect called\");\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"question\");\nvar choice = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect_default.circle(node, 14, point2);\n };\n return shapeSvg;\n}, \"choice\");\nvar hexagon = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"hexagon\");\nvar block_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 2;\n const h = bbox.height + 2 * node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = getArrowPoints(node.directions, bbox, node);\n const blockArrow = insertPolygonShape(shapeSvg, w, h, points);\n blockArrow.attr(\"style\", node.style);\n updateNodeBounds(node, blockArrow);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"block_arrow\");\nvar rect_left_inv_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"rect_left_inv_arrow\");\nvar lean_right = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"lean_right\");\nvar lean_left = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"lean_left\");\nvar trapezoid = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"trapezoid\");\nvar inv_trapezoid = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"inv_trapezoid\");\nvar rect_right_inv_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"rect_right_inv_arrow\");\nvar cylinder = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect_default.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}, \"cylinder\");\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes + \" \" + node.class,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"rect\");\nvar composite = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic cluster composite label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"composite\");\nvar labelRect = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n log.trace(\"Classes = \", node.class);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"labelRect\");\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = /* @__PURE__ */ __name((length) => {\n strokeDashArray.push(length, 0);\n }, \"addBorder\");\n const skipBorder = /* @__PURE__ */ __name((length) => {\n strokeDashArray.push(0, length);\n }, \"skipBorder\");\n if (borders.includes(\"t\")) {\n log.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n log.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n log.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n log.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\n__name(applyNodePropertyBorders, \"applyNodePropertyBorders\");\nvar rectWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n let classes2;\n if (!node.classes) {\n classes2 = \"node default\";\n } else {\n classes2 = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(await createLabel_default(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select4(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n await createLabel_default(\n textRows.join ? textRows.join(\"
\") : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select4(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n select4(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select4(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"rectWithTitle\");\nvar stadium = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"stadium\");\nvar circle2 = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"Circle main\");\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n log.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect_default.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n}, \"circle\");\nvar doublecircle = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", node.class);\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n log.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect_default.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n}, \"doublecircle\");\nvar subroutine = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"subroutine\");\nvar start = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n return intersect_default.circle(node, 7, point2);\n };\n return shapeSvg;\n}, \"start\");\nvar forkJoin = /* @__PURE__ */ __name((parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"forkJoin\");\nvar end = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n return intersect_default.circle(node, 7, point2);\n };\n return shapeSvg;\n}, \"end\");\nvar class_box = /* @__PURE__ */ __name(async (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes2;\n if (!node.classes) {\n classes2 = \"node default\";\n } else {\n classes2 = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations?.[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"\\xAB\" + node.classData.annotations[0] + \"\\xBB\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(await createLabel_default(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select4(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if (getConfig2().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(await createLabel_default(classTitleString, node.labelStyle, true, true));\n select4(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select4(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let parsedText = parsedInfo.displayText;\n if (getConfig2().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n await createLabel_default(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select4(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let displayText = parsedInfo.displayText;\n if (getConfig2().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n await createLabel_default(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select4(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n select4(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select4(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n select4(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n select4(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n rect2.attr(\"style\", node.style).attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"class_box\");\nvar shapes = {\n rhombus: question,\n composite,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle: circle2,\n doublecircle,\n stadium,\n hexagon,\n block_arrow,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note_default,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nvar nodeElems = {};\nvar insertNode = /* @__PURE__ */ __name(async (elem, node, renderOptions) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if (getConfig2().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, renderOptions);\n } else {\n el = await shapes[node.shape](elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n}, \"insertNode\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems[node.id];\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding2 = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding2) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\n// src/diagrams/block/renderHelpers.ts\nfunction getNodeFromBlock(block, db2, positioned = false) {\n const vertex = block;\n let classStr = \"default\";\n if ((vertex?.classes?.length || 0) > 0) {\n classStr = (vertex?.classes ?? []).join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n let radius = 0;\n let shape = \"\";\n let padding2;\n switch (vertex.type) {\n case \"round\":\n radius = 5;\n shape = \"rect\";\n break;\n case \"composite\":\n radius = 0;\n shape = \"composite\";\n padding2 = 0;\n break;\n case \"square\":\n shape = \"rect\";\n break;\n case \"diamond\":\n shape = \"question\";\n break;\n case \"hexagon\":\n shape = \"hexagon\";\n break;\n case \"block_arrow\":\n shape = \"block_arrow\";\n break;\n case \"odd\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n shape = \"lean_right\";\n break;\n case \"lean_left\":\n shape = \"lean_left\";\n break;\n case \"trapezoid\":\n shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n shape = \"inv_trapezoid\";\n break;\n case \"rect_left_inv_arrow\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n shape = \"circle\";\n break;\n case \"ellipse\":\n shape = \"ellipse\";\n break;\n case \"stadium\":\n shape = \"stadium\";\n break;\n case \"subroutine\":\n shape = \"subroutine\";\n break;\n case \"cylinder\":\n shape = \"cylinder\";\n break;\n case \"group\":\n shape = \"rect\";\n break;\n case \"doublecircle\":\n shape = \"doublecircle\";\n break;\n default:\n shape = \"rect\";\n }\n const styles = getStylesFromArray(vertex?.styles ?? []);\n const vertexText = vertex.label;\n const bounds = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };\n const node = {\n labelStyle: styles.labelStyle,\n shape,\n labelText: vertexText,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n directions: vertex.directions,\n width: bounds.width,\n height: bounds.height,\n x: bounds.x,\n y: bounds.y,\n positioned,\n intersect: void 0,\n type: vertex.type,\n padding: padding2 ?? getConfig()?.block?.padding ?? 0\n };\n return node;\n}\n__name(getNodeFromBlock, \"getNodeFromBlock\");\nasync function calculateBlockSize(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, false);\n if (node.type === \"group\") {\n return;\n }\n const config2 = getConfig();\n const nodeEl = await insertNode(elem, node, { config: config2 });\n const boundingBox = nodeEl.node().getBBox();\n const obj = db2.getBlock(node.id);\n obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl };\n db2.setBlock(obj);\n nodeEl.remove();\n}\n__name(calculateBlockSize, \"calculateBlockSize\");\nasync function insertBlockPositioned(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, true);\n const obj = db2.getBlock(node.id);\n if (obj.type !== \"space\") {\n const config2 = getConfig();\n await insertNode(elem, node, { config: config2 });\n block.intersect = node?.intersect;\n positionNode(node);\n }\n}\n__name(insertBlockPositioned, \"insertBlockPositioned\");\nasync function performOperations(elem, blocks2, db2, operation) {\n for (const block of blocks2) {\n await operation(elem, block, db2);\n if (block.children) {\n await performOperations(elem, block.children, db2, operation);\n }\n }\n}\n__name(performOperations, \"performOperations\");\nasync function calculateBlockSizes(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, calculateBlockSize);\n}\n__name(calculateBlockSizes, \"calculateBlockSizes\");\nasync function insertBlocks(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, insertBlockPositioned);\n}\n__name(insertBlocks, \"insertBlocks\");\nasync function insertEdges(elem, edges, blocks2, db2, id) {\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n });\n g.setGraph({\n rankdir: \"TB\",\n nodesep: 10,\n ranksep: 10,\n marginx: 8,\n marginy: 8\n });\n for (const block of blocks2) {\n if (block.size) {\n g.setNode(block.id, {\n width: block.size.width,\n height: block.size.height,\n intersect: block.intersect\n });\n }\n }\n for (const edge of edges) {\n if (edge.start && edge.end) {\n const startBlock = db2.getBlock(edge.start);\n const endBlock = db2.getBlock(edge.end);\n if (startBlock?.size && endBlock?.size) {\n const start2 = startBlock.size;\n const end2 = endBlock.size;\n const points = [\n { x: start2.x, y: start2.y },\n { x: start2.x + (end2.x - start2.x) / 2, y: start2.y + (end2.y - start2.y) / 2 },\n { x: end2.x, y: end2.y }\n ];\n insertEdge(\n elem,\n { v: edge.start, w: edge.end, name: edge.id },\n {\n ...edge,\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n },\n void 0,\n \"block\",\n g,\n id\n );\n if (edge.label) {\n await insertEdgeLabel(elem, {\n ...edge,\n label: edge.label,\n labelStyle: \"stroke: #333; stroke-width: 1.5px;fill:none;\",\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n });\n positionEdgeLabel(\n { ...edge, x: points[1].x, y: points[1].y },\n {\n originalPath: points\n }\n );\n }\n }\n }\n }\n}\n__name(insertEdges, \"insertEdges\");\n\n// src/diagrams/block/blockRenderer.ts\nvar getClasses2 = /* @__PURE__ */ __name(function(text, diagObj) {\n return diagObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diagObj) {\n const { securityLevel, block: conf } = getConfig();\n const db2 = diagObj.db;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = d3select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? d3select(sandboxElement.nodes()[0].contentDocument.body) : d3select(\"body\");\n const svg = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : d3select(`[id=\"${id}\"]`);\n const markers2 = [\"point\", \"circle\", \"cross\"];\n markers_default(svg, markers2, diagObj.type, id);\n const bl = db2.getBlocks();\n const blArr = db2.getBlocksFlat();\n const edges = db2.getEdges();\n const nodes = svg.insert(\"g\").attr(\"class\", \"block\");\n await calculateBlockSizes(nodes, bl, db2);\n const bounds = layout(db2);\n await insertBlocks(nodes, bl, db2);\n await insertEdges(nodes, edges, blArr, db2, id);\n if (bounds) {\n const bounds2 = bounds;\n const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));\n const height = bounds2.height + magicFactor + 10;\n const width = bounds2.width + 10;\n const { useMaxWidth } = conf;\n configureSvgSize(svg, height, width, !!useMaxWidth);\n log.debug(\"Here Bounds\", bounds, bounds2);\n svg.attr(\n \"viewBox\",\n `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`\n );\n }\n}, \"draw\");\nvar blockRenderer_default = {\n draw,\n getClasses: getClasses2\n};\n\n// src/diagrams/block/blockDiagram.ts\nvar diagram = {\n parser: block_default,\n db: blockDB_default,\n renderer: blockRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","num","spaceId","edgeData","id","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","block_default","blockDatabase","edgeList","edgeCount","COLOR_KEYWORD","FILL_KEYWORD","BG_FILL","STYLECLASS_SEP","config","getConfig2","classes","sanitizeText2","txt","common_default","addStyleClass","styleAttributes","foundClass","attrib","fixedAttrib","newStyle2","addStyle2Node","styles","foundBlock","setCssClass","itemIds","cssClassName","trimmedId","populateBlockDatabase","_blockList","parent","blockList","children","columnSettingBlock","b","column","block","log","count","existingBlock","w","j","newBlock","clone","blocks","rootBlock","clear2","clear","typeStr2Type","typeStr","edgeTypeStr2Type","edgeStrToEdgeData","cnt","generateId","setHierarchy","getColumns","blockId","getBlocksFlat","getBlocks","getEdges","getBlock","setBlock","getLogger","getClasses","db","getConfig","blockDB_default","fade","color","opacity","channel2","khroma.channel","g","khroma.rgba","getStyles","options","getIconStyles","styles_default","insertMarkers","elem","markerArray","type","markerName","markers","extension","composition","aggregation","dependency","lollipop","point","circle","cross","barb","markers_default","padding","_b","_a","calculateBlockPosition","columns","position","px","py","getMaxChildSize","maxWidth","maxHeight","child","width","height","x","y","setBlockSizes","db2","siblingWidth","siblingHeight","_c","childSize","numItems","xSize","ySize","childWidth","childHeight","_d","_e","_f","_g","_h","_i","_j","_k","layoutBlocks","widthOfChildren","columnPos","startingPosX","rowPos","width2","_l","_m","_n","halfWidth","columnsFilled","_o","_p","_q","findBounds","minX","minY","maxX","maxY","layout","root","applyStyle","dom","styleFn","addHtmlLabel","node","config2","fo","select","div","label","labelClass","span","sanitizeText","createLabel","_vertexText","style","isTitle","isNode","vertexText","evaluate","replaceIconSubstring","decodeEntities","svgLabel","rows","row","tspan","createLabel_default","addEdgeMarkers","svgPath","edge","url","diagramType","addEdgeMarker","arrowTypesMap","arrowType","endMarkerType","suffix","edgeLabels","terminalLabels","insertEdgeLabel","useHtmlLabels","labelElement","createText","edgeLabel","bbox","dv","select2","startLabelElement","startEdgeLabelLeft","inner","slBox","setTerminalWidth","startEdgeLabelRight","endLabelElement","endEdgeLabelLeft","endEdgeLabelRight","value","positionEdgeLabel","paths","path","siteConfig","subGraphTitleTotalMargin","getSubGraphTitleMargins","el","pos","utils_default","outsideNode","point2","dx","dy","h","intersection","outsidePoint","insidePoint","Q","R","q","res","_x","_y","cutPathAtIntersect","_points","boundaryNode","points","lastPointOutside","isInside","inter","pointPresent","e","insertEdge","clusterDb","graph","pointsHasChanged","tail","head","lineData","curve","curveBasis","getLineFunctionsWithOffset","lineFunction","line","strokeClasses","getUrl","expandAndDeduplicateDirections","directions","uniqueDirections","direction","getArrowPoints","duplicatedDirections","f","midpoint","padding2","intersectNode","intersect_node_default","intersectEllipse","rx","ry","cx","cy","det","intersect_ellipse_default","intersectCircle","intersect_circle_default","intersectLine","p1","p2","q1","q2","a1","a2","b1","b2","c1","c2","r1","r2","r3","r4","denom","offset","sameSign","intersect_line_default","intersect_polygon_default","intersectPolygon","polyPoints","x1","y1","intersections","entry","left","top","intersect","pdx","pdy","distp","qdx","qdy","distq","intersectRect","sx","sy","intersect_rect_default","intersect_default","labelHelper","_classes","classes2","shapeSvg","labelText","textNode","text","halfPadding","select3","images","noImgText","img","setupImage","bodyFontSize","updateNodeBounds","element","insertPolygonShape","d","note","rect2","note_default","formatClass","getClassesFromNode","otherClasses","question","s","questionElem","choice","hexagon","m","hex","block_arrow","blockArrow","rect_left_inv_arrow","lean_right","lean_left","trapezoid","inv_trapezoid","rect_right_inv_arrow","cylinder","shape","rect","totalWidth","totalHeight","propKeys","applyNodePropertyBorders","propKey","composite","labelRect","borders","strokeDashArray","addBorder","length","skipBorder","rectWithTitle","innerLine","text2","title","select4","textRows","titleBox","descr","stadium","circle2","circle3","doublecircle","gap","circleGroup","outerCircle","innerCircle","subroutine","start","forkJoin","dir","end","class_box","rowPadding","lineHeight","topLine","bottomLine","labelContainer","verticalPos","hasInterface","interfaceLabelText","interfaceLabel","interfaceBBox","classTitleString","classTitleLabel","classTitleBBox","classAttributes","member","parsedInfo","parsedText","lbl","classMethods","displayText","diffX2","diffX","memberBBox","shapes","nodeElems","insertNode","renderOptions","newEl","target","positionNode","diff","getNodeFromBlock","positioned","vertex","classStr","radius","getStylesFromArray","bounds","calculateBlockSize","nodeEl","boundingBox","obj","insertBlockPositioned","performOperations","blocks2","operation","calculateBlockSizes","insertBlocks","insertEdges","edges","graphlib.Graph","startBlock","endBlock","start2","end2","getClasses2","diagObj","draw","_version","securityLevel","conf","sandboxElement","d3select","svg","bl","blArr","nodes","bounds2","magicFactor","useMaxWidth","configureSvgSize","blockRenderer_default","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"blockDiagram-VD42YOAC-BaEv4oIa.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-VD42YOAC.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n getLineFunctionsWithOffset\n} from \"./chunk-HN2XXSSU.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n createText,\n replaceIconSubstring\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n decodeEntities,\n getStylesFromArray,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n configureSvgSize,\n evaluate,\n getConfig,\n getConfig2,\n getUrl,\n sanitizeText\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/block/parser/block.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 15], $V1 = [1, 7], $V2 = [1, 13], $V3 = [1, 14], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 10, 21, 28, 29, 30, 31, 39, 43, 46], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 10, 15, 16, 21, 28, 29, 30, 31, 39, 43, 46], $Vd = [8, 10, 15, 16, 21, 27, 28, 29, 30, 31, 39, 43, 46], $Ve = [1, 49];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"spaceLines\": 3, \"SPACELINE\": 4, \"NL\": 5, \"separator\": 6, \"SPACE\": 7, \"EOF\": 8, \"start\": 9, \"BLOCK_DIAGRAM_KEY\": 10, \"document\": 11, \"stop\": 12, \"statement\": 13, \"link\": 14, \"LINK\": 15, \"START_LINK\": 16, \"LINK_LABEL\": 17, \"STR\": 18, \"nodeStatement\": 19, \"columnsStatement\": 20, \"SPACE_BLOCK\": 21, \"blockStatement\": 22, \"classDefStatement\": 23, \"cssClassStatement\": 24, \"styleStatement\": 25, \"node\": 26, \"SIZE\": 27, \"COLUMNS\": 28, \"id-block\": 29, \"end\": 30, \"NODE_ID\": 31, \"nodeShapeNLabel\": 32, \"dirList\": 33, \"DIR\": 34, \"NODE_DSTART\": 35, \"NODE_DEND\": 36, \"BLOCK_ARROW_START\": 37, \"BLOCK_ARROW_END\": 38, \"classDef\": 39, \"CLASSDEF_ID\": 40, \"CLASSDEF_STYLEOPTS\": 41, \"DEFAULT\": 42, \"class\": 43, \"CLASSENTITY_IDS\": 44, \"STYLECLASS\": 45, \"style\": 46, \"STYLE_ENTITY_IDS\": 47, \"STYLE_DEFINITION_DATA\": 48, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACELINE\", 5: \"NL\", 7: \"SPACE\", 8: \"EOF\", 10: \"BLOCK_DIAGRAM_KEY\", 15: \"LINK\", 16: \"START_LINK\", 17: \"LINK_LABEL\", 18: \"STR\", 21: \"SPACE_BLOCK\", 27: \"SIZE\", 28: \"COLUMNS\", 29: \"id-block\", 30: \"end\", 31: \"NODE_ID\", 34: \"DIR\", 35: \"NODE_DSTART\", 36: \"NODE_DEND\", 37: \"BLOCK_ARROW_START\", 38: \"BLOCK_ARROW_END\", 39: \"classDef\", 40: \"CLASSDEF_ID\", 41: \"CLASSDEF_STYLEOPTS\", 42: \"DEFAULT\", 43: \"class\", 44: \"CLASSENTITY_IDS\", 45: \"STYLECLASS\", 46: \"style\", 47: \"STYLE_ENTITY_IDS\", 48: \"STYLE_DEFINITION_DATA\" },\n productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [33, 1], [33, 2], [32, 3], [32, 4], [23, 3], [23, 3], [24, 3], [25, 3]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.getLogger().debug(\"Rule: separator (NL) \");\n break;\n case 5:\n yy.getLogger().debug(\"Rule: separator (Space) \");\n break;\n case 6:\n yy.getLogger().debug(\"Rule: separator (EOF) \");\n break;\n case 7:\n yy.getLogger().debug(\"Rule: hierarchy: \", $$[$0 - 1]);\n yy.setHierarchy($$[$0 - 1]);\n break;\n case 8:\n yy.getLogger().debug(\"Stop NL \");\n break;\n case 9:\n yy.getLogger().debug(\"Stop EOF \");\n break;\n case 10:\n yy.getLogger().debug(\"Stop NL2 \");\n break;\n case 11:\n yy.getLogger().debug(\"Stop EOF2 \");\n break;\n case 12:\n yy.getLogger().debug(\"Rule: statement: \", $$[$0]);\n typeof $$[$0].length === \"number\" ? this.$ = $$[$0] : this.$ = [$$[$0]];\n break;\n case 13:\n yy.getLogger().debug(\"Rule: statement #2: \", $$[$0 - 1]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 14:\n yy.getLogger().debug(\"Rule: link: \", $$[$0], yytext);\n this.$ = { edgeTypeStr: $$[$0], label: \"\" };\n break;\n case 15:\n yy.getLogger().debug(\"Rule: LABEL link: \", $$[$0 - 3], $$[$0 - 1], $$[$0]);\n this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] };\n break;\n case 18:\n const num = parseInt($$[$0]);\n const spaceId = yy.generateId();\n this.$ = { id: spaceId, type: \"space\", label: \"\", width: num, children: [] };\n break;\n case 23:\n yy.getLogger().debug(\"Rule: (nodeStatement link node) \", $$[$0 - 2], $$[$0 - 1], $$[$0], \" typestr: \", $$[$0 - 1].edgeTypeStr);\n const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr);\n this.$ = [\n { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions },\n { id: $$[$0 - 2].id + \"-\" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: \"edge\", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: \"arrow_open\" },\n { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions }\n ];\n break;\n case 24:\n yy.getLogger().debug(\"Rule: nodeStatement (abc88 node size) \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) };\n break;\n case 25:\n yy.getLogger().debug(\"Rule: nodeStatement (node) \", $$[$0]);\n this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 };\n break;\n case 26:\n yy.getLogger().debug(\"APA123\", this ? this : \"na\");\n yy.getLogger().debug(\"COLUMNS: \", $$[$0]);\n this.$ = { type: \"column-setting\", columns: $$[$0] === \"auto\" ? -1 : parseInt($$[$0]) };\n break;\n case 27:\n yy.getLogger().debug(\"Rule: id-block statement : \", $$[$0 - 2], $$[$0 - 1]);\n const id2 = yy.generateId();\n this.$ = { ...$$[$0 - 2], type: \"composite\", children: $$[$0 - 1] };\n break;\n case 28:\n yy.getLogger().debug(\"Rule: blockStatement : \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n const id = yy.generateId();\n this.$ = { id, type: \"composite\", label: \"\", children: $$[$0 - 1] };\n break;\n case 29:\n yy.getLogger().debug(\"Rule: node (NODE_ID separator): \", $$[$0]);\n this.$ = { id: $$[$0] };\n break;\n case 30:\n yy.getLogger().debug(\"Rule: node (NODE_ID nodeShapeNLabel separator): \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };\n break;\n case 31:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0]);\n this.$ = [$$[$0]];\n break;\n case 32:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0 - 1], $$[$0]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 33:\n yy.getLogger().debug(\"Rule: nodeShapeNLabel: \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] };\n break;\n case 34:\n yy.getLogger().debug(\"Rule: BLOCK_ARROW nodeShapeNLabel: \", $$[$0 - 3], $$[$0 - 2], \" #3:\", $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] };\n break;\n case 35:\n case 36:\n this.$ = { type: \"classDef\", id: $$[$0 - 1].trim(), css: $$[$0].trim() };\n break;\n case 37:\n this.$ = { type: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n this.$ = { type: \"applyStyles\", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() };\n break;\n }\n }, \"anonymous\"),\n table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 10: $V0, 11: 3, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 10: $V0, 21: $V1, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 31: $V4 }, { 10: $V0, 11: 27, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 40: [1, 28], 42: [1, 29] }, { 44: [1, 30] }, { 47: [1, 31] }, o($Vd, [2, 29], { 32: 32, 35: [1, 33], 37: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 31: $V4 }, { 31: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 10: $V0, 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 30: [1, 38] }, { 41: [1, 39] }, { 41: [1, 40] }, { 45: [1, 41] }, { 48: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 36: [1, 47] }, { 33: 48, 34: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 38: [1, 51] }, { 33: 52, 34: $Ve, 38: [2, 31] }, { 31: [2, 15] }, o($Vd, [2, 34]), { 38: [2, 32] }],\n defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n yy.getLogger().debug(\"Found block-beta\");\n return 10;\n break;\n case 1:\n yy.getLogger().debug(\"Found id-block\");\n return 29;\n break;\n case 2:\n yy.getLogger().debug(\"Found block\");\n return 10;\n break;\n case 3:\n yy.getLogger().debug(\".\", yy_.yytext);\n break;\n case 4:\n yy.getLogger().debug(\"_\", yy_.yytext);\n break;\n case 5:\n return 5;\n break;\n case 6:\n yy_.yytext = -1;\n return 28;\n break;\n case 7:\n yy_.yytext = yy_.yytext.replace(/columns\\s+/, \"\");\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 28;\n break;\n case 8:\n this.pushState(\"md_string\");\n break;\n case 9:\n return \"MD_STR\";\n break;\n case 10:\n this.popState();\n break;\n case 11:\n this.pushState(\"string\");\n break;\n case 12:\n yy.getLogger().debug(\"LEX: POPPING STR:\", yy_.yytext);\n this.popState();\n break;\n case 13:\n yy.getLogger().debug(\"LEX: STR end:\", yy_.yytext);\n return \"STR\";\n break;\n case 14:\n yy_.yytext = yy_.yytext.replace(/space\\:/, \"\");\n yy.getLogger().debug(\"SPACE NUM (LEX)\", yy_.yytext);\n return 21;\n break;\n case 15:\n yy_.yytext = \"1\";\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 21;\n break;\n case 16:\n return 42;\n break;\n case 17:\n return \"LINKSTYLE\";\n break;\n case 18:\n return \"INTERPOLATE\";\n break;\n case 19:\n this.pushState(\"CLASSDEF\");\n return 39;\n break;\n case 20:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n break;\n case 21:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 40;\n break;\n case 22:\n this.popState();\n return 41;\n break;\n case 23:\n this.pushState(\"CLASS\");\n return 43;\n break;\n case 24:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 44;\n break;\n case 25:\n this.popState();\n return 45;\n break;\n case 26:\n this.pushState(\"STYLE_STMNT\");\n return 46;\n break;\n case 27:\n this.popState();\n this.pushState(\"STYLE_DEFINITION\");\n return 47;\n break;\n case 28:\n this.popState();\n return 48;\n break;\n case 29:\n this.pushState(\"acc_title\");\n return \"acc_title\";\n break;\n case 30:\n this.popState();\n return \"acc_title_value\";\n break;\n case 31:\n this.pushState(\"acc_descr\");\n return \"acc_descr\";\n break;\n case 32:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 33:\n this.pushState(\"acc_descr_multiline\");\n break;\n case 34:\n this.popState();\n break;\n case 35:\n return \"acc_descr_multiline_value\";\n break;\n case 36:\n return 30;\n break;\n case 37:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 38:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 39:\n this.popState();\n yy.getLogger().debug(\"Lex: ))\");\n return \"NODE_DEND\";\n break;\n case 40:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 41:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 42:\n this.popState();\n yy.getLogger().debug(\"Lex: (-\");\n return \"NODE_DEND\";\n break;\n case 43:\n this.popState();\n yy.getLogger().debug(\"Lex: -)\");\n return \"NODE_DEND\";\n break;\n case 44:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n break;\n case 45:\n this.popState();\n yy.getLogger().debug(\"Lex: ]]\");\n return \"NODE_DEND\";\n break;\n case 46:\n this.popState();\n yy.getLogger().debug(\"Lex: (\");\n return \"NODE_DEND\";\n break;\n case 47:\n this.popState();\n yy.getLogger().debug(\"Lex: ])\");\n return \"NODE_DEND\";\n break;\n case 48:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n break;\n case 49:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n break;\n case 50:\n this.popState();\n yy.getLogger().debug(\"Lex: )]\");\n return \"NODE_DEND\";\n break;\n case 51:\n this.popState();\n yy.getLogger().debug(\"Lex: )\");\n return \"NODE_DEND\";\n break;\n case 52:\n this.popState();\n yy.getLogger().debug(\"Lex: ]>\");\n return \"NODE_DEND\";\n break;\n case 53:\n this.popState();\n yy.getLogger().debug(\"Lex: ]\");\n return \"NODE_DEND\";\n break;\n case 54:\n yy.getLogger().debug(\"Lexa: -)\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 55:\n yy.getLogger().debug(\"Lexa: (-\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 56:\n yy.getLogger().debug(\"Lexa: ))\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 57:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 58:\n yy.getLogger().debug(\"Lex: (((\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 59:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 60:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 61:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 62:\n yy.getLogger().debug(\"Lexc: >\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 63:\n yy.getLogger().debug(\"Lexa: ([\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 64:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 65:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 66:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 67:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 68:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 69:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 70:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 71:\n this.pushState(\"NODE\");\n return 35;\n break;\n case 72:\n yy.getLogger().debug(\"Lexa: [\");\n this.pushState(\"NODE\");\n return 35;\n break;\n case 73:\n this.pushState(\"BLOCK_ARROW\");\n yy.getLogger().debug(\"LEX ARR START\");\n return 37;\n break;\n case 74:\n yy.getLogger().debug(\"Lex: NODE_ID\", yy_.yytext);\n return 31;\n break;\n case 75:\n yy.getLogger().debug(\"Lex: EOF\", yy_.yytext);\n return 8;\n break;\n case 76:\n this.pushState(\"md_string\");\n break;\n case 77:\n this.pushState(\"md_string\");\n break;\n case 78:\n return \"NODE_DESCR\";\n break;\n case 79:\n this.popState();\n break;\n case 80:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n break;\n case 81:\n yy.getLogger().debug(\"LEX ARR: Starting string\");\n this.pushState(\"string\");\n break;\n case 82:\n yy.getLogger().debug(\"LEX: NODE_DESCR:\", yy_.yytext);\n return \"NODE_DESCR\";\n break;\n case 83:\n yy.getLogger().debug(\"LEX POPPING\");\n this.popState();\n break;\n case 84:\n yy.getLogger().debug(\"Lex: =>BAE\");\n this.pushState(\"ARROW_DIR\");\n break;\n case 85:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (right): dir:\", yy_.yytext);\n return \"DIR\";\n break;\n case 86:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (left):\", yy_.yytext);\n return \"DIR\";\n break;\n case 87:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (x):\", yy_.yytext);\n return \"DIR\";\n break;\n case 88:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (y):\", yy_.yytext);\n return \"DIR\";\n break;\n case 89:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (up):\", yy_.yytext);\n return \"DIR\";\n break;\n case 90:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (down):\", yy_.yytext);\n return \"DIR\";\n break;\n case 91:\n yy_.yytext = \"]>\";\n yy.getLogger().debug(\"Lex (ARROW_DIR end):\", yy_.yytext);\n this.popState();\n this.popState();\n return \"BLOCK_ARROW_END\";\n break;\n case 92:\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n break;\n case 93:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 94:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 95:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 96:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 97:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 98:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n break;\n case 99:\n this.pushState(\"md_string\");\n break;\n case 100:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n return \"LINK_LABEL\";\n break;\n case 101:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n break;\n case 102:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 103:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n break;\n case 104:\n yy.getLogger().debug(\"Lex: COLON\", yy_.yytext);\n yy_.yytext = yy_.yytext.slice(1);\n return 27;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:block-beta\\b)/, /^(?:block:)/, /^(?:block\\b)/, /^(?:[\\s]+)/, /^(?:[\\n]+)/, /^(?:((\\u000D\\u000A)|(\\u000A)))/, /^(?:columns\\s+auto\\b)/, /^(?:columns\\s+[\\d]+)/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:space[:]\\d+)/, /^(?:space\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\s+)/, /^(?:DEFAULT\\s+)/, /^(?:\\w+\\s+)/, /^(?:[^\\n]*)/, /^(?:class\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:style\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:end\\b\\s*)/, /^(?:\\(\\(\\()/, /^(?:\\)\\)\\))/, /^(?:[\\)]\\))/, /^(?:\\}\\})/, /^(?:\\})/, /^(?:\\(-)/, /^(?:-\\))/, /^(?:\\(\\()/, /^(?:\\]\\])/, /^(?:\\()/, /^(?:\\]\\))/, /^(?:\\\\\\])/, /^(?:\\/\\])/, /^(?:\\)\\])/, /^(?:[\\)])/, /^(?:\\]>)/, /^(?:[\\]])/, /^(?:-\\))/, /^(?:\\(-)/, /^(?:\\)\\))/, /^(?:\\))/, /^(?:\\(\\(\\()/, /^(?:\\(\\()/, /^(?:\\{\\{)/, /^(?:\\{)/, /^(?:>)/, /^(?:\\(\\[)/, /^(?:\\()/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\[\\\\)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:\\[)/, /^(?:<\\[)/, /^(?:[^\\(\\[\\n\\-\\)\\{\\}\\s\\<\\>:]+)/, /^(?:$)/, /^(?:[\"][`])/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:\\]>\\s*\\()/, /^(?:,?\\s*right\\s*)/, /^(?:,?\\s*left\\s*)/, /^(?:,?\\s*x\\s*)/, /^(?:,?\\s*y\\s*)/, /^(?:,?\\s*up\\s*)/, /^(?:,?\\s*down\\s*)/, /^(?:\\)\\s*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[\"][`])/, /^(?:[\"])/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?::\\d+)/],\n conditions: { \"STYLE_DEFINITION\": { \"rules\": [28], \"inclusive\": false }, \"STYLE_STMNT\": { \"rules\": [27], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [22], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [20, 21], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [25], \"inclusive\": false }, \"CLASS\": { \"rules\": [24], \"inclusive\": false }, \"LLABEL\": { \"rules\": [99, 100, 101, 102, 103], \"inclusive\": false }, \"ARROW_DIR\": { \"rules\": [85, 86, 87, 88, 89, 90, 91], \"inclusive\": false }, \"BLOCK_ARROW\": { \"rules\": [76, 81, 84], \"inclusive\": false }, \"NODE\": { \"rules\": [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 77, 80], \"inclusive\": false }, \"md_string\": { \"rules\": [9, 10, 78, 79], \"inclusive\": false }, \"space\": { \"rules\": [], \"inclusive\": false }, \"string\": { \"rules\": [12, 13, 82, 83], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [34, 35], \"inclusive\": false }, \"acc_descr\": { \"rules\": [32], \"inclusive\": false }, \"acc_title\": { \"rules\": [30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 14, 15, 16, 17, 18, 19, 23, 26, 29, 31, 33, 36, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 92, 93, 94, 95, 96, 97, 98, 104], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar block_default = parser;\n\n// src/diagrams/block/blockDB.ts\nimport clone from \"lodash-es/clone.js\";\nvar blockDatabase = /* @__PURE__ */ new Map();\nvar edgeList = [];\nvar edgeCount = /* @__PURE__ */ new Map();\nvar COLOR_KEYWORD = \"color\";\nvar FILL_KEYWORD = \"fill\";\nvar BG_FILL = \"bgFill\";\nvar STYLECLASS_SEP = \",\";\nvar config = getConfig2();\nvar classes = /* @__PURE__ */ new Map();\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, config), \"sanitizeText\");\nvar addStyleClass = /* @__PURE__ */ __name(function(id, styleAttributes = \"\") {\n let foundClass = classes.get(id);\n if (!foundClass) {\n foundClass = { id, styles: [], textStyles: [] };\n classes.set(id, foundClass);\n }\n if (styleAttributes !== void 0 && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (RegExp(COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n}, \"addStyleClass\");\nvar addStyle2Node = /* @__PURE__ */ __name(function(id, styles = \"\") {\n const foundBlock = blockDatabase.get(id);\n if (styles !== void 0 && styles !== null) {\n foundBlock.styles = styles.split(STYLECLASS_SEP);\n }\n}, \"addStyle2Node\");\nvar setCssClass = /* @__PURE__ */ __name(function(itemIds, cssClassName) {\n itemIds.split(\",\").forEach(function(id) {\n let foundBlock = blockDatabase.get(id);\n if (foundBlock === void 0) {\n const trimmedId = id.trim();\n foundBlock = { id: trimmedId, type: \"na\", children: [] };\n blockDatabase.set(trimmedId, foundBlock);\n }\n if (!foundBlock.classes) {\n foundBlock.classes = [];\n }\n foundBlock.classes.push(cssClassName);\n });\n}, \"setCssClass\");\nvar populateBlockDatabase = /* @__PURE__ */ __name((_blockList, parent) => {\n const blockList = _blockList.flat();\n const children = [];\n const columnSettingBlock = blockList.find((b) => b?.type === \"column-setting\");\n const column = columnSettingBlock?.columns ?? -1;\n for (const block of blockList) {\n if (typeof column === \"number\" && column > 0 && block.type !== \"column-setting\" && typeof block.widthInColumns === \"number\" && block.widthInColumns > column) {\n log.warn(\n `Block ${block.id} width ${block.widthInColumns} exceeds configured column width ${column}`\n );\n }\n if (block.label) {\n block.label = sanitizeText2(block.label);\n }\n if (block.type === \"classDef\") {\n addStyleClass(block.id, block.css);\n continue;\n }\n if (block.type === \"applyClass\") {\n setCssClass(block.id, block?.styleClass ?? \"\");\n continue;\n }\n if (block.type === \"applyStyles\") {\n if (block?.stylesStr) {\n addStyle2Node(block.id, block?.stylesStr);\n }\n continue;\n }\n if (block.type === \"column-setting\") {\n parent.columns = block.columns ?? -1;\n } else if (block.type === \"edge\") {\n const count = (edgeCount.get(block.id) ?? 0) + 1;\n edgeCount.set(block.id, count);\n block.id = count + \"-\" + block.id;\n edgeList.push(block);\n } else {\n if (!block.label) {\n if (block.type === \"composite\") {\n block.label = \"\";\n } else {\n block.label = block.id;\n }\n }\n const existingBlock = blockDatabase.get(block.id);\n if (existingBlock === void 0) {\n blockDatabase.set(block.id, block);\n } else {\n if (block.type !== \"na\") {\n existingBlock.type = block.type;\n }\n if (block.label !== block.id) {\n existingBlock.label = block.label;\n }\n }\n if (block.children) {\n populateBlockDatabase(block.children, block);\n }\n if (block.type === \"space\") {\n const w = block.width ?? 1;\n for (let j = 0; j < w; j++) {\n const newBlock = clone(block);\n newBlock.id = newBlock.id + \"-\" + j;\n blockDatabase.set(newBlock.id, newBlock);\n children.push(newBlock);\n }\n } else if (existingBlock === void 0) {\n children.push(block);\n }\n }\n }\n parent.children = children;\n}, \"populateBlockDatabase\");\nvar blocks = [];\nvar rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\nvar clear2 = /* @__PURE__ */ __name(() => {\n log.debug(\"Clear called\");\n clear();\n rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\n blockDatabase = /* @__PURE__ */ new Map([[\"root\", rootBlock]]);\n blocks = [];\n classes = /* @__PURE__ */ new Map();\n edgeList = [];\n edgeCount = /* @__PURE__ */ new Map();\n}, \"clear\");\nfunction typeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"[]\":\n return \"square\";\n case \"()\":\n log.debug(\"we have a round\");\n return \"round\";\n case \"(())\":\n return \"circle\";\n case \">]\":\n return \"rect_left_inv_arrow\";\n case \"{}\":\n return \"diamond\";\n case \"{{}}\":\n return \"hexagon\";\n case \"([])\":\n return \"stadium\";\n case \"[[]]\":\n return \"subroutine\";\n case \"[()]\":\n return \"cylinder\";\n case \"((()))\":\n return \"doublecircle\";\n case \"[//]\":\n return \"lean_right\";\n case \"[\\\\\\\\]\":\n return \"lean_left\";\n case \"[/\\\\]\":\n return \"trapezoid\";\n case \"[\\\\/]\":\n return \"inv_trapezoid\";\n case \"<[]>\":\n return \"block_arrow\";\n default:\n return \"na\";\n }\n}\n__name(typeStr2Type, \"typeStr2Type\");\nfunction edgeTypeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"==\":\n return \"thick\";\n default:\n return \"normal\";\n }\n}\n__name(edgeTypeStr2Type, \"edgeTypeStr2Type\");\nfunction edgeStrToEdgeData(typeStr) {\n switch (typeStr.replace(/^[\\s-]+|[\\s-]+$/g, \"\")) {\n case \"x\":\n return \"arrow_cross\";\n case \"o\":\n return \"arrow_circle\";\n case \">\":\n return \"arrow_point\";\n default:\n return \"\";\n }\n}\n__name(edgeStrToEdgeData, \"edgeStrToEdgeData\");\nvar cnt = 0;\nvar generateId = /* @__PURE__ */ __name(() => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n}, \"generateId\");\nvar setHierarchy = /* @__PURE__ */ __name((block) => {\n rootBlock.children = block;\n populateBlockDatabase(block, rootBlock);\n blocks = rootBlock.children;\n}, \"setHierarchy\");\nvar getColumns = /* @__PURE__ */ __name((blockId) => {\n const block = blockDatabase.get(blockId);\n if (!block) {\n return -1;\n }\n if (block.columns) {\n return block.columns;\n }\n if (!block.children) {\n return -1;\n }\n return block.children.length;\n}, \"getColumns\");\nvar getBlocksFlat = /* @__PURE__ */ __name(() => {\n return [...blockDatabase.values()];\n}, \"getBlocksFlat\");\nvar getBlocks = /* @__PURE__ */ __name(() => {\n return blocks || [];\n}, \"getBlocks\");\nvar getEdges = /* @__PURE__ */ __name(() => {\n return edgeList;\n}, \"getEdges\");\nvar getBlock = /* @__PURE__ */ __name((id) => {\n return blockDatabase.get(id);\n}, \"getBlock\");\nvar setBlock = /* @__PURE__ */ __name((block) => {\n blockDatabase.set(block.id, block);\n}, \"setBlock\");\nvar getLogger = /* @__PURE__ */ __name(() => log, \"getLogger\");\nvar getClasses = /* @__PURE__ */ __name(function() {\n return classes;\n}, \"getClasses\");\nvar db = {\n getConfig: /* @__PURE__ */ __name(() => getConfig().block, \"getConfig\"),\n typeStr2Type,\n edgeTypeStr2Type,\n edgeStrToEdgeData,\n getLogger,\n getBlocksFlat,\n getBlocks,\n getEdges,\n setHierarchy,\n getBlock,\n setBlock,\n getColumns,\n getClasses,\n clear: clear2,\n generateId\n};\nvar blockDB_default = db;\n\n// src/diagrams/block/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${fade(options.mainBkg, 0.5)};\n fill: ${fade(options.clusterBkg, 0.5)};\n stroke: ${fade(options.clusterBorder, 0.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/block/blockRenderer.ts\nimport { select as d3select } from \"d3\";\n\n// src/dagre-wrapper/markers.js\nvar insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n}, \"insertMarkers\");\nvar extension = /* @__PURE__ */ __name((elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n}, \"extension\");\nvar composition = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"composition\");\nvar aggregation = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"aggregation\");\nvar dependency = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 6).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"dependency\");\nvar lollipop = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopEnd\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n}, \"lollipop\");\nvar point = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 6).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 4.5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"point\");\nvar circle = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"circle\");\nvar cross = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n}, \"cross\");\nvar barb = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"barb\");\nvar markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb\n};\nvar markers_default = insertMarkers;\n\n// src/diagrams/block/layout.ts\nvar padding = getConfig2()?.block?.padding ?? 8;\nfunction calculateBlockPosition(columns, position) {\n if (columns === 0 || !Number.isInteger(columns)) {\n throw new Error(\"Columns must be an integer !== 0.\");\n }\n if (position < 0 || !Number.isInteger(position)) {\n throw new Error(\"Position must be a non-negative integer.\" + position);\n }\n if (columns < 0) {\n return { px: position, py: 0 };\n }\n if (columns === 1) {\n return { px: 0, py: position };\n }\n const px = position % columns;\n const py = Math.floor(position / columns);\n return { px, py };\n}\n__name(calculateBlockPosition, \"calculateBlockPosition\");\nvar getMaxChildSize = /* @__PURE__ */ __name((block) => {\n let maxWidth = 0;\n let maxHeight = 0;\n for (const child of block.children) {\n const { width, height, x, y } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };\n log.debug(\n \"getMaxChildSize abc95 child:\",\n child.id,\n \"width:\",\n width,\n \"height:\",\n height,\n \"x:\",\n x,\n \"y:\",\n y,\n child.type\n );\n if (child.type === \"space\") {\n continue;\n }\n if (width > maxWidth) {\n maxWidth = width / (block.widthInColumns ?? 1);\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return { width: maxWidth, height: maxHeight };\n}, \"getMaxChildSize\");\nfunction setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) {\n log.debug(\n \"setBlockSizes abc95 (start)\",\n block.id,\n block?.size?.x,\n \"block width =\",\n block?.size,\n \"siblingWidth\",\n siblingWidth\n );\n if (!block?.size?.width) {\n block.size = {\n width: siblingWidth,\n height: siblingHeight,\n x: 0,\n y: 0\n };\n }\n let maxWidth = 0;\n let maxHeight = 0;\n if (block.children?.length > 0) {\n for (const child of block.children) {\n setBlockSizes(child, db2);\n }\n const childSize = getMaxChildSize(block);\n maxWidth = childSize.width;\n maxHeight = childSize.height;\n log.debug(\"setBlockSizes abc95 maxWidth of\", block.id, \":s children is \", maxWidth, maxHeight);\n for (const child of block.children) {\n if (child.size) {\n log.debug(\n `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}`\n );\n child.size.width = maxWidth * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);\n child.size.height = maxHeight;\n child.size.x = 0;\n child.size.y = 0;\n log.debug(\n `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}`\n );\n }\n }\n for (const child of block.children) {\n setBlockSizes(child, db2, maxWidth, maxHeight);\n }\n const columns = block.columns ?? -1;\n let numItems = 0;\n for (const child of block.children) {\n numItems += child.widthInColumns ?? 1;\n }\n let xSize = block.children.length;\n if (columns > 0 && columns < numItems) {\n xSize = columns;\n }\n const ySize = Math.ceil(numItems / xSize);\n let width = xSize * (maxWidth + padding) + padding;\n let height = ySize * (maxHeight + padding) + padding;\n if (width < siblingWidth) {\n log.debug(\n `Detected to small sibling: abc95 ${block.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width}`\n );\n width = siblingWidth;\n height = siblingHeight;\n const childWidth = (siblingWidth - xSize * padding - padding) / xSize;\n const childHeight = (siblingHeight - ySize * padding - padding) / ySize;\n log.debug(\"Size indata abc88\", block.id, \"childWidth\", childWidth, \"maxWidth\", maxWidth);\n log.debug(\"Size indata abc88\", block.id, \"childHeight\", childHeight, \"maxHeight\", maxHeight);\n log.debug(\"Size indata abc88 xSize\", xSize, \"padding\", padding);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n child.size.height = childHeight;\n child.size.x = 0;\n child.size.y = 0;\n }\n }\n }\n log.debug(\n `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, block.size?.width || 0)}`\n );\n if (width < (block?.size?.width || 0)) {\n width = block?.size?.width || 0;\n const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length;\n if (num > 0) {\n const childWidth = (width - num * padding - padding) / num;\n log.debug(\"abc95 (growing to fit) width\", block.id, width, block.size?.width, childWidth);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n }\n }\n }\n }\n block.size = {\n width,\n height,\n x: 0,\n y: 0\n };\n }\n log.debug(\n \"setBlockSizes abc94 (done)\",\n block.id,\n block?.size?.x,\n block?.size?.width,\n block?.size?.y,\n block?.size?.height\n );\n}\n__name(setBlockSizes, \"setBlockSizes\");\nfunction layoutBlocks(block, db2) {\n log.debug(\n `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n const columns = block.columns ?? -1;\n log.debug(\"layoutBlocks columns abc95\", block.id, \"=>\", columns, block);\n if (block.children && // find max width of children\n block.children.length > 0) {\n const width = block?.children[0]?.size?.width ?? 0;\n const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;\n log.debug(\"widthOfChildren 88\", widthOfChildren, \"posX\");\n let columnPos = 0;\n log.debug(\"abc91 block?.size?.x\", block.id, block?.size?.x);\n let startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n let rowPos = 0;\n for (const child of block.children) {\n const parent = block;\n if (!child.size) {\n continue;\n }\n const { width: width2, height } = child.size;\n const { px, py } = calculateBlockPosition(columns, columnPos);\n if (py != rowPos) {\n rowPos = py;\n startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n log.debug(\"New row in layout for block\", block.id, \" and child \", child.id, rowPos);\n }\n log.debug(\n `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent?.size?.x},${parent?.size?.y}) parent: ${parent.id} width: ${width2}${padding}`\n );\n if (parent.size) {\n const halfWidth = width2 / 2;\n child.size.x = startingPosX + padding + halfWidth;\n log.debug(\n `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * (child?.widthInColumns ?? 1) / 2}`\n );\n startingPosX = child.size.x + halfWidth;\n child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding;\n log.debug(\n `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * (child?.widthInColumns ?? 1) / 2}`\n );\n }\n if (child.children) {\n layoutBlocks(child, db2);\n }\n let columnsFilled = child?.widthInColumns ?? 1;\n if (columns > 0) {\n columnsFilled = Math.min(columnsFilled, columns - columnPos % columns);\n }\n columnPos += columnsFilled;\n log.debug(\"abc88 columnsPos\", child, columnPos);\n }\n }\n log.debug(\n `layout blocks (<==layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n}\n__name(layoutBlocks, \"layoutBlocks\");\nfunction findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) {\n if (block.size && block.id !== \"root\") {\n const { x, y, width, height } = block.size;\n if (x - width / 2 < minX) {\n minX = x - width / 2;\n }\n if (y - height / 2 < minY) {\n minY = y - height / 2;\n }\n if (x + width / 2 > maxX) {\n maxX = x + width / 2;\n }\n if (y + height / 2 > maxY) {\n maxY = y + height / 2;\n }\n }\n if (block.children) {\n for (const child of block.children) {\n ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));\n }\n }\n return { minX, minY, maxX, maxY };\n}\n__name(findBounds, \"findBounds\");\nfunction layout(db2) {\n const root = db2.getBlock(\"root\");\n if (!root) {\n return;\n }\n setBlockSizes(root, db2, 0, 0);\n layoutBlocks(root, db2);\n log.debug(\"getBlocks\", JSON.stringify(root, null, 2));\n const { minX, minY, maxX, maxY } = findBounds(root);\n const height = maxY - minY;\n const width = maxX - minX;\n return { x: minX, y: minY, width, height };\n}\n__name(layout, \"layout\");\n\n// src/diagrams/block/renderHelpers.ts\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\n\n// src/dagre-wrapper/createLabel.js\nimport { select } from \"d3\";\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nfunction addHtmlLabel(node, config2) {\n const fo = select(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const span = div.append(\"span\");\n span.html(sanitizeText(label, config2));\n applyStyle(span, node.labelStyle);\n span.attr(\"class\", labelClass);\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\n__name(addHtmlLabel, \"addHtmlLabel\");\nvar createLabel = /* @__PURE__ */ __name(async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n const config2 = getConfig2();\n if (evaluate(config2.flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n log.debug(\"vertexText\" + vertexText);\n const label = await replaceIconSubstring(decodeEntities(vertexText));\n const node = {\n isNode,\n label,\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node, config2);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/dagre-wrapper/edges.js\nimport { line, curveBasis, select as select2 } from \"d3\";\n\n// src/dagre-wrapper/edgeMarker.ts\nvar addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id, diagramType) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, \"start\", edge.arrowTypeStart, url, id, diagramType);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, \"end\", edge.arrowTypeEnd, url, id, diagramType);\n }\n}, \"addEdgeMarkers\");\nvar arrowTypesMap = {\n arrow_cross: \"cross\",\n arrow_point: \"point\",\n arrow_barb: \"barb\",\n arrow_circle: \"circle\",\n aggregation: \"aggregation\",\n extension: \"extension\",\n composition: \"composition\",\n dependency: \"dependency\",\n lollipop: \"lollipop\"\n};\nvar addEdgeMarker = /* @__PURE__ */ __name((svgPath, position, arrowType, url, id, diagramType) => {\n const endMarkerType = arrowTypesMap[arrowType];\n if (!endMarkerType) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return;\n }\n const suffix = position === \"start\" ? \"Start\" : \"End\";\n svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);\n}, \"addEdgeMarker\");\n\n// src/dagre-wrapper/edges.js\nvar edgeLabels = {};\nvar terminalLabels = {};\nvar insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => {\n const config2 = getConfig2();\n const useHtmlLabels = evaluate(config2.flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? createText(\n elem,\n edge.label,\n {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n },\n config2\n ) : await createLabel_default(edge.label, edge.labelStyle);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select2(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = await createLabel_default(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = await createLabel_default(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = await createLabel_default(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = await createLabel_default(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n}, \"insertEdgeLabel\");\nfunction setTerminalWidth(fo, value) {\n if (getConfig2().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\n__name(setTerminalWidth, \"setTerminalWidth\");\nvar positionEdgeLabel = /* @__PURE__ */ __name((edge, paths) => {\n log.debug(\"Moving label abc88 \", edge.id, edge.label, edgeLabels[edge.id], paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig2();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}, \"positionEdgeLabel\");\nvar outsideNode = /* @__PURE__ */ __name((node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n}, \"outsideNode\");\nvar intersection = /* @__PURE__ */ __name((node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n}, \"intersection\");\nvar cutPathAtIntersect = /* @__PURE__ */ __name((_points, boundaryNode) => {\n log.debug(\"abc88 cutPathAtIntersect\", _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n if (!outsideNode(boundaryNode, point2) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point2);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n }\n isInside = true;\n } else {\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n return points;\n}, \"cutPathAtIntersect\");\nvar insertEdge = /* @__PURE__ */ __name(function(elem, e, edge, clusterDb, diagramType, graph, id) {\n let points = edge.points;\n log.debug(\"abc88 InsertEdge: edge=\", edge, \"e=\", e);\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n if (head?.intersect && tail?.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n log.debug(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.debug(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve = curveBasis;\n if (edge.curve && (diagramType === \"graph\" || diagramType === \"flowchart\")) {\n curve = edge.curve;\n }\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if (getConfig2().flowchart.arrowMarkerAbsolute || getConfig2().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n addEdgeMarkers(svgPath, edge, url, id, diagramType);\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n}, \"insertEdge\");\n\n// src/dagre-wrapper/nodes.js\nimport { select as select4 } from \"d3\";\n\n// src/dagre-wrapper/blockArrowHelper.ts\nvar expandAndDeduplicateDirections = /* @__PURE__ */ __name((directions) => {\n const uniqueDirections = /* @__PURE__ */ new Set();\n for (const direction of directions) {\n switch (direction) {\n case \"x\":\n uniqueDirections.add(\"right\");\n uniqueDirections.add(\"left\");\n break;\n case \"y\":\n uniqueDirections.add(\"up\");\n uniqueDirections.add(\"down\");\n break;\n default:\n uniqueDirections.add(direction);\n break;\n }\n }\n return uniqueDirections;\n}, \"expandAndDeduplicateDirections\");\nvar getArrowPoints = /* @__PURE__ */ __name((duplicatedDirections, bbox, node) => {\n const directions = expandAndDeduplicateDirections(duplicatedDirections);\n const f = 2;\n const height = bbox.height + 2 * node.padding;\n const midpoint = height / f;\n const width = bbox.width + 2 * midpoint + node.padding;\n const padding2 = node.padding / 2;\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom\n { x: 0, y: 0 },\n { x: midpoint, y: 0 },\n { x: width / 2, y: 2 * padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: 0 },\n // Right\n { x: width, y: -height / 3 },\n { x: width + 2 * padding2, y: -height / 2 },\n { x: width, y: -2 * height / 3 },\n { x: width, y: -height },\n // Top\n { x: width - midpoint, y: -height },\n { x: width / 2, y: -height - 2 * padding2 },\n { x: midpoint, y: -height },\n // Left\n { x: 0, y: -height },\n { x: 0, y: -2 * height / 3 },\n { x: -2 * padding2, y: -height / 2 },\n { x: 0, y: -height / 3 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: midpoint, y: 0 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: midpoint, y: -height },\n { x: width - midpoint, y: -height },\n { x: width, y: 0 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: width, y: -height + midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: 0, y: -height + midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding2 },\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: 0, y: -height + padding2 },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding2 },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width, y: -padding2 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: 0 },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\")) {\n return [\n { x: midpoint, y: -padding2 },\n { x: midpoint, y: -padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding2 },\n // top left corner of arrow\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 }\n ];\n }\n if (directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding2 },\n // Two points, the right corners\n { x: width - midpoint, y: -padding2 },\n { x: width - midpoint, y: -height + padding2 },\n { x: midpoint, y: -height + padding2 },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\")) {\n return [\n // Bottom center\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: 0, y: -height + padding2 },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding2 },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 }\n ];\n }\n if (directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding2 },\n { x: midpoint, y: -padding2 },\n // Left top over vertical section\n { x: midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -height + padding2 },\n { x: width - midpoint, y: -padding2 },\n { x: width, y: -padding2 }\n ];\n }\n return [{ x: 0, y: 0 }];\n}, \"getArrowPoints\");\n\n// src/dagre-wrapper/intersect/intersect-node.js\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/dagre-wrapper/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/dagre-wrapper/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point2) {\n return intersect_ellipse_default(node, rx, rx, point2);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/dagre-wrapper/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/dagre-wrapper/intersect/intersect-polygon.js\nvar intersect_polygon_default = intersectPolygon;\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect = intersect_line_default(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\n\n// src/dagre-wrapper/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/dagre-wrapper/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/dagre-wrapper/shapes/util.js\nimport { select as select3 } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes, isNode) => {\n const config2 = getConfig2();\n let classes2;\n const useHtmlLabels = node.useHtmlLabels || evaluate(config2.flowchart.htmlLabels);\n if (!_classes) {\n classes2 = \"node default\";\n } else {\n classes2 = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = createText(\n label,\n sanitizeText(decodeEntities(labelText), config2),\n {\n useHtmlLabels,\n width: node.width || config2.flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n },\n config2\n );\n } else {\n text = textNode.appendChild(\n await createLabel_default(\n sanitizeText(decodeEntities(labelText), config2),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if (evaluate(config2.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select3(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config2.fontSize ? config2.fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n}, \"labelHelper\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/dagre-wrapper/shapes/note.js\nvar note = /* @__PURE__ */ __name(async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig2().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n log.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"note\");\nvar note_default = note;\n\n// src/dagre-wrapper/nodes.js\nvar formatClass = /* @__PURE__ */ __name((str) => {\n if (str) {\n return \" \" + str;\n }\n return \"\";\n}, \"formatClass\");\nvar getClassesFromNode = /* @__PURE__ */ __name((node, otherClasses) => {\n return `${otherClasses ? otherClasses : \"node default\"}${formatClass(node.classes)} ${formatClass(\n node.class\n )}`;\n}, \"getClassesFromNode\");\nvar question = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n log.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n log.warn(\"Intersect called\");\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"question\");\nvar choice = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect_default.circle(node, 14, point2);\n };\n return shapeSvg;\n}, \"choice\");\nvar hexagon = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"hexagon\");\nvar block_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 2;\n const h = bbox.height + 2 * node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = getArrowPoints(node.directions, bbox, node);\n const blockArrow = insertPolygonShape(shapeSvg, w, h, points);\n blockArrow.attr(\"style\", node.style);\n updateNodeBounds(node, blockArrow);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"block_arrow\");\nvar rect_left_inv_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"rect_left_inv_arrow\");\nvar lean_right = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"lean_right\");\nvar lean_left = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"lean_left\");\nvar trapezoid = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"trapezoid\");\nvar inv_trapezoid = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"inv_trapezoid\");\nvar rect_right_inv_arrow = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"rect_right_inv_arrow\");\nvar cylinder = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect_default.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}, \"cylinder\");\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes + \" \" + node.class,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"rect\");\nvar composite = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic cluster composite label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"composite\");\nvar labelRect = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n log.trace(\"Classes = \", node.class);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"labelRect\");\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = /* @__PURE__ */ __name((length) => {\n strokeDashArray.push(length, 0);\n }, \"addBorder\");\n const skipBorder = /* @__PURE__ */ __name((length) => {\n strokeDashArray.push(0, length);\n }, \"skipBorder\");\n if (borders.includes(\"t\")) {\n log.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n log.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n log.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n log.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\n__name(applyNodePropertyBorders, \"applyNodePropertyBorders\");\nvar rectWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n let classes2;\n if (!node.classes) {\n classes2 = \"node default\";\n } else {\n classes2 = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(await createLabel_default(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select4(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n await createLabel_default(\n textRows.join ? textRows.join(\"
\") : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select4(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n select4(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select4(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"rectWithTitle\");\nvar stadium = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"stadium\");\nvar circle2 = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"Circle main\");\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n log.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect_default.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n}, \"circle\");\nvar doublecircle = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", node.class);\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n log.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect_default.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n}, \"doublecircle\");\nvar subroutine = /* @__PURE__ */ __name(async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect_default.polygon(node, points, point2);\n };\n return shapeSvg;\n}, \"subroutine\");\nvar start = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n return intersect_default.circle(node, 7, point2);\n };\n return shapeSvg;\n}, \"start\");\nvar forkJoin = /* @__PURE__ */ __name((parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"forkJoin\");\nvar end = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle3 = shapeSvg.insert(\"circle\", \":first-child\");\n circle3.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle3);\n node.intersect = function(point2) {\n return intersect_default.circle(node, 7, point2);\n };\n return shapeSvg;\n}, \"end\");\nvar class_box = /* @__PURE__ */ __name(async (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes2;\n if (!node.classes) {\n classes2 = \"node default\";\n } else {\n classes2 = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes2).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations?.[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"\\xAB\" + node.classData.annotations[0] + \"\\xBB\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(await createLabel_default(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select4(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if (getConfig2().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(await createLabel_default(classTitleString, node.labelStyle, true, true));\n select4(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select4(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let parsedText = parsedInfo.displayText;\n if (getConfig2().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n await createLabel_default(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select4(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let displayText = parsedInfo.displayText;\n if (getConfig2().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n await createLabel_default(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select4(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n select4(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select4(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n select4(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n select4(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n rect2.attr(\"style\", node.style).attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect_default.rect(node, point2);\n };\n return shapeSvg;\n}, \"class_box\");\nvar shapes = {\n rhombus: question,\n composite,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle: circle2,\n doublecircle,\n stadium,\n hexagon,\n block_arrow,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note_default,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nvar nodeElems = {};\nvar insertNode = /* @__PURE__ */ __name(async (elem, node, renderOptions) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if (getConfig2().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, renderOptions);\n } else {\n el = await shapes[node.shape](elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n}, \"insertNode\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems[node.id];\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding2 = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding2) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\n// src/diagrams/block/renderHelpers.ts\nfunction getNodeFromBlock(block, db2, positioned = false) {\n const vertex = block;\n let classStr = \"default\";\n if ((vertex?.classes?.length || 0) > 0) {\n classStr = (vertex?.classes ?? []).join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n let radius = 0;\n let shape = \"\";\n let padding2;\n switch (vertex.type) {\n case \"round\":\n radius = 5;\n shape = \"rect\";\n break;\n case \"composite\":\n radius = 0;\n shape = \"composite\";\n padding2 = 0;\n break;\n case \"square\":\n shape = \"rect\";\n break;\n case \"diamond\":\n shape = \"question\";\n break;\n case \"hexagon\":\n shape = \"hexagon\";\n break;\n case \"block_arrow\":\n shape = \"block_arrow\";\n break;\n case \"odd\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n shape = \"lean_right\";\n break;\n case \"lean_left\":\n shape = \"lean_left\";\n break;\n case \"trapezoid\":\n shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n shape = \"inv_trapezoid\";\n break;\n case \"rect_left_inv_arrow\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n shape = \"circle\";\n break;\n case \"ellipse\":\n shape = \"ellipse\";\n break;\n case \"stadium\":\n shape = \"stadium\";\n break;\n case \"subroutine\":\n shape = \"subroutine\";\n break;\n case \"cylinder\":\n shape = \"cylinder\";\n break;\n case \"group\":\n shape = \"rect\";\n break;\n case \"doublecircle\":\n shape = \"doublecircle\";\n break;\n default:\n shape = \"rect\";\n }\n const styles = getStylesFromArray(vertex?.styles ?? []);\n const vertexText = vertex.label;\n const bounds = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };\n const node = {\n labelStyle: styles.labelStyle,\n shape,\n labelText: vertexText,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n directions: vertex.directions,\n width: bounds.width,\n height: bounds.height,\n x: bounds.x,\n y: bounds.y,\n positioned,\n intersect: void 0,\n type: vertex.type,\n padding: padding2 ?? getConfig()?.block?.padding ?? 0\n };\n return node;\n}\n__name(getNodeFromBlock, \"getNodeFromBlock\");\nasync function calculateBlockSize(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, false);\n if (node.type === \"group\") {\n return;\n }\n const config2 = getConfig();\n const nodeEl = await insertNode(elem, node, { config: config2 });\n const boundingBox = nodeEl.node().getBBox();\n const obj = db2.getBlock(node.id);\n obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl };\n db2.setBlock(obj);\n nodeEl.remove();\n}\n__name(calculateBlockSize, \"calculateBlockSize\");\nasync function insertBlockPositioned(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, true);\n const obj = db2.getBlock(node.id);\n if (obj.type !== \"space\") {\n const config2 = getConfig();\n await insertNode(elem, node, { config: config2 });\n block.intersect = node?.intersect;\n positionNode(node);\n }\n}\n__name(insertBlockPositioned, \"insertBlockPositioned\");\nasync function performOperations(elem, blocks2, db2, operation) {\n for (const block of blocks2) {\n await operation(elem, block, db2);\n if (block.children) {\n await performOperations(elem, block.children, db2, operation);\n }\n }\n}\n__name(performOperations, \"performOperations\");\nasync function calculateBlockSizes(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, calculateBlockSize);\n}\n__name(calculateBlockSizes, \"calculateBlockSizes\");\nasync function insertBlocks(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, insertBlockPositioned);\n}\n__name(insertBlocks, \"insertBlocks\");\nasync function insertEdges(elem, edges, blocks2, db2, id) {\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n });\n g.setGraph({\n rankdir: \"TB\",\n nodesep: 10,\n ranksep: 10,\n marginx: 8,\n marginy: 8\n });\n for (const block of blocks2) {\n if (block.size) {\n g.setNode(block.id, {\n width: block.size.width,\n height: block.size.height,\n intersect: block.intersect\n });\n }\n }\n for (const edge of edges) {\n if (edge.start && edge.end) {\n const startBlock = db2.getBlock(edge.start);\n const endBlock = db2.getBlock(edge.end);\n if (startBlock?.size && endBlock?.size) {\n const start2 = startBlock.size;\n const end2 = endBlock.size;\n const points = [\n { x: start2.x, y: start2.y },\n { x: start2.x + (end2.x - start2.x) / 2, y: start2.y + (end2.y - start2.y) / 2 },\n { x: end2.x, y: end2.y }\n ];\n insertEdge(\n elem,\n { v: edge.start, w: edge.end, name: edge.id },\n {\n ...edge,\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n },\n void 0,\n \"block\",\n g,\n id\n );\n if (edge.label) {\n await insertEdgeLabel(elem, {\n ...edge,\n label: edge.label,\n labelStyle: \"stroke: #333; stroke-width: 1.5px;fill:none;\",\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n });\n positionEdgeLabel(\n { ...edge, x: points[1].x, y: points[1].y },\n {\n originalPath: points\n }\n );\n }\n }\n }\n }\n}\n__name(insertEdges, \"insertEdges\");\n\n// src/diagrams/block/blockRenderer.ts\nvar getClasses2 = /* @__PURE__ */ __name(function(text, diagObj) {\n return diagObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diagObj) {\n const { securityLevel, block: conf } = getConfig();\n const db2 = diagObj.db;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = d3select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? d3select(sandboxElement.nodes()[0].contentDocument.body) : d3select(\"body\");\n const svg = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : d3select(`[id=\"${id}\"]`);\n const markers2 = [\"point\", \"circle\", \"cross\"];\n markers_default(svg, markers2, diagObj.type, id);\n const bl = db2.getBlocks();\n const blArr = db2.getBlocksFlat();\n const edges = db2.getEdges();\n const nodes = svg.insert(\"g\").attr(\"class\", \"block\");\n await calculateBlockSizes(nodes, bl, db2);\n const bounds = layout(db2);\n await insertBlocks(nodes, bl, db2);\n await insertEdges(nodes, edges, blArr, db2, id);\n if (bounds) {\n const bounds2 = bounds;\n const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));\n const height = bounds2.height + magicFactor + 10;\n const width = bounds2.width + 10;\n const { useMaxWidth } = conf;\n configureSvgSize(svg, height, width, !!useMaxWidth);\n log.debug(\"Here Bounds\", bounds, bounds2);\n svg.attr(\n \"viewBox\",\n `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`\n );\n }\n}, \"draw\");\nvar blockRenderer_default = {\n draw,\n getClasses: getClasses2\n};\n\n// src/diagrams/block/blockDiagram.ts\nvar diagram = {\n parser: block_default,\n db: blockDB_default,\n renderer: blockRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","num","spaceId","edgeData","id","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","block_default","blockDatabase","edgeList","edgeCount","COLOR_KEYWORD","FILL_KEYWORD","BG_FILL","STYLECLASS_SEP","config","getConfig2","classes","sanitizeText2","txt","common_default","addStyleClass","styleAttributes","foundClass","attrib","fixedAttrib","newStyle2","addStyle2Node","styles","foundBlock","setCssClass","itemIds","cssClassName","trimmedId","populateBlockDatabase","_blockList","parent","blockList","children","columnSettingBlock","b","column","block","log","count","existingBlock","w","j","newBlock","clone","blocks","rootBlock","clear2","clear","typeStr2Type","typeStr","edgeTypeStr2Type","edgeStrToEdgeData","cnt","generateId","setHierarchy","getColumns","blockId","getBlocksFlat","getBlocks","getEdges","getBlock","setBlock","getLogger","getClasses","db","getConfig","blockDB_default","fade","color","opacity","channel2","khroma.channel","g","khroma.rgba","getStyles","options","getIconStyles","styles_default","insertMarkers","elem","markerArray","type","markerName","markers","extension","composition","aggregation","dependency","lollipop","point","circle","cross","barb","markers_default","padding","_b","_a","calculateBlockPosition","columns","position","px","py","getMaxChildSize","maxWidth","maxHeight","child","width","height","x","y","setBlockSizes","db2","siblingWidth","siblingHeight","_c","childSize","numItems","xSize","ySize","childWidth","childHeight","_d","_e","_f","_g","_h","_i","_j","_k","layoutBlocks","widthOfChildren","columnPos","startingPosX","rowPos","width2","_l","_m","_n","halfWidth","columnsFilled","_o","_p","_q","findBounds","minX","minY","maxX","maxY","layout","root","applyStyle","dom","styleFn","addHtmlLabel","node","config2","fo","select","div","label","labelClass","span","sanitizeText","createLabel","_vertexText","style","isTitle","isNode","vertexText","evaluate","replaceIconSubstring","decodeEntities","svgLabel","rows","row","tspan","createLabel_default","addEdgeMarkers","svgPath","edge","url","diagramType","addEdgeMarker","arrowTypesMap","arrowType","endMarkerType","suffix","edgeLabels","terminalLabels","insertEdgeLabel","useHtmlLabels","labelElement","createText","edgeLabel","bbox","dv","select2","startLabelElement","startEdgeLabelLeft","inner","slBox","setTerminalWidth","startEdgeLabelRight","endLabelElement","endEdgeLabelLeft","endEdgeLabelRight","value","positionEdgeLabel","paths","path","siteConfig","subGraphTitleTotalMargin","getSubGraphTitleMargins","el","pos","utils_default","outsideNode","point2","dx","dy","h","intersection","outsidePoint","insidePoint","Q","R","q","res","_x","_y","cutPathAtIntersect","_points","boundaryNode","points","lastPointOutside","isInside","inter","pointPresent","e","insertEdge","clusterDb","graph","pointsHasChanged","tail","head","lineData","curve","curveBasis","getLineFunctionsWithOffset","lineFunction","line","strokeClasses","getUrl","expandAndDeduplicateDirections","directions","uniqueDirections","direction","getArrowPoints","duplicatedDirections","f","midpoint","padding2","intersectNode","intersect_node_default","intersectEllipse","rx","ry","cx","cy","det","intersect_ellipse_default","intersectCircle","intersect_circle_default","intersectLine","p1","p2","q1","q2","a1","a2","b1","b2","c1","c2","r1","r2","r3","r4","denom","offset","sameSign","intersect_line_default","intersect_polygon_default","intersectPolygon","polyPoints","x1","y1","intersections","entry","left","top","intersect","pdx","pdy","distp","qdx","qdy","distq","intersectRect","sx","sy","intersect_rect_default","intersect_default","labelHelper","_classes","classes2","shapeSvg","labelText","textNode","text","halfPadding","select3","images","noImgText","img","setupImage","bodyFontSize","updateNodeBounds","element","insertPolygonShape","d","note","rect2","note_default","formatClass","getClassesFromNode","otherClasses","question","s","questionElem","choice","hexagon","m","hex","block_arrow","blockArrow","rect_left_inv_arrow","lean_right","lean_left","trapezoid","inv_trapezoid","rect_right_inv_arrow","cylinder","shape","rect","totalWidth","totalHeight","propKeys","applyNodePropertyBorders","propKey","composite","labelRect","borders","strokeDashArray","addBorder","length","skipBorder","rectWithTitle","innerLine","text2","title","select4","textRows","titleBox","descr","stadium","circle2","circle3","doublecircle","gap","circleGroup","outerCircle","innerCircle","subroutine","start","forkJoin","dir","end","class_box","rowPadding","lineHeight","topLine","bottomLine","labelContainer","verticalPos","hasInterface","interfaceLabelText","interfaceLabel","interfaceBBox","classTitleString","classTitleLabel","classTitleBBox","classAttributes","member","parsedInfo","parsedText","lbl","classMethods","displayText","diffX2","diffX","memberBBox","shapes","nodeElems","insertNode","renderOptions","newEl","target","positionNode","diff","getNodeFromBlock","positioned","vertex","classStr","radius","getStylesFromArray","bounds","calculateBlockSize","nodeEl","boundingBox","obj","insertBlockPositioned","performOperations","blocks2","operation","calculateBlockSizes","insertBlocks","insertEdges","edges","graphlib.Graph","startBlock","endBlock","start2","end2","getClasses2","diagObj","draw","_version","securityLevel","conf","sandboxElement","d3select","svg","bl","blArr","nodes","bounds2","magicFactor","useMaxWidth","configureSvgSize","blockRenderer_default","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js b/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js similarity index 99% rename from massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js rename to massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js index f93a7e957..7fef265fd 100644 --- a/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js +++ b/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js @@ -1,4 +1,4 @@ -import{g as Se,d as De}from"./chunk-TZMSLE5B-C8IfDZlM.js";import{_ as g,s as Pe,g as Be,a as Ie,b as Me,c as Bt,d as jt,l as de,e as Le,f as Ne,h as Tt,i as ge,j as Ye,w as je,k as $t,m as fe}from"./index-yx4Z55Qu.js";var Ft=(function(){var e=g(function(_t,x,m,v){for(m=m||{},v=_t.length;v--;m[_t[v]]=x);return m},"o"),t=[1,24],s=[1,25],o=[1,26],l=[1,27],a=[1,28],r=[1,63],n=[1,64],i=[1,65],u=[1,66],d=[1,67],f=[1,68],y=[1,69],E=[1,29],O=[1,30],S=[1,31],P=[1,32],M=[1,33],U=[1,34],H=[1,35],q=[1,36],G=[1,37],K=[1,38],J=[1,39],Z=[1,40],$=[1,41],tt=[1,42],et=[1,43],at=[1,44],it=[1,45],nt=[1,46],rt=[1,47],st=[1,48],lt=[1,50],ot=[1,51],ct=[1,52],ht=[1,53],ut=[1,54],dt=[1,55],ft=[1,56],pt=[1,57],yt=[1,58],gt=[1,59],bt=[1,60],Ct=[14,42],Qt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],St=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],k=[1,82],A=[1,83],C=[1,84],w=[1,85],T=[12,14,42],le=[12,14,33,42],Mt=[12,14,33,42,76,77,79,80],vt=[12,33],Ht=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],qt={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:g(function(x,m,v,b,R,h,Dt){var p=h.length-1;switch(R){case 3:b.setDirection("TB");break;case 4:b.setDirection("BT");break;case 5:b.setDirection("RL");break;case 6:b.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:b.setC4Type(h[p-3]);break;case 19:b.setTitle(h[p].substring(6)),this.$=h[p].substring(6);break;case 20:b.setAccDescription(h[p].substring(15)),this.$=h[p].substring(15);break;case 21:this.$=h[p].trim(),b.setTitle(this.$);break;case 22:case 23:this.$=h[p].trim(),b.setAccDescription(this.$);break;case 28:h[p].splice(2,0,"ENTERPRISE"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 29:h[p].splice(2,0,"SYSTEM"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 30:b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 31:h[p].splice(2,0,"CONTAINER"),b.addContainerBoundary(...h[p]),this.$=h[p];break;case 32:b.addDeploymentNode("node",...h[p]),this.$=h[p];break;case 33:b.addDeploymentNode("nodeL",...h[p]),this.$=h[p];break;case 34:b.addDeploymentNode("nodeR",...h[p]),this.$=h[p];break;case 35:b.popBoundaryParseStack();break;case 39:b.addPersonOrSystem("person",...h[p]),this.$=h[p];break;case 40:b.addPersonOrSystem("external_person",...h[p]),this.$=h[p];break;case 41:b.addPersonOrSystem("system",...h[p]),this.$=h[p];break;case 42:b.addPersonOrSystem("system_db",...h[p]),this.$=h[p];break;case 43:b.addPersonOrSystem("system_queue",...h[p]),this.$=h[p];break;case 44:b.addPersonOrSystem("external_system",...h[p]),this.$=h[p];break;case 45:b.addPersonOrSystem("external_system_db",...h[p]),this.$=h[p];break;case 46:b.addPersonOrSystem("external_system_queue",...h[p]),this.$=h[p];break;case 47:b.addContainer("container",...h[p]),this.$=h[p];break;case 48:b.addContainer("container_db",...h[p]),this.$=h[p];break;case 49:b.addContainer("container_queue",...h[p]),this.$=h[p];break;case 50:b.addContainer("external_container",...h[p]),this.$=h[p];break;case 51:b.addContainer("external_container_db",...h[p]),this.$=h[p];break;case 52:b.addContainer("external_container_queue",...h[p]),this.$=h[p];break;case 53:b.addComponent("component",...h[p]),this.$=h[p];break;case 54:b.addComponent("component_db",...h[p]),this.$=h[p];break;case 55:b.addComponent("component_queue",...h[p]),this.$=h[p];break;case 56:b.addComponent("external_component",...h[p]),this.$=h[p];break;case 57:b.addComponent("external_component_db",...h[p]),this.$=h[p];break;case 58:b.addComponent("external_component_queue",...h[p]),this.$=h[p];break;case 60:b.addRel("rel",...h[p]),this.$=h[p];break;case 61:b.addRel("birel",...h[p]),this.$=h[p];break;case 62:b.addRel("rel_u",...h[p]),this.$=h[p];break;case 63:b.addRel("rel_d",...h[p]),this.$=h[p];break;case 64:b.addRel("rel_l",...h[p]),this.$=h[p];break;case 65:b.addRel("rel_r",...h[p]),this.$=h[p];break;case 66:b.addRel("rel_b",...h[p]),this.$=h[p];break;case 67:h[p].splice(0,1),b.addRel("rel",...h[p]),this.$=h[p];break;case 68:b.updateElStyle("update_el_style",...h[p]),this.$=h[p];break;case 69:b.updateRelStyle("update_rel_style",...h[p]),this.$=h[p];break;case 70:b.updateLayoutConfig("update_layout_config",...h[p]),this.$=h[p];break;case 71:this.$=[h[p]];break;case 72:h[p].unshift(h[p-1]),this.$=h[p];break;case 73:case 75:this.$=h[p].trim();break;case 74:let Et={};Et[h[p-1].trim()]=h[p].trim(),this.$=Et;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:70,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:71,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:72,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:73,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{14:[1,74]},e(Ct,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(Ct,[2,14]),e(Qt,[2,16],{12:[1,76]}),e(Ct,[2,36],{12:[1,77]}),e(St,[2,19]),e(St,[2,20]),{25:[1,78]},{27:[1,79]},e(St,[2,23]),{35:80,75:81,76:k,77:A,79:C,80:w},{35:86,75:81,76:k,77:A,79:C,80:w},{35:87,75:81,76:k,77:A,79:C,80:w},{35:88,75:81,76:k,77:A,79:C,80:w},{35:89,75:81,76:k,77:A,79:C,80:w},{35:90,75:81,76:k,77:A,79:C,80:w},{35:91,75:81,76:k,77:A,79:C,80:w},{35:92,75:81,76:k,77:A,79:C,80:w},{35:93,75:81,76:k,77:A,79:C,80:w},{35:94,75:81,76:k,77:A,79:C,80:w},{35:95,75:81,76:k,77:A,79:C,80:w},{35:96,75:81,76:k,77:A,79:C,80:w},{35:97,75:81,76:k,77:A,79:C,80:w},{35:98,75:81,76:k,77:A,79:C,80:w},{35:99,75:81,76:k,77:A,79:C,80:w},{35:100,75:81,76:k,77:A,79:C,80:w},{35:101,75:81,76:k,77:A,79:C,80:w},{35:102,75:81,76:k,77:A,79:C,80:w},{35:103,75:81,76:k,77:A,79:C,80:w},{35:104,75:81,76:k,77:A,79:C,80:w},e(T,[2,59]),{35:105,75:81,76:k,77:A,79:C,80:w},{35:106,75:81,76:k,77:A,79:C,80:w},{35:107,75:81,76:k,77:A,79:C,80:w},{35:108,75:81,76:k,77:A,79:C,80:w},{35:109,75:81,76:k,77:A,79:C,80:w},{35:110,75:81,76:k,77:A,79:C,80:w},{35:111,75:81,76:k,77:A,79:C,80:w},{35:112,75:81,76:k,77:A,79:C,80:w},{35:113,75:81,76:k,77:A,79:C,80:w},{35:114,75:81,76:k,77:A,79:C,80:w},{35:115,75:81,76:k,77:A,79:C,80:w},{20:116,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{12:[1,118],33:[1,117]},{35:119,75:81,76:k,77:A,79:C,80:w},{35:120,75:81,76:k,77:A,79:C,80:w},{35:121,75:81,76:k,77:A,79:C,80:w},{35:122,75:81,76:k,77:A,79:C,80:w},{35:123,75:81,76:k,77:A,79:C,80:w},{35:124,75:81,76:k,77:A,79:C,80:w},{35:125,75:81,76:k,77:A,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(Ct,[2,15]),e(Qt,[2,17],{21:22,19:130,22:t,23:s,24:o,26:l,28:a}),e(Ct,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:s,24:o,26:l,28:a,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(St,[2,21]),e(St,[2,22]),e(T,[2,39]),e(le,[2,71],{75:81,35:132,76:k,77:A,79:C,80:w}),e(Mt,[2,73]),{78:[1,133]},e(Mt,[2,75]),e(Mt,[2,76]),e(T,[2,40]),e(T,[2,41]),e(T,[2,42]),e(T,[2,43]),e(T,[2,44]),e(T,[2,45]),e(T,[2,46]),e(T,[2,47]),e(T,[2,48]),e(T,[2,49]),e(T,[2,50]),e(T,[2,51]),e(T,[2,52]),e(T,[2,53]),e(T,[2,54]),e(T,[2,55]),e(T,[2,56]),e(T,[2,57]),e(T,[2,58]),e(T,[2,60]),e(T,[2,61]),e(T,[2,62]),e(T,[2,63]),e(T,[2,64]),e(T,[2,65]),e(T,[2,66]),e(T,[2,67]),e(T,[2,68]),e(T,[2,69]),e(T,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(vt,[2,28]),e(vt,[2,29]),e(vt,[2,30]),e(vt,[2,31]),e(vt,[2,32]),e(vt,[2,33]),e(vt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Qt,[2,18]),e(Ct,[2,38]),e(le,[2,72]),e(Mt,[2,74]),e(T,[2,24]),e(T,[2,35]),e(Ht,[2,25]),e(Ht,[2,26],{12:[1,138]}),e(Ht,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:g(function(x,m){if(m.recoverable)this.trace(x);else{var v=new Error(x);throw v.hash=m,v}},"parseError"),parse:g(function(x){var m=this,v=[0],b=[],R=[null],h=[],Dt=this.table,p="",Et=0,oe=0,we=2,ce=1,Te=h.slice.call(arguments,1),D=Object.create(this.lexer),kt={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(kt.yy[Gt]=this.yy[Gt]);D.setInput(x,kt.yy),kt.yy.lexer=D,kt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Kt=D.yylloc;h.push(Kt);var Oe=D.options&&D.options.ranges;typeof kt.yy.parseError=="function"?this.parseError=kt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Re(L){v.length=v.length-2*L,R.length=R.length-L,h.length=h.length-L}g(Re,"popStack");function he(){var L;return L=b.pop()||D.lex()||ce,typeof L!="number"&&(L instanceof Array&&(b=L,L=b.pop()),L=m.symbols_[L]||L),L}g(he,"lex");for(var I,At,N,Jt,wt={},Nt,W,ue,Yt;;){if(At=v[v.length-1],this.defaultActions[At]?N=this.defaultActions[At]:((I===null||typeof I>"u")&&(I=he()),N=Dt[At]&&Dt[At][I]),typeof N>"u"||!N.length||!N[0]){var Zt="";Yt=[];for(Nt in Dt[At])this.terminals_[Nt]&&Nt>we&&Yt.push("'"+this.terminals_[Nt]+"'");D.showPosition?Zt="Parse error on line "+(Et+1)+`: +import{g as Se,d as De}from"./chunk-TZMSLE5B-CD_nzC2y.js";import{_ as g,s as Pe,g as Be,a as Ie,b as Me,c as Bt,d as jt,l as de,e as Le,f as Ne,h as Tt,i as ge,j as Ye,w as je,k as $t,m as fe}from"./index-DbSnkTMx.js";var Ft=(function(){var e=g(function(_t,x,m,v){for(m=m||{},v=_t.length;v--;m[_t[v]]=x);return m},"o"),t=[1,24],s=[1,25],o=[1,26],l=[1,27],a=[1,28],r=[1,63],n=[1,64],i=[1,65],u=[1,66],d=[1,67],f=[1,68],y=[1,69],E=[1,29],O=[1,30],S=[1,31],P=[1,32],M=[1,33],U=[1,34],H=[1,35],q=[1,36],G=[1,37],K=[1,38],J=[1,39],Z=[1,40],$=[1,41],tt=[1,42],et=[1,43],at=[1,44],it=[1,45],nt=[1,46],rt=[1,47],st=[1,48],lt=[1,50],ot=[1,51],ct=[1,52],ht=[1,53],ut=[1,54],dt=[1,55],ft=[1,56],pt=[1,57],yt=[1,58],gt=[1,59],bt=[1,60],Ct=[14,42],Qt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],St=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],k=[1,82],A=[1,83],C=[1,84],w=[1,85],T=[12,14,42],le=[12,14,33,42],Mt=[12,14,33,42,76,77,79,80],vt=[12,33],Ht=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],qt={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:g(function(x,m,v,b,R,h,Dt){var p=h.length-1;switch(R){case 3:b.setDirection("TB");break;case 4:b.setDirection("BT");break;case 5:b.setDirection("RL");break;case 6:b.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:b.setC4Type(h[p-3]);break;case 19:b.setTitle(h[p].substring(6)),this.$=h[p].substring(6);break;case 20:b.setAccDescription(h[p].substring(15)),this.$=h[p].substring(15);break;case 21:this.$=h[p].trim(),b.setTitle(this.$);break;case 22:case 23:this.$=h[p].trim(),b.setAccDescription(this.$);break;case 28:h[p].splice(2,0,"ENTERPRISE"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 29:h[p].splice(2,0,"SYSTEM"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 30:b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 31:h[p].splice(2,0,"CONTAINER"),b.addContainerBoundary(...h[p]),this.$=h[p];break;case 32:b.addDeploymentNode("node",...h[p]),this.$=h[p];break;case 33:b.addDeploymentNode("nodeL",...h[p]),this.$=h[p];break;case 34:b.addDeploymentNode("nodeR",...h[p]),this.$=h[p];break;case 35:b.popBoundaryParseStack();break;case 39:b.addPersonOrSystem("person",...h[p]),this.$=h[p];break;case 40:b.addPersonOrSystem("external_person",...h[p]),this.$=h[p];break;case 41:b.addPersonOrSystem("system",...h[p]),this.$=h[p];break;case 42:b.addPersonOrSystem("system_db",...h[p]),this.$=h[p];break;case 43:b.addPersonOrSystem("system_queue",...h[p]),this.$=h[p];break;case 44:b.addPersonOrSystem("external_system",...h[p]),this.$=h[p];break;case 45:b.addPersonOrSystem("external_system_db",...h[p]),this.$=h[p];break;case 46:b.addPersonOrSystem("external_system_queue",...h[p]),this.$=h[p];break;case 47:b.addContainer("container",...h[p]),this.$=h[p];break;case 48:b.addContainer("container_db",...h[p]),this.$=h[p];break;case 49:b.addContainer("container_queue",...h[p]),this.$=h[p];break;case 50:b.addContainer("external_container",...h[p]),this.$=h[p];break;case 51:b.addContainer("external_container_db",...h[p]),this.$=h[p];break;case 52:b.addContainer("external_container_queue",...h[p]),this.$=h[p];break;case 53:b.addComponent("component",...h[p]),this.$=h[p];break;case 54:b.addComponent("component_db",...h[p]),this.$=h[p];break;case 55:b.addComponent("component_queue",...h[p]),this.$=h[p];break;case 56:b.addComponent("external_component",...h[p]),this.$=h[p];break;case 57:b.addComponent("external_component_db",...h[p]),this.$=h[p];break;case 58:b.addComponent("external_component_queue",...h[p]),this.$=h[p];break;case 60:b.addRel("rel",...h[p]),this.$=h[p];break;case 61:b.addRel("birel",...h[p]),this.$=h[p];break;case 62:b.addRel("rel_u",...h[p]),this.$=h[p];break;case 63:b.addRel("rel_d",...h[p]),this.$=h[p];break;case 64:b.addRel("rel_l",...h[p]),this.$=h[p];break;case 65:b.addRel("rel_r",...h[p]),this.$=h[p];break;case 66:b.addRel("rel_b",...h[p]),this.$=h[p];break;case 67:h[p].splice(0,1),b.addRel("rel",...h[p]),this.$=h[p];break;case 68:b.updateElStyle("update_el_style",...h[p]),this.$=h[p];break;case 69:b.updateRelStyle("update_rel_style",...h[p]),this.$=h[p];break;case 70:b.updateLayoutConfig("update_layout_config",...h[p]),this.$=h[p];break;case 71:this.$=[h[p]];break;case 72:h[p].unshift(h[p-1]),this.$=h[p];break;case 73:case 75:this.$=h[p].trim();break;case 74:let Et={};Et[h[p-1].trim()]=h[p].trim(),this.$=Et;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:70,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:71,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:72,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:73,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{14:[1,74]},e(Ct,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(Ct,[2,14]),e(Qt,[2,16],{12:[1,76]}),e(Ct,[2,36],{12:[1,77]}),e(St,[2,19]),e(St,[2,20]),{25:[1,78]},{27:[1,79]},e(St,[2,23]),{35:80,75:81,76:k,77:A,79:C,80:w},{35:86,75:81,76:k,77:A,79:C,80:w},{35:87,75:81,76:k,77:A,79:C,80:w},{35:88,75:81,76:k,77:A,79:C,80:w},{35:89,75:81,76:k,77:A,79:C,80:w},{35:90,75:81,76:k,77:A,79:C,80:w},{35:91,75:81,76:k,77:A,79:C,80:w},{35:92,75:81,76:k,77:A,79:C,80:w},{35:93,75:81,76:k,77:A,79:C,80:w},{35:94,75:81,76:k,77:A,79:C,80:w},{35:95,75:81,76:k,77:A,79:C,80:w},{35:96,75:81,76:k,77:A,79:C,80:w},{35:97,75:81,76:k,77:A,79:C,80:w},{35:98,75:81,76:k,77:A,79:C,80:w},{35:99,75:81,76:k,77:A,79:C,80:w},{35:100,75:81,76:k,77:A,79:C,80:w},{35:101,75:81,76:k,77:A,79:C,80:w},{35:102,75:81,76:k,77:A,79:C,80:w},{35:103,75:81,76:k,77:A,79:C,80:w},{35:104,75:81,76:k,77:A,79:C,80:w},e(T,[2,59]),{35:105,75:81,76:k,77:A,79:C,80:w},{35:106,75:81,76:k,77:A,79:C,80:w},{35:107,75:81,76:k,77:A,79:C,80:w},{35:108,75:81,76:k,77:A,79:C,80:w},{35:109,75:81,76:k,77:A,79:C,80:w},{35:110,75:81,76:k,77:A,79:C,80:w},{35:111,75:81,76:k,77:A,79:C,80:w},{35:112,75:81,76:k,77:A,79:C,80:w},{35:113,75:81,76:k,77:A,79:C,80:w},{35:114,75:81,76:k,77:A,79:C,80:w},{35:115,75:81,76:k,77:A,79:C,80:w},{20:116,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{12:[1,118],33:[1,117]},{35:119,75:81,76:k,77:A,79:C,80:w},{35:120,75:81,76:k,77:A,79:C,80:w},{35:121,75:81,76:k,77:A,79:C,80:w},{35:122,75:81,76:k,77:A,79:C,80:w},{35:123,75:81,76:k,77:A,79:C,80:w},{35:124,75:81,76:k,77:A,79:C,80:w},{35:125,75:81,76:k,77:A,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(Ct,[2,15]),e(Qt,[2,17],{21:22,19:130,22:t,23:s,24:o,26:l,28:a}),e(Ct,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:s,24:o,26:l,28:a,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(St,[2,21]),e(St,[2,22]),e(T,[2,39]),e(le,[2,71],{75:81,35:132,76:k,77:A,79:C,80:w}),e(Mt,[2,73]),{78:[1,133]},e(Mt,[2,75]),e(Mt,[2,76]),e(T,[2,40]),e(T,[2,41]),e(T,[2,42]),e(T,[2,43]),e(T,[2,44]),e(T,[2,45]),e(T,[2,46]),e(T,[2,47]),e(T,[2,48]),e(T,[2,49]),e(T,[2,50]),e(T,[2,51]),e(T,[2,52]),e(T,[2,53]),e(T,[2,54]),e(T,[2,55]),e(T,[2,56]),e(T,[2,57]),e(T,[2,58]),e(T,[2,60]),e(T,[2,61]),e(T,[2,62]),e(T,[2,63]),e(T,[2,64]),e(T,[2,65]),e(T,[2,66]),e(T,[2,67]),e(T,[2,68]),e(T,[2,69]),e(T,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(vt,[2,28]),e(vt,[2,29]),e(vt,[2,30]),e(vt,[2,31]),e(vt,[2,32]),e(vt,[2,33]),e(vt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Qt,[2,18]),e(Ct,[2,38]),e(le,[2,72]),e(Mt,[2,74]),e(T,[2,24]),e(T,[2,35]),e(Ht,[2,25]),e(Ht,[2,26],{12:[1,138]}),e(Ht,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:g(function(x,m){if(m.recoverable)this.trace(x);else{var v=new Error(x);throw v.hash=m,v}},"parseError"),parse:g(function(x){var m=this,v=[0],b=[],R=[null],h=[],Dt=this.table,p="",Et=0,oe=0,we=2,ce=1,Te=h.slice.call(arguments,1),D=Object.create(this.lexer),kt={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(kt.yy[Gt]=this.yy[Gt]);D.setInput(x,kt.yy),kt.yy.lexer=D,kt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Kt=D.yylloc;h.push(Kt);var Oe=D.options&&D.options.ranges;typeof kt.yy.parseError=="function"?this.parseError=kt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Re(L){v.length=v.length-2*L,R.length=R.length-L,h.length=h.length-L}g(Re,"popStack");function he(){var L;return L=b.pop()||D.lex()||ce,typeof L!="number"&&(L instanceof Array&&(b=L,L=b.pop()),L=m.symbols_[L]||L),L}g(he,"lex");for(var I,At,N,Jt,wt={},Nt,W,ue,Yt;;){if(At=v[v.length-1],this.defaultActions[At]?N=this.defaultActions[At]:((I===null||typeof I>"u")&&(I=he()),N=Dt[At]&&Dt[At][I]),typeof N>"u"||!N.length||!N[0]){var Zt="";Yt=[];for(Nt in Dt[At])this.terminals_[Nt]&&Nt>we&&Yt.push("'"+this.terminals_[Nt]+"'");D.showPosition?Zt="Parse error on line "+(Et+1)+`: `+D.showPosition()+` Expecting `+Yt.join(", ")+", got '"+(this.terminals_[I]||I)+"'":Zt="Parse error on line "+(Et+1)+": Unexpected "+(I==ce?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(Zt,{text:D.match,token:this.terminals_[I]||I,line:D.yylineno,loc:Kt,expected:Yt})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+At+", token: "+I);switch(N[0]){case 1:v.push(I),R.push(D.yytext),h.push(D.yylloc),v.push(N[1]),I=null,oe=D.yyleng,p=D.yytext,Et=D.yylineno,Kt=D.yylloc;break;case 2:if(W=this.productions_[N[1]][1],wt.$=R[R.length-W],wt._$={first_line:h[h.length-(W||1)].first_line,last_line:h[h.length-1].last_line,first_column:h[h.length-(W||1)].first_column,last_column:h[h.length-1].last_column},Oe&&(wt._$.range=[h[h.length-(W||1)].range[0],h[h.length-1].range[1]]),Jt=this.performAction.apply(wt,[p,oe,Et,kt.yy,N[1],R,h].concat(Te)),typeof Jt<"u")return Jt;W&&(v=v.slice(0,-1*W*2),R=R.slice(0,-1*W),h=h.slice(0,-1*W)),v.push(this.productions_[N[1]][0]),R.push(wt.$),h.push(wt._$),ue=Dt[v[v.length-2]][v[v.length-1]],v.push(ue);break;case 3:return!0}}return!0},"parse")},Ce=(function(){var _t={EOF:1,parseError:g(function(m,v){if(this.yy.parser)this.yy.parser.parseError(m,v);else throw new Error(m)},"parseError"),setInput:g(function(x,m){return this.yy=m||this.yy||{},this._input=x,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:g(function(){var x=this._input[0];this.yytext+=x,this.yyleng++,this.offset++,this.match+=x,this.matched+=x;var m=x.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),x},"input"),unput:g(function(x){var m=x.length,v=x.split(/(?:\r\n?|\n)/g);this._input=x+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),v.length-1&&(this.yylineno-=v.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:v?(v.length===b.length?this.yylloc.first_column:0)+b[b.length-v.length].length-v[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:g(function(){return this._more=!0,this},"more"),reject:g(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:g(function(x){this.unput(this.match.slice(x))},"less"),pastInput:g(function(){var x=this.matched.substr(0,this.matched.length-this.match.length);return(x.length>20?"...":"")+x.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:g(function(){var x=this.match;return x.length<20&&(x+=this._input.substr(0,20-x.length)),(x.substr(0,20)+(x.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:g(function(){var x=this.pastInput(),m=new Array(x.length+1).join("-");return x+this.upcomingInput()+` @@ -8,4 +8,4 @@ Expecting `+Yt.join(", ")+", got '"+(this.terminals_[I]||I)+"'":Zt="Parse error fill: ${e.personBkg}; } `,"getStyles"),P0=D0,M0={parser:Ue,db:te,renderer:ye,styles:P0,init:g(({c4:e,wrap:t})=>{ye.setConf(e),te.setWrap(t)},"init")};export{M0 as diagram}; -//# sourceMappingURL=c4Diagram-YG6GDRKO-CiZrgHxU.js.map +//# sourceMappingURL=c4Diagram-YG6GDRKO-_P4hKvfx.js.map diff --git a/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js.map b/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js.map similarity index 99% rename from massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js.map rename to massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js.map index c64cc8167..5a62c20af 100644 --- a/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-CiZrgHxU.js.map +++ b/massgen/frontend/web/static/assets/c4Diagram-YG6GDRKO-_P4hKvfx.js.map @@ -1 +1 @@ -{"version":3,"file":"c4Diagram-YG6GDRKO-CiZrgHxU.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.mjs"],"sourcesContent":["import {\n drawRect,\n getNoteRect\n} from \"./chunk-TZMSLE5B.mjs\";\nimport {\n calculateTextHeight,\n calculateTextWidth,\n wrapLabel\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n assignWithDepth_default,\n common_default,\n configureSvgSize,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n sanitizeText,\n setAccDescription,\n setAccTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/c4/parser/c4Diagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"direction\": 5, \"direction_tb\": 6, \"direction_bt\": 7, \"direction_rl\": 8, \"direction_lr\": 9, \"graphConfig\": 10, \"C4_CONTEXT\": 11, \"NEWLINE\": 12, \"statements\": 13, \"EOF\": 14, \"C4_CONTAINER\": 15, \"C4_COMPONENT\": 16, \"C4_DYNAMIC\": 17, \"C4_DEPLOYMENT\": 18, \"otherStatements\": 19, \"diagramStatements\": 20, \"otherStatement\": 21, \"title\": 22, \"accDescription\": 23, \"acc_title\": 24, \"acc_title_value\": 25, \"acc_descr\": 26, \"acc_descr_value\": 27, \"acc_descr_multiline_value\": 28, \"boundaryStatement\": 29, \"boundaryStartStatement\": 30, \"boundaryStopStatement\": 31, \"boundaryStart\": 32, \"LBRACE\": 33, \"ENTERPRISE_BOUNDARY\": 34, \"attributes\": 35, \"SYSTEM_BOUNDARY\": 36, \"BOUNDARY\": 37, \"CONTAINER_BOUNDARY\": 38, \"NODE\": 39, \"NODE_L\": 40, \"NODE_R\": 41, \"RBRACE\": 42, \"diagramStatement\": 43, \"PERSON\": 44, \"PERSON_EXT\": 45, \"SYSTEM\": 46, \"SYSTEM_DB\": 47, \"SYSTEM_QUEUE\": 48, \"SYSTEM_EXT\": 49, \"SYSTEM_EXT_DB\": 50, \"SYSTEM_EXT_QUEUE\": 51, \"CONTAINER\": 52, \"CONTAINER_DB\": 53, \"CONTAINER_QUEUE\": 54, \"CONTAINER_EXT\": 55, \"CONTAINER_EXT_DB\": 56, \"CONTAINER_EXT_QUEUE\": 57, \"COMPONENT\": 58, \"COMPONENT_DB\": 59, \"COMPONENT_QUEUE\": 60, \"COMPONENT_EXT\": 61, \"COMPONENT_EXT_DB\": 62, \"COMPONENT_EXT_QUEUE\": 63, \"REL\": 64, \"BIREL\": 65, \"REL_U\": 66, \"REL_D\": 67, \"REL_L\": 68, \"REL_R\": 69, \"REL_B\": 70, \"REL_INDEX\": 71, \"UPDATE_EL_STYLE\": 72, \"UPDATE_REL_STYLE\": 73, \"UPDATE_LAYOUT_CONFIG\": 74, \"attribute\": 75, \"STR\": 76, \"STR_KEY\": 77, \"STR_VALUE\": 78, \"ATTRIBUTE\": 79, \"ATTRIBUTE_EMPTY\": 80, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"direction_tb\", 7: \"direction_bt\", 8: \"direction_rl\", 9: \"direction_lr\", 11: \"C4_CONTEXT\", 12: \"NEWLINE\", 14: \"EOF\", 15: \"C4_CONTAINER\", 16: \"C4_COMPONENT\", 17: \"C4_DYNAMIC\", 18: \"C4_DEPLOYMENT\", 22: \"title\", 23: \"accDescription\", 24: \"acc_title\", 25: \"acc_title_value\", 26: \"acc_descr\", 27: \"acc_descr_value\", 28: \"acc_descr_multiline_value\", 33: \"LBRACE\", 34: \"ENTERPRISE_BOUNDARY\", 36: \"SYSTEM_BOUNDARY\", 37: \"BOUNDARY\", 38: \"CONTAINER_BOUNDARY\", 39: \"NODE\", 40: \"NODE_L\", 41: \"NODE_R\", 42: \"RBRACE\", 44: \"PERSON\", 45: \"PERSON_EXT\", 46: \"SYSTEM\", 47: \"SYSTEM_DB\", 48: \"SYSTEM_QUEUE\", 49: \"SYSTEM_EXT\", 50: \"SYSTEM_EXT_DB\", 51: \"SYSTEM_EXT_QUEUE\", 52: \"CONTAINER\", 53: \"CONTAINER_DB\", 54: \"CONTAINER_QUEUE\", 55: \"CONTAINER_EXT\", 56: \"CONTAINER_EXT_DB\", 57: \"CONTAINER_EXT_QUEUE\", 58: \"COMPONENT\", 59: \"COMPONENT_DB\", 60: \"COMPONENT_QUEUE\", 61: \"COMPONENT_EXT\", 62: \"COMPONENT_EXT_DB\", 63: \"COMPONENT_EXT_QUEUE\", 64: \"REL\", 65: \"BIREL\", 66: \"REL_U\", 67: \"REL_D\", 68: \"REL_L\", 69: \"REL_R\", 70: \"REL_B\", 71: \"REL_INDEX\", 72: \"UPDATE_EL_STYLE\", 73: \"UPDATE_REL_STYLE\", 74: \"UPDATE_LAYOUT_CONFIG\", 76: \"STR\", 77: \"STR_KEY\", 78: \"STR_VALUE\", 79: \"ATTRIBUTE\", 80: \"ATTRIBUTE_EMPTY\" },\n productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setDirection(\"TB\");\n break;\n case 4:\n yy.setDirection(\"BT\");\n break;\n case 5:\n yy.setDirection(\"RL\");\n break;\n case 6:\n yy.setDirection(\"LR\");\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n yy.setC4Type($$[$0 - 3]);\n break;\n case 19:\n yy.setTitle($$[$0].substring(6));\n this.$ = $$[$0].substring(6);\n break;\n case 20:\n yy.setAccDescription($$[$0].substring(15));\n this.$ = $$[$0].substring(15);\n break;\n case 21:\n this.$ = $$[$0].trim();\n yy.setTitle(this.$);\n break;\n case 22:\n case 23:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 28:\n $$[$0].splice(2, 0, \"ENTERPRISE\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 29:\n $$[$0].splice(2, 0, \"SYSTEM\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 30:\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0].splice(2, 0, \"CONTAINER\");\n yy.addContainerBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 32:\n yy.addDeploymentNode(\"node\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 33:\n yy.addDeploymentNode(\"nodeL\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 34:\n yy.addDeploymentNode(\"nodeR\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 35:\n yy.popBoundaryParseStack();\n break;\n case 39:\n yy.addPersonOrSystem(\"person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 40:\n yy.addPersonOrSystem(\"external_person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.addPersonOrSystem(\"system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 42:\n yy.addPersonOrSystem(\"system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 43:\n yy.addPersonOrSystem(\"system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 44:\n yy.addPersonOrSystem(\"external_system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 45:\n yy.addPersonOrSystem(\"external_system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 46:\n yy.addPersonOrSystem(\"external_system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 47:\n yy.addContainer(\"container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 48:\n yy.addContainer(\"container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 49:\n yy.addContainer(\"container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 50:\n yy.addContainer(\"external_container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 51:\n yy.addContainer(\"external_container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 52:\n yy.addContainer(\"external_container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 53:\n yy.addComponent(\"component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 54:\n yy.addComponent(\"component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 55:\n yy.addComponent(\"component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 56:\n yy.addComponent(\"external_component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 57:\n yy.addComponent(\"external_component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 58:\n yy.addComponent(\"external_component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 60:\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 61:\n yy.addRel(\"birel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 62:\n yy.addRel(\"rel_u\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 63:\n yy.addRel(\"rel_d\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 64:\n yy.addRel(\"rel_l\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 65:\n yy.addRel(\"rel_r\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 66:\n yy.addRel(\"rel_b\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 67:\n $$[$0].splice(0, 1);\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 68:\n yy.updateElStyle(\"update_el_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 69:\n yy.updateRelStyle(\"update_rel_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 70:\n yy.updateLayoutConfig(\"update_layout_config\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 71:\n this.$ = [$$[$0]];\n break;\n case 72:\n $$[$0].unshift($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 73:\n case 75:\n this.$ = $$[$0].trim();\n break;\n case 74:\n let kv = {};\n kv[$$[$0 - 1].trim()] = $$[$0].trim();\n this.$ = kv;\n break;\n case 76:\n this.$ = \"\";\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [2, 27])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c2 = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c2 + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 6;\n break;\n case 1:\n return 7;\n break;\n case 2:\n return 8;\n break;\n case 3:\n return 9;\n break;\n case 4:\n return 22;\n break;\n case 5:\n return 23;\n break;\n case 6:\n this.begin(\"acc_title\");\n return 24;\n break;\n case 7:\n this.popState();\n return \"acc_title_value\";\n break;\n case 8:\n this.begin(\"acc_descr\");\n return 26;\n break;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n break;\n case 13:\n break;\n case 14:\n c;\n break;\n case 15:\n return 12;\n break;\n case 16:\n break;\n case 17:\n return 11;\n break;\n case 18:\n return 15;\n break;\n case 19:\n return 16;\n break;\n case 20:\n return 17;\n break;\n case 21:\n return 18;\n break;\n case 22:\n this.begin(\"person_ext\");\n return 45;\n break;\n case 23:\n this.begin(\"person\");\n return 44;\n break;\n case 24:\n this.begin(\"system_ext_queue\");\n return 51;\n break;\n case 25:\n this.begin(\"system_ext_db\");\n return 50;\n break;\n case 26:\n this.begin(\"system_ext\");\n return 49;\n break;\n case 27:\n this.begin(\"system_queue\");\n return 48;\n break;\n case 28:\n this.begin(\"system_db\");\n return 47;\n break;\n case 29:\n this.begin(\"system\");\n return 46;\n break;\n case 30:\n this.begin(\"boundary\");\n return 37;\n break;\n case 31:\n this.begin(\"enterprise_boundary\");\n return 34;\n break;\n case 32:\n this.begin(\"system_boundary\");\n return 36;\n break;\n case 33:\n this.begin(\"container_ext_queue\");\n return 57;\n break;\n case 34:\n this.begin(\"container_ext_db\");\n return 56;\n break;\n case 35:\n this.begin(\"container_ext\");\n return 55;\n break;\n case 36:\n this.begin(\"container_queue\");\n return 54;\n break;\n case 37:\n this.begin(\"container_db\");\n return 53;\n break;\n case 38:\n this.begin(\"container\");\n return 52;\n break;\n case 39:\n this.begin(\"container_boundary\");\n return 38;\n break;\n case 40:\n this.begin(\"component_ext_queue\");\n return 63;\n break;\n case 41:\n this.begin(\"component_ext_db\");\n return 62;\n break;\n case 42:\n this.begin(\"component_ext\");\n return 61;\n break;\n case 43:\n this.begin(\"component_queue\");\n return 60;\n break;\n case 44:\n this.begin(\"component_db\");\n return 59;\n break;\n case 45:\n this.begin(\"component\");\n return 58;\n break;\n case 46:\n this.begin(\"node\");\n return 39;\n break;\n case 47:\n this.begin(\"node\");\n return 39;\n break;\n case 48:\n this.begin(\"node_l\");\n return 40;\n break;\n case 49:\n this.begin(\"node_r\");\n return 41;\n break;\n case 50:\n this.begin(\"rel\");\n return 64;\n break;\n case 51:\n this.begin(\"birel\");\n return 65;\n break;\n case 52:\n this.begin(\"rel_u\");\n return 66;\n break;\n case 53:\n this.begin(\"rel_u\");\n return 66;\n break;\n case 54:\n this.begin(\"rel_d\");\n return 67;\n break;\n case 55:\n this.begin(\"rel_d\");\n return 67;\n break;\n case 56:\n this.begin(\"rel_l\");\n return 68;\n break;\n case 57:\n this.begin(\"rel_l\");\n return 68;\n break;\n case 58:\n this.begin(\"rel_r\");\n return 69;\n break;\n case 59:\n this.begin(\"rel_r\");\n return 69;\n break;\n case 60:\n this.begin(\"rel_b\");\n return 70;\n break;\n case 61:\n this.begin(\"rel_index\");\n return 71;\n break;\n case 62:\n this.begin(\"update_el_style\");\n return 72;\n break;\n case 63:\n this.begin(\"update_rel_style\");\n return 73;\n break;\n case 64:\n this.begin(\"update_layout_config\");\n return 74;\n break;\n case 65:\n return \"EOF_IN_STRUCT\";\n break;\n case 66:\n this.begin(\"attribute\");\n return \"ATTRIBUTE_EMPTY\";\n break;\n case 67:\n this.begin(\"attribute\");\n break;\n case 68:\n this.popState();\n this.popState();\n break;\n case 69:\n return 80;\n break;\n case 70:\n break;\n case 71:\n return 80;\n break;\n case 72:\n this.begin(\"string\");\n break;\n case 73:\n this.popState();\n break;\n case 74:\n return \"STR\";\n break;\n case 75:\n this.begin(\"string_kv\");\n break;\n case 76:\n this.begin(\"string_kv_key\");\n return \"STR_KEY\";\n break;\n case 77:\n this.popState();\n this.begin(\"string_kv_value\");\n break;\n case 78:\n return \"STR_VALUE\";\n break;\n case 79:\n this.popState();\n this.popState();\n break;\n case 80:\n return \"STR\";\n break;\n case 81:\n return \"LBRACE\";\n break;\n case 82:\n return \"RBRACE\";\n break;\n case 83:\n return \"SPACE\";\n break;\n case 84:\n return \"EOL\";\n break;\n case 85:\n return 14;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:title\\s[^#\\n;]+)/, /^(?:accDescription\\s[^#\\n;]+)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:C4Context\\b)/, /^(?:C4Container\\b)/, /^(?:C4Component\\b)/, /^(?:C4Dynamic\\b)/, /^(?:C4Deployment\\b)/, /^(?:Person_Ext\\b)/, /^(?:Person\\b)/, /^(?:SystemQueue_Ext\\b)/, /^(?:SystemDb_Ext\\b)/, /^(?:System_Ext\\b)/, /^(?:SystemQueue\\b)/, /^(?:SystemDb\\b)/, /^(?:System\\b)/, /^(?:Boundary\\b)/, /^(?:Enterprise_Boundary\\b)/, /^(?:System_Boundary\\b)/, /^(?:ContainerQueue_Ext\\b)/, /^(?:ContainerDb_Ext\\b)/, /^(?:Container_Ext\\b)/, /^(?:ContainerQueue\\b)/, /^(?:ContainerDb\\b)/, /^(?:Container\\b)/, /^(?:Container_Boundary\\b)/, /^(?:ComponentQueue_Ext\\b)/, /^(?:ComponentDb_Ext\\b)/, /^(?:Component_Ext\\b)/, /^(?:ComponentQueue\\b)/, /^(?:ComponentDb\\b)/, /^(?:Component\\b)/, /^(?:Deployment_Node\\b)/, /^(?:Node\\b)/, /^(?:Node_L\\b)/, /^(?:Node_R\\b)/, /^(?:Rel\\b)/, /^(?:BiRel\\b)/, /^(?:Rel_Up\\b)/, /^(?:Rel_U\\b)/, /^(?:Rel_Down\\b)/, /^(?:Rel_D\\b)/, /^(?:Rel_Left\\b)/, /^(?:Rel_L\\b)/, /^(?:Rel_Right\\b)/, /^(?:Rel_R\\b)/, /^(?:Rel_Back\\b)/, /^(?:RelIndex\\b)/, /^(?:UpdateElementStyle\\b)/, /^(?:UpdateRelStyle\\b)/, /^(?:UpdateLayoutConfig\\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*[\"][\"])/, /^(?:[ ]*[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[ ]*[\\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[^,]+)/, /^(?:\\{)/, /^(?:\\})/, /^(?:[\\s]+)/, /^(?:[\\n\\r]+)/, /^(?:$)/],\n conditions: { \"acc_descr_multiline\": { \"rules\": [11, 12], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9], \"inclusive\": false }, \"acc_title\": { \"rules\": [7], \"inclusive\": false }, \"string_kv_value\": { \"rules\": [78, 79], \"inclusive\": false }, \"string_kv_key\": { \"rules\": [77], \"inclusive\": false }, \"string_kv\": { \"rules\": [76], \"inclusive\": false }, \"string\": { \"rules\": [73, 74], \"inclusive\": false }, \"attribute\": { \"rules\": [68, 69, 70, 71, 72, 75, 80], \"inclusive\": false }, \"update_layout_config\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_rel_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_el_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_b\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_d\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_u\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_bi\": { \"rules\": [], \"inclusive\": false }, \"rel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"index\": { \"rules\": [], \"inclusive\": false }, \"rel_index\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext_queue\": { \"rules\": [], \"inclusive\": false }, \"component_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"birel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"enterprise_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar c4Diagram_default = parser;\n\n// src/diagrams/c4/c4Db.js\nvar c4ShapeArray = [];\nvar boundaryParseStack = [\"\"];\nvar currentBoundaryParse = \"global\";\nvar parentBoundaryParse = \"\";\nvar boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n];\nvar rels = [];\nvar title = \"\";\nvar wrapEnabled = false;\nvar c4ShapeInRow = 4;\nvar c4BoundaryInRow = 2;\nvar c4Type;\nvar getC4Type = /* @__PURE__ */ __name(function() {\n return c4Type;\n}, \"getC4Type\");\nvar setC4Type = /* @__PURE__ */ __name(function(c4TypeParam) {\n let sanitizedText = sanitizeText(c4TypeParam, getConfig());\n c4Type = sanitizedText;\n}, \"setC4Type\");\nvar addRel = /* @__PURE__ */ __name(function(type, from, to, label, techn, descr, sprite, tags, link) {\n if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) {\n return;\n }\n let rel = {};\n const old = rels.find((rel2) => rel2.from === from && rel2.to === to);\n if (old) {\n rel = old;\n } else {\n rels.push(rel);\n }\n rel.type = type;\n rel.from = from;\n rel.to = to;\n rel.label = { text: label };\n if (techn === void 0 || techn === null) {\n rel.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n rel[key] = { text: value };\n } else {\n rel.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n rel.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n rel[key] = { text: value };\n } else {\n rel.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n rel[key] = value;\n } else {\n rel.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n rel[key] = value;\n } else {\n rel.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n rel[key] = value;\n } else {\n rel.link = link;\n }\n rel.wrap = autoWrap();\n}, \"addRel\");\nvar addPersonOrSystem = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let personOrSystem = {};\n const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);\n if (old && alias === old.alias) {\n personOrSystem = old;\n } else {\n personOrSystem.alias = alias;\n c4ShapeArray.push(personOrSystem);\n }\n if (label === void 0 || label === null) {\n personOrSystem.label = { text: \"\" };\n } else {\n personOrSystem.label = { text: label };\n }\n if (descr === void 0 || descr === null) {\n personOrSystem.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n personOrSystem[key] = { text: value };\n } else {\n personOrSystem.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.link = link;\n }\n personOrSystem.typeC4Shape = { text: typeC4Shape };\n personOrSystem.parentBoundary = currentBoundaryParse;\n personOrSystem.wrap = autoWrap();\n}, \"addPersonOrSystem\");\nvar addContainer = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let container = {};\n const old = c4ShapeArray.find((container2) => container2.alias === alias);\n if (old && alias === old.alias) {\n container = old;\n } else {\n container.alias = alias;\n c4ShapeArray.push(container);\n }\n if (label === void 0 || label === null) {\n container.label = { text: \"\" };\n } else {\n container.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n container.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n container[key] = { text: value };\n } else {\n container.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n container.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n container[key] = { text: value };\n } else {\n container.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n container[key] = value;\n } else {\n container.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n container[key] = value;\n } else {\n container.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n container[key] = value;\n } else {\n container.link = link;\n }\n container.wrap = autoWrap();\n container.typeC4Shape = { text: typeC4Shape };\n container.parentBoundary = currentBoundaryParse;\n}, \"addContainer\");\nvar addComponent = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let component = {};\n const old = c4ShapeArray.find((component2) => component2.alias === alias);\n if (old && alias === old.alias) {\n component = old;\n } else {\n component.alias = alias;\n c4ShapeArray.push(component);\n }\n if (label === void 0 || label === null) {\n component.label = { text: \"\" };\n } else {\n component.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n component.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n component[key] = { text: value };\n } else {\n component.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n component.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n component[key] = { text: value };\n } else {\n component.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n component[key] = value;\n } else {\n component.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n component[key] = value;\n } else {\n component.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n component[key] = value;\n } else {\n component.link = link;\n }\n component.wrap = autoWrap();\n component.typeC4Shape = { text: typeC4Shape };\n component.parentBoundary = currentBoundaryParse;\n}, \"addComponent\");\nvar addPersonOrSystemBoundary = /* @__PURE__ */ __name(function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"system\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addPersonOrSystemBoundary\");\nvar addContainerBoundary = /* @__PURE__ */ __name(function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"container\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addContainerBoundary\");\nvar addDeploymentNode = /* @__PURE__ */ __name(function(nodeType, alias, label, type, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"node\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (descr === void 0 || descr === null) {\n boundary.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n boundary[key] = { text: value };\n } else {\n boundary.descr = { text: descr };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.nodeType = nodeType;\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addDeploymentNode\");\nvar popBoundaryParseStack = /* @__PURE__ */ __name(function() {\n currentBoundaryParse = parentBoundaryParse;\n boundaryParseStack.pop();\n parentBoundaryParse = boundaryParseStack.pop();\n boundaryParseStack.push(parentBoundaryParse);\n}, \"popBoundaryParseStack\");\nvar updateElStyle = /* @__PURE__ */ __name(function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {\n let old = c4ShapeArray.find((element) => element.alias === elementName);\n if (old === void 0) {\n old = boundaries.find((element) => element.alias === elementName);\n if (old === void 0) {\n return;\n }\n }\n if (bgColor !== void 0 && bgColor !== null) {\n if (typeof bgColor === \"object\") {\n let [key, value] = Object.entries(bgColor)[0];\n old[key] = value;\n } else {\n old.bgColor = bgColor;\n }\n }\n if (fontColor !== void 0 && fontColor !== null) {\n if (typeof fontColor === \"object\") {\n let [key, value] = Object.entries(fontColor)[0];\n old[key] = value;\n } else {\n old.fontColor = fontColor;\n }\n }\n if (borderColor !== void 0 && borderColor !== null) {\n if (typeof borderColor === \"object\") {\n let [key, value] = Object.entries(borderColor)[0];\n old[key] = value;\n } else {\n old.borderColor = borderColor;\n }\n }\n if (shadowing !== void 0 && shadowing !== null) {\n if (typeof shadowing === \"object\") {\n let [key, value] = Object.entries(shadowing)[0];\n old[key] = value;\n } else {\n old.shadowing = shadowing;\n }\n }\n if (shape !== void 0 && shape !== null) {\n if (typeof shape === \"object\") {\n let [key, value] = Object.entries(shape)[0];\n old[key] = value;\n } else {\n old.shape = shape;\n }\n }\n if (sprite !== void 0 && sprite !== null) {\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n old[key] = value;\n } else {\n old.sprite = sprite;\n }\n }\n if (techn !== void 0 && techn !== null) {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n old[key] = value;\n } else {\n old.techn = techn;\n }\n }\n if (legendText !== void 0 && legendText !== null) {\n if (typeof legendText === \"object\") {\n let [key, value] = Object.entries(legendText)[0];\n old[key] = value;\n } else {\n old.legendText = legendText;\n }\n }\n if (legendSprite !== void 0 && legendSprite !== null) {\n if (typeof legendSprite === \"object\") {\n let [key, value] = Object.entries(legendSprite)[0];\n old[key] = value;\n } else {\n old.legendSprite = legendSprite;\n }\n }\n}, \"updateElStyle\");\nvar updateRelStyle = /* @__PURE__ */ __name(function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) {\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old === void 0) {\n return;\n }\n if (textColor !== void 0 && textColor !== null) {\n if (typeof textColor === \"object\") {\n let [key, value] = Object.entries(textColor)[0];\n old[key] = value;\n } else {\n old.textColor = textColor;\n }\n }\n if (lineColor !== void 0 && lineColor !== null) {\n if (typeof lineColor === \"object\") {\n let [key, value] = Object.entries(lineColor)[0];\n old[key] = value;\n } else {\n old.lineColor = lineColor;\n }\n }\n if (offsetX !== void 0 && offsetX !== null) {\n if (typeof offsetX === \"object\") {\n let [key, value] = Object.entries(offsetX)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetX = parseInt(offsetX);\n }\n }\n if (offsetY !== void 0 && offsetY !== null) {\n if (typeof offsetY === \"object\") {\n let [key, value] = Object.entries(offsetY)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetY = parseInt(offsetY);\n }\n }\n}, \"updateRelStyle\");\nvar updateLayoutConfig = /* @__PURE__ */ __name(function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n let c4ShapeInRowValue = c4ShapeInRow;\n let c4BoundaryInRowValue = c4BoundaryInRow;\n if (typeof c4ShapeInRowParam === \"object\") {\n const value = Object.values(c4ShapeInRowParam)[0];\n c4ShapeInRowValue = parseInt(value);\n } else {\n c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n }\n if (typeof c4BoundaryInRowParam === \"object\") {\n const value = Object.values(c4BoundaryInRowParam)[0];\n c4BoundaryInRowValue = parseInt(value);\n } else {\n c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n }\n if (c4ShapeInRowValue >= 1) {\n c4ShapeInRow = c4ShapeInRowValue;\n }\n if (c4BoundaryInRowValue >= 1) {\n c4BoundaryInRow = c4BoundaryInRowValue;\n }\n}, \"updateLayoutConfig\");\nvar getC4ShapeInRow = /* @__PURE__ */ __name(function() {\n return c4ShapeInRow;\n}, \"getC4ShapeInRow\");\nvar getC4BoundaryInRow = /* @__PURE__ */ __name(function() {\n return c4BoundaryInRow;\n}, \"getC4BoundaryInRow\");\nvar getCurrentBoundaryParse = /* @__PURE__ */ __name(function() {\n return currentBoundaryParse;\n}, \"getCurrentBoundaryParse\");\nvar getParentBoundaryParse = /* @__PURE__ */ __name(function() {\n return parentBoundaryParse;\n}, \"getParentBoundaryParse\");\nvar getC4ShapeArray = /* @__PURE__ */ __name(function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return c4ShapeArray;\n } else {\n return c4ShapeArray.filter((personOrSystem) => {\n return personOrSystem.parentBoundary === parentBoundary;\n });\n }\n}, \"getC4ShapeArray\");\nvar getC4Shape = /* @__PURE__ */ __name(function(alias) {\n return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n}, \"getC4Shape\");\nvar getC4ShapeKeys = /* @__PURE__ */ __name(function(parentBoundary) {\n return Object.keys(getC4ShapeArray(parentBoundary));\n}, \"getC4ShapeKeys\");\nvar getBoundaries = /* @__PURE__ */ __name(function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return boundaries;\n } else {\n return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary);\n }\n}, \"getBoundaries\");\nvar getBoundarys = getBoundaries;\nvar getRels = /* @__PURE__ */ __name(function() {\n return rels;\n}, \"getRels\");\nvar getTitle = /* @__PURE__ */ __name(function() {\n return title;\n}, \"getTitle\");\nvar setWrap = /* @__PURE__ */ __name(function(wrapSetting) {\n wrapEnabled = wrapSetting;\n}, \"setWrap\");\nvar autoWrap = /* @__PURE__ */ __name(function() {\n return wrapEnabled;\n}, \"autoWrap\");\nvar clear = /* @__PURE__ */ __name(function() {\n c4ShapeArray = [];\n boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n ];\n parentBoundaryParse = \"\";\n currentBoundaryParse = \"global\";\n boundaryParseStack = [\"\"];\n rels = [];\n boundaryParseStack = [\"\"];\n title = \"\";\n wrapEnabled = false;\n c4ShapeInRow = 4;\n c4BoundaryInRow = 2;\n}, \"clear\");\nvar LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25\n};\nvar ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n};\nvar PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n};\nvar setTitle = /* @__PURE__ */ __name(function(txt) {\n let sanitizedText = sanitizeText(txt, getConfig());\n title = sanitizedText;\n}, \"setTitle\");\nvar c4Db_default = {\n addPersonOrSystem,\n addPersonOrSystemBoundary,\n addContainer,\n addContainerBoundary,\n addComponent,\n addDeploymentNode,\n popBoundaryParseStack,\n addRel,\n updateElStyle,\n updateRelStyle,\n updateLayoutConfig,\n autoWrap,\n setWrap,\n getC4ShapeArray,\n getC4Shape,\n getC4ShapeKeys,\n getBoundaries,\n getBoundarys,\n getCurrentBoundaryParse,\n getParentBoundaryParse,\n getRels,\n getTitle,\n getC4Type,\n getC4ShapeInRow,\n getC4BoundaryInRow,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n getConfig: /* @__PURE__ */ __name(() => getConfig().c4, \"getConfig\"),\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n setTitle,\n setC4Type\n // apply,\n};\n\n// src/diagrams/c4/c4Renderer.js\nimport { select } from \"d3\";\n\n// src/diagrams/c4/svgDraw.js\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nvar drawRect2 = /* @__PURE__ */ __name(function(elem, rectData) {\n return drawRect(elem, rectData);\n}, \"drawRect\");\nvar drawImage = /* @__PURE__ */ __name(function(elem, width, height, x, y, link) {\n const imageElem = elem.append(\"image\");\n imageElem.attr(\"width\", width);\n imageElem.attr(\"height\", height);\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n let sanitizedLink = link.startsWith(\"data:image/png;base64\") ? link : sanitizeUrl(link);\n imageElem.attr(\"xlink:href\", sanitizedLink);\n}, \"drawImage\");\nvar drawRels = /* @__PURE__ */ __name((elem, rels2, conf2) => {\n const relsElem = elem.append(\"g\");\n let i = 0;\n for (let rel of rels2) {\n let textColor = rel.textColor ? rel.textColor : \"#444444\";\n let strokeColor = rel.lineColor ? rel.lineColor : \"#444444\";\n let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n let url = \"\";\n if (i === 0) {\n let line = relsElem.append(\"line\");\n line.attr(\"x1\", rel.startPoint.x);\n line.attr(\"y1\", rel.startPoint.y);\n line.attr(\"x2\", rel.endPoint.x);\n line.attr(\"y2\", rel.endPoint.y);\n line.attr(\"stroke-width\", \"1\");\n line.attr(\"stroke\", strokeColor);\n line.style(\"fill\", \"none\");\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n i = -1;\n } else {\n let line = relsElem.append(\"path\");\n line.attr(\"fill\", \"none\").attr(\"stroke-width\", \"1\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,starty Qcontrolx,controly stopx,stopy \".replaceAll(\"startx\", rel.startPoint.x).replaceAll(\"starty\", rel.startPoint.y).replaceAll(\n \"controlx\",\n rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4\n ).replaceAll(\"controly\", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll(\"stopx\", rel.endPoint.x).replaceAll(\"stopy\", rel.endPoint.y)\n );\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n }\n let messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n rel.label.text,\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY,\n rel.label.width,\n rel.label.height,\n { fill: textColor },\n messageConf\n );\n if (rel.techn && rel.techn.text !== \"\") {\n messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n \"[\" + rel.techn.text + \"]\",\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY,\n Math.max(rel.label.width, rel.techn.width),\n rel.techn.height,\n { fill: textColor, \"font-style\": \"italic\" },\n messageConf\n );\n }\n }\n}, \"drawRels\");\nvar drawBoundary = /* @__PURE__ */ __name(function(elem, boundary, conf2) {\n const boundaryElem = elem.append(\"g\");\n let fillColor = boundary.bgColor ? boundary.bgColor : \"none\";\n let strokeColor = boundary.borderColor ? boundary.borderColor : \"#444444\";\n let fontColor = boundary.fontColor ? boundary.fontColor : \"black\";\n let attrsValue = { \"stroke-width\": 1, \"stroke-dasharray\": \"7.0,7.0\" };\n if (boundary.nodeType) {\n attrsValue = { \"stroke-width\": 1 };\n }\n let rectData = {\n x: boundary.x,\n y: boundary.y,\n fill: fillColor,\n stroke: strokeColor,\n width: boundary.width,\n height: boundary.height,\n rx: 2.5,\n ry: 2.5,\n attrs: attrsValue\n };\n drawRect2(boundaryElem, rectData);\n let boundaryConf = conf2.boundaryFont();\n boundaryConf.fontWeight = \"bold\";\n boundaryConf.fontSize = boundaryConf.fontSize + 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.label.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.label.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n if (boundary.type && boundary.type.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.type.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.type.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n if (boundary.descr && boundary.descr.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontSize = boundaryConf.fontSize - 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.descr.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.descr.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n}, \"drawBoundary\");\nvar drawC4Shape = /* @__PURE__ */ __name(function(elem, c4Shape, conf2) {\n let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + \"_bg_color\"];\n let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + \"_border_color\"];\n let fontColor = c4Shape.fontColor ? c4Shape.fontColor : \"#FFFFFF\";\n let personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n break;\n case \"external_person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=\";\n break;\n }\n const c4ShapeElem = elem.append(\"g\");\n c4ShapeElem.attr(\"class\", \"person-man\");\n const rect = getNoteRect();\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n case \"system\":\n case \"external_system\":\n case \"container\":\n case \"external_container\":\n case \"component\":\n case \"external_component\":\n rect.x = c4Shape.x;\n rect.y = c4Shape.y;\n rect.fill = fillColor;\n rect.width = c4Shape.width;\n rect.height = c4Shape.height;\n rect.stroke = strokeColor;\n rect.rx = 2.5;\n rect.ry = 2.5;\n rect.attrs = { \"stroke-width\": 0.5 };\n drawRect2(c4ShapeElem, rect);\n break;\n case \"system_db\":\n case \"external_system_db\":\n case \"container_db\":\n case \"external_container_db\":\n case \"component_db\":\n case \"external_component_db\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2).replaceAll(\"height\", c4Shape.height)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2)\n );\n break;\n case \"system_queue\":\n case \"external_system_queue\":\n case \"container_queue\":\n case \"external_container_queue\":\n case \"component_queue\":\n case \"external_component_queue\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"width\", c4Shape.width).replaceAll(\"half\", c4Shape.height / 2)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half\".replaceAll(\"startx\", c4Shape.x + c4Shape.width).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.height / 2)\n );\n break;\n }\n let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text);\n c4ShapeElem.append(\"text\").attr(\"fill\", fontColor).attr(\"font-family\", c4ShapeFontConf.fontFamily).attr(\"font-size\", c4ShapeFontConf.fontSize - 2).attr(\"font-style\", \"italic\").attr(\"lengthAdjust\", \"spacing\").attr(\"textLength\", c4Shape.typeC4Shape.width).attr(\"x\", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr(\"y\", c4Shape.y + c4Shape.typeC4Shape.Y).text(\"<<\" + c4Shape.typeC4Shape.text + \">>\");\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n drawImage(\n c4ShapeElem,\n 48,\n 48,\n c4Shape.x + c4Shape.width / 2 - 24,\n c4Shape.y + c4Shape.image.Y,\n personImg\n );\n break;\n }\n let textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontWeight = \"bold\";\n textFontConf.fontSize = textFontConf.fontSize + 2;\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.label.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.label.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontColor = fontColor;\n if (c4Shape.techn && c4Shape.techn?.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.techn.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.techn.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n } else if (c4Shape.type && c4Shape.type.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.type.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.type.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n }\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n textFontConf = conf2.personFont();\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.descr.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.descr.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n }\n return c4Shape.height;\n}, \"drawC4Shape\");\nvar insertDatabaseIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"database\").attr(\"fill-rule\", \"evenodd\").attr(\"clip-rule\", \"evenodd\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"\n );\n}, \"insertDatabaseIcon\");\nvar insertComputerIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"computer\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"\n );\n}, \"insertComputerIcon\");\nvar insertClockIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"clock\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"\n );\n}, \"insertClockIcon\");\nvar insertArrowHead = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n}, \"insertArrowHead\");\nvar insertArrowEnd = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowend\").attr(\"refX\", 1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 10 0 L 0 5 L 10 10 z\");\n}, \"insertArrowEnd\");\nvar insertArrowFilledHead = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"filled-head\").attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"insertArrowFilledHead\");\nvar insertDynamicNumber = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"sequencenumber\").attr(\"refX\", 15).attr(\"refY\", 15).attr(\"markerWidth\", 60).attr(\"markerHeight\", 40).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", 15).attr(\"cy\", 15).attr(\"r\", 6);\n}, \"insertDynamicNumber\");\nvar insertArrowCrossHead = /* @__PURE__ */ __name(function(elem) {\n const defs = elem.append(\"defs\");\n const marker = defs.append(\"marker\").attr(\"id\", \"crosshead\").attr(\"markerWidth\", 15).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").attr(\"refX\", 16).attr(\"refY\", 4);\n marker.append(\"path\").attr(\"fill\", \"black\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 9,2 V 6 L16,4 Z\");\n marker.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 0,1 L 6,7 M 6,1 L 0,7\");\n}, \"insertArrowCrossHead\");\nvar getC4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n}, \"getC4ShapeFont\");\nvar _drawTextCandidateFunc = /* @__PURE__ */ (function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n __name(byText, \"byText\");\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { fontSize, fontFamily, fontWeight } = conf2;\n const lines = content.split(common_default.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * fontSize - fontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).style(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").style(\"font-size\", fontSize).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily);\n text.append(\"tspan\").attr(\"dy\", dy).text(lines[i]).attr(\"alignment-baseline\", \"mathematical\");\n _setTextAttrs(text, textAttrs);\n }\n }\n __name(byTspan, \"byTspan\");\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n __name(byFo, \"byFo\");\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n __name(_setTextAttrs, \"_setTextAttrs\");\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n})();\nvar svgDraw_default = {\n drawRect: drawRect2,\n drawBoundary,\n drawC4Shape,\n drawRels,\n drawImage,\n insertArrowHead,\n insertArrowEnd,\n insertArrowFilledHead,\n insertDynamicNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon\n};\n\n// src/diagrams/c4/c4Renderer.js\nvar globalBoundaryMaxX = 0;\nvar globalBoundaryMaxY = 0;\nvar c4ShapeInRow2 = 4;\nvar c4BoundaryInRow2 = 2;\nparser.yy = c4Db_default;\nvar conf = {};\nvar Bounds = class {\n static {\n __name(this, \"Bounds\");\n }\n constructor(diagObj) {\n this.name = \"\";\n this.data = {};\n this.data.startx = void 0;\n this.data.stopx = void 0;\n this.data.starty = void 0;\n this.data.stopy = void 0;\n this.data.widthLimit = void 0;\n this.nextData = {};\n this.nextData.startx = void 0;\n this.nextData.stopx = void 0;\n this.nextData.starty = void 0;\n this.nextData.stopy = void 0;\n this.nextData.cnt = 0;\n setConf(diagObj.db.getConfig());\n }\n setData(startx, stopx, starty, stopy) {\n this.nextData.startx = this.data.startx = startx;\n this.nextData.stopx = this.data.stopx = stopx;\n this.nextData.starty = this.data.starty = starty;\n this.nextData.stopy = this.data.stopy = stopy;\n }\n updateVal(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n }\n insert(c4Shape) {\n this.nextData.cnt = this.nextData.cnt + 1;\n let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;\n let _stopx = _startx + c4Shape.width;\n let _starty = this.nextData.starty + c4Shape.margin * 2;\n let _stopy = _starty + c4Shape.height;\n if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow2) {\n _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n _starty = this.nextData.stopy + c4Shape.margin * 2;\n this.nextData.stopx = _stopx = _startx + c4Shape.width;\n this.nextData.starty = this.nextData.stopy;\n this.nextData.stopy = _stopy = _starty + c4Shape.height;\n this.nextData.cnt = 1;\n }\n c4Shape.x = _startx;\n c4Shape.y = _starty;\n this.updateVal(this.data, \"startx\", _startx, Math.min);\n this.updateVal(this.data, \"starty\", _starty, Math.min);\n this.updateVal(this.data, \"stopx\", _stopx, Math.max);\n this.updateVal(this.data, \"stopy\", _stopy, Math.max);\n this.updateVal(this.nextData, \"startx\", _startx, Math.min);\n this.updateVal(this.nextData, \"starty\", _starty, Math.min);\n this.updateVal(this.nextData, \"stopx\", _stopx, Math.max);\n this.updateVal(this.nextData, \"stopy\", _stopy, Math.max);\n }\n init(diagObj) {\n this.name = \"\";\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n widthLimit: void 0\n };\n this.nextData = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n cnt: 0\n };\n setConf(diagObj.db.getConfig());\n }\n bumpLastMargin(margin) {\n this.data.stopx += margin;\n this.data.stopy += margin;\n }\n};\nvar setConf = /* @__PURE__ */ __name(function(cnf) {\n assignWithDepth_default(conf, cnf);\n if (cnf.fontFamily) {\n conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n}, \"setConf\");\nvar c4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n}, \"c4ShapeFont\");\nvar boundaryFont = /* @__PURE__ */ __name((cnf) => {\n return {\n fontFamily: cnf.boundaryFontFamily,\n fontSize: cnf.boundaryFontSize,\n fontWeight: cnf.boundaryFontWeight\n };\n}, \"boundaryFont\");\nvar messageFont = /* @__PURE__ */ __name((cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight\n };\n}, \"messageFont\");\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n if (!c4Shape[textType].width) {\n if (c4ShapeTextWrap) {\n c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);\n c4Shape[textType].textLines = c4Shape[textType].text.split(common_default.lineBreakRegex).length;\n c4Shape[textType].width = textLimitWidth;\n c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);\n } else {\n let lines = c4Shape[textType].text.split(common_default.lineBreakRegex);\n c4Shape[textType].textLines = lines.length;\n let lineHeight = 0;\n c4Shape[textType].height = 0;\n c4Shape[textType].width = 0;\n for (const line of lines) {\n c4Shape[textType].width = Math.max(\n calculateTextWidth(line, textConf),\n c4Shape[textType].width\n );\n lineHeight = calculateTextHeight(line, textConf);\n c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n }\n }\n }\n}\n__name(calcC4ShapeTextWH, \"calcC4ShapeTextWH\");\nvar drawBoundary2 = /* @__PURE__ */ __name(function(diagram2, boundary, bounds) {\n boundary.x = bounds.data.startx;\n boundary.y = bounds.data.starty;\n boundary.width = bounds.data.stopx - bounds.data.startx;\n boundary.height = bounds.data.stopy - bounds.data.starty;\n boundary.label.y = conf.c4ShapeMargin - 35;\n let boundaryTextWrap = boundary.wrap && conf.wrap;\n let boundaryLabelConf = boundaryFont(conf);\n boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n boundaryLabelConf.fontWeight = \"bold\";\n let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);\n calcC4ShapeTextWH(\"label\", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n svgDraw_default.drawBoundary(diagram2, boundary, conf);\n}, \"drawBoundary\");\nvar drawC4ShapeArray = /* @__PURE__ */ __name(function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) {\n let Y = 0;\n for (const c4ShapeKey of c4ShapeKeys) {\n Y = 0;\n const c4Shape = c4ShapeArray2[c4ShapeKey];\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n c4Shape.typeC4Shape.width = calculateTextWidth(\n \"\\xAB\" + c4Shape.typeC4Shape.text + \"\\xBB\",\n c4ShapeTypeConf\n );\n c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n c4Shape.image = { width: 0, height: 0, Y: 0 };\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n break;\n }\n if (c4Shape.sprite) {\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n }\n let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n c4ShapeLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\"label\", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n c4Shape.label.Y = Y + 8;\n Y = c4Shape.label.Y + c4Shape.label.height;\n if (c4Shape.type && c4Shape.type.text !== \"\") {\n c4Shape.type.text = \"[\" + c4Shape.type.text + \"]\";\n let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"type\", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);\n c4Shape.type.Y = Y + 5;\n Y = c4Shape.type.Y + c4Shape.type.height;\n } else if (c4Shape.techn && c4Shape.techn.text !== \"\") {\n c4Shape.techn.text = \"[\" + c4Shape.techn.text + \"]\";\n let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n calcC4ShapeTextWH(\"techn\", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n c4Shape.techn.Y = Y + 5;\n Y = c4Shape.techn.Y + c4Shape.techn.height;\n }\n let rectHeight = Y;\n let rectWidth = c4Shape.label.width;\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"descr\", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n c4Shape.descr.Y = Y + 20;\n Y = c4Shape.descr.Y + c4Shape.descr.height;\n rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n rectHeight = Y - c4Shape.descr.textLines * 5;\n }\n rectWidth = rectWidth + conf.c4ShapePadding;\n c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n currentBounds.insert(c4Shape);\n svgDraw_default.drawC4Shape(diagram2, c4Shape, conf);\n }\n currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n}, \"drawC4ShapeArray\");\nvar Point = class {\n static {\n __name(this, \"Point\");\n }\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n};\nvar getIntersectPoint = /* @__PURE__ */ __name(function(fromNode, endPoint) {\n let x1 = fromNode.x;\n let y1 = fromNode.y;\n let x2 = endPoint.x;\n let y2 = endPoint.y;\n let fromCenterX = x1 + fromNode.width / 2;\n let fromCenterY = y1 + fromNode.height / 2;\n let dx = Math.abs(x1 - x2);\n let dy = Math.abs(y1 - y2);\n let tanDYX = dy / dx;\n let fromDYX = fromNode.height / fromNode.width;\n let returnPoint = null;\n if (y1 == y2 && x1 < x2) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n } else if (y1 == y2 && x1 > x2) {\n returnPoint = new Point(x1, fromCenterY);\n } else if (x1 == x2 && y1 < y2) {\n returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n } else if (x1 == x2 && y1 > y2) {\n returnPoint = new Point(fromCenterX, y1);\n }\n if (x1 > x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX - dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX + dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1);\n }\n } else if (x1 > x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX);\n } else {\n returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1);\n }\n }\n return returnPoint;\n}, \"getIntersectPoint\");\nvar getIntersectPoints = /* @__PURE__ */ __name(function(fromNode, endNode) {\n let endIntersectPoint = { x: 0, y: 0 };\n endIntersectPoint.x = endNode.x + endNode.width / 2;\n endIntersectPoint.y = endNode.y + endNode.height / 2;\n let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n return { startPoint, endPoint };\n}, \"getIntersectPoints\");\nvar drawRels2 = /* @__PURE__ */ __name(function(diagram2, rels2, getC4ShapeObj, diagObj) {\n let i = 0;\n for (let rel of rels2) {\n i = i + 1;\n let relTextWrap = rel.wrap && conf.wrap;\n let relConf = messageFont(conf);\n let diagramType = diagObj.db.getC4Type();\n if (diagramType === \"C4Dynamic\") {\n rel.label.text = i + \": \" + rel.label.text;\n }\n let textLimitWidth = calculateTextWidth(rel.label.text, relConf);\n calcC4ShapeTextWH(\"label\", rel, relTextWrap, relConf, textLimitWidth);\n if (rel.techn && rel.techn.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.techn.text, relConf);\n calcC4ShapeTextWH(\"techn\", rel, relTextWrap, relConf, textLimitWidth);\n }\n if (rel.descr && rel.descr.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.descr.text, relConf);\n calcC4ShapeTextWH(\"descr\", rel, relTextWrap, relConf, textLimitWidth);\n }\n let fromNode = getC4ShapeObj(rel.from);\n let endNode = getC4ShapeObj(rel.to);\n let points = getIntersectPoints(fromNode, endNode);\n rel.startPoint = points.startPoint;\n rel.endPoint = points.endPoint;\n }\n svgDraw_default.drawRels(diagram2, rels2, conf);\n}, \"drawRels\");\nfunction drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {\n let currentBounds = new Bounds(diagObj);\n currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow2, currentBoundaries.length);\n for (let [i, currentBoundary] of currentBoundaries.entries()) {\n let Y = 0;\n currentBoundary.image = { width: 0, height: 0, Y: 0 };\n if (currentBoundary.sprite) {\n currentBoundary.image.width = 48;\n currentBoundary.image.height = 48;\n currentBoundary.image.Y = Y;\n Y = currentBoundary.image.Y + currentBoundary.image.height;\n }\n let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n let currentBoundaryLabelConf = boundaryFont(conf);\n currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n currentBoundaryLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\n \"label\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryLabelConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.label.Y = Y + 8;\n Y = currentBoundary.label.Y + currentBoundary.label.height;\n if (currentBoundary.type && currentBoundary.type.text !== \"\") {\n currentBoundary.type.text = \"[\" + currentBoundary.type.text + \"]\";\n let currentBoundaryTypeConf = boundaryFont(conf);\n calcC4ShapeTextWH(\n \"type\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryTypeConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.type.Y = Y + 5;\n Y = currentBoundary.type.Y + currentBoundary.type.height;\n }\n if (currentBoundary.descr && currentBoundary.descr.text !== \"\") {\n let currentBoundaryDescrConf = boundaryFont(conf);\n currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n calcC4ShapeTextWH(\n \"descr\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryDescrConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.descr.Y = Y + 20;\n Y = currentBoundary.descr.Y + currentBoundary.descr.height;\n }\n if (i == 0 || i % c4BoundaryInRow2 === 0) {\n let _x = parentBounds.data.startx + conf.diagramMarginX;\n let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n currentBounds.setData(_x, _x, _y, _y);\n } else {\n let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx;\n let _y = currentBounds.data.starty;\n currentBounds.setData(_x, _x, _y, _y);\n }\n currentBounds.name = currentBoundary.alias;\n let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);\n let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);\n if (currentPersonOrSystemKeys.length > 0) {\n drawC4ShapeArray(\n currentBounds,\n diagram2,\n currentPersonOrSystemArray,\n currentPersonOrSystemKeys\n );\n }\n parentBoundaryAlias = currentBoundary.alias;\n let nextCurrentBoundaries = diagObj.db.getBoundaries(parentBoundaryAlias);\n if (nextCurrentBoundaries.length > 0) {\n drawInsideBoundary(\n diagram2,\n parentBoundaryAlias,\n currentBounds,\n nextCurrentBoundaries,\n diagObj\n );\n }\n if (currentBoundary.alias !== \"global\") {\n drawBoundary2(diagram2, currentBoundary, currentBounds);\n }\n parentBounds.data.stopy = Math.max(\n currentBounds.data.stopy + conf.c4ShapeMargin,\n parentBounds.data.stopy\n );\n parentBounds.data.stopx = Math.max(\n currentBounds.data.stopx + conf.c4ShapeMargin,\n parentBounds.data.stopx\n );\n globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n }\n}\n__name(drawInsideBoundary, \"drawInsideBoundary\");\nvar draw = /* @__PURE__ */ __name(function(_text, id, _version, diagObj) {\n conf = getConfig().c4;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n let db = diagObj.db;\n diagObj.db.setWrap(conf.wrap);\n c4ShapeInRow2 = db.getC4ShapeInRow();\n c4BoundaryInRow2 = db.getC4BoundaryInRow();\n log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n const diagram2 = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n svgDraw_default.insertComputerIcon(diagram2);\n svgDraw_default.insertDatabaseIcon(diagram2);\n svgDraw_default.insertClockIcon(diagram2);\n let screenBounds = new Bounds(diagObj);\n screenBounds.setData(\n conf.diagramMarginX,\n conf.diagramMarginX,\n conf.diagramMarginY,\n conf.diagramMarginY\n );\n screenBounds.data.widthLimit = screen.availWidth;\n globalBoundaryMaxX = conf.diagramMarginX;\n globalBoundaryMaxY = conf.diagramMarginY;\n const title2 = diagObj.db.getTitle();\n let currentBoundaries = diagObj.db.getBoundaries(\"\");\n drawInsideBoundary(diagram2, \"\", screenBounds, currentBoundaries, diagObj);\n svgDraw_default.insertArrowHead(diagram2);\n svgDraw_default.insertArrowEnd(diagram2);\n svgDraw_default.insertArrowCrossHead(diagram2);\n svgDraw_default.insertArrowFilledHead(diagram2);\n drawRels2(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);\n screenBounds.data.stopx = globalBoundaryMaxX;\n screenBounds.data.stopy = globalBoundaryMaxY;\n const box = screenBounds.data;\n let boxHeight = box.stopy - box.starty;\n let height = boxHeight + 2 * conf.diagramMarginY;\n let boxWidth = box.stopx - box.startx;\n const width = boxWidth + 2 * conf.diagramMarginX;\n if (title2) {\n diagram2.append(\"text\").text(title2).attr(\"x\", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr(\"y\", box.starty + conf.diagramMarginY);\n }\n configureSvgSize(diagram2, height, width, conf.useMaxWidth);\n const extraVertForTitle = title2 ? 60 : 0;\n diagram2.attr(\n \"viewBox\",\n box.startx - conf.diagramMarginX + \" -\" + (conf.diagramMarginY + extraVertForTitle) + \" \" + width + \" \" + (height + extraVertForTitle)\n );\n log.debug(`models:`, box);\n}, \"draw\");\nvar c4Renderer_default = {\n drawPersonOrSystemArray: drawC4ShapeArray,\n drawBoundary: drawBoundary2,\n setConf,\n draw\n};\n\n// src/diagrams/c4/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `.person {\n stroke: ${options.personBorder};\n fill: ${options.personBkg};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/c4/c4Diagram.ts\nvar diagram = {\n parser: c4Diagram_default,\n db: c4Db_default,\n renderer: c4Renderer_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name(({ c4, wrap }) => {\n c4Renderer_default.setConf(c4);\n c4Db_default.setWrap(wrap);\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","kv","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c2","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","c4Diagram_default","c4ShapeArray","boundaryParseStack","currentBoundaryParse","parentBoundaryParse","boundaries","rels","title","wrapEnabled","c4ShapeInRow","c4BoundaryInRow","c4Type","getC4Type","setC4Type","c4TypeParam","sanitizeText","getConfig","addRel","type","from","to","label","techn","descr","sprite","tags","link","rel","old","rel2","key","value","autoWrap","addPersonOrSystem","typeC4Shape","alias","personOrSystem","personOrSystem2","addContainer","container","container2","addComponent","component","component2","addPersonOrSystemBoundary","boundary","boundary2","addContainerBoundary","addDeploymentNode","nodeType","popBoundaryParseStack","updateElStyle","elementName","bgColor","fontColor","borderColor","shadowing","shape","legendText","legendSprite","element","updateRelStyle","textColor","lineColor","offsetX","offsetY","updateLayoutConfig","c4ShapeInRowParam","c4BoundaryInRowParam","c4ShapeInRowValue","c4BoundaryInRowValue","getC4ShapeInRow","getC4BoundaryInRow","getCurrentBoundaryParse","getParentBoundaryParse","getC4ShapeArray","parentBoundary","getC4Shape","getC4ShapeKeys","getBoundaries","getBoundarys","getRels","getTitle","setWrap","wrapSetting","clear","LINETYPE","ARROWTYPE","PLACEMENT","setTitle","txt","c4Db_default","setAccTitle","getAccTitle","getAccDescription","setAccDescription","drawRect2","elem","rectData","drawRect","drawImage","width","height","x","y","imageElem","sanitizedLink","sanitizeUrl","drawRels","rels2","conf2","relsElem","strokeColor","url","line","messageConf","_drawTextCandidateFunc","drawBoundary","boundaryElem","fillColor","attrsValue","boundaryConf","drawC4Shape","c4Shape","personImg","c4ShapeElem","rect","getNoteRect","c4ShapeFontConf","getC4ShapeFont","textFontConf","_a","insertDatabaseIcon","insertComputerIcon","insertClockIcon","insertArrowHead","insertArrowEnd","insertArrowFilledHead","insertDynamicNumber","insertArrowCrossHead","marker","cnf","byText","content","g","textAttrs","text","_setTextAttrs","byTspan","fontSize","fontFamily","fontWeight","common_default","dy","byFo","s","toText","fromTextAttrsDict","svgDraw_default","globalBoundaryMaxX","globalBoundaryMaxY","c4ShapeInRow2","c4BoundaryInRow2","conf","Bounds","diagObj","setConf","startx","stopx","starty","stopy","obj","val","fun","_startx","_stopx","_starty","_stopy","margin","assignWithDepth_default","c4ShapeFont","boundaryFont","messageFont","calcC4ShapeTextWH","textType","c4ShapeTextWrap","textConf","textLimitWidth","wrapLabel","calculateTextHeight","lineHeight","calculateTextWidth","drawBoundary2","diagram2","bounds","boundaryTextWrap","boundaryLabelConf","drawC4ShapeArray","currentBounds","c4ShapeArray2","c4ShapeKeys","Y","c4ShapeKey","c4ShapeTypeConf","c4ShapeLabelConf","c4ShapeTypeConf2","c4ShapeTechnConf","rectHeight","rectWidth","c4ShapeDescrConf","Point","getIntersectPoint","fromNode","endPoint","x1","y1","x2","y2","fromCenterX","fromCenterY","dx","tanDYX","fromDYX","returnPoint","getIntersectPoints","endNode","endIntersectPoint","startPoint","drawRels2","getC4ShapeObj","relTextWrap","relConf","points","drawInsideBoundary","parentBoundaryAlias","parentBounds","currentBoundaries","currentBoundary","currentBoundaryTextWrap","currentBoundaryLabelConf","currentBoundaryTypeConf","currentBoundaryDescrConf","_x","_y","currentPersonOrSystemArray","currentPersonOrSystemKeys","nextCurrentBoundaries","draw","_text","id","_version","securityLevel","sandboxElement","select","root","db","log","screenBounds","title2","box","configureSvgSize","extraVertForTitle","c4Renderer_default","getStyles","options","styles_default","diagram","c4","wrap"],"mappings":"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AI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIhE,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK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AAC,EAAG1D,EAAE0D,GAAK,CAAC,EAAG,EAAE,CAAC,EAAG1D,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EA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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"c4Diagram-YG6GDRKO-_P4hKvfx.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.mjs"],"sourcesContent":["import {\n drawRect,\n getNoteRect\n} from \"./chunk-TZMSLE5B.mjs\";\nimport {\n calculateTextHeight,\n calculateTextWidth,\n wrapLabel\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n assignWithDepth_default,\n common_default,\n configureSvgSize,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n sanitizeText,\n setAccDescription,\n setAccTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/c4/parser/c4Diagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"direction\": 5, \"direction_tb\": 6, \"direction_bt\": 7, \"direction_rl\": 8, \"direction_lr\": 9, \"graphConfig\": 10, \"C4_CONTEXT\": 11, \"NEWLINE\": 12, \"statements\": 13, \"EOF\": 14, \"C4_CONTAINER\": 15, \"C4_COMPONENT\": 16, \"C4_DYNAMIC\": 17, \"C4_DEPLOYMENT\": 18, \"otherStatements\": 19, \"diagramStatements\": 20, \"otherStatement\": 21, \"title\": 22, \"accDescription\": 23, \"acc_title\": 24, \"acc_title_value\": 25, \"acc_descr\": 26, \"acc_descr_value\": 27, \"acc_descr_multiline_value\": 28, \"boundaryStatement\": 29, \"boundaryStartStatement\": 30, \"boundaryStopStatement\": 31, \"boundaryStart\": 32, \"LBRACE\": 33, \"ENTERPRISE_BOUNDARY\": 34, \"attributes\": 35, \"SYSTEM_BOUNDARY\": 36, \"BOUNDARY\": 37, \"CONTAINER_BOUNDARY\": 38, \"NODE\": 39, \"NODE_L\": 40, \"NODE_R\": 41, \"RBRACE\": 42, \"diagramStatement\": 43, \"PERSON\": 44, \"PERSON_EXT\": 45, \"SYSTEM\": 46, \"SYSTEM_DB\": 47, \"SYSTEM_QUEUE\": 48, \"SYSTEM_EXT\": 49, \"SYSTEM_EXT_DB\": 50, \"SYSTEM_EXT_QUEUE\": 51, \"CONTAINER\": 52, \"CONTAINER_DB\": 53, \"CONTAINER_QUEUE\": 54, \"CONTAINER_EXT\": 55, \"CONTAINER_EXT_DB\": 56, \"CONTAINER_EXT_QUEUE\": 57, \"COMPONENT\": 58, \"COMPONENT_DB\": 59, \"COMPONENT_QUEUE\": 60, \"COMPONENT_EXT\": 61, \"COMPONENT_EXT_DB\": 62, \"COMPONENT_EXT_QUEUE\": 63, \"REL\": 64, \"BIREL\": 65, \"REL_U\": 66, \"REL_D\": 67, \"REL_L\": 68, \"REL_R\": 69, \"REL_B\": 70, \"REL_INDEX\": 71, \"UPDATE_EL_STYLE\": 72, \"UPDATE_REL_STYLE\": 73, \"UPDATE_LAYOUT_CONFIG\": 74, \"attribute\": 75, \"STR\": 76, \"STR_KEY\": 77, \"STR_VALUE\": 78, \"ATTRIBUTE\": 79, \"ATTRIBUTE_EMPTY\": 80, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"direction_tb\", 7: \"direction_bt\", 8: \"direction_rl\", 9: \"direction_lr\", 11: \"C4_CONTEXT\", 12: \"NEWLINE\", 14: \"EOF\", 15: \"C4_CONTAINER\", 16: \"C4_COMPONENT\", 17: \"C4_DYNAMIC\", 18: \"C4_DEPLOYMENT\", 22: \"title\", 23: \"accDescription\", 24: \"acc_title\", 25: \"acc_title_value\", 26: \"acc_descr\", 27: \"acc_descr_value\", 28: \"acc_descr_multiline_value\", 33: \"LBRACE\", 34: \"ENTERPRISE_BOUNDARY\", 36: \"SYSTEM_BOUNDARY\", 37: \"BOUNDARY\", 38: \"CONTAINER_BOUNDARY\", 39: \"NODE\", 40: \"NODE_L\", 41: \"NODE_R\", 42: \"RBRACE\", 44: \"PERSON\", 45: \"PERSON_EXT\", 46: \"SYSTEM\", 47: \"SYSTEM_DB\", 48: \"SYSTEM_QUEUE\", 49: \"SYSTEM_EXT\", 50: \"SYSTEM_EXT_DB\", 51: \"SYSTEM_EXT_QUEUE\", 52: \"CONTAINER\", 53: \"CONTAINER_DB\", 54: \"CONTAINER_QUEUE\", 55: \"CONTAINER_EXT\", 56: \"CONTAINER_EXT_DB\", 57: \"CONTAINER_EXT_QUEUE\", 58: \"COMPONENT\", 59: \"COMPONENT_DB\", 60: \"COMPONENT_QUEUE\", 61: \"COMPONENT_EXT\", 62: \"COMPONENT_EXT_DB\", 63: \"COMPONENT_EXT_QUEUE\", 64: \"REL\", 65: \"BIREL\", 66: \"REL_U\", 67: \"REL_D\", 68: \"REL_L\", 69: \"REL_R\", 70: \"REL_B\", 71: \"REL_INDEX\", 72: \"UPDATE_EL_STYLE\", 73: \"UPDATE_REL_STYLE\", 74: \"UPDATE_LAYOUT_CONFIG\", 76: \"STR\", 77: \"STR_KEY\", 78: \"STR_VALUE\", 79: \"ATTRIBUTE\", 80: \"ATTRIBUTE_EMPTY\" },\n productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setDirection(\"TB\");\n break;\n case 4:\n yy.setDirection(\"BT\");\n break;\n case 5:\n yy.setDirection(\"RL\");\n break;\n case 6:\n yy.setDirection(\"LR\");\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n yy.setC4Type($$[$0 - 3]);\n break;\n case 19:\n yy.setTitle($$[$0].substring(6));\n this.$ = $$[$0].substring(6);\n break;\n case 20:\n yy.setAccDescription($$[$0].substring(15));\n this.$ = $$[$0].substring(15);\n break;\n case 21:\n this.$ = $$[$0].trim();\n yy.setTitle(this.$);\n break;\n case 22:\n case 23:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 28:\n $$[$0].splice(2, 0, \"ENTERPRISE\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 29:\n $$[$0].splice(2, 0, \"SYSTEM\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 30:\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0].splice(2, 0, \"CONTAINER\");\n yy.addContainerBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 32:\n yy.addDeploymentNode(\"node\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 33:\n yy.addDeploymentNode(\"nodeL\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 34:\n yy.addDeploymentNode(\"nodeR\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 35:\n yy.popBoundaryParseStack();\n break;\n case 39:\n yy.addPersonOrSystem(\"person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 40:\n yy.addPersonOrSystem(\"external_person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.addPersonOrSystem(\"system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 42:\n yy.addPersonOrSystem(\"system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 43:\n yy.addPersonOrSystem(\"system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 44:\n yy.addPersonOrSystem(\"external_system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 45:\n yy.addPersonOrSystem(\"external_system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 46:\n yy.addPersonOrSystem(\"external_system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 47:\n yy.addContainer(\"container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 48:\n yy.addContainer(\"container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 49:\n yy.addContainer(\"container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 50:\n yy.addContainer(\"external_container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 51:\n yy.addContainer(\"external_container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 52:\n yy.addContainer(\"external_container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 53:\n yy.addComponent(\"component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 54:\n yy.addComponent(\"component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 55:\n yy.addComponent(\"component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 56:\n yy.addComponent(\"external_component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 57:\n yy.addComponent(\"external_component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 58:\n yy.addComponent(\"external_component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 60:\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 61:\n yy.addRel(\"birel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 62:\n yy.addRel(\"rel_u\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 63:\n yy.addRel(\"rel_d\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 64:\n yy.addRel(\"rel_l\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 65:\n yy.addRel(\"rel_r\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 66:\n yy.addRel(\"rel_b\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 67:\n $$[$0].splice(0, 1);\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 68:\n yy.updateElStyle(\"update_el_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 69:\n yy.updateRelStyle(\"update_rel_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 70:\n yy.updateLayoutConfig(\"update_layout_config\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 71:\n this.$ = [$$[$0]];\n break;\n case 72:\n $$[$0].unshift($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 73:\n case 75:\n this.$ = $$[$0].trim();\n break;\n case 74:\n let kv = {};\n kv[$$[$0 - 1].trim()] = $$[$0].trim();\n this.$ = kv;\n break;\n case 76:\n this.$ = \"\";\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [2, 27])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c2 = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c2 + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 6;\n break;\n case 1:\n return 7;\n break;\n case 2:\n return 8;\n break;\n case 3:\n return 9;\n break;\n case 4:\n return 22;\n break;\n case 5:\n return 23;\n break;\n case 6:\n this.begin(\"acc_title\");\n return 24;\n break;\n case 7:\n this.popState();\n return \"acc_title_value\";\n break;\n case 8:\n this.begin(\"acc_descr\");\n return 26;\n break;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n break;\n case 13:\n break;\n case 14:\n c;\n break;\n case 15:\n return 12;\n break;\n case 16:\n break;\n case 17:\n return 11;\n break;\n case 18:\n return 15;\n break;\n case 19:\n return 16;\n break;\n case 20:\n return 17;\n break;\n case 21:\n return 18;\n break;\n case 22:\n this.begin(\"person_ext\");\n return 45;\n break;\n case 23:\n this.begin(\"person\");\n return 44;\n break;\n case 24:\n this.begin(\"system_ext_queue\");\n return 51;\n break;\n case 25:\n this.begin(\"system_ext_db\");\n return 50;\n break;\n case 26:\n this.begin(\"system_ext\");\n return 49;\n break;\n case 27:\n this.begin(\"system_queue\");\n return 48;\n break;\n case 28:\n this.begin(\"system_db\");\n return 47;\n break;\n case 29:\n this.begin(\"system\");\n return 46;\n break;\n case 30:\n this.begin(\"boundary\");\n return 37;\n break;\n case 31:\n this.begin(\"enterprise_boundary\");\n return 34;\n break;\n case 32:\n this.begin(\"system_boundary\");\n return 36;\n break;\n case 33:\n this.begin(\"container_ext_queue\");\n return 57;\n break;\n case 34:\n this.begin(\"container_ext_db\");\n return 56;\n break;\n case 35:\n this.begin(\"container_ext\");\n return 55;\n break;\n case 36:\n this.begin(\"container_queue\");\n return 54;\n break;\n case 37:\n this.begin(\"container_db\");\n return 53;\n break;\n case 38:\n this.begin(\"container\");\n return 52;\n break;\n case 39:\n this.begin(\"container_boundary\");\n return 38;\n break;\n case 40:\n this.begin(\"component_ext_queue\");\n return 63;\n break;\n case 41:\n this.begin(\"component_ext_db\");\n return 62;\n break;\n case 42:\n this.begin(\"component_ext\");\n return 61;\n break;\n case 43:\n this.begin(\"component_queue\");\n return 60;\n break;\n case 44:\n this.begin(\"component_db\");\n return 59;\n break;\n case 45:\n this.begin(\"component\");\n return 58;\n break;\n case 46:\n this.begin(\"node\");\n return 39;\n break;\n case 47:\n this.begin(\"node\");\n return 39;\n break;\n case 48:\n this.begin(\"node_l\");\n return 40;\n break;\n case 49:\n this.begin(\"node_r\");\n return 41;\n break;\n case 50:\n this.begin(\"rel\");\n return 64;\n break;\n case 51:\n this.begin(\"birel\");\n return 65;\n break;\n case 52:\n this.begin(\"rel_u\");\n return 66;\n break;\n case 53:\n this.begin(\"rel_u\");\n return 66;\n break;\n case 54:\n this.begin(\"rel_d\");\n return 67;\n break;\n case 55:\n this.begin(\"rel_d\");\n return 67;\n break;\n case 56:\n this.begin(\"rel_l\");\n return 68;\n break;\n case 57:\n this.begin(\"rel_l\");\n return 68;\n break;\n case 58:\n this.begin(\"rel_r\");\n return 69;\n break;\n case 59:\n this.begin(\"rel_r\");\n return 69;\n break;\n case 60:\n this.begin(\"rel_b\");\n return 70;\n break;\n case 61:\n this.begin(\"rel_index\");\n return 71;\n break;\n case 62:\n this.begin(\"update_el_style\");\n return 72;\n break;\n case 63:\n this.begin(\"update_rel_style\");\n return 73;\n break;\n case 64:\n this.begin(\"update_layout_config\");\n return 74;\n break;\n case 65:\n return \"EOF_IN_STRUCT\";\n break;\n case 66:\n this.begin(\"attribute\");\n return \"ATTRIBUTE_EMPTY\";\n break;\n case 67:\n this.begin(\"attribute\");\n break;\n case 68:\n this.popState();\n this.popState();\n break;\n case 69:\n return 80;\n break;\n case 70:\n break;\n case 71:\n return 80;\n break;\n case 72:\n this.begin(\"string\");\n break;\n case 73:\n this.popState();\n break;\n case 74:\n return \"STR\";\n break;\n case 75:\n this.begin(\"string_kv\");\n break;\n case 76:\n this.begin(\"string_kv_key\");\n return \"STR_KEY\";\n break;\n case 77:\n this.popState();\n this.begin(\"string_kv_value\");\n break;\n case 78:\n return \"STR_VALUE\";\n break;\n case 79:\n this.popState();\n this.popState();\n break;\n case 80:\n return \"STR\";\n break;\n case 81:\n return \"LBRACE\";\n break;\n case 82:\n return \"RBRACE\";\n break;\n case 83:\n return \"SPACE\";\n break;\n case 84:\n return \"EOL\";\n break;\n case 85:\n return 14;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:title\\s[^#\\n;]+)/, /^(?:accDescription\\s[^#\\n;]+)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:C4Context\\b)/, /^(?:C4Container\\b)/, /^(?:C4Component\\b)/, /^(?:C4Dynamic\\b)/, /^(?:C4Deployment\\b)/, /^(?:Person_Ext\\b)/, /^(?:Person\\b)/, /^(?:SystemQueue_Ext\\b)/, /^(?:SystemDb_Ext\\b)/, /^(?:System_Ext\\b)/, /^(?:SystemQueue\\b)/, /^(?:SystemDb\\b)/, /^(?:System\\b)/, /^(?:Boundary\\b)/, /^(?:Enterprise_Boundary\\b)/, /^(?:System_Boundary\\b)/, /^(?:ContainerQueue_Ext\\b)/, /^(?:ContainerDb_Ext\\b)/, /^(?:Container_Ext\\b)/, /^(?:ContainerQueue\\b)/, /^(?:ContainerDb\\b)/, /^(?:Container\\b)/, /^(?:Container_Boundary\\b)/, /^(?:ComponentQueue_Ext\\b)/, /^(?:ComponentDb_Ext\\b)/, /^(?:Component_Ext\\b)/, /^(?:ComponentQueue\\b)/, /^(?:ComponentDb\\b)/, /^(?:Component\\b)/, /^(?:Deployment_Node\\b)/, /^(?:Node\\b)/, /^(?:Node_L\\b)/, /^(?:Node_R\\b)/, /^(?:Rel\\b)/, /^(?:BiRel\\b)/, /^(?:Rel_Up\\b)/, /^(?:Rel_U\\b)/, /^(?:Rel_Down\\b)/, /^(?:Rel_D\\b)/, /^(?:Rel_Left\\b)/, /^(?:Rel_L\\b)/, /^(?:Rel_Right\\b)/, /^(?:Rel_R\\b)/, /^(?:Rel_Back\\b)/, /^(?:RelIndex\\b)/, /^(?:UpdateElementStyle\\b)/, /^(?:UpdateRelStyle\\b)/, /^(?:UpdateLayoutConfig\\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*[\"][\"])/, /^(?:[ ]*[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[ ]*[\\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[^,]+)/, /^(?:\\{)/, /^(?:\\})/, /^(?:[\\s]+)/, /^(?:[\\n\\r]+)/, /^(?:$)/],\n conditions: { \"acc_descr_multiline\": { \"rules\": [11, 12], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9], \"inclusive\": false }, \"acc_title\": { \"rules\": [7], \"inclusive\": false }, \"string_kv_value\": { \"rules\": [78, 79], \"inclusive\": false }, \"string_kv_key\": { \"rules\": [77], \"inclusive\": false }, \"string_kv\": { \"rules\": [76], \"inclusive\": false }, \"string\": { \"rules\": [73, 74], \"inclusive\": false }, \"attribute\": { \"rules\": [68, 69, 70, 71, 72, 75, 80], \"inclusive\": false }, \"update_layout_config\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_rel_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_el_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_b\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_d\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_u\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_bi\": { \"rules\": [], \"inclusive\": false }, \"rel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"index\": { \"rules\": [], \"inclusive\": false }, \"rel_index\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext_queue\": { \"rules\": [], \"inclusive\": false }, \"component_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"birel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"enterprise_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar c4Diagram_default = parser;\n\n// src/diagrams/c4/c4Db.js\nvar c4ShapeArray = [];\nvar boundaryParseStack = [\"\"];\nvar currentBoundaryParse = \"global\";\nvar parentBoundaryParse = \"\";\nvar boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n];\nvar rels = [];\nvar title = \"\";\nvar wrapEnabled = false;\nvar c4ShapeInRow = 4;\nvar c4BoundaryInRow = 2;\nvar c4Type;\nvar getC4Type = /* @__PURE__ */ __name(function() {\n return c4Type;\n}, \"getC4Type\");\nvar setC4Type = /* @__PURE__ */ __name(function(c4TypeParam) {\n let sanitizedText = sanitizeText(c4TypeParam, getConfig());\n c4Type = sanitizedText;\n}, \"setC4Type\");\nvar addRel = /* @__PURE__ */ __name(function(type, from, to, label, techn, descr, sprite, tags, link) {\n if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) {\n return;\n }\n let rel = {};\n const old = rels.find((rel2) => rel2.from === from && rel2.to === to);\n if (old) {\n rel = old;\n } else {\n rels.push(rel);\n }\n rel.type = type;\n rel.from = from;\n rel.to = to;\n rel.label = { text: label };\n if (techn === void 0 || techn === null) {\n rel.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n rel[key] = { text: value };\n } else {\n rel.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n rel.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n rel[key] = { text: value };\n } else {\n rel.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n rel[key] = value;\n } else {\n rel.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n rel[key] = value;\n } else {\n rel.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n rel[key] = value;\n } else {\n rel.link = link;\n }\n rel.wrap = autoWrap();\n}, \"addRel\");\nvar addPersonOrSystem = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let personOrSystem = {};\n const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);\n if (old && alias === old.alias) {\n personOrSystem = old;\n } else {\n personOrSystem.alias = alias;\n c4ShapeArray.push(personOrSystem);\n }\n if (label === void 0 || label === null) {\n personOrSystem.label = { text: \"\" };\n } else {\n personOrSystem.label = { text: label };\n }\n if (descr === void 0 || descr === null) {\n personOrSystem.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n personOrSystem[key] = { text: value };\n } else {\n personOrSystem.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.link = link;\n }\n personOrSystem.typeC4Shape = { text: typeC4Shape };\n personOrSystem.parentBoundary = currentBoundaryParse;\n personOrSystem.wrap = autoWrap();\n}, \"addPersonOrSystem\");\nvar addContainer = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let container = {};\n const old = c4ShapeArray.find((container2) => container2.alias === alias);\n if (old && alias === old.alias) {\n container = old;\n } else {\n container.alias = alias;\n c4ShapeArray.push(container);\n }\n if (label === void 0 || label === null) {\n container.label = { text: \"\" };\n } else {\n container.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n container.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n container[key] = { text: value };\n } else {\n container.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n container.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n container[key] = { text: value };\n } else {\n container.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n container[key] = value;\n } else {\n container.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n container[key] = value;\n } else {\n container.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n container[key] = value;\n } else {\n container.link = link;\n }\n container.wrap = autoWrap();\n container.typeC4Shape = { text: typeC4Shape };\n container.parentBoundary = currentBoundaryParse;\n}, \"addContainer\");\nvar addComponent = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let component = {};\n const old = c4ShapeArray.find((component2) => component2.alias === alias);\n if (old && alias === old.alias) {\n component = old;\n } else {\n component.alias = alias;\n c4ShapeArray.push(component);\n }\n if (label === void 0 || label === null) {\n component.label = { text: \"\" };\n } else {\n component.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n component.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n component[key] = { text: value };\n } else {\n component.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n component.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n component[key] = { text: value };\n } else {\n component.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n component[key] = value;\n } else {\n component.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n component[key] = value;\n } else {\n component.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n component[key] = value;\n } else {\n component.link = link;\n }\n component.wrap = autoWrap();\n component.typeC4Shape = { text: typeC4Shape };\n component.parentBoundary = currentBoundaryParse;\n}, \"addComponent\");\nvar addPersonOrSystemBoundary = /* @__PURE__ */ __name(function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"system\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addPersonOrSystemBoundary\");\nvar addContainerBoundary = /* @__PURE__ */ __name(function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"container\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addContainerBoundary\");\nvar addDeploymentNode = /* @__PURE__ */ __name(function(nodeType, alias, label, type, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"node\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (descr === void 0 || descr === null) {\n boundary.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n boundary[key] = { text: value };\n } else {\n boundary.descr = { text: descr };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.nodeType = nodeType;\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n}, \"addDeploymentNode\");\nvar popBoundaryParseStack = /* @__PURE__ */ __name(function() {\n currentBoundaryParse = parentBoundaryParse;\n boundaryParseStack.pop();\n parentBoundaryParse = boundaryParseStack.pop();\n boundaryParseStack.push(parentBoundaryParse);\n}, \"popBoundaryParseStack\");\nvar updateElStyle = /* @__PURE__ */ __name(function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {\n let old = c4ShapeArray.find((element) => element.alias === elementName);\n if (old === void 0) {\n old = boundaries.find((element) => element.alias === elementName);\n if (old === void 0) {\n return;\n }\n }\n if (bgColor !== void 0 && bgColor !== null) {\n if (typeof bgColor === \"object\") {\n let [key, value] = Object.entries(bgColor)[0];\n old[key] = value;\n } else {\n old.bgColor = bgColor;\n }\n }\n if (fontColor !== void 0 && fontColor !== null) {\n if (typeof fontColor === \"object\") {\n let [key, value] = Object.entries(fontColor)[0];\n old[key] = value;\n } else {\n old.fontColor = fontColor;\n }\n }\n if (borderColor !== void 0 && borderColor !== null) {\n if (typeof borderColor === \"object\") {\n let [key, value] = Object.entries(borderColor)[0];\n old[key] = value;\n } else {\n old.borderColor = borderColor;\n }\n }\n if (shadowing !== void 0 && shadowing !== null) {\n if (typeof shadowing === \"object\") {\n let [key, value] = Object.entries(shadowing)[0];\n old[key] = value;\n } else {\n old.shadowing = shadowing;\n }\n }\n if (shape !== void 0 && shape !== null) {\n if (typeof shape === \"object\") {\n let [key, value] = Object.entries(shape)[0];\n old[key] = value;\n } else {\n old.shape = shape;\n }\n }\n if (sprite !== void 0 && sprite !== null) {\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n old[key] = value;\n } else {\n old.sprite = sprite;\n }\n }\n if (techn !== void 0 && techn !== null) {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n old[key] = value;\n } else {\n old.techn = techn;\n }\n }\n if (legendText !== void 0 && legendText !== null) {\n if (typeof legendText === \"object\") {\n let [key, value] = Object.entries(legendText)[0];\n old[key] = value;\n } else {\n old.legendText = legendText;\n }\n }\n if (legendSprite !== void 0 && legendSprite !== null) {\n if (typeof legendSprite === \"object\") {\n let [key, value] = Object.entries(legendSprite)[0];\n old[key] = value;\n } else {\n old.legendSprite = legendSprite;\n }\n }\n}, \"updateElStyle\");\nvar updateRelStyle = /* @__PURE__ */ __name(function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) {\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old === void 0) {\n return;\n }\n if (textColor !== void 0 && textColor !== null) {\n if (typeof textColor === \"object\") {\n let [key, value] = Object.entries(textColor)[0];\n old[key] = value;\n } else {\n old.textColor = textColor;\n }\n }\n if (lineColor !== void 0 && lineColor !== null) {\n if (typeof lineColor === \"object\") {\n let [key, value] = Object.entries(lineColor)[0];\n old[key] = value;\n } else {\n old.lineColor = lineColor;\n }\n }\n if (offsetX !== void 0 && offsetX !== null) {\n if (typeof offsetX === \"object\") {\n let [key, value] = Object.entries(offsetX)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetX = parseInt(offsetX);\n }\n }\n if (offsetY !== void 0 && offsetY !== null) {\n if (typeof offsetY === \"object\") {\n let [key, value] = Object.entries(offsetY)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetY = parseInt(offsetY);\n }\n }\n}, \"updateRelStyle\");\nvar updateLayoutConfig = /* @__PURE__ */ __name(function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n let c4ShapeInRowValue = c4ShapeInRow;\n let c4BoundaryInRowValue = c4BoundaryInRow;\n if (typeof c4ShapeInRowParam === \"object\") {\n const value = Object.values(c4ShapeInRowParam)[0];\n c4ShapeInRowValue = parseInt(value);\n } else {\n c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n }\n if (typeof c4BoundaryInRowParam === \"object\") {\n const value = Object.values(c4BoundaryInRowParam)[0];\n c4BoundaryInRowValue = parseInt(value);\n } else {\n c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n }\n if (c4ShapeInRowValue >= 1) {\n c4ShapeInRow = c4ShapeInRowValue;\n }\n if (c4BoundaryInRowValue >= 1) {\n c4BoundaryInRow = c4BoundaryInRowValue;\n }\n}, \"updateLayoutConfig\");\nvar getC4ShapeInRow = /* @__PURE__ */ __name(function() {\n return c4ShapeInRow;\n}, \"getC4ShapeInRow\");\nvar getC4BoundaryInRow = /* @__PURE__ */ __name(function() {\n return c4BoundaryInRow;\n}, \"getC4BoundaryInRow\");\nvar getCurrentBoundaryParse = /* @__PURE__ */ __name(function() {\n return currentBoundaryParse;\n}, \"getCurrentBoundaryParse\");\nvar getParentBoundaryParse = /* @__PURE__ */ __name(function() {\n return parentBoundaryParse;\n}, \"getParentBoundaryParse\");\nvar getC4ShapeArray = /* @__PURE__ */ __name(function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return c4ShapeArray;\n } else {\n return c4ShapeArray.filter((personOrSystem) => {\n return personOrSystem.parentBoundary === parentBoundary;\n });\n }\n}, \"getC4ShapeArray\");\nvar getC4Shape = /* @__PURE__ */ __name(function(alias) {\n return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n}, \"getC4Shape\");\nvar getC4ShapeKeys = /* @__PURE__ */ __name(function(parentBoundary) {\n return Object.keys(getC4ShapeArray(parentBoundary));\n}, \"getC4ShapeKeys\");\nvar getBoundaries = /* @__PURE__ */ __name(function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return boundaries;\n } else {\n return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary);\n }\n}, \"getBoundaries\");\nvar getBoundarys = getBoundaries;\nvar getRels = /* @__PURE__ */ __name(function() {\n return rels;\n}, \"getRels\");\nvar getTitle = /* @__PURE__ */ __name(function() {\n return title;\n}, \"getTitle\");\nvar setWrap = /* @__PURE__ */ __name(function(wrapSetting) {\n wrapEnabled = wrapSetting;\n}, \"setWrap\");\nvar autoWrap = /* @__PURE__ */ __name(function() {\n return wrapEnabled;\n}, \"autoWrap\");\nvar clear = /* @__PURE__ */ __name(function() {\n c4ShapeArray = [];\n boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n ];\n parentBoundaryParse = \"\";\n currentBoundaryParse = \"global\";\n boundaryParseStack = [\"\"];\n rels = [];\n boundaryParseStack = [\"\"];\n title = \"\";\n wrapEnabled = false;\n c4ShapeInRow = 4;\n c4BoundaryInRow = 2;\n}, \"clear\");\nvar LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25\n};\nvar ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n};\nvar PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n};\nvar setTitle = /* @__PURE__ */ __name(function(txt) {\n let sanitizedText = sanitizeText(txt, getConfig());\n title = sanitizedText;\n}, \"setTitle\");\nvar c4Db_default = {\n addPersonOrSystem,\n addPersonOrSystemBoundary,\n addContainer,\n addContainerBoundary,\n addComponent,\n addDeploymentNode,\n popBoundaryParseStack,\n addRel,\n updateElStyle,\n updateRelStyle,\n updateLayoutConfig,\n autoWrap,\n setWrap,\n getC4ShapeArray,\n getC4Shape,\n getC4ShapeKeys,\n getBoundaries,\n getBoundarys,\n getCurrentBoundaryParse,\n getParentBoundaryParse,\n getRels,\n getTitle,\n getC4Type,\n getC4ShapeInRow,\n getC4BoundaryInRow,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n getConfig: /* @__PURE__ */ __name(() => getConfig().c4, \"getConfig\"),\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n setTitle,\n setC4Type\n // apply,\n};\n\n// src/diagrams/c4/c4Renderer.js\nimport { select } from \"d3\";\n\n// src/diagrams/c4/svgDraw.js\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nvar drawRect2 = /* @__PURE__ */ __name(function(elem, rectData) {\n return drawRect(elem, rectData);\n}, \"drawRect\");\nvar drawImage = /* @__PURE__ */ __name(function(elem, width, height, x, y, link) {\n const imageElem = elem.append(\"image\");\n imageElem.attr(\"width\", width);\n imageElem.attr(\"height\", height);\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n let sanitizedLink = link.startsWith(\"data:image/png;base64\") ? link : sanitizeUrl(link);\n imageElem.attr(\"xlink:href\", sanitizedLink);\n}, \"drawImage\");\nvar drawRels = /* @__PURE__ */ __name((elem, rels2, conf2) => {\n const relsElem = elem.append(\"g\");\n let i = 0;\n for (let rel of rels2) {\n let textColor = rel.textColor ? rel.textColor : \"#444444\";\n let strokeColor = rel.lineColor ? rel.lineColor : \"#444444\";\n let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n let url = \"\";\n if (i === 0) {\n let line = relsElem.append(\"line\");\n line.attr(\"x1\", rel.startPoint.x);\n line.attr(\"y1\", rel.startPoint.y);\n line.attr(\"x2\", rel.endPoint.x);\n line.attr(\"y2\", rel.endPoint.y);\n line.attr(\"stroke-width\", \"1\");\n line.attr(\"stroke\", strokeColor);\n line.style(\"fill\", \"none\");\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n i = -1;\n } else {\n let line = relsElem.append(\"path\");\n line.attr(\"fill\", \"none\").attr(\"stroke-width\", \"1\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,starty Qcontrolx,controly stopx,stopy \".replaceAll(\"startx\", rel.startPoint.x).replaceAll(\"starty\", rel.startPoint.y).replaceAll(\n \"controlx\",\n rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4\n ).replaceAll(\"controly\", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll(\"stopx\", rel.endPoint.x).replaceAll(\"stopy\", rel.endPoint.y)\n );\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n }\n let messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n rel.label.text,\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY,\n rel.label.width,\n rel.label.height,\n { fill: textColor },\n messageConf\n );\n if (rel.techn && rel.techn.text !== \"\") {\n messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n \"[\" + rel.techn.text + \"]\",\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY,\n Math.max(rel.label.width, rel.techn.width),\n rel.techn.height,\n { fill: textColor, \"font-style\": \"italic\" },\n messageConf\n );\n }\n }\n}, \"drawRels\");\nvar drawBoundary = /* @__PURE__ */ __name(function(elem, boundary, conf2) {\n const boundaryElem = elem.append(\"g\");\n let fillColor = boundary.bgColor ? boundary.bgColor : \"none\";\n let strokeColor = boundary.borderColor ? boundary.borderColor : \"#444444\";\n let fontColor = boundary.fontColor ? boundary.fontColor : \"black\";\n let attrsValue = { \"stroke-width\": 1, \"stroke-dasharray\": \"7.0,7.0\" };\n if (boundary.nodeType) {\n attrsValue = { \"stroke-width\": 1 };\n }\n let rectData = {\n x: boundary.x,\n y: boundary.y,\n fill: fillColor,\n stroke: strokeColor,\n width: boundary.width,\n height: boundary.height,\n rx: 2.5,\n ry: 2.5,\n attrs: attrsValue\n };\n drawRect2(boundaryElem, rectData);\n let boundaryConf = conf2.boundaryFont();\n boundaryConf.fontWeight = \"bold\";\n boundaryConf.fontSize = boundaryConf.fontSize + 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.label.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.label.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n if (boundary.type && boundary.type.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.type.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.type.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n if (boundary.descr && boundary.descr.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontSize = boundaryConf.fontSize - 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.descr.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.descr.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n}, \"drawBoundary\");\nvar drawC4Shape = /* @__PURE__ */ __name(function(elem, c4Shape, conf2) {\n let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + \"_bg_color\"];\n let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + \"_border_color\"];\n let fontColor = c4Shape.fontColor ? c4Shape.fontColor : \"#FFFFFF\";\n let personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n break;\n case \"external_person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=\";\n break;\n }\n const c4ShapeElem = elem.append(\"g\");\n c4ShapeElem.attr(\"class\", \"person-man\");\n const rect = getNoteRect();\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n case \"system\":\n case \"external_system\":\n case \"container\":\n case \"external_container\":\n case \"component\":\n case \"external_component\":\n rect.x = c4Shape.x;\n rect.y = c4Shape.y;\n rect.fill = fillColor;\n rect.width = c4Shape.width;\n rect.height = c4Shape.height;\n rect.stroke = strokeColor;\n rect.rx = 2.5;\n rect.ry = 2.5;\n rect.attrs = { \"stroke-width\": 0.5 };\n drawRect2(c4ShapeElem, rect);\n break;\n case \"system_db\":\n case \"external_system_db\":\n case \"container_db\":\n case \"external_container_db\":\n case \"component_db\":\n case \"external_component_db\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2).replaceAll(\"height\", c4Shape.height)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2)\n );\n break;\n case \"system_queue\":\n case \"external_system_queue\":\n case \"container_queue\":\n case \"external_container_queue\":\n case \"component_queue\":\n case \"external_component_queue\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"width\", c4Shape.width).replaceAll(\"half\", c4Shape.height / 2)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half\".replaceAll(\"startx\", c4Shape.x + c4Shape.width).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.height / 2)\n );\n break;\n }\n let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text);\n c4ShapeElem.append(\"text\").attr(\"fill\", fontColor).attr(\"font-family\", c4ShapeFontConf.fontFamily).attr(\"font-size\", c4ShapeFontConf.fontSize - 2).attr(\"font-style\", \"italic\").attr(\"lengthAdjust\", \"spacing\").attr(\"textLength\", c4Shape.typeC4Shape.width).attr(\"x\", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr(\"y\", c4Shape.y + c4Shape.typeC4Shape.Y).text(\"<<\" + c4Shape.typeC4Shape.text + \">>\");\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n drawImage(\n c4ShapeElem,\n 48,\n 48,\n c4Shape.x + c4Shape.width / 2 - 24,\n c4Shape.y + c4Shape.image.Y,\n personImg\n );\n break;\n }\n let textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontWeight = \"bold\";\n textFontConf.fontSize = textFontConf.fontSize + 2;\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.label.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.label.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontColor = fontColor;\n if (c4Shape.techn && c4Shape.techn?.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.techn.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.techn.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n } else if (c4Shape.type && c4Shape.type.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.type.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.type.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n }\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n textFontConf = conf2.personFont();\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.descr.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.descr.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n }\n return c4Shape.height;\n}, \"drawC4Shape\");\nvar insertDatabaseIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"database\").attr(\"fill-rule\", \"evenodd\").attr(\"clip-rule\", \"evenodd\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"\n );\n}, \"insertDatabaseIcon\");\nvar insertComputerIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"computer\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"\n );\n}, \"insertComputerIcon\");\nvar insertClockIcon = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"clock\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"\n );\n}, \"insertClockIcon\");\nvar insertArrowHead = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n}, \"insertArrowHead\");\nvar insertArrowEnd = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowend\").attr(\"refX\", 1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 10 0 L 0 5 L 10 10 z\");\n}, \"insertArrowEnd\");\nvar insertArrowFilledHead = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"filled-head\").attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"insertArrowFilledHead\");\nvar insertDynamicNumber = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"sequencenumber\").attr(\"refX\", 15).attr(\"refY\", 15).attr(\"markerWidth\", 60).attr(\"markerHeight\", 40).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", 15).attr(\"cy\", 15).attr(\"r\", 6);\n}, \"insertDynamicNumber\");\nvar insertArrowCrossHead = /* @__PURE__ */ __name(function(elem) {\n const defs = elem.append(\"defs\");\n const marker = defs.append(\"marker\").attr(\"id\", \"crosshead\").attr(\"markerWidth\", 15).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").attr(\"refX\", 16).attr(\"refY\", 4);\n marker.append(\"path\").attr(\"fill\", \"black\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 9,2 V 6 L16,4 Z\");\n marker.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 0,1 L 6,7 M 6,1 L 0,7\");\n}, \"insertArrowCrossHead\");\nvar getC4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n}, \"getC4ShapeFont\");\nvar _drawTextCandidateFunc = /* @__PURE__ */ (function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n __name(byText, \"byText\");\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { fontSize, fontFamily, fontWeight } = conf2;\n const lines = content.split(common_default.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * fontSize - fontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).style(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").style(\"font-size\", fontSize).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily);\n text.append(\"tspan\").attr(\"dy\", dy).text(lines[i]).attr(\"alignment-baseline\", \"mathematical\");\n _setTextAttrs(text, textAttrs);\n }\n }\n __name(byTspan, \"byTspan\");\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n __name(byFo, \"byFo\");\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n __name(_setTextAttrs, \"_setTextAttrs\");\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n})();\nvar svgDraw_default = {\n drawRect: drawRect2,\n drawBoundary,\n drawC4Shape,\n drawRels,\n drawImage,\n insertArrowHead,\n insertArrowEnd,\n insertArrowFilledHead,\n insertDynamicNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon\n};\n\n// src/diagrams/c4/c4Renderer.js\nvar globalBoundaryMaxX = 0;\nvar globalBoundaryMaxY = 0;\nvar c4ShapeInRow2 = 4;\nvar c4BoundaryInRow2 = 2;\nparser.yy = c4Db_default;\nvar conf = {};\nvar Bounds = class {\n static {\n __name(this, \"Bounds\");\n }\n constructor(diagObj) {\n this.name = \"\";\n this.data = {};\n this.data.startx = void 0;\n this.data.stopx = void 0;\n this.data.starty = void 0;\n this.data.stopy = void 0;\n this.data.widthLimit = void 0;\n this.nextData = {};\n this.nextData.startx = void 0;\n this.nextData.stopx = void 0;\n this.nextData.starty = void 0;\n this.nextData.stopy = void 0;\n this.nextData.cnt = 0;\n setConf(diagObj.db.getConfig());\n }\n setData(startx, stopx, starty, stopy) {\n this.nextData.startx = this.data.startx = startx;\n this.nextData.stopx = this.data.stopx = stopx;\n this.nextData.starty = this.data.starty = starty;\n this.nextData.stopy = this.data.stopy = stopy;\n }\n updateVal(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n }\n insert(c4Shape) {\n this.nextData.cnt = this.nextData.cnt + 1;\n let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;\n let _stopx = _startx + c4Shape.width;\n let _starty = this.nextData.starty + c4Shape.margin * 2;\n let _stopy = _starty + c4Shape.height;\n if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow2) {\n _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n _starty = this.nextData.stopy + c4Shape.margin * 2;\n this.nextData.stopx = _stopx = _startx + c4Shape.width;\n this.nextData.starty = this.nextData.stopy;\n this.nextData.stopy = _stopy = _starty + c4Shape.height;\n this.nextData.cnt = 1;\n }\n c4Shape.x = _startx;\n c4Shape.y = _starty;\n this.updateVal(this.data, \"startx\", _startx, Math.min);\n this.updateVal(this.data, \"starty\", _starty, Math.min);\n this.updateVal(this.data, \"stopx\", _stopx, Math.max);\n this.updateVal(this.data, \"stopy\", _stopy, Math.max);\n this.updateVal(this.nextData, \"startx\", _startx, Math.min);\n this.updateVal(this.nextData, \"starty\", _starty, Math.min);\n this.updateVal(this.nextData, \"stopx\", _stopx, Math.max);\n this.updateVal(this.nextData, \"stopy\", _stopy, Math.max);\n }\n init(diagObj) {\n this.name = \"\";\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n widthLimit: void 0\n };\n this.nextData = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n cnt: 0\n };\n setConf(diagObj.db.getConfig());\n }\n bumpLastMargin(margin) {\n this.data.stopx += margin;\n this.data.stopy += margin;\n }\n};\nvar setConf = /* @__PURE__ */ __name(function(cnf) {\n assignWithDepth_default(conf, cnf);\n if (cnf.fontFamily) {\n conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n}, \"setConf\");\nvar c4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n}, \"c4ShapeFont\");\nvar boundaryFont = /* @__PURE__ */ __name((cnf) => {\n return {\n fontFamily: cnf.boundaryFontFamily,\n fontSize: cnf.boundaryFontSize,\n fontWeight: cnf.boundaryFontWeight\n };\n}, \"boundaryFont\");\nvar messageFont = /* @__PURE__ */ __name((cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight\n };\n}, \"messageFont\");\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n if (!c4Shape[textType].width) {\n if (c4ShapeTextWrap) {\n c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);\n c4Shape[textType].textLines = c4Shape[textType].text.split(common_default.lineBreakRegex).length;\n c4Shape[textType].width = textLimitWidth;\n c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);\n } else {\n let lines = c4Shape[textType].text.split(common_default.lineBreakRegex);\n c4Shape[textType].textLines = lines.length;\n let lineHeight = 0;\n c4Shape[textType].height = 0;\n c4Shape[textType].width = 0;\n for (const line of lines) {\n c4Shape[textType].width = Math.max(\n calculateTextWidth(line, textConf),\n c4Shape[textType].width\n );\n lineHeight = calculateTextHeight(line, textConf);\n c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n }\n }\n }\n}\n__name(calcC4ShapeTextWH, \"calcC4ShapeTextWH\");\nvar drawBoundary2 = /* @__PURE__ */ __name(function(diagram2, boundary, bounds) {\n boundary.x = bounds.data.startx;\n boundary.y = bounds.data.starty;\n boundary.width = bounds.data.stopx - bounds.data.startx;\n boundary.height = bounds.data.stopy - bounds.data.starty;\n boundary.label.y = conf.c4ShapeMargin - 35;\n let boundaryTextWrap = boundary.wrap && conf.wrap;\n let boundaryLabelConf = boundaryFont(conf);\n boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n boundaryLabelConf.fontWeight = \"bold\";\n let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);\n calcC4ShapeTextWH(\"label\", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n svgDraw_default.drawBoundary(diagram2, boundary, conf);\n}, \"drawBoundary\");\nvar drawC4ShapeArray = /* @__PURE__ */ __name(function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) {\n let Y = 0;\n for (const c4ShapeKey of c4ShapeKeys) {\n Y = 0;\n const c4Shape = c4ShapeArray2[c4ShapeKey];\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n c4Shape.typeC4Shape.width = calculateTextWidth(\n \"\\xAB\" + c4Shape.typeC4Shape.text + \"\\xBB\",\n c4ShapeTypeConf\n );\n c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n c4Shape.image = { width: 0, height: 0, Y: 0 };\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n break;\n }\n if (c4Shape.sprite) {\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n }\n let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n c4ShapeLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\"label\", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n c4Shape.label.Y = Y + 8;\n Y = c4Shape.label.Y + c4Shape.label.height;\n if (c4Shape.type && c4Shape.type.text !== \"\") {\n c4Shape.type.text = \"[\" + c4Shape.type.text + \"]\";\n let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"type\", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);\n c4Shape.type.Y = Y + 5;\n Y = c4Shape.type.Y + c4Shape.type.height;\n } else if (c4Shape.techn && c4Shape.techn.text !== \"\") {\n c4Shape.techn.text = \"[\" + c4Shape.techn.text + \"]\";\n let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n calcC4ShapeTextWH(\"techn\", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n c4Shape.techn.Y = Y + 5;\n Y = c4Shape.techn.Y + c4Shape.techn.height;\n }\n let rectHeight = Y;\n let rectWidth = c4Shape.label.width;\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"descr\", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n c4Shape.descr.Y = Y + 20;\n Y = c4Shape.descr.Y + c4Shape.descr.height;\n rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n rectHeight = Y - c4Shape.descr.textLines * 5;\n }\n rectWidth = rectWidth + conf.c4ShapePadding;\n c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n currentBounds.insert(c4Shape);\n svgDraw_default.drawC4Shape(diagram2, c4Shape, conf);\n }\n currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n}, \"drawC4ShapeArray\");\nvar Point = class {\n static {\n __name(this, \"Point\");\n }\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n};\nvar getIntersectPoint = /* @__PURE__ */ __name(function(fromNode, endPoint) {\n let x1 = fromNode.x;\n let y1 = fromNode.y;\n let x2 = endPoint.x;\n let y2 = endPoint.y;\n let fromCenterX = x1 + fromNode.width / 2;\n let fromCenterY = y1 + fromNode.height / 2;\n let dx = Math.abs(x1 - x2);\n let dy = Math.abs(y1 - y2);\n let tanDYX = dy / dx;\n let fromDYX = fromNode.height / fromNode.width;\n let returnPoint = null;\n if (y1 == y2 && x1 < x2) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n } else if (y1 == y2 && x1 > x2) {\n returnPoint = new Point(x1, fromCenterY);\n } else if (x1 == x2 && y1 < y2) {\n returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n } else if (x1 == x2 && y1 > y2) {\n returnPoint = new Point(fromCenterX, y1);\n }\n if (x1 > x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX - dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX + dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1);\n }\n } else if (x1 > x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX);\n } else {\n returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1);\n }\n }\n return returnPoint;\n}, \"getIntersectPoint\");\nvar getIntersectPoints = /* @__PURE__ */ __name(function(fromNode, endNode) {\n let endIntersectPoint = { x: 0, y: 0 };\n endIntersectPoint.x = endNode.x + endNode.width / 2;\n endIntersectPoint.y = endNode.y + endNode.height / 2;\n let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n return { startPoint, endPoint };\n}, \"getIntersectPoints\");\nvar drawRels2 = /* @__PURE__ */ __name(function(diagram2, rels2, getC4ShapeObj, diagObj) {\n let i = 0;\n for (let rel of rels2) {\n i = i + 1;\n let relTextWrap = rel.wrap && conf.wrap;\n let relConf = messageFont(conf);\n let diagramType = diagObj.db.getC4Type();\n if (diagramType === \"C4Dynamic\") {\n rel.label.text = i + \": \" + rel.label.text;\n }\n let textLimitWidth = calculateTextWidth(rel.label.text, relConf);\n calcC4ShapeTextWH(\"label\", rel, relTextWrap, relConf, textLimitWidth);\n if (rel.techn && rel.techn.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.techn.text, relConf);\n calcC4ShapeTextWH(\"techn\", rel, relTextWrap, relConf, textLimitWidth);\n }\n if (rel.descr && rel.descr.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.descr.text, relConf);\n calcC4ShapeTextWH(\"descr\", rel, relTextWrap, relConf, textLimitWidth);\n }\n let fromNode = getC4ShapeObj(rel.from);\n let endNode = getC4ShapeObj(rel.to);\n let points = getIntersectPoints(fromNode, endNode);\n rel.startPoint = points.startPoint;\n rel.endPoint = points.endPoint;\n }\n svgDraw_default.drawRels(diagram2, rels2, conf);\n}, \"drawRels\");\nfunction drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {\n let currentBounds = new Bounds(diagObj);\n currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow2, currentBoundaries.length);\n for (let [i, currentBoundary] of currentBoundaries.entries()) {\n let Y = 0;\n currentBoundary.image = { width: 0, height: 0, Y: 0 };\n if (currentBoundary.sprite) {\n currentBoundary.image.width = 48;\n currentBoundary.image.height = 48;\n currentBoundary.image.Y = Y;\n Y = currentBoundary.image.Y + currentBoundary.image.height;\n }\n let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n let currentBoundaryLabelConf = boundaryFont(conf);\n currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n currentBoundaryLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\n \"label\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryLabelConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.label.Y = Y + 8;\n Y = currentBoundary.label.Y + currentBoundary.label.height;\n if (currentBoundary.type && currentBoundary.type.text !== \"\") {\n currentBoundary.type.text = \"[\" + currentBoundary.type.text + \"]\";\n let currentBoundaryTypeConf = boundaryFont(conf);\n calcC4ShapeTextWH(\n \"type\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryTypeConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.type.Y = Y + 5;\n Y = currentBoundary.type.Y + currentBoundary.type.height;\n }\n if (currentBoundary.descr && currentBoundary.descr.text !== \"\") {\n let currentBoundaryDescrConf = boundaryFont(conf);\n currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n calcC4ShapeTextWH(\n \"descr\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryDescrConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.descr.Y = Y + 20;\n Y = currentBoundary.descr.Y + currentBoundary.descr.height;\n }\n if (i == 0 || i % c4BoundaryInRow2 === 0) {\n let _x = parentBounds.data.startx + conf.diagramMarginX;\n let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n currentBounds.setData(_x, _x, _y, _y);\n } else {\n let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx;\n let _y = currentBounds.data.starty;\n currentBounds.setData(_x, _x, _y, _y);\n }\n currentBounds.name = currentBoundary.alias;\n let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);\n let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);\n if (currentPersonOrSystemKeys.length > 0) {\n drawC4ShapeArray(\n currentBounds,\n diagram2,\n currentPersonOrSystemArray,\n currentPersonOrSystemKeys\n );\n }\n parentBoundaryAlias = currentBoundary.alias;\n let nextCurrentBoundaries = diagObj.db.getBoundaries(parentBoundaryAlias);\n if (nextCurrentBoundaries.length > 0) {\n drawInsideBoundary(\n diagram2,\n parentBoundaryAlias,\n currentBounds,\n nextCurrentBoundaries,\n diagObj\n );\n }\n if (currentBoundary.alias !== \"global\") {\n drawBoundary2(diagram2, currentBoundary, currentBounds);\n }\n parentBounds.data.stopy = Math.max(\n currentBounds.data.stopy + conf.c4ShapeMargin,\n parentBounds.data.stopy\n );\n parentBounds.data.stopx = Math.max(\n currentBounds.data.stopx + conf.c4ShapeMargin,\n parentBounds.data.stopx\n );\n globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n }\n}\n__name(drawInsideBoundary, \"drawInsideBoundary\");\nvar draw = /* @__PURE__ */ __name(function(_text, id, _version, diagObj) {\n conf = getConfig().c4;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n let db = diagObj.db;\n diagObj.db.setWrap(conf.wrap);\n c4ShapeInRow2 = db.getC4ShapeInRow();\n c4BoundaryInRow2 = db.getC4BoundaryInRow();\n log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n const diagram2 = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n svgDraw_default.insertComputerIcon(diagram2);\n svgDraw_default.insertDatabaseIcon(diagram2);\n svgDraw_default.insertClockIcon(diagram2);\n let screenBounds = new Bounds(diagObj);\n screenBounds.setData(\n conf.diagramMarginX,\n conf.diagramMarginX,\n conf.diagramMarginY,\n conf.diagramMarginY\n );\n screenBounds.data.widthLimit = screen.availWidth;\n globalBoundaryMaxX = conf.diagramMarginX;\n globalBoundaryMaxY = conf.diagramMarginY;\n const title2 = diagObj.db.getTitle();\n let currentBoundaries = diagObj.db.getBoundaries(\"\");\n drawInsideBoundary(diagram2, \"\", screenBounds, currentBoundaries, diagObj);\n svgDraw_default.insertArrowHead(diagram2);\n svgDraw_default.insertArrowEnd(diagram2);\n svgDraw_default.insertArrowCrossHead(diagram2);\n svgDraw_default.insertArrowFilledHead(diagram2);\n drawRels2(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);\n screenBounds.data.stopx = globalBoundaryMaxX;\n screenBounds.data.stopy = globalBoundaryMaxY;\n const box = screenBounds.data;\n let boxHeight = box.stopy - box.starty;\n let height = boxHeight + 2 * conf.diagramMarginY;\n let boxWidth = box.stopx - box.startx;\n const width = boxWidth + 2 * conf.diagramMarginX;\n if (title2) {\n diagram2.append(\"text\").text(title2).attr(\"x\", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr(\"y\", box.starty + conf.diagramMarginY);\n }\n configureSvgSize(diagram2, height, width, conf.useMaxWidth);\n const extraVertForTitle = title2 ? 60 : 0;\n diagram2.attr(\n \"viewBox\",\n box.startx - conf.diagramMarginX + \" -\" + (conf.diagramMarginY + extraVertForTitle) + \" \" + width + \" \" + (height + extraVertForTitle)\n );\n log.debug(`models:`, box);\n}, \"draw\");\nvar c4Renderer_default = {\n drawPersonOrSystemArray: drawC4ShapeArray,\n drawBoundary: drawBoundary2,\n setConf,\n draw\n};\n\n// src/diagrams/c4/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `.person {\n stroke: ${options.personBorder};\n fill: ${options.personBkg};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/c4/c4Diagram.ts\nvar diagram = {\n parser: c4Diagram_default,\n db: c4Db_default,\n renderer: c4Renderer_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name(({ c4, wrap }) => {\n c4Renderer_default.setConf(c4);\n c4Db_default.setWrap(wrap);\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","kv","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c2","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","c4Diagram_default","c4ShapeArray","boundaryParseStack","currentBoundaryParse","parentBoundaryParse","boundaries","rels","title","wrapEnabled","c4ShapeInRow","c4BoundaryInRow","c4Type","getC4Type","setC4Type","c4TypeParam","sanitizeText","getConfig","addRel","type","from","to","label","techn","descr","sprite","tags","link","rel","old","rel2","key","value","autoWrap","addPersonOrSystem","typeC4Shape","alias","personOrSystem","personOrSystem2","addContainer","container","container2","addComponent","component","component2","addPersonOrSystemBoundary","boundary","boundary2","addContainerBoundary","addDeploymentNode","nodeType","popBoundaryParseStack","updateElStyle","elementName","bgColor","fontColor","borderColor","shadowing","shape","legendText","legendSprite","element","updateRelStyle","textColor","lineColor","offsetX","offsetY","updateLayoutConfig","c4ShapeInRowParam","c4BoundaryInRowParam","c4ShapeInRowValue","c4BoundaryInRowValue","getC4ShapeInRow","getC4BoundaryInRow","getCurrentBoundaryParse","getParentBoundaryParse","getC4ShapeArray","parentBoundary","getC4Shape","getC4ShapeKeys","getBoundaries","getBoundarys","getRels","getTitle","setWrap","wrapSetting","clear","LINETYPE","ARROWTYPE","PLACEMENT","setTitle","txt","c4Db_default","setAccTitle","getAccTitle","getAccDescription","setAccDescription","drawRect2","elem","rectData","drawRect","drawImage","width","height","x","y","imageElem","sanitizedLink","sanitizeUrl","drawRels","rels2","conf2","relsElem","strokeColor","url","line","messageConf","_drawTextCandidateFunc","drawBoundary","boundaryElem","fillColor","attrsValue","boundaryConf","drawC4Shape","c4Shape","personImg","c4ShapeElem","rect","getNoteRect","c4ShapeFontConf","getC4ShapeFont","textFontConf","_a","insertDatabaseIcon","insertComputerIcon","insertClockIcon","insertArrowHead","insertArrowEnd","insertArrowFilledHead","insertDynamicNumber","insertArrowCrossHead","marker","cnf","byText","content","g","textAttrs","text","_setTextAttrs","byTspan","fontSize","fontFamily","fontWeight","common_default","dy","byFo","s","toText","fromTextAttrsDict","svgDraw_default","globalBoundaryMaxX","globalBoundaryMaxY","c4ShapeInRow2","c4BoundaryInRow2","conf","Bounds","diagObj","setConf","startx","stopx","starty","stopy","obj","val","fun","_startx","_stopx","_starty","_stopy","margin","assignWithDepth_default","c4ShapeFont","boundaryFont","messageFont","calcC4ShapeTextWH","textType","c4ShapeTextWrap","textConf","textLimitWidth","wrapLabel","calculateTextHeight","lineHeight","calculateTextWidth","drawBoundary2","diagram2","bounds","boundaryTextWrap","boundaryLabelConf","drawC4ShapeArray","currentBounds","c4ShapeArray2","c4ShapeKeys","Y","c4ShapeKey","c4ShapeTypeConf","c4ShapeLabelConf","c4ShapeTypeConf2","c4ShapeTechnConf","rectHeight","rectWidth","c4ShapeDescrConf","Point","getIntersectPoint","fromNode","endPoint","x1","y1","x2","y2","fromCenterX","fromCenterY","dx","tanDYX","fromDYX","returnPoint","getIntersectPoints","endNode","endIntersectPoint","startPoint","drawRels2","getC4ShapeObj","relTextWrap","relConf","points","drawInsideBoundary","parentBoundaryAlias","parentBounds","currentBoundaries","currentBoundary","currentBoundaryTextWrap","currentBoundaryLabelConf","currentBoundaryTypeConf","currentBoundaryDescrConf","_x","_y","currentPersonOrSystemArray","currentPersonOrSystemKeys","nextCurrentBoundaries","draw","_text","id","_version","securityLevel","sandboxElement","select","root","db","log","screenBounds","title2","box","configureSvgSize","extraVertForTitle","c4Renderer_default","getStyles","options","styles_default","diagram","c4","wrap"],"mappings":"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AI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIhE,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAG,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK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AAC,EAAG1D,EAAE0D,GAAK,CAAC,EAAG,EAAE,CAAC,EAAG1D,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EAAG,EAAE,CAAC,EAAGxD,EAAEwD,EAAK,CAAC,EA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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/channel-5fWG1b_w.js b/massgen/frontend/web/static/assets/channel-5fWG1b_w.js deleted file mode 100644 index fdf2bb7f5..000000000 --- a/massgen/frontend/web/static/assets/channel-5fWG1b_w.js +++ /dev/null @@ -1,2 +0,0 @@ -import{ap as o,aq as n}from"./index-yx4Z55Qu.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c}; -//# sourceMappingURL=channel-5fWG1b_w.js.map diff --git a/massgen/frontend/web/static/assets/channel-B_f67D__.js b/massgen/frontend/web/static/assets/channel-B_f67D__.js new file mode 100644 index 000000000..bf90197f3 --- /dev/null +++ b/massgen/frontend/web/static/assets/channel-B_f67D__.js @@ -0,0 +1,2 @@ +import{ap as o,aq as n}from"./index-DbSnkTMx.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c}; +//# sourceMappingURL=channel-B_f67D__.js.map diff --git a/massgen/frontend/web/static/assets/channel-5fWG1b_w.js.map b/massgen/frontend/web/static/assets/channel-B_f67D__.js.map similarity index 88% rename from massgen/frontend/web/static/assets/channel-5fWG1b_w.js.map rename to massgen/frontend/web/static/assets/channel-B_f67D__.js.map index f8a5a4362..745299453 100644 --- a/massgen/frontend/web/static/assets/channel-5fWG1b_w.js.map +++ b/massgen/frontend/web/static/assets/channel-B_f67D__.js.map @@ -1 +1 @@ -{"version":3,"file":"channel-5fWG1b_w.js","sources":["../../../../../webui/node_modules/khroma/dist/methods/channel.js"],"sourcesContent":["/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n"],"names":["channel","color","_","Color"],"mappings":"iDAIK,MAACA,EAAU,CAACC,EAAOD,IACbE,EAAE,KAAK,MAAMC,EAAM,MAAMF,CAAK,EAAED,CAAO,CAAC","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"channel-B_f67D__.js","sources":["../../../../../webui/node_modules/khroma/dist/methods/channel.js"],"sourcesContent":["/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n"],"names":["channel","color","_","Color"],"mappings":"iDAIK,MAACA,EAAU,CAACC,EAAOD,IACbE,EAAE,KAAK,MAAMC,EAAM,MAAMF,CAAK,EAAED,CAAO,CAAC","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js b/massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js similarity index 66% rename from massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js rename to massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js index 05bc6a26a..000eeecea 100644 --- a/massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js +++ b/massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js @@ -1,2 +1,2 @@ -import{_ as l}from"./index-yx4Z55Qu.js";function m(e,c){var i,t,o;e.accDescr&&((i=c.setAccDescription)==null||i.call(c,e.accDescr)),e.accTitle&&((t=c.setAccTitle)==null||t.call(c,e.accTitle)),e.title&&((o=c.setDiagramTitle)==null||o.call(c,e.title))}l(m,"populateCommonDb");export{m as p}; -//# sourceMappingURL=chunk-4BX2VUAB-zPP-xzOW.js.map +import{_ as l}from"./index-DbSnkTMx.js";function m(e,c){var i,t,o;e.accDescr&&((i=c.setAccDescription)==null||i.call(c,e.accDescr)),e.accTitle&&((t=c.setAccTitle)==null||t.call(c,e.accTitle)),e.title&&((o=c.setDiagramTitle)==null||o.call(c,e.title))}l(m,"populateCommonDb");export{m as p}; +//# sourceMappingURL=chunk-4BX2VUAB-PBVZf6Qi.js.map diff --git a/massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js.map b/massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js.map similarity index 93% rename from massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js.map rename to massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js.map index b5297a261..5236f6052 100644 --- a/massgen/frontend/web/static/assets/chunk-4BX2VUAB-zPP-xzOW.js.map +++ b/massgen/frontend/web/static/assets/chunk-4BX2VUAB-PBVZf6Qi.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-4BX2VUAB-zPP-xzOW.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-4BX2VUAB.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/populateCommonDb.ts\nfunction populateCommonDb(ast, db) {\n if (ast.accDescr) {\n db.setAccDescription?.(ast.accDescr);\n }\n if (ast.accTitle) {\n db.setAccTitle?.(ast.accTitle);\n }\n if (ast.title) {\n db.setDiagramTitle?.(ast.title);\n }\n}\n__name(populateCommonDb, \"populateCommonDb\");\n\nexport {\n populateCommonDb\n};\n"],"names":["populateCommonDb","ast","db","_a","_b","_c","__name"],"mappings":"wCAKA,SAASA,EAAiBC,EAAKC,EAAI,WAC7BD,EAAI,YACNE,EAAAD,EAAG,oBAAH,MAAAC,EAAA,KAAAD,EAAuBD,EAAI,WAEzBA,EAAI,YACNG,EAAAF,EAAG,cAAH,MAAAE,EAAA,KAAAF,EAAiBD,EAAI,WAEnBA,EAAI,SACNI,EAAAH,EAAG,kBAAH,MAAAG,EAAA,KAAAH,EAAqBD,EAAI,OAE7B,CACAK,EAAON,EAAkB,kBAAkB","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-4BX2VUAB-PBVZf6Qi.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-4BX2VUAB.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/populateCommonDb.ts\nfunction populateCommonDb(ast, db) {\n if (ast.accDescr) {\n db.setAccDescription?.(ast.accDescr);\n }\n if (ast.accTitle) {\n db.setAccTitle?.(ast.accTitle);\n }\n if (ast.title) {\n db.setDiagramTitle?.(ast.title);\n }\n}\n__name(populateCommonDb, \"populateCommonDb\");\n\nexport {\n populateCommonDb\n};\n"],"names":["populateCommonDb","ast","db","_a","_b","_c","__name"],"mappings":"wCAKA,SAASA,EAAiBC,EAAKC,EAAI,WAC7BD,EAAI,YACNE,EAAAD,EAAG,oBAAH,MAAAC,EAAA,KAAAD,EAAuBD,EAAI,WAEzBA,EAAI,YACNG,EAAAF,EAAG,cAAH,MAAAE,EAAA,KAAAF,EAAiBD,EAAI,WAEnBA,EAAI,SACNI,EAAAH,EAAG,kBAAH,MAAAG,EAAA,KAAAH,EAAqBD,EAAI,OAE7B,CACAK,EAAON,EAAkB,kBAAkB","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js b/massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js similarity index 58% rename from massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js rename to massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js index e0224ccf5..db38c8aef 100644 --- a/massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js +++ b/massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js @@ -1,2 +1,2 @@ -import{_ as a,d as o}from"./index-yx4Z55Qu.js";var d=a((t,e)=>{let n;return e==="sandbox"&&(n=o("#i"+t)),(e==="sandbox"?o(n.nodes()[0].contentDocument.body):o("body")).select(`[id="${t}"]`)},"getDiagramElement");export{d as g}; -//# sourceMappingURL=chunk-55IACEB6-BCQD3dNT.js.map +import{_ as a,d as o}from"./index-DbSnkTMx.js";var d=a((t,e)=>{let n;return e==="sandbox"&&(n=o("#i"+t)),(e==="sandbox"?o(n.nodes()[0].contentDocument.body):o("body")).select(`[id="${t}"]`)},"getDiagramElement");export{d as g}; +//# sourceMappingURL=chunk-55IACEB6-Do1tLUXI.js.map diff --git a/massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js.map b/massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js.map similarity index 94% rename from massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js.map rename to massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js.map index 42c0d35d8..77e441095 100644 --- a/massgen/frontend/web/static/assets/chunk-55IACEB6-BCQD3dNT.js.map +++ b/massgen/frontend/web/static/assets/chunk-55IACEB6-Do1tLUXI.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-55IACEB6-BCQD3dNT.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-55IACEB6.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/insertElementsForSize.js\nimport { select } from \"d3\";\nvar getDiagramElement = /* @__PURE__ */ __name((id, securityLevel) => {\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n return svg;\n}, \"getDiagramElement\");\n\nexport {\n getDiagramElement\n};\n"],"names":["getDiagramElement","__name","id","securityLevel","sandboxElement","select"],"mappings":"+CAMG,IAACA,EAAoCC,EAAO,CAACC,EAAIC,IAAkB,CACpE,IAAIC,EACJ,OAAID,IAAkB,YACpBC,EAAiBC,EAAO,KAAOH,CAAE,IAEtBC,IAAkB,UAAYE,EAAOD,EAAe,QAAQ,CAAC,EAAE,gBAAgB,IAAI,EAAIC,EAAO,MAAM,GAChG,OAAO,QAAQH,CAAE,IAAI,CAExC,EAAG,mBAAmB","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-55IACEB6-Do1tLUXI.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-55IACEB6.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/insertElementsForSize.js\nimport { select } from \"d3\";\nvar getDiagramElement = /* @__PURE__ */ __name((id, securityLevel) => {\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n return svg;\n}, \"getDiagramElement\");\n\nexport {\n getDiagramElement\n};\n"],"names":["getDiagramElement","__name","id","securityLevel","sandboxElement","select"],"mappings":"+CAMG,IAACA,EAAoCC,EAAO,CAACC,EAAIC,IAAkB,CACpE,IAAIC,EACJ,OAAID,IAAkB,YACpBC,EAAiBC,EAAO,KAAOH,CAAE,IAEtBC,IAAkB,UAAYE,EAAOD,EAAe,QAAQ,CAAC,EAAE,gBAAgB,IAAI,EAAIC,EAAO,MAAM,GAChG,OAAO,QAAQH,CAAE,IAAI,CAExC,EAAG,mBAAmB","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js b/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js similarity index 99% rename from massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js rename to massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js index 76d4345e5..c094bf98a 100644 --- a/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js +++ b/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js @@ -1,4 +1,4 @@ -import{g as et}from"./chunk-FMBD7UC4-LU2vPcC6.js";import{g as tt}from"./chunk-55IACEB6-BCQD3dNT.js";import{s as st}from"./chunk-QN33PNHL-BF8yyMHO.js";import{_ as f,l as Oe,c as F,o as it,r as at,u as we,d as ee,b as nt,a as rt,s as ut,g as lt,p as ot,q as ct,k as v,y as ht,x as dt,i as pt,Q as R}from"./index-yx4Z55Qu.js";var Ve=(function(){var s=f(function(I,o,h,p){for(h=h||{},p=I.length;p--;h[I[p]]=o);return h},"o"),i=[1,18],a=[1,19],u=[1,20],l=[1,41],r=[1,42],c=[1,26],A=[1,24],g=[1,25],D=[1,32],L=[1,33],Ae=[1,34],m=[1,45],fe=[1,35],ge=[1,36],Ce=[1,37],me=[1,38],be=[1,27],Ee=[1,28],ye=[1,29],Te=[1,30],ke=[1,31],b=[1,44],E=[1,46],y=[1,43],T=[1,47],De=[1,9],d=[1,8,9],te=[1,58],se=[1,59],ie=[1,60],ae=[1,61],ne=[1,62],Fe=[1,63],Be=[1,64],z=[1,8,9,41],Pe=[1,76],P=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],re=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],ue=[13,60,86,100,102,103],K=[13,60,73,74,86,100,102,103],Me=[13,60,68,69,70,71,72,86,100,102,103],_e=[1,100],Y=[1,117],Q=[1,113],W=[1,109],j=[1,115],X=[1,110],q=[1,111],H=[1,112],J=[1,114],Z=[1,116],Re=[22,48,60,61,82,86,87,88,89,90],Se=[1,8,9,39,41,44],le=[1,8,9,22],Ge=[1,145],Ue=[1,8,9,61],N=[1,8,9,22,48,60,61,82,86,87,88,89,90],Ne={trace:f(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:f(function(o,h,p,n,C,e,$){var t=e.length-1;switch(C){case 8:this.$=e[t-1];break;case 9:case 10:case 13:case 15:this.$=e[t];break;case 11:case 14:this.$=e[t-2]+"."+e[t];break;case 12:case 16:this.$=e[t-1]+e[t];break;case 17:case 18:this.$=e[t-1]+"~"+e[t]+"~";break;case 19:n.addRelation(e[t]);break;case 20:e[t-1].title=n.cleanupLabel(e[t]),n.addRelation(e[t-1]);break;case 31:this.$=e[t].trim(),n.setAccTitle(this.$);break;case 32:case 33:this.$=e[t].trim(),n.setAccDescription(this.$);break;case 34:n.addClassesToNamespace(e[t-3],e[t-1]);break;case 35:n.addClassesToNamespace(e[t-4],e[t-1]);break;case 36:this.$=e[t],n.addNamespace(e[t]);break;case 37:this.$=[e[t]];break;case 38:this.$=[e[t-1]];break;case 39:e[t].unshift(e[t-2]),this.$=e[t];break;case 41:n.setCssClass(e[t-2],e[t]);break;case 42:n.addMembers(e[t-3],e[t-1]);break;case 44:n.setCssClass(e[t-5],e[t-3]),n.addMembers(e[t-5],e[t-1]);break;case 45:this.$=e[t],n.addClass(e[t]);break;case 46:this.$=e[t-1],n.addClass(e[t-1]),n.setClassLabel(e[t-1],e[t]);break;case 50:n.addAnnotation(e[t],e[t-2]);break;case 51:case 64:this.$=[e[t]];break;case 52:e[t].push(e[t-1]),this.$=e[t];break;case 53:break;case 54:n.addMember(e[t-1],n.cleanupLabel(e[t]));break;case 55:break;case 56:break;case 57:this.$={id1:e[t-2],id2:e[t],relation:e[t-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:e[t-3],id2:e[t],relation:e[t-1],relationTitle1:e[t-2],relationTitle2:"none"};break;case 59:this.$={id1:e[t-3],id2:e[t],relation:e[t-2],relationTitle1:"none",relationTitle2:e[t-1]};break;case 60:this.$={id1:e[t-4],id2:e[t],relation:e[t-2],relationTitle1:e[t-3],relationTitle2:e[t-1]};break;case 61:n.addNote(e[t],e[t-1]);break;case 62:n.addNote(e[t]);break;case 63:this.$=e[t-2],n.defineClass(e[t-1],e[t]);break;case 65:this.$=e[t-2].concat([e[t]]);break;case 66:n.setDirection("TB");break;case 67:n.setDirection("BT");break;case 68:n.setDirection("RL");break;case 69:n.setDirection("LR");break;case 70:this.$={type1:e[t-2],type2:e[t],lineType:e[t-1]};break;case 71:this.$={type1:"none",type2:e[t],lineType:e[t-1]};break;case 72:this.$={type1:e[t-1],type2:"none",lineType:e[t]};break;case 73:this.$={type1:"none",type2:"none",lineType:e[t]};break;case 74:this.$=n.relationType.AGGREGATION;break;case 75:this.$=n.relationType.EXTENSION;break;case 76:this.$=n.relationType.COMPOSITION;break;case 77:this.$=n.relationType.DEPENDENCY;break;case 78:this.$=n.relationType.LOLLIPOP;break;case 79:this.$=n.lineType.LINE;break;case 80:this.$=n.lineType.DOTTED_LINE;break;case 81:case 87:this.$=e[t-2],n.setClickEvent(e[t-1],e[t]);break;case 82:case 88:this.$=e[t-3],n.setClickEvent(e[t-2],e[t-1]),n.setTooltip(e[t-2],e[t]);break;case 83:this.$=e[t-2],n.setLink(e[t-1],e[t]);break;case 84:this.$=e[t-3],n.setLink(e[t-2],e[t-1],e[t]);break;case 85:this.$=e[t-3],n.setLink(e[t-2],e[t-1]),n.setTooltip(e[t-2],e[t]);break;case 86:this.$=e[t-4],n.setLink(e[t-3],e[t-2],e[t]),n.setTooltip(e[t-3],e[t-1]);break;case 89:this.$=e[t-3],n.setClickEvent(e[t-2],e[t-1],e[t]);break;case 90:this.$=e[t-4],n.setClickEvent(e[t-3],e[t-2],e[t-1]),n.setTooltip(e[t-3],e[t]);break;case 91:this.$=e[t-3],n.setLink(e[t-2],e[t]);break;case 92:this.$=e[t-4],n.setLink(e[t-3],e[t-1],e[t]);break;case 93:this.$=e[t-4],n.setLink(e[t-3],e[t-1]),n.setTooltip(e[t-3],e[t]);break;case 94:this.$=e[t-5],n.setLink(e[t-4],e[t-2],e[t]),n.setTooltip(e[t-4],e[t-1]);break;case 95:this.$=e[t-2],n.setCssStyle(e[t-1],e[t]);break;case 96:n.setCssClass(e[t-1],e[t]);break;case 97:this.$=[e[t]];break;case 98:e[t-2].push(e[t]),this.$=e[t-2];break;case 100:this.$=e[t-1]+e[t];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},s(De,[2,5],{8:[1,48]}),{8:[1,49]},s(d,[2,19],{22:[1,50]}),s(d,[2,21]),s(d,[2,22]),s(d,[2,23]),s(d,[2,24]),s(d,[2,25]),s(d,[2,26]),s(d,[2,27]),s(d,[2,28]),s(d,[2,29]),s(d,[2,30]),{34:[1,51]},{36:[1,52]},s(d,[2,33]),s(d,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be}),{39:[1,65]},s(z,[2,40],{39:[1,67],44:[1,66]}),s(d,[2,55]),s(d,[2,56]),{16:68,60:m,86:b,100:E,102:y},{16:39,17:40,19:69,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:70,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:71,60:m,86:b,100:E,102:y,103:T},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:m,86:b,100:E,102:y,103:T},{13:Pe,55:75},{58:77,60:[1,78]},s(d,[2,66]),s(d,[2,67]),s(d,[2,68]),s(d,[2,69]),s(P,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:m,86:b,100:E,102:y,103:T}),s(P,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:86,60:m,86:b,100:E,102:y,103:T},s(re,[2,123]),s(re,[2,124]),s(re,[2,125]),s(re,[2,126]),s([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),s(De,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:i,35:a,37:u,42:l,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},s(d,[2,20]),s(d,[2,31]),s(d,[2,32]),{13:[1,90],16:39,17:40,19:89,60:m,86:b,100:E,102:y,103:T},{53:91,66:56,67:57,68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be},s(d,[2,54]),{67:92,73:Fe,74:Be},s(ue,[2,73],{66:93,68:te,69:se,70:ie,71:ae,72:ne}),s(K,[2,74]),s(K,[2,75]),s(K,[2,76]),s(K,[2,77]),s(K,[2,78]),s(Me,[2,79]),s(Me,[2,80]),{8:[1,95],24:96,40:94,43:23,46:r},{16:97,60:m,86:b,100:E,102:y},{41:[1,99],45:98,51:_e},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:Y,48:Q,59:106,60:W,82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},{60:[1,118]},{13:Pe,55:119},s(d,[2,62]),s(d,[2,128]),{22:Y,48:Q,59:120,60:W,61:[1,121],82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},s(Re,[2,64]),{16:39,17:40,19:122,60:m,86:b,100:E,102:y,103:T},s(P,[2,16]),s(P,[2,17]),s(P,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:m,86:b,100:E,102:y,103:T},{39:[2,10]},s(Se,[2,45],{11:125,12:[1,126]}),s(De,[2,7]),{9:[1,127]},s(le,[2,57]),{16:39,17:40,19:128,60:m,86:b,100:E,102:y,103:T},{13:[1,130],16:39,17:40,19:129,60:m,86:b,100:E,102:y,103:T},s(ue,[2,72],{66:131,68:te,69:se,70:ie,71:ae,72:ne}),s(ue,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:r},{8:[1,134],41:[2,37]},s(z,[2,41],{39:[1,135]}),{41:[1,136]},s(z,[2,43]),{41:[2,51],45:137,51:_e},{16:39,17:40,19:138,60:m,86:b,100:E,102:y,103:T},s(d,[2,81],{13:[1,139]}),s(d,[2,83],{13:[1,141],77:[1,140]}),s(d,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},s(d,[2,95],{61:Ge}),s(Ue,[2,97],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(N,[2,99]),s(N,[2,101]),s(N,[2,102]),s(N,[2,103]),s(N,[2,104]),s(N,[2,105]),s(N,[2,106]),s(N,[2,107]),s(N,[2,108]),s(N,[2,109]),s(d,[2,96]),s(d,[2,61]),s(d,[2,63],{61:Ge}),{60:[1,147]},s(P,[2,14]),{15:148,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{39:[2,12]},s(Se,[2,46]),{13:[1,149]},{1:[2,4]},s(le,[2,59]),s(le,[2,58]),{16:39,17:40,19:150,60:m,86:b,100:E,102:y,103:T},s(ue,[2,70]),s(d,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:r},{45:153,51:_e},s(z,[2,42]),{41:[2,52]},s(d,[2,50]),s(d,[2,82]),s(d,[2,84]),s(d,[2,85],{77:[1,154]}),s(d,[2,88]),s(d,[2,89],{13:[1,155]}),s(d,[2,91],{13:[1,157],77:[1,156]}),{22:Y,48:Q,60:W,82:j,84:158,85:108,86:X,87:q,88:H,89:J,90:Z},s(N,[2,100]),s(Re,[2,65]),{39:[2,11]},{14:[1,159]},s(le,[2,60]),s(d,[2,35]),{41:[2,39]},{41:[1,160]},s(d,[2,86]),s(d,[2,90]),s(d,[2,92]),s(d,[2,93],{77:[1,161]}),s(Ue,[2,98],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(Se,[2,8]),s(z,[2,44]),s(d,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:f(function(o,h){if(h.recoverable)this.trace(o);else{var p=new Error(o);throw p.hash=h,p}},"parseError"),parse:f(function(o){var h=this,p=[0],n=[],C=[null],e=[],$=this.table,t="",ce=0,ze=0,He=2,Ke=1,Je=e.slice.call(arguments,1),k=Object.create(this.lexer),O={yy:{}};for(var Le in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Le)&&(O.yy[Le]=this.yy[Le]);k.setInput(o,O.yy),O.yy.lexer=k,O.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var xe=k.yylloc;e.push(xe);var Ze=k.options&&k.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function $e(_){p.length=p.length-2*_,C.length=C.length-_,e.length=e.length-_}f($e,"popStack");function Ye(){var _;return _=n.pop()||k.lex()||Ke,typeof _!="number"&&(_ instanceof Array&&(n=_,_=n.pop()),_=h.symbols_[_]||_),_}f(Ye,"lex");for(var B,w,S,ve,M={},he,x,Qe,de;;){if(w=p[p.length-1],this.defaultActions[w]?S=this.defaultActions[w]:((B===null||typeof B>"u")&&(B=Ye()),S=$[w]&&$[w][B]),typeof S>"u"||!S.length||!S[0]){var Ie="";de=[];for(he in $[w])this.terminals_[he]&&he>He&&de.push("'"+this.terminals_[he]+"'");k.showPosition?Ie="Parse error on line "+(ce+1)+`: +import{g as et}from"./chunk-FMBD7UC4-DgHqX2i6.js";import{g as tt}from"./chunk-55IACEB6-Do1tLUXI.js";import{s as st}from"./chunk-QN33PNHL-Bl50RaE-.js";import{_ as f,l as Oe,c as F,o as it,r as at,u as we,d as ee,b as nt,a as rt,s as ut,g as lt,p as ot,q as ct,k as v,y as ht,x as dt,i as pt,Q as R}from"./index-DbSnkTMx.js";var Ve=(function(){var s=f(function(I,o,h,p){for(h=h||{},p=I.length;p--;h[I[p]]=o);return h},"o"),i=[1,18],a=[1,19],u=[1,20],l=[1,41],r=[1,42],c=[1,26],A=[1,24],g=[1,25],D=[1,32],L=[1,33],Ae=[1,34],m=[1,45],fe=[1,35],ge=[1,36],Ce=[1,37],me=[1,38],be=[1,27],Ee=[1,28],ye=[1,29],Te=[1,30],ke=[1,31],b=[1,44],E=[1,46],y=[1,43],T=[1,47],De=[1,9],d=[1,8,9],te=[1,58],se=[1,59],ie=[1,60],ae=[1,61],ne=[1,62],Fe=[1,63],Be=[1,64],z=[1,8,9,41],Pe=[1,76],P=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],re=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],ue=[13,60,86,100,102,103],K=[13,60,73,74,86,100,102,103],Me=[13,60,68,69,70,71,72,86,100,102,103],_e=[1,100],Y=[1,117],Q=[1,113],W=[1,109],j=[1,115],X=[1,110],q=[1,111],H=[1,112],J=[1,114],Z=[1,116],Re=[22,48,60,61,82,86,87,88,89,90],Se=[1,8,9,39,41,44],le=[1,8,9,22],Ge=[1,145],Ue=[1,8,9,61],N=[1,8,9,22,48,60,61,82,86,87,88,89,90],Ne={trace:f(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:f(function(o,h,p,n,C,e,$){var t=e.length-1;switch(C){case 8:this.$=e[t-1];break;case 9:case 10:case 13:case 15:this.$=e[t];break;case 11:case 14:this.$=e[t-2]+"."+e[t];break;case 12:case 16:this.$=e[t-1]+e[t];break;case 17:case 18:this.$=e[t-1]+"~"+e[t]+"~";break;case 19:n.addRelation(e[t]);break;case 20:e[t-1].title=n.cleanupLabel(e[t]),n.addRelation(e[t-1]);break;case 31:this.$=e[t].trim(),n.setAccTitle(this.$);break;case 32:case 33:this.$=e[t].trim(),n.setAccDescription(this.$);break;case 34:n.addClassesToNamespace(e[t-3],e[t-1]);break;case 35:n.addClassesToNamespace(e[t-4],e[t-1]);break;case 36:this.$=e[t],n.addNamespace(e[t]);break;case 37:this.$=[e[t]];break;case 38:this.$=[e[t-1]];break;case 39:e[t].unshift(e[t-2]),this.$=e[t];break;case 41:n.setCssClass(e[t-2],e[t]);break;case 42:n.addMembers(e[t-3],e[t-1]);break;case 44:n.setCssClass(e[t-5],e[t-3]),n.addMembers(e[t-5],e[t-1]);break;case 45:this.$=e[t],n.addClass(e[t]);break;case 46:this.$=e[t-1],n.addClass(e[t-1]),n.setClassLabel(e[t-1],e[t]);break;case 50:n.addAnnotation(e[t],e[t-2]);break;case 51:case 64:this.$=[e[t]];break;case 52:e[t].push(e[t-1]),this.$=e[t];break;case 53:break;case 54:n.addMember(e[t-1],n.cleanupLabel(e[t]));break;case 55:break;case 56:break;case 57:this.$={id1:e[t-2],id2:e[t],relation:e[t-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:e[t-3],id2:e[t],relation:e[t-1],relationTitle1:e[t-2],relationTitle2:"none"};break;case 59:this.$={id1:e[t-3],id2:e[t],relation:e[t-2],relationTitle1:"none",relationTitle2:e[t-1]};break;case 60:this.$={id1:e[t-4],id2:e[t],relation:e[t-2],relationTitle1:e[t-3],relationTitle2:e[t-1]};break;case 61:n.addNote(e[t],e[t-1]);break;case 62:n.addNote(e[t]);break;case 63:this.$=e[t-2],n.defineClass(e[t-1],e[t]);break;case 65:this.$=e[t-2].concat([e[t]]);break;case 66:n.setDirection("TB");break;case 67:n.setDirection("BT");break;case 68:n.setDirection("RL");break;case 69:n.setDirection("LR");break;case 70:this.$={type1:e[t-2],type2:e[t],lineType:e[t-1]};break;case 71:this.$={type1:"none",type2:e[t],lineType:e[t-1]};break;case 72:this.$={type1:e[t-1],type2:"none",lineType:e[t]};break;case 73:this.$={type1:"none",type2:"none",lineType:e[t]};break;case 74:this.$=n.relationType.AGGREGATION;break;case 75:this.$=n.relationType.EXTENSION;break;case 76:this.$=n.relationType.COMPOSITION;break;case 77:this.$=n.relationType.DEPENDENCY;break;case 78:this.$=n.relationType.LOLLIPOP;break;case 79:this.$=n.lineType.LINE;break;case 80:this.$=n.lineType.DOTTED_LINE;break;case 81:case 87:this.$=e[t-2],n.setClickEvent(e[t-1],e[t]);break;case 82:case 88:this.$=e[t-3],n.setClickEvent(e[t-2],e[t-1]),n.setTooltip(e[t-2],e[t]);break;case 83:this.$=e[t-2],n.setLink(e[t-1],e[t]);break;case 84:this.$=e[t-3],n.setLink(e[t-2],e[t-1],e[t]);break;case 85:this.$=e[t-3],n.setLink(e[t-2],e[t-1]),n.setTooltip(e[t-2],e[t]);break;case 86:this.$=e[t-4],n.setLink(e[t-3],e[t-2],e[t]),n.setTooltip(e[t-3],e[t-1]);break;case 89:this.$=e[t-3],n.setClickEvent(e[t-2],e[t-1],e[t]);break;case 90:this.$=e[t-4],n.setClickEvent(e[t-3],e[t-2],e[t-1]),n.setTooltip(e[t-3],e[t]);break;case 91:this.$=e[t-3],n.setLink(e[t-2],e[t]);break;case 92:this.$=e[t-4],n.setLink(e[t-3],e[t-1],e[t]);break;case 93:this.$=e[t-4],n.setLink(e[t-3],e[t-1]),n.setTooltip(e[t-3],e[t]);break;case 94:this.$=e[t-5],n.setLink(e[t-4],e[t-2],e[t]),n.setTooltip(e[t-4],e[t-1]);break;case 95:this.$=e[t-2],n.setCssStyle(e[t-1],e[t]);break;case 96:n.setCssClass(e[t-1],e[t]);break;case 97:this.$=[e[t]];break;case 98:e[t-2].push(e[t]),this.$=e[t-2];break;case 100:this.$=e[t-1]+e[t];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},s(De,[2,5],{8:[1,48]}),{8:[1,49]},s(d,[2,19],{22:[1,50]}),s(d,[2,21]),s(d,[2,22]),s(d,[2,23]),s(d,[2,24]),s(d,[2,25]),s(d,[2,26]),s(d,[2,27]),s(d,[2,28]),s(d,[2,29]),s(d,[2,30]),{34:[1,51]},{36:[1,52]},s(d,[2,33]),s(d,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be}),{39:[1,65]},s(z,[2,40],{39:[1,67],44:[1,66]}),s(d,[2,55]),s(d,[2,56]),{16:68,60:m,86:b,100:E,102:y},{16:39,17:40,19:69,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:70,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:71,60:m,86:b,100:E,102:y,103:T},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:m,86:b,100:E,102:y,103:T},{13:Pe,55:75},{58:77,60:[1,78]},s(d,[2,66]),s(d,[2,67]),s(d,[2,68]),s(d,[2,69]),s(P,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:m,86:b,100:E,102:y,103:T}),s(P,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:86,60:m,86:b,100:E,102:y,103:T},s(re,[2,123]),s(re,[2,124]),s(re,[2,125]),s(re,[2,126]),s([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),s(De,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:i,35:a,37:u,42:l,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:r,49:c,51:A,52:g,54:D,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},s(d,[2,20]),s(d,[2,31]),s(d,[2,32]),{13:[1,90],16:39,17:40,19:89,60:m,86:b,100:E,102:y,103:T},{53:91,66:56,67:57,68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be},s(d,[2,54]),{67:92,73:Fe,74:Be},s(ue,[2,73],{66:93,68:te,69:se,70:ie,71:ae,72:ne}),s(K,[2,74]),s(K,[2,75]),s(K,[2,76]),s(K,[2,77]),s(K,[2,78]),s(Me,[2,79]),s(Me,[2,80]),{8:[1,95],24:96,40:94,43:23,46:r},{16:97,60:m,86:b,100:E,102:y},{41:[1,99],45:98,51:_e},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:Y,48:Q,59:106,60:W,82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},{60:[1,118]},{13:Pe,55:119},s(d,[2,62]),s(d,[2,128]),{22:Y,48:Q,59:120,60:W,61:[1,121],82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},s(Re,[2,64]),{16:39,17:40,19:122,60:m,86:b,100:E,102:y,103:T},s(P,[2,16]),s(P,[2,17]),s(P,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:m,86:b,100:E,102:y,103:T},{39:[2,10]},s(Se,[2,45],{11:125,12:[1,126]}),s(De,[2,7]),{9:[1,127]},s(le,[2,57]),{16:39,17:40,19:128,60:m,86:b,100:E,102:y,103:T},{13:[1,130],16:39,17:40,19:129,60:m,86:b,100:E,102:y,103:T},s(ue,[2,72],{66:131,68:te,69:se,70:ie,71:ae,72:ne}),s(ue,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:r},{8:[1,134],41:[2,37]},s(z,[2,41],{39:[1,135]}),{41:[1,136]},s(z,[2,43]),{41:[2,51],45:137,51:_e},{16:39,17:40,19:138,60:m,86:b,100:E,102:y,103:T},s(d,[2,81],{13:[1,139]}),s(d,[2,83],{13:[1,141],77:[1,140]}),s(d,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},s(d,[2,95],{61:Ge}),s(Ue,[2,97],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(N,[2,99]),s(N,[2,101]),s(N,[2,102]),s(N,[2,103]),s(N,[2,104]),s(N,[2,105]),s(N,[2,106]),s(N,[2,107]),s(N,[2,108]),s(N,[2,109]),s(d,[2,96]),s(d,[2,61]),s(d,[2,63],{61:Ge}),{60:[1,147]},s(P,[2,14]),{15:148,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{39:[2,12]},s(Se,[2,46]),{13:[1,149]},{1:[2,4]},s(le,[2,59]),s(le,[2,58]),{16:39,17:40,19:150,60:m,86:b,100:E,102:y,103:T},s(ue,[2,70]),s(d,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:r},{45:153,51:_e},s(z,[2,42]),{41:[2,52]},s(d,[2,50]),s(d,[2,82]),s(d,[2,84]),s(d,[2,85],{77:[1,154]}),s(d,[2,88]),s(d,[2,89],{13:[1,155]}),s(d,[2,91],{13:[1,157],77:[1,156]}),{22:Y,48:Q,60:W,82:j,84:158,85:108,86:X,87:q,88:H,89:J,90:Z},s(N,[2,100]),s(Re,[2,65]),{39:[2,11]},{14:[1,159]},s(le,[2,60]),s(d,[2,35]),{41:[2,39]},{41:[1,160]},s(d,[2,86]),s(d,[2,90]),s(d,[2,92]),s(d,[2,93],{77:[1,161]}),s(Ue,[2,98],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(Se,[2,8]),s(z,[2,44]),s(d,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:f(function(o,h){if(h.recoverable)this.trace(o);else{var p=new Error(o);throw p.hash=h,p}},"parseError"),parse:f(function(o){var h=this,p=[0],n=[],C=[null],e=[],$=this.table,t="",ce=0,ze=0,He=2,Ke=1,Je=e.slice.call(arguments,1),k=Object.create(this.lexer),O={yy:{}};for(var Le in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Le)&&(O.yy[Le]=this.yy[Le]);k.setInput(o,O.yy),O.yy.lexer=k,O.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var xe=k.yylloc;e.push(xe);var Ze=k.options&&k.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function $e(_){p.length=p.length-2*_,C.length=C.length-_,e.length=e.length-_}f($e,"popStack");function Ye(){var _;return _=n.pop()||k.lex()||Ke,typeof _!="number"&&(_ instanceof Array&&(n=_,_=n.pop()),_=h.symbols_[_]||_),_}f(Ye,"lex");for(var B,w,S,ve,M={},he,x,Qe,de;;){if(w=p[p.length-1],this.defaultActions[w]?S=this.defaultActions[w]:((B===null||typeof B>"u")&&(B=Ye()),S=$[w]&&$[w][B]),typeof S>"u"||!S.length||!S[0]){var Ie="";de=[];for(he in $[w])this.terminals_[he]&&he>He&&de.push("'"+this.terminals_[he]+"'");k.showPosition?Ie="Parse error on line "+(ce+1)+`: `+k.showPosition()+` Expecting `+de.join(", ")+", got '"+(this.terminals_[B]||B)+"'":Ie="Parse error on line "+(ce+1)+": Unexpected "+(B==Ke?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(Ie,{text:k.match,token:this.terminals_[B]||B,line:k.yylineno,loc:xe,expected:de})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+B);switch(S[0]){case 1:p.push(B),C.push(k.yytext),e.push(k.yylloc),p.push(S[1]),B=null,ze=k.yyleng,t=k.yytext,ce=k.yylineno,xe=k.yylloc;break;case 2:if(x=this.productions_[S[1]][1],M.$=C[C.length-x],M._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},Ze&&(M._$.range=[e[e.length-(x||1)].range[0],e[e.length-1].range[1]]),ve=this.performAction.apply(M,[t,ze,ce,O.yy,S[1],C,e].concat(Je)),typeof ve<"u")return ve;x&&(p=p.slice(0,-1*x*2),C=C.slice(0,-1*x),e=e.slice(0,-1*x)),p.push(this.productions_[S[1]][0]),C.push(M.$),e.push(M._$),Qe=$[p[p.length-2]][p[p.length-1]],p.push(Qe);break;case 3:return!0}}return!0},"parse")},qe=(function(){var I={EOF:1,parseError:f(function(h,p){if(this.yy.parser)this.yy.parser.parseError(h,p);else throw new Error(h)},"parseError"),setInput:f(function(o,h){return this.yy=h||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:f(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var h=o.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:f(function(o){var h=o.length,p=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),p.length-1&&(this.yylineno-=p.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:p?(p.length===n.length?this.yylloc.first_column:0)+n[n.length-p.length].length-p[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:f(function(){return this._more=!0,this},"more"),reject:f(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:f(function(o){this.unput(this.match.slice(o))},"less"),pastInput:f(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:f(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:f(function(){var o=this.pastInput(),h=new Array(o.length+1).join("-");return o+this.upcomingInput()+` @@ -163,4 +163,4 @@ g.classGroup line { } ${et()} `,"getStyles"),Dt=At,ft=f((s,i="TB")=>{if(!s.doc)return i;let a=i;for(const u of s.doc)u.stmt==="dir"&&(a=u.value);return a},"getDir"),gt=f(function(s,i){return i.db.getClasses()},"getClasses"),Ct=f(async function(s,i,a,u){Oe.info("REF0:"),Oe.info("Drawing class diagram (v3)",i);const{securityLevel:l,state:r,layout:c}=F(),A=u.db.getData(),g=tt(i,l);A.type=u.type,A.layoutAlgorithm=it(c),A.nodeSpacing=(r==null?void 0:r.nodeSpacing)||50,A.rankSpacing=(r==null?void 0:r.rankSpacing)||50,A.markers=["aggregation","extension","composition","dependency","lollipop"],A.diagramId=i,await at(A,g);const D=8;we.insertTitle(g,"classDiagramTitleText",(r==null?void 0:r.titleTopMargin)??25,u.db.getDiagramTitle()),st(g,D,"classDiagram",(r==null?void 0:r.useMaxWidth)??!0)},"draw"),Ft={getClasses:gt,draw:Ct,getDir:ft};export{kt as C,Tt as a,Ft as c,Dt as s}; -//# sourceMappingURL=chunk-B4BG7PRW-CuEEgxYu.js.map +//# sourceMappingURL=chunk-B4BG7PRW-CEAtt3i9.js.map diff --git a/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js.map b/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js.map similarity index 99% rename from massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js.map rename to massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js.map index 1ad38f95f..085d440ae 100644 --- a/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CuEEgxYu.js.map +++ b/massgen/frontend/web/static/assets/chunk-B4BG7PRW-CEAtt3i9.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-B4BG7PRW-CuEEgxYu.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-B4BG7PRW.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n parseGenericTypes,\n sanitizeText,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/parser/classDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 18], $V1 = [1, 19], $V2 = [1, 20], $V3 = [1, 41], $V4 = [1, 42], $V5 = [1, 26], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 32], $V9 = [1, 33], $Va = [1, 34], $Vb = [1, 45], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 27], $Vh = [1, 28], $Vi = [1, 29], $Vj = [1, 30], $Vk = [1, 31], $Vl = [1, 44], $Vm = [1, 46], $Vn = [1, 43], $Vo = [1, 47], $Vp = [1, 9], $Vq = [1, 8, 9], $Vr = [1, 58], $Vs = [1, 59], $Vt = [1, 60], $Vu = [1, 61], $Vv = [1, 62], $Vw = [1, 63], $Vx = [1, 64], $Vy = [1, 8, 9, 41], $Vz = [1, 76], $VA = [1, 8, 9, 12, 13, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 8, 9, 12, 13, 18, 20, 22, 39, 41, 44, 50, 60, 68, 69, 70, 71, 72, 73, 74, 79, 81, 86, 100, 102, 103], $VC = [13, 60, 86, 100, 102, 103], $VD = [13, 60, 73, 74, 86, 100, 102, 103], $VE = [13, 60, 68, 69, 70, 71, 72, 86, 100, 102, 103], $VF = [1, 100], $VG = [1, 117], $VH = [1, 113], $VI = [1, 109], $VJ = [1, 115], $VK = [1, 110], $VL = [1, 111], $VM = [1, 112], $VN = [1, 114], $VO = [1, 116], $VP = [22, 48, 60, 61, 82, 86, 87, 88, 89, 90], $VQ = [1, 8, 9, 39, 41, 44], $VR = [1, 8, 9, 22], $VS = [1, 145], $VT = [1, 8, 9, 61], $VU = [1, 8, 9, 22, 48, 60, 61, 82, 86, 87, 88, 89, 90];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"statements\": 5, \"graphConfig\": 6, \"CLASS_DIAGRAM\": 7, \"NEWLINE\": 8, \"EOF\": 9, \"statement\": 10, \"classLabel\": 11, \"SQS\": 12, \"STR\": 13, \"SQE\": 14, \"namespaceName\": 15, \"alphaNumToken\": 16, \"classLiteralName\": 17, \"DOT\": 18, \"className\": 19, \"GENERICTYPE\": 20, \"relationStatement\": 21, \"LABEL\": 22, \"namespaceStatement\": 23, \"classStatement\": 24, \"memberStatement\": 25, \"annotationStatement\": 26, \"clickStatement\": 27, \"styleStatement\": 28, \"cssClassStatement\": 29, \"noteStatement\": 30, \"classDefStatement\": 31, \"direction\": 32, \"acc_title\": 33, \"acc_title_value\": 34, \"acc_descr\": 35, \"acc_descr_value\": 36, \"acc_descr_multiline_value\": 37, \"namespaceIdentifier\": 38, \"STRUCT_START\": 39, \"classStatements\": 40, \"STRUCT_STOP\": 41, \"NAMESPACE\": 42, \"classIdentifier\": 43, \"STYLE_SEPARATOR\": 44, \"members\": 45, \"CLASS\": 46, \"emptyBody\": 47, \"SPACE\": 48, \"ANNOTATION_START\": 49, \"ANNOTATION_END\": 50, \"MEMBER\": 51, \"SEPARATOR\": 52, \"relation\": 53, \"NOTE_FOR\": 54, \"noteText\": 55, \"NOTE\": 56, \"CLASSDEF\": 57, \"classList\": 58, \"stylesOpt\": 59, \"ALPHA\": 60, \"COMMA\": 61, \"direction_tb\": 62, \"direction_bt\": 63, \"direction_rl\": 64, \"direction_lr\": 65, \"relationType\": 66, \"lineType\": 67, \"AGGREGATION\": 68, \"EXTENSION\": 69, \"COMPOSITION\": 70, \"DEPENDENCY\": 71, \"LOLLIPOP\": 72, \"LINE\": 73, \"DOTTED_LINE\": 74, \"CALLBACK\": 75, \"LINK\": 76, \"LINK_TARGET\": 77, \"CLICK\": 78, \"CALLBACK_NAME\": 79, \"CALLBACK_ARGS\": 80, \"HREF\": 81, \"STYLE\": 82, \"CSSCLASS\": 83, \"style\": 84, \"styleComponent\": 85, \"NUM\": 86, \"COLON\": 87, \"UNIT\": 88, \"BRKT\": 89, \"PCT\": 90, \"commentToken\": 91, \"textToken\": 92, \"graphCodeTokens\": 93, \"textNoTagsToken\": 94, \"TAGSTART\": 95, \"TAGEND\": 96, \"==\": 97, \"--\": 98, \"DEFAULT\": 99, \"MINUS\": 100, \"keywords\": 101, \"UNICODE_TEXT\": 102, \"BQUOTE_STR\": 103, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 7: \"CLASS_DIAGRAM\", 8: \"NEWLINE\", 9: \"EOF\", 12: \"SQS\", 13: \"STR\", 14: \"SQE\", 18: \"DOT\", 20: \"GENERICTYPE\", 22: \"LABEL\", 33: \"acc_title\", 34: \"acc_title_value\", 35: \"acc_descr\", 36: \"acc_descr_value\", 37: \"acc_descr_multiline_value\", 39: \"STRUCT_START\", 41: \"STRUCT_STOP\", 42: \"NAMESPACE\", 44: \"STYLE_SEPARATOR\", 46: \"CLASS\", 48: \"SPACE\", 49: \"ANNOTATION_START\", 50: \"ANNOTATION_END\", 51: \"MEMBER\", 52: \"SEPARATOR\", 54: \"NOTE_FOR\", 56: \"NOTE\", 57: \"CLASSDEF\", 60: \"ALPHA\", 61: \"COMMA\", 62: \"direction_tb\", 63: \"direction_bt\", 64: \"direction_rl\", 65: \"direction_lr\", 68: \"AGGREGATION\", 69: \"EXTENSION\", 70: \"COMPOSITION\", 71: \"DEPENDENCY\", 72: \"LOLLIPOP\", 73: \"LINE\", 74: \"DOTTED_LINE\", 75: \"CALLBACK\", 76: \"LINK\", 77: \"LINK_TARGET\", 78: \"CLICK\", 79: \"CALLBACK_NAME\", 80: \"CALLBACK_ARGS\", 81: \"HREF\", 82: \"STYLE\", 83: \"CSSCLASS\", 86: \"NUM\", 87: \"COLON\", 88: \"UNIT\", 89: \"BRKT\", 90: \"PCT\", 93: \"graphCodeTokens\", 95: \"TAGSTART\", 96: \"TAGEND\", 97: \"==\", 98: \"--\", 99: \"DEFAULT\", 100: \"MINUS\", 101: \"keywords\", 102: \"UNICODE_TEXT\", 103: \"BQUOTE_STR\" },\n productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 1], [15, 3], [15, 2], [19, 1], [19, 3], [19, 1], [19, 2], [19, 2], [19, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [23, 4], [23, 5], [38, 2], [40, 1], [40, 2], [40, 3], [24, 1], [24, 3], [24, 4], [24, 3], [24, 6], [43, 2], [43, 3], [47, 0], [47, 2], [47, 2], [26, 4], [45, 1], [45, 2], [25, 1], [25, 2], [25, 1], [25, 1], [21, 3], [21, 4], [21, 4], [21, 5], [30, 3], [30, 2], [31, 3], [58, 1], [58, 3], [32, 1], [32, 1], [32, 1], [32, 1], [53, 3], [53, 2], [53, 2], [53, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [27, 3], [27, 4], [27, 3], [27, 4], [27, 4], [27, 5], [27, 3], [27, 4], [27, 4], [27, 5], [27, 4], [27, 5], [27, 5], [27, 6], [28, 3], [29, 3], [59, 1], [59, 3], [84, 1], [84, 2], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [91, 1], [91, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [94, 1], [94, 1], [94, 1], [94, 1], [16, 1], [16, 1], [16, 1], [16, 1], [17, 1], [55, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 8:\n this.$ = $$[$0 - 1];\n break;\n case 9:\n case 10:\n case 13:\n case 15:\n this.$ = $$[$0];\n break;\n case 11:\n case 14:\n this.$ = $$[$0 - 2] + \".\" + $$[$0];\n break;\n case 12:\n case 16:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 17:\n case 18:\n this.$ = $$[$0 - 1] + \"~\" + $$[$0] + \"~\";\n break;\n case 19:\n yy.addRelation($$[$0]);\n break;\n case 20:\n $$[$0 - 1].title = yy.cleanupLabel($$[$0]);\n yy.addRelation($$[$0 - 1]);\n break;\n case 31:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 32:\n case 33:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 34:\n yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]);\n break;\n case 35:\n yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]);\n break;\n case 36:\n this.$ = $$[$0];\n yy.addNamespace($$[$0]);\n break;\n case 37:\n this.$ = [$$[$0]];\n break;\n case 38:\n this.$ = [$$[$0 - 1]];\n break;\n case 39:\n $$[$0].unshift($$[$0 - 2]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.setCssClass($$[$0 - 2], $$[$0]);\n break;\n case 42:\n yy.addMembers($$[$0 - 3], $$[$0 - 1]);\n break;\n case 44:\n yy.setCssClass($$[$0 - 5], $$[$0 - 3]);\n yy.addMembers($$[$0 - 5], $$[$0 - 1]);\n break;\n case 45:\n this.$ = $$[$0];\n yy.addClass($$[$0]);\n break;\n case 46:\n this.$ = $$[$0 - 1];\n yy.addClass($$[$0 - 1]);\n yy.setClassLabel($$[$0 - 1], $$[$0]);\n break;\n case 50:\n yy.addAnnotation($$[$0], $$[$0 - 2]);\n break;\n case 51:\n case 64:\n this.$ = [$$[$0]];\n break;\n case 52:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 53:\n break;\n case 54:\n yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));\n break;\n case 55:\n break;\n case 56:\n break;\n case 57:\n this.$ = { \"id1\": $$[$0 - 2], \"id2\": $$[$0], relation: $$[$0 - 1], relationTitle1: \"none\", relationTitle2: \"none\" };\n break;\n case 58:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: \"none\" };\n break;\n case 59:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: \"none\", relationTitle2: $$[$0 - 1] };\n break;\n case 60:\n this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };\n break;\n case 61:\n yy.addNote($$[$0], $$[$0 - 1]);\n break;\n case 62:\n yy.addNote($$[$0]);\n break;\n case 63:\n this.$ = $$[$0 - 2];\n yy.defineClass($$[$0 - 1], $$[$0]);\n break;\n case 65:\n this.$ = $$[$0 - 2].concat([$$[$0]]);\n break;\n case 66:\n yy.setDirection(\"TB\");\n break;\n case 67:\n yy.setDirection(\"BT\");\n break;\n case 68:\n yy.setDirection(\"RL\");\n break;\n case 69:\n yy.setDirection(\"LR\");\n break;\n case 70:\n this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 71:\n this.$ = { type1: \"none\", type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 72:\n this.$ = { type1: $$[$0 - 1], type2: \"none\", lineType: $$[$0] };\n break;\n case 73:\n this.$ = { type1: \"none\", type2: \"none\", lineType: $$[$0] };\n break;\n case 74:\n this.$ = yy.relationType.AGGREGATION;\n break;\n case 75:\n this.$ = yy.relationType.EXTENSION;\n break;\n case 76:\n this.$ = yy.relationType.COMPOSITION;\n break;\n case 77:\n this.$ = yy.relationType.DEPENDENCY;\n break;\n case 78:\n this.$ = yy.relationType.LOLLIPOP;\n break;\n case 79:\n this.$ = yy.lineType.LINE;\n break;\n case 80:\n this.$ = yy.lineType.DOTTED_LINE;\n break;\n case 81:\n case 87:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 82:\n case 88:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 83:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 84:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 85:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 86:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 3], $$[$0 - 1]);\n break;\n case 89:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 90:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 91:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 92:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]);\n break;\n case 93:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 94:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 4], $$[$0 - 1]);\n break;\n case 95:\n this.$ = $$[$0 - 2];\n yy.setCssStyle($$[$0 - 1], $$[$0]);\n break;\n case 96:\n yy.setCssClass($$[$0 - 1], $$[$0]);\n break;\n case 97:\n this.$ = [$$[$0]];\n break;\n case 98:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 100:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vp, [2, 5], { 8: [1, 48] }), { 8: [1, 49] }, o($Vq, [2, 19], { 22: [1, 50] }), o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), o($Vq, [2, 25]), o($Vq, [2, 26]), o($Vq, [2, 27]), o($Vq, [2, 28]), o($Vq, [2, 29]), o($Vq, [2, 30]), { 34: [1, 51] }, { 36: [1, 52] }, o($Vq, [2, 33]), o($Vq, [2, 53], { 53: 53, 66: 56, 67: 57, 13: [1, 54], 22: [1, 55], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 39: [1, 65] }, o($Vy, [2, 40], { 39: [1, 67], 44: [1, 66] }), o($Vq, [2, 55]), o($Vq, [2, 56]), { 16: 68, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 16: 39, 17: 40, 19: 69, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 70, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 71, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 60: [1, 72] }, { 13: [1, 73] }, { 16: 39, 17: 40, 19: 74, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: $Vz, 55: 75 }, { 58: 77, 60: [1, 78] }, o($Vq, [2, 66]), o($Vq, [2, 67]), o($Vq, [2, 68]), o($Vq, [2, 69]), o($VA, [2, 13], { 16: 39, 17: 40, 19: 80, 18: [1, 79], 20: [1, 81], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), o($VA, [2, 15], { 20: [1, 82] }), { 15: 83, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 86, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VB, [2, 123]), o($VB, [2, 124]), o($VB, [2, 125]), o($VB, [2, 126]), o([1, 8, 9, 12, 13, 20, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 127]), o($Vp, [2, 6], { 10: 5, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 19: 21, 38: 22, 43: 23, 16: 39, 17: 40, 5: 87, 33: $V0, 35: $V1, 37: $V2, 42: $V3, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), { 5: 88, 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($Vq, [2, 20]), o($Vq, [2, 31]), o($Vq, [2, 32]), { 13: [1, 90], 16: 39, 17: 40, 19: 89, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 53: 91, 66: 56, 67: 57, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o($Vq, [2, 54]), { 67: 92, 73: $Vw, 74: $Vx }, o($VC, [2, 73], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), o($VD, [2, 77]), o($VD, [2, 78]), o($VE, [2, 79]), o($VE, [2, 80]), { 8: [1, 95], 24: 96, 40: 94, 43: 23, 46: $V4 }, { 16: 97, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 41: [1, 99], 45: 98, 51: $VF }, { 50: [1, 101] }, { 13: [1, 102] }, { 13: [1, 103] }, { 79: [1, 104], 81: [1, 105] }, { 22: $VG, 48: $VH, 59: 106, 60: $VI, 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, { 60: [1, 118] }, { 13: $Vz, 55: 119 }, o($Vq, [2, 62]), o($Vq, [2, 128]), { 22: $VG, 48: $VH, 59: 120, 60: $VI, 61: [1, 121], 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o($VP, [2, 64]), { 16: 39, 17: 40, 19: 122, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VA, [2, 16]), o($VA, [2, 17]), o($VA, [2, 18]), { 39: [2, 36] }, { 15: 124, 16: 84, 17: 85, 18: [1, 123], 39: [2, 9], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 10] }, o($VQ, [2, 45], { 11: 125, 12: [1, 126] }), o($Vp, [2, 7]), { 9: [1, 127] }, o($VR, [2, 57]), { 16: 39, 17: 40, 19: 128, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: [1, 130], 16: 39, 17: 40, 19: 129, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VC, [2, 72], { 66: 131, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VC, [2, 71]), { 41: [1, 132] }, { 24: 96, 40: 133, 43: 23, 46: $V4 }, { 8: [1, 134], 41: [2, 37] }, o($Vy, [2, 41], { 39: [1, 135] }), { 41: [1, 136] }, o($Vy, [2, 43]), { 41: [2, 51], 45: 137, 51: $VF }, { 16: 39, 17: 40, 19: 138, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($Vq, [2, 81], { 13: [1, 139] }), o($Vq, [2, 83], { 13: [1, 141], 77: [1, 140] }), o($Vq, [2, 87], { 13: [1, 142], 80: [1, 143] }), { 13: [1, 144] }, o($Vq, [2, 95], { 61: $VS }), o($VT, [2, 97], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o($VU, [2, 99]), o($VU, [2, 101]), o($VU, [2, 102]), o($VU, [2, 103]), o($VU, [2, 104]), o($VU, [2, 105]), o($VU, [2, 106]), o($VU, [2, 107]), o($VU, [2, 108]), o($VU, [2, 109]), o($Vq, [2, 96]), o($Vq, [2, 61]), o($Vq, [2, 63], { 61: $VS }), { 60: [1, 147] }, o($VA, [2, 14]), { 15: 148, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 12] }, o($VQ, [2, 46]), { 13: [1, 149] }, { 1: [2, 4] }, o($VR, [2, 59]), o($VR, [2, 58]), { 16: 39, 17: 40, 19: 150, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VC, [2, 70]), o($Vq, [2, 34]), { 41: [1, 151] }, { 24: 96, 40: 152, 41: [2, 38], 43: 23, 46: $V4 }, { 45: 153, 51: $VF }, o($Vy, [2, 42]), { 41: [2, 52] }, o($Vq, [2, 50]), o($Vq, [2, 82]), o($Vq, [2, 84]), o($Vq, [2, 85], { 77: [1, 154] }), o($Vq, [2, 88]), o($Vq, [2, 89], { 13: [1, 155] }), o($Vq, [2, 91], { 13: [1, 157], 77: [1, 156] }), { 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 84: 158, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o($VU, [2, 100]), o($VP, [2, 65]), { 39: [2, 11] }, { 14: [1, 159] }, o($VR, [2, 60]), o($Vq, [2, 35]), { 41: [2, 39] }, { 41: [1, 160] }, o($Vq, [2, 86]), o($Vq, [2, 90]), o($Vq, [2, 92]), o($Vq, [2, 93], { 77: [1, 161] }), o($VT, [2, 98], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o($VQ, [2, 8]), o($Vy, [2, 44]), o($Vq, [2, 94])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 83: [2, 36], 85: [2, 10], 124: [2, 12], 127: [2, 4], 137: [2, 52], 148: [2, 11], 152: [2, 39] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 62;\n break;\n case 1:\n return 63;\n break;\n case 2:\n return 64;\n break;\n case 3:\n return 65;\n break;\n case 4:\n break;\n case 5:\n break;\n case 6:\n this.begin(\"acc_title\");\n return 33;\n break;\n case 7:\n this.popState();\n return \"acc_title_value\";\n break;\n case 8:\n this.begin(\"acc_descr\");\n return 35;\n break;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n break;\n case 13:\n return 8;\n break;\n case 14:\n break;\n case 15:\n return 7;\n break;\n case 16:\n return 7;\n break;\n case 17:\n return \"EDGE_STATE\";\n break;\n case 18:\n this.begin(\"callback_name\");\n break;\n case 19:\n this.popState();\n break;\n case 20:\n this.popState();\n this.begin(\"callback_args\");\n break;\n case 21:\n return 79;\n break;\n case 22:\n this.popState();\n break;\n case 23:\n return 80;\n break;\n case 24:\n this.popState();\n break;\n case 25:\n return \"STR\";\n break;\n case 26:\n this.begin(\"string\");\n break;\n case 27:\n return 82;\n break;\n case 28:\n return 57;\n break;\n case 29:\n this.begin(\"namespace\");\n return 42;\n break;\n case 30:\n this.popState();\n return 8;\n break;\n case 31:\n break;\n case 32:\n this.begin(\"namespace-body\");\n return 39;\n break;\n case 33:\n this.popState();\n return 41;\n break;\n case 34:\n return \"EOF_IN_STRUCT\";\n break;\n case 35:\n return 8;\n break;\n case 36:\n break;\n case 37:\n return \"EDGE_STATE\";\n break;\n case 38:\n this.begin(\"class\");\n return 46;\n break;\n case 39:\n this.popState();\n return 8;\n break;\n case 40:\n break;\n case 41:\n this.popState();\n this.popState();\n return 41;\n break;\n case 42:\n this.begin(\"class-body\");\n return 39;\n break;\n case 43:\n this.popState();\n return 41;\n break;\n case 44:\n return \"EOF_IN_STRUCT\";\n break;\n case 45:\n return \"EDGE_STATE\";\n break;\n case 46:\n return \"OPEN_IN_STRUCT\";\n break;\n case 47:\n break;\n case 48:\n return \"MEMBER\";\n break;\n case 49:\n return 83;\n break;\n case 50:\n return 75;\n break;\n case 51:\n return 76;\n break;\n case 52:\n return 78;\n break;\n case 53:\n return 54;\n break;\n case 54:\n return 56;\n break;\n case 55:\n return 49;\n break;\n case 56:\n return 50;\n break;\n case 57:\n return 81;\n break;\n case 58:\n this.popState();\n break;\n case 59:\n return \"GENERICTYPE\";\n break;\n case 60:\n this.begin(\"generic\");\n break;\n case 61:\n this.popState();\n break;\n case 62:\n return \"BQUOTE_STR\";\n break;\n case 63:\n this.begin(\"bqstring\");\n break;\n case 64:\n return 77;\n break;\n case 65:\n return 77;\n break;\n case 66:\n return 77;\n break;\n case 67:\n return 77;\n break;\n case 68:\n return 69;\n break;\n case 69:\n return 69;\n break;\n case 70:\n return 71;\n break;\n case 71:\n return 71;\n break;\n case 72:\n return 70;\n break;\n case 73:\n return 68;\n break;\n case 74:\n return 72;\n break;\n case 75:\n return 73;\n break;\n case 76:\n return 74;\n break;\n case 77:\n return 22;\n break;\n case 78:\n return 44;\n break;\n case 79:\n return 100;\n break;\n case 80:\n return 18;\n break;\n case 81:\n return \"PLUS\";\n break;\n case 82:\n return 87;\n break;\n case 83:\n return 61;\n break;\n case 84:\n return 89;\n break;\n case 85:\n return 89;\n break;\n case 86:\n return 90;\n break;\n case 87:\n return \"EQUALS\";\n break;\n case 88:\n return \"EQUALS\";\n break;\n case 89:\n return 60;\n break;\n case 90:\n return 12;\n break;\n case 91:\n return 14;\n break;\n case 92:\n return \"PUNCTUATION\";\n break;\n case 93:\n return 86;\n break;\n case 94:\n return 102;\n break;\n case 95:\n return 48;\n break;\n case 96:\n return 48;\n break;\n case 97:\n return 9;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:classDiagram-v2\\b)/, /^(?:classDiagram\\b)/, /^(?:\\[\\*\\])/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:classDef\\b)/, /^(?:namespace\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:\\[\\*\\])/, /^(?:class\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\[\\*\\])/, /^(?:[{])/, /^(?:[\\n])/, /^(?:[^{}\\n]*)/, /^(?:cssClass\\b)/, /^(?:callback\\b)/, /^(?:link\\b)/, /^(?:click\\b)/, /^(?:note for\\b)/, /^(?:note\\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:\\s*<\\|)/, /^(?:\\s*\\|>)/, /^(?:\\s*>)/, /^(?:\\s*<)/, /^(?:\\s*\\*)/, /^(?:\\s*o\\b)/, /^(?:\\s*\\(\\))/, /^(?:--)/, /^(?:\\.\\.)/, /^(?::{1}[^:\\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\\.)/, /^(?:\\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\\w+)/, /^(?:\\[)/, /^(?:\\])/, /^(?:[!\"#$%&'*+,-.`?\\\\/])/, /^(?:[0-9]+)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\s)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"namespace-body\": { \"rules\": [26, 33, 34, 35, 36, 37, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"namespace\": { \"rules\": [26, 29, 30, 31, 32, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"class-body\": { \"rules\": [26, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"class\": { \"rules\": [26, 39, 40, 41, 42, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [11, 12, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_title\": { \"rules\": [7, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"callback_args\": { \"rules\": [22, 23, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"callback_name\": { \"rules\": [19, 20, 21, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"href\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"struct\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"generic\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"bqstring\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"string\": { \"rules\": [24, 25, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar classDiagram_default = parser;\n\n// src/diagrams/class/classDb.ts\nimport { select } from \"d3\";\n\n// src/diagrams/class/classTypes.ts\nvar visibilityValues = [\"#\", \"+\", \"~\", \"-\", \"\"];\nvar ClassMember = class {\n static {\n __name(this, \"ClassMember\");\n }\n constructor(input, memberType) {\n this.memberType = memberType;\n this.visibility = \"\";\n this.classifier = \"\";\n this.text = \"\";\n const sanitizedInput = sanitizeText(input, getConfig());\n this.parseMember(sanitizedInput);\n }\n getDisplayDetails() {\n let displayText = this.visibility + parseGenericTypes(this.id);\n if (this.memberType === \"method\") {\n displayText += `(${parseGenericTypes(this.parameters.trim())})`;\n if (this.returnType) {\n displayText += \" : \" + parseGenericTypes(this.returnType);\n }\n }\n displayText = displayText.trim();\n const cssStyle = this.parseClassifier();\n return {\n displayText,\n cssStyle\n };\n }\n parseMember(input) {\n let potentialClassifier = \"\";\n if (this.memberType === \"method\") {\n const methodRegEx = /([#+~-])?(.+)\\((.*)\\)([\\s$*])?(.*)([$*])?/;\n const match = methodRegEx.exec(input);\n if (match) {\n const detectedVisibility = match[1] ? match[1].trim() : \"\";\n if (visibilityValues.includes(detectedVisibility)) {\n this.visibility = detectedVisibility;\n }\n this.id = match[2];\n this.parameters = match[3] ? match[3].trim() : \"\";\n potentialClassifier = match[4] ? match[4].trim() : \"\";\n this.returnType = match[5] ? match[5].trim() : \"\";\n if (potentialClassifier === \"\") {\n const lastChar = this.returnType.substring(this.returnType.length - 1);\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n this.returnType = this.returnType.substring(0, this.returnType.length - 1);\n }\n }\n }\n } else {\n const length = input.length;\n const firstChar = input.substring(0, 1);\n const lastChar = input.substring(length - 1);\n if (visibilityValues.includes(firstChar)) {\n this.visibility = firstChar;\n }\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n }\n this.id = input.substring(\n this.visibility === \"\" ? 0 : 1,\n potentialClassifier === \"\" ? length : length - 1\n );\n }\n this.classifier = potentialClassifier;\n this.id = this.id.startsWith(\" \") ? \" \" + this.id.trim() : this.id.trim();\n const combinedText = `${this.visibility ? \"\\\\\" + this.visibility : \"\"}${parseGenericTypes(this.id)}${this.memberType === \"method\" ? `(${parseGenericTypes(this.parameters)})${this.returnType ? \" : \" + parseGenericTypes(this.returnType) : \"\"}` : \"\"}`;\n this.text = combinedText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n if (this.text.startsWith(\"\\\\<\")) {\n this.text = this.text.replace(\"\\\\<\", \"~\");\n }\n }\n parseClassifier() {\n switch (this.classifier) {\n case \"*\":\n return \"font-style:italic;\";\n case \"$\":\n return \"text-decoration:underline;\";\n default:\n return \"\";\n }\n }\n};\n\n// src/diagrams/class/classDb.ts\nvar MERMAID_DOM_ID_PREFIX = \"classId-\";\nvar classCounter = 0;\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig()), \"sanitizeText\");\nvar ClassDB = class {\n constructor() {\n this.relations = [];\n this.classes = /* @__PURE__ */ new Map();\n this.styleClasses = /* @__PURE__ */ new Map();\n this.notes = [];\n this.interfaces = [];\n // private static classCounter = 0;\n this.namespaces = /* @__PURE__ */ new Map();\n this.namespaceCounter = 0;\n this.functions = [];\n this.lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n };\n this.relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n LOLLIPOP: 4\n };\n this.setupToolTips = /* @__PURE__ */ __name((element) => {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", (event) => {\n const el = select(event.currentTarget);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.top - 14 + document.body.scrollTop + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", (event) => {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(event.currentTarget);\n el.classed(\"hover\", false);\n });\n }, \"setupToolTips\");\n this.direction = \"TB\";\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setAccDescription = setAccDescription;\n this.getAccDescription = getAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getConfig = /* @__PURE__ */ __name(() => getConfig().class, \"getConfig\");\n this.functions.push(this.setupToolTips.bind(this));\n this.clear();\n this.addRelation = this.addRelation.bind(this);\n this.addClassesToNamespace = this.addClassesToNamespace.bind(this);\n this.addNamespace = this.addNamespace.bind(this);\n this.setCssClass = this.setCssClass.bind(this);\n this.addMembers = this.addMembers.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClassLabel = this.setClassLabel.bind(this);\n this.addAnnotation = this.addAnnotation.bind(this);\n this.addMember = this.addMember.bind(this);\n this.cleanupLabel = this.cleanupLabel.bind(this);\n this.addNote = this.addNote.bind(this);\n this.defineClass = this.defineClass.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.setLink = this.setLink.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n this.clear = this.clear.bind(this);\n this.setTooltip = this.setTooltip.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setCssStyle = this.setCssStyle.bind(this);\n }\n static {\n __name(this, \"ClassDB\");\n }\n splitClassNameAndType(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n let genericType = \"\";\n let className = id;\n if (id.indexOf(\"~\") > 0) {\n const split = id.split(\"~\");\n className = sanitizeText2(split[0]);\n genericType = sanitizeText2(split[1]);\n }\n return { className, type: genericType };\n }\n setClassLabel(_id, label) {\n const id = common_default.sanitizeText(_id, getConfig());\n if (label) {\n label = sanitizeText2(label);\n }\n const { className } = this.splitClassNameAndType(id);\n this.classes.get(className).label = label;\n this.classes.get(className).text = `${label}${this.classes.get(className).type ? `<${this.classes.get(className).type}>` : \"\"}`;\n }\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param id - ID of the class to add\n * @public\n */\n addClass(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n const { className, type } = this.splitClassNameAndType(id);\n if (this.classes.has(className)) {\n return;\n }\n const name = common_default.sanitizeText(className, getConfig());\n this.classes.set(name, {\n id: name,\n type,\n label: name,\n text: `${name}${type ? `<${type}>` : \"\"}`,\n shape: \"classBox\",\n cssClasses: \"default\",\n methods: [],\n members: [],\n annotations: [],\n styles: [],\n domId: MERMAID_DOM_ID_PREFIX + name + \"-\" + classCounter\n });\n classCounter++;\n }\n addInterface(label, classId) {\n const classInterface = {\n id: `interface${this.interfaces.length}`,\n label,\n classId\n };\n this.interfaces.push(classInterface);\n }\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - class ID to lookup\n * @public\n */\n lookUpDomId(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n if (this.classes.has(id)) {\n return this.classes.get(id).domId;\n }\n throw new Error(\"Class not found: \" + id);\n }\n clear() {\n this.relations = [];\n this.classes = /* @__PURE__ */ new Map();\n this.notes = [];\n this.interfaces = [];\n this.functions = [];\n this.functions.push(this.setupToolTips.bind(this));\n this.namespaces = /* @__PURE__ */ new Map();\n this.namespaceCounter = 0;\n this.direction = \"TB\";\n clear();\n }\n getClass(id) {\n return this.classes.get(id);\n }\n getClasses() {\n return this.classes;\n }\n getRelations() {\n return this.relations;\n }\n getNotes() {\n return this.notes;\n }\n addRelation(classRelation) {\n log.debug(\"Adding relation: \" + JSON.stringify(classRelation));\n const invalidTypes = [\n this.relationType.LOLLIPOP,\n this.relationType.AGGREGATION,\n this.relationType.COMPOSITION,\n this.relationType.DEPENDENCY,\n this.relationType.EXTENSION\n ];\n if (classRelation.relation.type1 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type2)) {\n this.addClass(classRelation.id2);\n this.addInterface(classRelation.id1, classRelation.id2);\n classRelation.id1 = `interface${this.interfaces.length - 1}`;\n } else if (classRelation.relation.type2 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type1)) {\n this.addClass(classRelation.id1);\n this.addInterface(classRelation.id2, classRelation.id1);\n classRelation.id2 = `interface${this.interfaces.length - 1}`;\n } else {\n this.addClass(classRelation.id1);\n this.addClass(classRelation.id2);\n }\n classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className;\n classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className;\n classRelation.relationTitle1 = common_default.sanitizeText(\n classRelation.relationTitle1.trim(),\n getConfig()\n );\n classRelation.relationTitle2 = common_default.sanitizeText(\n classRelation.relationTitle2.trim(),\n getConfig()\n );\n this.relations.push(classRelation);\n }\n /**\n * Adds an annotation to the specified class Annotations mark special properties of the given type\n * (like 'interface' or 'service')\n *\n * @param className - The class name\n * @param annotation - The name of the annotation without any brackets\n * @public\n */\n addAnnotation(className, annotation) {\n const validatedClassName = this.splitClassNameAndType(className).className;\n this.classes.get(validatedClassName).annotations.push(annotation);\n }\n /**\n * Adds a member to the specified class\n *\n * @param className - The class name\n * @param member - The full name of the member. If the member is enclosed in `<>` it is\n * treated as an annotation If the member is ending with a closing bracket ) it is treated as a\n * method Otherwise the member will be treated as a normal property\n * @public\n */\n addMember(className, member) {\n this.addClass(className);\n const validatedClassName = this.splitClassNameAndType(className).className;\n const theClass = this.classes.get(validatedClassName);\n if (typeof member === \"string\") {\n const memberString = member.trim();\n if (memberString.startsWith(\"<<\") && memberString.endsWith(\">>\")) {\n theClass.annotations.push(sanitizeText2(memberString.substring(2, memberString.length - 2)));\n } else if (memberString.indexOf(\")\") > 0) {\n theClass.methods.push(new ClassMember(memberString, \"method\"));\n } else if (memberString) {\n theClass.members.push(new ClassMember(memberString, \"attribute\"));\n }\n }\n }\n addMembers(className, members) {\n if (Array.isArray(members)) {\n members.reverse();\n members.forEach((member) => this.addMember(className, member));\n }\n }\n addNote(text, className) {\n const note = {\n id: `note${this.notes.length}`,\n class: className,\n text\n };\n this.notes.push(note);\n }\n cleanupLabel(label) {\n if (label.startsWith(\":\")) {\n label = label.substring(1);\n }\n return sanitizeText2(label.trim());\n }\n /**\n * Called by parser when assigning cssClass to a class\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n setCssClass(ids, className) {\n ids.split(\",\").forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const classNode = this.classes.get(id);\n if (classNode) {\n classNode.cssClasses += \" \" + className;\n }\n });\n }\n defineClass(ids, style) {\n for (const id of ids) {\n let styleClass = this.styleClasses.get(id);\n if (styleClass === void 0) {\n styleClass = { id, styles: [], textStyles: [] };\n this.styleClasses.set(id, styleClass);\n }\n if (style) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n styleClass.textStyles.push(newStyle);\n }\n styleClass.styles.push(s);\n });\n }\n this.classes.forEach((value) => {\n if (value.cssClasses.includes(id)) {\n value.styles.push(...style.flatMap((s) => s.split(\",\")));\n }\n });\n }\n }\n /**\n * Called by parser when a tooltip is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param tooltip - Tooltip to add\n */\n setTooltip(ids, tooltip) {\n ids.split(\",\").forEach((id) => {\n if (tooltip !== void 0) {\n this.classes.get(id).tooltip = sanitizeText2(tooltip);\n }\n });\n }\n getTooltip(id, namespace) {\n if (namespace && this.namespaces.has(namespace)) {\n return this.namespaces.get(namespace).classes.get(id).tooltip;\n }\n return this.classes.get(id).tooltip;\n }\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file\n */\n setLink(ids, linkStr, target) {\n const config = getConfig();\n ids.split(\",\").forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const theClass = this.classes.get(id);\n if (theClass) {\n theClass.link = utils_default.formatUrl(linkStr, config);\n if (config.securityLevel === \"sandbox\") {\n theClass.linkTarget = \"_top\";\n } else if (typeof target === \"string\") {\n theClass.linkTarget = sanitizeText2(target);\n } else {\n theClass.linkTarget = \"_blank\";\n }\n }\n });\n this.setCssClass(ids, \"clickable\");\n }\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Function args the function should be called with\n */\n setClickEvent(ids, functionName, functionArgs) {\n ids.split(\",\").forEach((id) => {\n this.setClickFunc(id, functionName, functionArgs);\n this.classes.get(id).haveCallback = true;\n });\n this.setCssClass(ids, \"clickable\");\n }\n setClickFunc(_domId, functionName, functionArgs) {\n const domId = common_default.sanitizeText(_domId, getConfig());\n const config = getConfig();\n if (config.securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n const id = domId;\n if (this.classes.has(id)) {\n const elemId = this.lookUpDomId(id);\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(elemId);\n }\n this.functions.push(() => {\n const elem = document.querySelector(`[id=\"${elemId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n () => {\n utils_default.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n bindFunctions(element) {\n this.functions.forEach((fun) => {\n fun(element);\n });\n }\n getDirection() {\n return this.direction;\n }\n setDirection(dir) {\n this.direction = dir;\n }\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @public\n */\n addNamespace(id) {\n if (this.namespaces.has(id)) {\n return;\n }\n this.namespaces.set(id, {\n id,\n classes: /* @__PURE__ */ new Map(),\n children: {},\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + this.namespaceCounter\n });\n this.namespaceCounter++;\n }\n getNamespace(name) {\n return this.namespaces.get(name);\n }\n getNamespaces() {\n return this.namespaces;\n }\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @param classNames - IDs of the class to add\n * @public\n */\n addClassesToNamespace(id, classNames) {\n if (!this.namespaces.has(id)) {\n return;\n }\n for (const name of classNames) {\n const { className } = this.splitClassNameAndType(name);\n this.classes.get(className).parent = id;\n this.namespaces.get(id).classes.set(className, this.classes.get(className));\n }\n }\n setCssStyle(id, styles) {\n const thisClass = this.classes.get(id);\n if (!styles || !thisClass) {\n return;\n }\n for (const s of styles) {\n if (s.includes(\",\")) {\n thisClass.styles.push(...s.split(\",\"));\n } else {\n thisClass.styles.push(s);\n }\n }\n }\n /**\n * Gets the arrow marker for a type index\n *\n * @param type - The type to look for\n * @returns The arrow marker\n */\n getArrowMarker(type) {\n let marker;\n switch (type) {\n case 0:\n marker = \"aggregation\";\n break;\n case 1:\n marker = \"extension\";\n break;\n case 2:\n marker = \"composition\";\n break;\n case 3:\n marker = \"dependency\";\n break;\n case 4:\n marker = \"lollipop\";\n break;\n default:\n marker = \"none\";\n }\n return marker;\n }\n getData() {\n const nodes = [];\n const edges = [];\n const config = getConfig();\n for (const namespaceKey of this.namespaces.keys()) {\n const namespace = this.namespaces.get(namespaceKey);\n if (namespace) {\n const node = {\n id: namespace.id,\n label: namespace.id,\n isGroup: true,\n padding: config.class.padding ?? 16,\n // parent node must be one of [rect, roundedWithTitle, noteGroup, divider]\n shape: \"rect\",\n cssStyles: [\"fill: none\", \"stroke: black\"],\n look: config.look\n };\n nodes.push(node);\n }\n }\n for (const classKey of this.classes.keys()) {\n const classNode = this.classes.get(classKey);\n if (classNode) {\n const node = classNode;\n node.parentId = classNode.parent;\n node.look = config.look;\n nodes.push(node);\n }\n }\n let cnt = 0;\n for (const note of this.notes) {\n cnt++;\n const noteNode = {\n id: note.id,\n label: note.text,\n isGroup: false,\n shape: \"note\",\n padding: config.class.padding ?? 6,\n cssStyles: [\n \"text-align: left\",\n \"white-space: nowrap\",\n `fill: ${config.themeVariables.noteBkgColor}`,\n `stroke: ${config.themeVariables.noteBorderColor}`\n ],\n look: config.look\n };\n nodes.push(noteNode);\n const noteClassId = this.classes.get(note.class)?.id ?? \"\";\n if (noteClassId) {\n const edge = {\n id: `edgeNote${cnt}`,\n start: note.id,\n end: noteClassId,\n type: \"normal\",\n thickness: \"normal\",\n classes: \"relation\",\n arrowTypeStart: \"none\",\n arrowTypeEnd: \"none\",\n arrowheadStyle: \"\",\n labelStyle: [\"\"],\n style: [\"fill: none\"],\n pattern: \"dotted\",\n look: config.look\n };\n edges.push(edge);\n }\n }\n for (const _interface of this.interfaces) {\n const interfaceNode = {\n id: _interface.id,\n label: _interface.label,\n isGroup: false,\n shape: \"rect\",\n cssStyles: [\"opacity: 0;\"],\n look: config.look\n };\n nodes.push(interfaceNode);\n }\n cnt = 0;\n for (const classRelation of this.relations) {\n cnt++;\n const edge = {\n id: getEdgeId(classRelation.id1, classRelation.id2, {\n prefix: \"id\",\n counter: cnt\n }),\n start: classRelation.id1,\n end: classRelation.id2,\n type: \"normal\",\n label: classRelation.title,\n labelpos: \"c\",\n thickness: \"normal\",\n classes: \"relation\",\n arrowTypeStart: this.getArrowMarker(classRelation.relation.type1),\n arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2),\n startLabelRight: classRelation.relationTitle1 === \"none\" ? \"\" : classRelation.relationTitle1,\n endLabelLeft: classRelation.relationTitle2 === \"none\" ? \"\" : classRelation.relationTitle2,\n arrowheadStyle: \"\",\n labelStyle: [\"display: inline-block\"],\n style: classRelation.style || \"\",\n pattern: classRelation.relation.lineType == 1 ? \"dashed\" : \"solid\",\n look: config.look\n };\n edges.push(edge);\n }\n return { nodes, edges, other: {}, config, direction: this.getDirection() };\n }\n};\n\n// src/diagrams/class/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `g.classGroup text {\n fill: ${options.nodeBorder || options.classText};\n stroke: none;\n font-family: ${options.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${options.classText};\n}\n.edgeLabel .label rect {\n fill: ${options.mainBkg};\n}\n.label text {\n fill: ${options.classText};\n}\n\n.labelBkg {\n background: ${options.mainBkg};\n}\n.edgeLabel .label span {\n background: ${options.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${options.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/class/classRenderer-v3-unified.ts\nvar getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = \"TB\") => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n let dir = defaultDir;\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n return dir;\n}, \"getDir\");\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing class diagram (v3)\", id);\n const { securityLevel, state: conf, layout } = getConfig();\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"aggregation\", \"extension\", \"composition\", \"dependency\", \"lollipop\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n utils_default.insertTitle(\n svg,\n \"classDiagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"classDiagram\", conf?.useMaxWidth ?? true);\n}, \"draw\");\nvar classRenderer_v3_unified_default = {\n getClasses,\n draw,\n getDir\n};\n\nexport {\n classDiagram_default,\n ClassDB,\n styles_default,\n classRenderer_v3_unified_default\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","classDiagram_default","visibilityValues","ClassMember","_a","memberType","sanitizedInput","sanitizeText","getConfig","displayText","parseGenericTypes","cssStyle","potentialClassifier","detectedVisibility","lastChar","length","firstChar","combinedText","MERMAID_DOM_ID_PREFIX","classCounter","sanitizeText2","txt","common_default","ClassDB","element","tooltipElem","select","event","el","rect","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","_id","id","genericType","className","split","label","type","name","classId","classInterface","clear","classRelation","log","invalidTypes","annotation","validatedClassName","member","theClass","memberString","members","text","note","ids","classNode","style","styleClass","s","newStyle","value","tooltip","namespace","linkStr","target","config","utils_default","functionName","functionArgs","_domId","domId","elemId","argList","item","elem","fun","dir","classNames","styles","thisClass","marker","nodes","edges","namespaceKey","node","classKey","cnt","noteNode","noteClassId","edge","_interface","interfaceNode","getEdgeId","getStyles","options","getIconStyles","styles_default","getDir","parsedItem","defaultDir","parsedItemDoc","getClasses","diagramObj","draw","_version","diag","securityLevel","conf","layout","data4Layout","svg","getDiagramElement","getRegisteredLayoutAlgorithm","render","padding","setupViewPortForSVG","classRenderer_v3_unified_default"],"mappings":"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,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-B4BG7PRW-CEAtt3i9.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-B4BG7PRW.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n parseGenericTypes,\n sanitizeText,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/parser/classDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 18], $V1 = [1, 19], $V2 = [1, 20], $V3 = [1, 41], $V4 = [1, 42], $V5 = [1, 26], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 32], $V9 = [1, 33], $Va = [1, 34], $Vb = [1, 45], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 27], $Vh = [1, 28], $Vi = [1, 29], $Vj = [1, 30], $Vk = [1, 31], $Vl = [1, 44], $Vm = [1, 46], $Vn = [1, 43], $Vo = [1, 47], $Vp = [1, 9], $Vq = [1, 8, 9], $Vr = [1, 58], $Vs = [1, 59], $Vt = [1, 60], $Vu = [1, 61], $Vv = [1, 62], $Vw = [1, 63], $Vx = [1, 64], $Vy = [1, 8, 9, 41], $Vz = [1, 76], $VA = [1, 8, 9, 12, 13, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 8, 9, 12, 13, 18, 20, 22, 39, 41, 44, 50, 60, 68, 69, 70, 71, 72, 73, 74, 79, 81, 86, 100, 102, 103], $VC = [13, 60, 86, 100, 102, 103], $VD = [13, 60, 73, 74, 86, 100, 102, 103], $VE = [13, 60, 68, 69, 70, 71, 72, 86, 100, 102, 103], $VF = [1, 100], $VG = [1, 117], $VH = [1, 113], $VI = [1, 109], $VJ = [1, 115], $VK = [1, 110], $VL = [1, 111], $VM = [1, 112], $VN = [1, 114], $VO = [1, 116], $VP = [22, 48, 60, 61, 82, 86, 87, 88, 89, 90], $VQ = [1, 8, 9, 39, 41, 44], $VR = [1, 8, 9, 22], $VS = [1, 145], $VT = [1, 8, 9, 61], $VU = [1, 8, 9, 22, 48, 60, 61, 82, 86, 87, 88, 89, 90];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"statements\": 5, \"graphConfig\": 6, \"CLASS_DIAGRAM\": 7, \"NEWLINE\": 8, \"EOF\": 9, \"statement\": 10, \"classLabel\": 11, \"SQS\": 12, \"STR\": 13, \"SQE\": 14, \"namespaceName\": 15, \"alphaNumToken\": 16, \"classLiteralName\": 17, \"DOT\": 18, \"className\": 19, \"GENERICTYPE\": 20, \"relationStatement\": 21, \"LABEL\": 22, \"namespaceStatement\": 23, \"classStatement\": 24, \"memberStatement\": 25, \"annotationStatement\": 26, \"clickStatement\": 27, \"styleStatement\": 28, \"cssClassStatement\": 29, \"noteStatement\": 30, \"classDefStatement\": 31, \"direction\": 32, \"acc_title\": 33, \"acc_title_value\": 34, \"acc_descr\": 35, \"acc_descr_value\": 36, \"acc_descr_multiline_value\": 37, \"namespaceIdentifier\": 38, \"STRUCT_START\": 39, \"classStatements\": 40, \"STRUCT_STOP\": 41, \"NAMESPACE\": 42, \"classIdentifier\": 43, \"STYLE_SEPARATOR\": 44, \"members\": 45, \"CLASS\": 46, \"emptyBody\": 47, \"SPACE\": 48, \"ANNOTATION_START\": 49, \"ANNOTATION_END\": 50, \"MEMBER\": 51, \"SEPARATOR\": 52, \"relation\": 53, \"NOTE_FOR\": 54, \"noteText\": 55, \"NOTE\": 56, \"CLASSDEF\": 57, \"classList\": 58, \"stylesOpt\": 59, \"ALPHA\": 60, \"COMMA\": 61, \"direction_tb\": 62, \"direction_bt\": 63, \"direction_rl\": 64, \"direction_lr\": 65, \"relationType\": 66, \"lineType\": 67, \"AGGREGATION\": 68, \"EXTENSION\": 69, \"COMPOSITION\": 70, \"DEPENDENCY\": 71, \"LOLLIPOP\": 72, \"LINE\": 73, \"DOTTED_LINE\": 74, \"CALLBACK\": 75, \"LINK\": 76, \"LINK_TARGET\": 77, \"CLICK\": 78, \"CALLBACK_NAME\": 79, \"CALLBACK_ARGS\": 80, \"HREF\": 81, \"STYLE\": 82, \"CSSCLASS\": 83, \"style\": 84, \"styleComponent\": 85, \"NUM\": 86, \"COLON\": 87, \"UNIT\": 88, \"BRKT\": 89, \"PCT\": 90, \"commentToken\": 91, \"textToken\": 92, \"graphCodeTokens\": 93, \"textNoTagsToken\": 94, \"TAGSTART\": 95, \"TAGEND\": 96, \"==\": 97, \"--\": 98, \"DEFAULT\": 99, \"MINUS\": 100, \"keywords\": 101, \"UNICODE_TEXT\": 102, \"BQUOTE_STR\": 103, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 7: \"CLASS_DIAGRAM\", 8: \"NEWLINE\", 9: \"EOF\", 12: \"SQS\", 13: \"STR\", 14: \"SQE\", 18: \"DOT\", 20: \"GENERICTYPE\", 22: \"LABEL\", 33: \"acc_title\", 34: \"acc_title_value\", 35: \"acc_descr\", 36: \"acc_descr_value\", 37: \"acc_descr_multiline_value\", 39: \"STRUCT_START\", 41: \"STRUCT_STOP\", 42: \"NAMESPACE\", 44: \"STYLE_SEPARATOR\", 46: \"CLASS\", 48: \"SPACE\", 49: \"ANNOTATION_START\", 50: \"ANNOTATION_END\", 51: \"MEMBER\", 52: \"SEPARATOR\", 54: \"NOTE_FOR\", 56: \"NOTE\", 57: \"CLASSDEF\", 60: \"ALPHA\", 61: \"COMMA\", 62: \"direction_tb\", 63: \"direction_bt\", 64: \"direction_rl\", 65: \"direction_lr\", 68: \"AGGREGATION\", 69: \"EXTENSION\", 70: \"COMPOSITION\", 71: \"DEPENDENCY\", 72: \"LOLLIPOP\", 73: \"LINE\", 74: \"DOTTED_LINE\", 75: \"CALLBACK\", 76: \"LINK\", 77: \"LINK_TARGET\", 78: \"CLICK\", 79: \"CALLBACK_NAME\", 80: \"CALLBACK_ARGS\", 81: \"HREF\", 82: \"STYLE\", 83: \"CSSCLASS\", 86: \"NUM\", 87: \"COLON\", 88: \"UNIT\", 89: \"BRKT\", 90: \"PCT\", 93: \"graphCodeTokens\", 95: \"TAGSTART\", 96: \"TAGEND\", 97: \"==\", 98: \"--\", 99: \"DEFAULT\", 100: \"MINUS\", 101: \"keywords\", 102: \"UNICODE_TEXT\", 103: \"BQUOTE_STR\" },\n productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 1], [15, 3], [15, 2], [19, 1], [19, 3], [19, 1], [19, 2], [19, 2], [19, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [23, 4], [23, 5], [38, 2], [40, 1], [40, 2], [40, 3], [24, 1], [24, 3], [24, 4], [24, 3], [24, 6], [43, 2], [43, 3], [47, 0], [47, 2], [47, 2], [26, 4], [45, 1], [45, 2], [25, 1], [25, 2], [25, 1], [25, 1], [21, 3], [21, 4], [21, 4], [21, 5], [30, 3], [30, 2], [31, 3], [58, 1], [58, 3], [32, 1], [32, 1], [32, 1], [32, 1], [53, 3], [53, 2], [53, 2], [53, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [27, 3], [27, 4], [27, 3], [27, 4], [27, 4], [27, 5], [27, 3], [27, 4], [27, 4], [27, 5], [27, 4], [27, 5], [27, 5], [27, 6], [28, 3], [29, 3], [59, 1], [59, 3], [84, 1], [84, 2], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [91, 1], [91, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [94, 1], [94, 1], [94, 1], [94, 1], [16, 1], [16, 1], [16, 1], [16, 1], [17, 1], [55, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 8:\n this.$ = $$[$0 - 1];\n break;\n case 9:\n case 10:\n case 13:\n case 15:\n this.$ = $$[$0];\n break;\n case 11:\n case 14:\n this.$ = $$[$0 - 2] + \".\" + $$[$0];\n break;\n case 12:\n case 16:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 17:\n case 18:\n this.$ = $$[$0 - 1] + \"~\" + $$[$0] + \"~\";\n break;\n case 19:\n yy.addRelation($$[$0]);\n break;\n case 20:\n $$[$0 - 1].title = yy.cleanupLabel($$[$0]);\n yy.addRelation($$[$0 - 1]);\n break;\n case 31:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 32:\n case 33:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 34:\n yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]);\n break;\n case 35:\n yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]);\n break;\n case 36:\n this.$ = $$[$0];\n yy.addNamespace($$[$0]);\n break;\n case 37:\n this.$ = [$$[$0]];\n break;\n case 38:\n this.$ = [$$[$0 - 1]];\n break;\n case 39:\n $$[$0].unshift($$[$0 - 2]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.setCssClass($$[$0 - 2], $$[$0]);\n break;\n case 42:\n yy.addMembers($$[$0 - 3], $$[$0 - 1]);\n break;\n case 44:\n yy.setCssClass($$[$0 - 5], $$[$0 - 3]);\n yy.addMembers($$[$0 - 5], $$[$0 - 1]);\n break;\n case 45:\n this.$ = $$[$0];\n yy.addClass($$[$0]);\n break;\n case 46:\n this.$ = $$[$0 - 1];\n yy.addClass($$[$0 - 1]);\n yy.setClassLabel($$[$0 - 1], $$[$0]);\n break;\n case 50:\n yy.addAnnotation($$[$0], $$[$0 - 2]);\n break;\n case 51:\n case 64:\n this.$ = [$$[$0]];\n break;\n case 52:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 53:\n break;\n case 54:\n yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));\n break;\n case 55:\n break;\n case 56:\n break;\n case 57:\n this.$ = { \"id1\": $$[$0 - 2], \"id2\": $$[$0], relation: $$[$0 - 1], relationTitle1: \"none\", relationTitle2: \"none\" };\n break;\n case 58:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: \"none\" };\n break;\n case 59:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: \"none\", relationTitle2: $$[$0 - 1] };\n break;\n case 60:\n this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };\n break;\n case 61:\n yy.addNote($$[$0], $$[$0 - 1]);\n break;\n case 62:\n yy.addNote($$[$0]);\n break;\n case 63:\n this.$ = $$[$0 - 2];\n yy.defineClass($$[$0 - 1], $$[$0]);\n break;\n case 65:\n this.$ = $$[$0 - 2].concat([$$[$0]]);\n break;\n case 66:\n yy.setDirection(\"TB\");\n break;\n case 67:\n yy.setDirection(\"BT\");\n break;\n case 68:\n yy.setDirection(\"RL\");\n break;\n case 69:\n yy.setDirection(\"LR\");\n break;\n case 70:\n this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 71:\n this.$ = { type1: \"none\", type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 72:\n this.$ = { type1: $$[$0 - 1], type2: \"none\", lineType: $$[$0] };\n break;\n case 73:\n this.$ = { type1: \"none\", type2: \"none\", lineType: $$[$0] };\n break;\n case 74:\n this.$ = yy.relationType.AGGREGATION;\n break;\n case 75:\n this.$ = yy.relationType.EXTENSION;\n break;\n case 76:\n this.$ = yy.relationType.COMPOSITION;\n break;\n case 77:\n this.$ = yy.relationType.DEPENDENCY;\n break;\n case 78:\n this.$ = yy.relationType.LOLLIPOP;\n break;\n case 79:\n this.$ = yy.lineType.LINE;\n break;\n case 80:\n this.$ = yy.lineType.DOTTED_LINE;\n break;\n case 81:\n case 87:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 82:\n case 88:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 83:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 84:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 85:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 86:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 3], $$[$0 - 1]);\n break;\n case 89:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 90:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 91:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 92:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]);\n break;\n case 93:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 94:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 4], $$[$0 - 1]);\n break;\n case 95:\n this.$ = $$[$0 - 2];\n yy.setCssStyle($$[$0 - 1], $$[$0]);\n break;\n case 96:\n yy.setCssClass($$[$0 - 1], $$[$0]);\n break;\n case 97:\n this.$ = [$$[$0]];\n break;\n case 98:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 100:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vp, [2, 5], { 8: [1, 48] }), { 8: [1, 49] }, o($Vq, [2, 19], { 22: [1, 50] }), o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), o($Vq, [2, 25]), o($Vq, [2, 26]), o($Vq, [2, 27]), o($Vq, [2, 28]), o($Vq, [2, 29]), o($Vq, [2, 30]), { 34: [1, 51] }, { 36: [1, 52] }, o($Vq, [2, 33]), o($Vq, [2, 53], { 53: 53, 66: 56, 67: 57, 13: [1, 54], 22: [1, 55], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 39: [1, 65] }, o($Vy, [2, 40], { 39: [1, 67], 44: [1, 66] }), o($Vq, [2, 55]), o($Vq, [2, 56]), { 16: 68, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 16: 39, 17: 40, 19: 69, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 70, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 71, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 60: [1, 72] }, { 13: [1, 73] }, { 16: 39, 17: 40, 19: 74, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: $Vz, 55: 75 }, { 58: 77, 60: [1, 78] }, o($Vq, [2, 66]), o($Vq, [2, 67]), o($Vq, [2, 68]), o($Vq, [2, 69]), o($VA, [2, 13], { 16: 39, 17: 40, 19: 80, 18: [1, 79], 20: [1, 81], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), o($VA, [2, 15], { 20: [1, 82] }), { 15: 83, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 86, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VB, [2, 123]), o($VB, [2, 124]), o($VB, [2, 125]), o($VB, [2, 126]), o([1, 8, 9, 12, 13, 20, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 127]), o($Vp, [2, 6], { 10: 5, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 19: 21, 38: 22, 43: 23, 16: 39, 17: 40, 5: 87, 33: $V0, 35: $V1, 37: $V2, 42: $V3, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), { 5: 88, 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($Vq, [2, 20]), o($Vq, [2, 31]), o($Vq, [2, 32]), { 13: [1, 90], 16: 39, 17: 40, 19: 89, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 53: 91, 66: 56, 67: 57, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o($Vq, [2, 54]), { 67: 92, 73: $Vw, 74: $Vx }, o($VC, [2, 73], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), o($VD, [2, 77]), o($VD, [2, 78]), o($VE, [2, 79]), o($VE, [2, 80]), { 8: [1, 95], 24: 96, 40: 94, 43: 23, 46: $V4 }, { 16: 97, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 41: [1, 99], 45: 98, 51: $VF }, { 50: [1, 101] }, { 13: [1, 102] }, { 13: [1, 103] }, { 79: [1, 104], 81: [1, 105] }, { 22: $VG, 48: $VH, 59: 106, 60: $VI, 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, { 60: [1, 118] }, { 13: $Vz, 55: 119 }, o($Vq, [2, 62]), o($Vq, [2, 128]), { 22: $VG, 48: $VH, 59: 120, 60: $VI, 61: [1, 121], 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o($VP, [2, 64]), { 16: 39, 17: 40, 19: 122, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VA, [2, 16]), o($VA, [2, 17]), o($VA, [2, 18]), { 39: [2, 36] }, { 15: 124, 16: 84, 17: 85, 18: [1, 123], 39: [2, 9], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 10] }, o($VQ, [2, 45], { 11: 125, 12: [1, 126] }), o($Vp, [2, 7]), { 9: [1, 127] }, o($VR, [2, 57]), { 16: 39, 17: 40, 19: 128, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: [1, 130], 16: 39, 17: 40, 19: 129, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VC, [2, 72], { 66: 131, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VC, [2, 71]), { 41: [1, 132] }, { 24: 96, 40: 133, 43: 23, 46: $V4 }, { 8: [1, 134], 41: [2, 37] }, o($Vy, [2, 41], { 39: [1, 135] }), { 41: [1, 136] }, o($Vy, [2, 43]), { 41: [2, 51], 45: 137, 51: $VF }, { 16: 39, 17: 40, 19: 138, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($Vq, [2, 81], { 13: [1, 139] }), o($Vq, [2, 83], { 13: [1, 141], 77: [1, 140] }), o($Vq, [2, 87], { 13: [1, 142], 80: [1, 143] }), { 13: [1, 144] }, o($Vq, [2, 95], { 61: $VS }), o($VT, [2, 97], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o($VU, [2, 99]), o($VU, [2, 101]), o($VU, [2, 102]), o($VU, [2, 103]), o($VU, [2, 104]), o($VU, [2, 105]), o($VU, [2, 106]), o($VU, [2, 107]), o($VU, [2, 108]), o($VU, [2, 109]), o($Vq, [2, 96]), o($Vq, [2, 61]), o($Vq, [2, 63], { 61: $VS }), { 60: [1, 147] }, o($VA, [2, 14]), { 15: 148, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 12] }, o($VQ, [2, 46]), { 13: [1, 149] }, { 1: [2, 4] }, o($VR, [2, 59]), o($VR, [2, 58]), { 16: 39, 17: 40, 19: 150, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o($VC, [2, 70]), o($Vq, [2, 34]), { 41: [1, 151] }, { 24: 96, 40: 152, 41: [2, 38], 43: 23, 46: $V4 }, { 45: 153, 51: $VF }, o($Vy, [2, 42]), { 41: [2, 52] }, o($Vq, [2, 50]), o($Vq, [2, 82]), o($Vq, [2, 84]), o($Vq, [2, 85], { 77: [1, 154] }), o($Vq, [2, 88]), o($Vq, [2, 89], { 13: [1, 155] }), o($Vq, [2, 91], { 13: [1, 157], 77: [1, 156] }), { 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 84: 158, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o($VU, [2, 100]), o($VP, [2, 65]), { 39: [2, 11] }, { 14: [1, 159] }, o($VR, [2, 60]), o($Vq, [2, 35]), { 41: [2, 39] }, { 41: [1, 160] }, o($Vq, [2, 86]), o($Vq, [2, 90]), o($Vq, [2, 92]), o($Vq, [2, 93], { 77: [1, 161] }), o($VT, [2, 98], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o($VQ, [2, 8]), o($Vy, [2, 44]), o($Vq, [2, 94])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 83: [2, 36], 85: [2, 10], 124: [2, 12], 127: [2, 4], 137: [2, 52], 148: [2, 11], 152: [2, 39] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 62;\n break;\n case 1:\n return 63;\n break;\n case 2:\n return 64;\n break;\n case 3:\n return 65;\n break;\n case 4:\n break;\n case 5:\n break;\n case 6:\n this.begin(\"acc_title\");\n return 33;\n break;\n case 7:\n this.popState();\n return \"acc_title_value\";\n break;\n case 8:\n this.begin(\"acc_descr\");\n return 35;\n break;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n break;\n case 13:\n return 8;\n break;\n case 14:\n break;\n case 15:\n return 7;\n break;\n case 16:\n return 7;\n break;\n case 17:\n return \"EDGE_STATE\";\n break;\n case 18:\n this.begin(\"callback_name\");\n break;\n case 19:\n this.popState();\n break;\n case 20:\n this.popState();\n this.begin(\"callback_args\");\n break;\n case 21:\n return 79;\n break;\n case 22:\n this.popState();\n break;\n case 23:\n return 80;\n break;\n case 24:\n this.popState();\n break;\n case 25:\n return \"STR\";\n break;\n case 26:\n this.begin(\"string\");\n break;\n case 27:\n return 82;\n break;\n case 28:\n return 57;\n break;\n case 29:\n this.begin(\"namespace\");\n return 42;\n break;\n case 30:\n this.popState();\n return 8;\n break;\n case 31:\n break;\n case 32:\n this.begin(\"namespace-body\");\n return 39;\n break;\n case 33:\n this.popState();\n return 41;\n break;\n case 34:\n return \"EOF_IN_STRUCT\";\n break;\n case 35:\n return 8;\n break;\n case 36:\n break;\n case 37:\n return \"EDGE_STATE\";\n break;\n case 38:\n this.begin(\"class\");\n return 46;\n break;\n case 39:\n this.popState();\n return 8;\n break;\n case 40:\n break;\n case 41:\n this.popState();\n this.popState();\n return 41;\n break;\n case 42:\n this.begin(\"class-body\");\n return 39;\n break;\n case 43:\n this.popState();\n return 41;\n break;\n case 44:\n return \"EOF_IN_STRUCT\";\n break;\n case 45:\n return \"EDGE_STATE\";\n break;\n case 46:\n return \"OPEN_IN_STRUCT\";\n break;\n case 47:\n break;\n case 48:\n return \"MEMBER\";\n break;\n case 49:\n return 83;\n break;\n case 50:\n return 75;\n break;\n case 51:\n return 76;\n break;\n case 52:\n return 78;\n break;\n case 53:\n return 54;\n break;\n case 54:\n return 56;\n break;\n case 55:\n return 49;\n break;\n case 56:\n return 50;\n break;\n case 57:\n return 81;\n break;\n case 58:\n this.popState();\n break;\n case 59:\n return \"GENERICTYPE\";\n break;\n case 60:\n this.begin(\"generic\");\n break;\n case 61:\n this.popState();\n break;\n case 62:\n return \"BQUOTE_STR\";\n break;\n case 63:\n this.begin(\"bqstring\");\n break;\n case 64:\n return 77;\n break;\n case 65:\n return 77;\n break;\n case 66:\n return 77;\n break;\n case 67:\n return 77;\n break;\n case 68:\n return 69;\n break;\n case 69:\n return 69;\n break;\n case 70:\n return 71;\n break;\n case 71:\n return 71;\n break;\n case 72:\n return 70;\n break;\n case 73:\n return 68;\n break;\n case 74:\n return 72;\n break;\n case 75:\n return 73;\n break;\n case 76:\n return 74;\n break;\n case 77:\n return 22;\n break;\n case 78:\n return 44;\n break;\n case 79:\n return 100;\n break;\n case 80:\n return 18;\n break;\n case 81:\n return \"PLUS\";\n break;\n case 82:\n return 87;\n break;\n case 83:\n return 61;\n break;\n case 84:\n return 89;\n break;\n case 85:\n return 89;\n break;\n case 86:\n return 90;\n break;\n case 87:\n return \"EQUALS\";\n break;\n case 88:\n return \"EQUALS\";\n break;\n case 89:\n return 60;\n break;\n case 90:\n return 12;\n break;\n case 91:\n return 14;\n break;\n case 92:\n return \"PUNCTUATION\";\n break;\n case 93:\n return 86;\n break;\n case 94:\n return 102;\n break;\n case 95:\n return 48;\n break;\n case 96:\n return 48;\n break;\n case 97:\n return 9;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:classDiagram-v2\\b)/, /^(?:classDiagram\\b)/, /^(?:\\[\\*\\])/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:classDef\\b)/, /^(?:namespace\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:\\[\\*\\])/, /^(?:class\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\[\\*\\])/, /^(?:[{])/, /^(?:[\\n])/, /^(?:[^{}\\n]*)/, /^(?:cssClass\\b)/, /^(?:callback\\b)/, /^(?:link\\b)/, /^(?:click\\b)/, /^(?:note for\\b)/, /^(?:note\\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:\\s*<\\|)/, /^(?:\\s*\\|>)/, /^(?:\\s*>)/, /^(?:\\s*<)/, /^(?:\\s*\\*)/, /^(?:\\s*o\\b)/, /^(?:\\s*\\(\\))/, /^(?:--)/, /^(?:\\.\\.)/, /^(?::{1}[^:\\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\\.)/, /^(?:\\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\\w+)/, /^(?:\\[)/, /^(?:\\])/, /^(?:[!\"#$%&'*+,-.`?\\\\/])/, /^(?:[0-9]+)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\s)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"namespace-body\": { \"rules\": [26, 33, 34, 35, 36, 37, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"namespace\": { \"rules\": [26, 29, 30, 31, 32, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"class-body\": { \"rules\": [26, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"class\": { \"rules\": [26, 39, 40, 41, 42, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [11, 12, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"acc_title\": { \"rules\": [7, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"callback_args\": { \"rules\": [22, 23, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"callback_name\": { \"rules\": [19, 20, 21, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"href\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"struct\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"generic\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"bqstring\": { \"rules\": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"string\": { \"rules\": [24, 25, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar classDiagram_default = parser;\n\n// src/diagrams/class/classDb.ts\nimport { select } from \"d3\";\n\n// src/diagrams/class/classTypes.ts\nvar visibilityValues = [\"#\", \"+\", \"~\", \"-\", \"\"];\nvar ClassMember = class {\n static {\n __name(this, \"ClassMember\");\n }\n constructor(input, memberType) {\n this.memberType = memberType;\n this.visibility = \"\";\n this.classifier = \"\";\n this.text = \"\";\n const sanitizedInput = sanitizeText(input, getConfig());\n this.parseMember(sanitizedInput);\n }\n getDisplayDetails() {\n let displayText = this.visibility + parseGenericTypes(this.id);\n if (this.memberType === \"method\") {\n displayText += `(${parseGenericTypes(this.parameters.trim())})`;\n if (this.returnType) {\n displayText += \" : \" + parseGenericTypes(this.returnType);\n }\n }\n displayText = displayText.trim();\n const cssStyle = this.parseClassifier();\n return {\n displayText,\n cssStyle\n };\n }\n parseMember(input) {\n let potentialClassifier = \"\";\n if (this.memberType === \"method\") {\n const methodRegEx = /([#+~-])?(.+)\\((.*)\\)([\\s$*])?(.*)([$*])?/;\n const match = methodRegEx.exec(input);\n if (match) {\n const detectedVisibility = match[1] ? match[1].trim() : \"\";\n if (visibilityValues.includes(detectedVisibility)) {\n this.visibility = detectedVisibility;\n }\n this.id = match[2];\n this.parameters = match[3] ? match[3].trim() : \"\";\n potentialClassifier = match[4] ? match[4].trim() : \"\";\n this.returnType = match[5] ? match[5].trim() : \"\";\n if (potentialClassifier === \"\") {\n const lastChar = this.returnType.substring(this.returnType.length - 1);\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n this.returnType = this.returnType.substring(0, this.returnType.length - 1);\n }\n }\n }\n } else {\n const length = input.length;\n const firstChar = input.substring(0, 1);\n const lastChar = input.substring(length - 1);\n if (visibilityValues.includes(firstChar)) {\n this.visibility = firstChar;\n }\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n }\n this.id = input.substring(\n this.visibility === \"\" ? 0 : 1,\n potentialClassifier === \"\" ? length : length - 1\n );\n }\n this.classifier = potentialClassifier;\n this.id = this.id.startsWith(\" \") ? \" \" + this.id.trim() : this.id.trim();\n const combinedText = `${this.visibility ? \"\\\\\" + this.visibility : \"\"}${parseGenericTypes(this.id)}${this.memberType === \"method\" ? `(${parseGenericTypes(this.parameters)})${this.returnType ? \" : \" + parseGenericTypes(this.returnType) : \"\"}` : \"\"}`;\n this.text = combinedText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n if (this.text.startsWith(\"\\\\<\")) {\n this.text = this.text.replace(\"\\\\<\", \"~\");\n }\n }\n parseClassifier() {\n switch (this.classifier) {\n case \"*\":\n return \"font-style:italic;\";\n case \"$\":\n return \"text-decoration:underline;\";\n default:\n return \"\";\n }\n }\n};\n\n// src/diagrams/class/classDb.ts\nvar MERMAID_DOM_ID_PREFIX = \"classId-\";\nvar classCounter = 0;\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig()), \"sanitizeText\");\nvar ClassDB = class {\n constructor() {\n this.relations = [];\n this.classes = /* @__PURE__ */ new Map();\n this.styleClasses = /* @__PURE__ */ new Map();\n this.notes = [];\n this.interfaces = [];\n // private static classCounter = 0;\n this.namespaces = /* @__PURE__ */ new Map();\n this.namespaceCounter = 0;\n this.functions = [];\n this.lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n };\n this.relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n LOLLIPOP: 4\n };\n this.setupToolTips = /* @__PURE__ */ __name((element) => {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", (event) => {\n const el = select(event.currentTarget);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.top - 14 + document.body.scrollTop + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", (event) => {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(event.currentTarget);\n el.classed(\"hover\", false);\n });\n }, \"setupToolTips\");\n this.direction = \"TB\";\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setAccDescription = setAccDescription;\n this.getAccDescription = getAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getConfig = /* @__PURE__ */ __name(() => getConfig().class, \"getConfig\");\n this.functions.push(this.setupToolTips.bind(this));\n this.clear();\n this.addRelation = this.addRelation.bind(this);\n this.addClassesToNamespace = this.addClassesToNamespace.bind(this);\n this.addNamespace = this.addNamespace.bind(this);\n this.setCssClass = this.setCssClass.bind(this);\n this.addMembers = this.addMembers.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClassLabel = this.setClassLabel.bind(this);\n this.addAnnotation = this.addAnnotation.bind(this);\n this.addMember = this.addMember.bind(this);\n this.cleanupLabel = this.cleanupLabel.bind(this);\n this.addNote = this.addNote.bind(this);\n this.defineClass = this.defineClass.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.setLink = this.setLink.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n this.clear = this.clear.bind(this);\n this.setTooltip = this.setTooltip.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setCssStyle = this.setCssStyle.bind(this);\n }\n static {\n __name(this, \"ClassDB\");\n }\n splitClassNameAndType(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n let genericType = \"\";\n let className = id;\n if (id.indexOf(\"~\") > 0) {\n const split = id.split(\"~\");\n className = sanitizeText2(split[0]);\n genericType = sanitizeText2(split[1]);\n }\n return { className, type: genericType };\n }\n setClassLabel(_id, label) {\n const id = common_default.sanitizeText(_id, getConfig());\n if (label) {\n label = sanitizeText2(label);\n }\n const { className } = this.splitClassNameAndType(id);\n this.classes.get(className).label = label;\n this.classes.get(className).text = `${label}${this.classes.get(className).type ? `<${this.classes.get(className).type}>` : \"\"}`;\n }\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param id - ID of the class to add\n * @public\n */\n addClass(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n const { className, type } = this.splitClassNameAndType(id);\n if (this.classes.has(className)) {\n return;\n }\n const name = common_default.sanitizeText(className, getConfig());\n this.classes.set(name, {\n id: name,\n type,\n label: name,\n text: `${name}${type ? `<${type}>` : \"\"}`,\n shape: \"classBox\",\n cssClasses: \"default\",\n methods: [],\n members: [],\n annotations: [],\n styles: [],\n domId: MERMAID_DOM_ID_PREFIX + name + \"-\" + classCounter\n });\n classCounter++;\n }\n addInterface(label, classId) {\n const classInterface = {\n id: `interface${this.interfaces.length}`,\n label,\n classId\n };\n this.interfaces.push(classInterface);\n }\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - class ID to lookup\n * @public\n */\n lookUpDomId(_id) {\n const id = common_default.sanitizeText(_id, getConfig());\n if (this.classes.has(id)) {\n return this.classes.get(id).domId;\n }\n throw new Error(\"Class not found: \" + id);\n }\n clear() {\n this.relations = [];\n this.classes = /* @__PURE__ */ new Map();\n this.notes = [];\n this.interfaces = [];\n this.functions = [];\n this.functions.push(this.setupToolTips.bind(this));\n this.namespaces = /* @__PURE__ */ new Map();\n this.namespaceCounter = 0;\n this.direction = \"TB\";\n clear();\n }\n getClass(id) {\n return this.classes.get(id);\n }\n getClasses() {\n return this.classes;\n }\n getRelations() {\n return this.relations;\n }\n getNotes() {\n return this.notes;\n }\n addRelation(classRelation) {\n log.debug(\"Adding relation: \" + JSON.stringify(classRelation));\n const invalidTypes = [\n this.relationType.LOLLIPOP,\n this.relationType.AGGREGATION,\n this.relationType.COMPOSITION,\n this.relationType.DEPENDENCY,\n this.relationType.EXTENSION\n ];\n if (classRelation.relation.type1 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type2)) {\n this.addClass(classRelation.id2);\n this.addInterface(classRelation.id1, classRelation.id2);\n classRelation.id1 = `interface${this.interfaces.length - 1}`;\n } else if (classRelation.relation.type2 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type1)) {\n this.addClass(classRelation.id1);\n this.addInterface(classRelation.id2, classRelation.id1);\n classRelation.id2 = `interface${this.interfaces.length - 1}`;\n } else {\n this.addClass(classRelation.id1);\n this.addClass(classRelation.id2);\n }\n classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className;\n classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className;\n classRelation.relationTitle1 = common_default.sanitizeText(\n classRelation.relationTitle1.trim(),\n getConfig()\n );\n classRelation.relationTitle2 = common_default.sanitizeText(\n classRelation.relationTitle2.trim(),\n getConfig()\n );\n this.relations.push(classRelation);\n }\n /**\n * Adds an annotation to the specified class Annotations mark special properties of the given type\n * (like 'interface' or 'service')\n *\n * @param className - The class name\n * @param annotation - The name of the annotation without any brackets\n * @public\n */\n addAnnotation(className, annotation) {\n const validatedClassName = this.splitClassNameAndType(className).className;\n this.classes.get(validatedClassName).annotations.push(annotation);\n }\n /**\n * Adds a member to the specified class\n *\n * @param className - The class name\n * @param member - The full name of the member. If the member is enclosed in `<>` it is\n * treated as an annotation If the member is ending with a closing bracket ) it is treated as a\n * method Otherwise the member will be treated as a normal property\n * @public\n */\n addMember(className, member) {\n this.addClass(className);\n const validatedClassName = this.splitClassNameAndType(className).className;\n const theClass = this.classes.get(validatedClassName);\n if (typeof member === \"string\") {\n const memberString = member.trim();\n if (memberString.startsWith(\"<<\") && memberString.endsWith(\">>\")) {\n theClass.annotations.push(sanitizeText2(memberString.substring(2, memberString.length - 2)));\n } else if (memberString.indexOf(\")\") > 0) {\n theClass.methods.push(new ClassMember(memberString, \"method\"));\n } else if (memberString) {\n theClass.members.push(new ClassMember(memberString, \"attribute\"));\n }\n }\n }\n addMembers(className, members) {\n if (Array.isArray(members)) {\n members.reverse();\n members.forEach((member) => this.addMember(className, member));\n }\n }\n addNote(text, className) {\n const note = {\n id: `note${this.notes.length}`,\n class: className,\n text\n };\n this.notes.push(note);\n }\n cleanupLabel(label) {\n if (label.startsWith(\":\")) {\n label = label.substring(1);\n }\n return sanitizeText2(label.trim());\n }\n /**\n * Called by parser when assigning cssClass to a class\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n setCssClass(ids, className) {\n ids.split(\",\").forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const classNode = this.classes.get(id);\n if (classNode) {\n classNode.cssClasses += \" \" + className;\n }\n });\n }\n defineClass(ids, style) {\n for (const id of ids) {\n let styleClass = this.styleClasses.get(id);\n if (styleClass === void 0) {\n styleClass = { id, styles: [], textStyles: [] };\n this.styleClasses.set(id, styleClass);\n }\n if (style) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n styleClass.textStyles.push(newStyle);\n }\n styleClass.styles.push(s);\n });\n }\n this.classes.forEach((value) => {\n if (value.cssClasses.includes(id)) {\n value.styles.push(...style.flatMap((s) => s.split(\",\")));\n }\n });\n }\n }\n /**\n * Called by parser when a tooltip is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param tooltip - Tooltip to add\n */\n setTooltip(ids, tooltip) {\n ids.split(\",\").forEach((id) => {\n if (tooltip !== void 0) {\n this.classes.get(id).tooltip = sanitizeText2(tooltip);\n }\n });\n }\n getTooltip(id, namespace) {\n if (namespace && this.namespaces.has(namespace)) {\n return this.namespaces.get(namespace).classes.get(id).tooltip;\n }\n return this.classes.get(id).tooltip;\n }\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file\n */\n setLink(ids, linkStr, target) {\n const config = getConfig();\n ids.split(\",\").forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const theClass = this.classes.get(id);\n if (theClass) {\n theClass.link = utils_default.formatUrl(linkStr, config);\n if (config.securityLevel === \"sandbox\") {\n theClass.linkTarget = \"_top\";\n } else if (typeof target === \"string\") {\n theClass.linkTarget = sanitizeText2(target);\n } else {\n theClass.linkTarget = \"_blank\";\n }\n }\n });\n this.setCssClass(ids, \"clickable\");\n }\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Function args the function should be called with\n */\n setClickEvent(ids, functionName, functionArgs) {\n ids.split(\",\").forEach((id) => {\n this.setClickFunc(id, functionName, functionArgs);\n this.classes.get(id).haveCallback = true;\n });\n this.setCssClass(ids, \"clickable\");\n }\n setClickFunc(_domId, functionName, functionArgs) {\n const domId = common_default.sanitizeText(_domId, getConfig());\n const config = getConfig();\n if (config.securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n const id = domId;\n if (this.classes.has(id)) {\n const elemId = this.lookUpDomId(id);\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(elemId);\n }\n this.functions.push(() => {\n const elem = document.querySelector(`[id=\"${elemId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n () => {\n utils_default.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n bindFunctions(element) {\n this.functions.forEach((fun) => {\n fun(element);\n });\n }\n getDirection() {\n return this.direction;\n }\n setDirection(dir) {\n this.direction = dir;\n }\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @public\n */\n addNamespace(id) {\n if (this.namespaces.has(id)) {\n return;\n }\n this.namespaces.set(id, {\n id,\n classes: /* @__PURE__ */ new Map(),\n children: {},\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + this.namespaceCounter\n });\n this.namespaceCounter++;\n }\n getNamespace(name) {\n return this.namespaces.get(name);\n }\n getNamespaces() {\n return this.namespaces;\n }\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @param classNames - IDs of the class to add\n * @public\n */\n addClassesToNamespace(id, classNames) {\n if (!this.namespaces.has(id)) {\n return;\n }\n for (const name of classNames) {\n const { className } = this.splitClassNameAndType(name);\n this.classes.get(className).parent = id;\n this.namespaces.get(id).classes.set(className, this.classes.get(className));\n }\n }\n setCssStyle(id, styles) {\n const thisClass = this.classes.get(id);\n if (!styles || !thisClass) {\n return;\n }\n for (const s of styles) {\n if (s.includes(\",\")) {\n thisClass.styles.push(...s.split(\",\"));\n } else {\n thisClass.styles.push(s);\n }\n }\n }\n /**\n * Gets the arrow marker for a type index\n *\n * @param type - The type to look for\n * @returns The arrow marker\n */\n getArrowMarker(type) {\n let marker;\n switch (type) {\n case 0:\n marker = \"aggregation\";\n break;\n case 1:\n marker = \"extension\";\n break;\n case 2:\n marker = \"composition\";\n break;\n case 3:\n marker = \"dependency\";\n break;\n case 4:\n marker = \"lollipop\";\n break;\n default:\n marker = \"none\";\n }\n return marker;\n }\n getData() {\n const nodes = [];\n const edges = [];\n const config = getConfig();\n for (const namespaceKey of this.namespaces.keys()) {\n const namespace = this.namespaces.get(namespaceKey);\n if (namespace) {\n const node = {\n id: namespace.id,\n label: namespace.id,\n isGroup: true,\n padding: config.class.padding ?? 16,\n // parent node must be one of [rect, roundedWithTitle, noteGroup, divider]\n shape: \"rect\",\n cssStyles: [\"fill: none\", \"stroke: black\"],\n look: config.look\n };\n nodes.push(node);\n }\n }\n for (const classKey of this.classes.keys()) {\n const classNode = this.classes.get(classKey);\n if (classNode) {\n const node = classNode;\n node.parentId = classNode.parent;\n node.look = config.look;\n nodes.push(node);\n }\n }\n let cnt = 0;\n for (const note of this.notes) {\n cnt++;\n const noteNode = {\n id: note.id,\n label: note.text,\n isGroup: false,\n shape: \"note\",\n padding: config.class.padding ?? 6,\n cssStyles: [\n \"text-align: left\",\n \"white-space: nowrap\",\n `fill: ${config.themeVariables.noteBkgColor}`,\n `stroke: ${config.themeVariables.noteBorderColor}`\n ],\n look: config.look\n };\n nodes.push(noteNode);\n const noteClassId = this.classes.get(note.class)?.id ?? \"\";\n if (noteClassId) {\n const edge = {\n id: `edgeNote${cnt}`,\n start: note.id,\n end: noteClassId,\n type: \"normal\",\n thickness: \"normal\",\n classes: \"relation\",\n arrowTypeStart: \"none\",\n arrowTypeEnd: \"none\",\n arrowheadStyle: \"\",\n labelStyle: [\"\"],\n style: [\"fill: none\"],\n pattern: \"dotted\",\n look: config.look\n };\n edges.push(edge);\n }\n }\n for (const _interface of this.interfaces) {\n const interfaceNode = {\n id: _interface.id,\n label: _interface.label,\n isGroup: false,\n shape: \"rect\",\n cssStyles: [\"opacity: 0;\"],\n look: config.look\n };\n nodes.push(interfaceNode);\n }\n cnt = 0;\n for (const classRelation of this.relations) {\n cnt++;\n const edge = {\n id: getEdgeId(classRelation.id1, classRelation.id2, {\n prefix: \"id\",\n counter: cnt\n }),\n start: classRelation.id1,\n end: classRelation.id2,\n type: \"normal\",\n label: classRelation.title,\n labelpos: \"c\",\n thickness: \"normal\",\n classes: \"relation\",\n arrowTypeStart: this.getArrowMarker(classRelation.relation.type1),\n arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2),\n startLabelRight: classRelation.relationTitle1 === \"none\" ? \"\" : classRelation.relationTitle1,\n endLabelLeft: classRelation.relationTitle2 === \"none\" ? \"\" : classRelation.relationTitle2,\n arrowheadStyle: \"\",\n labelStyle: [\"display: inline-block\"],\n style: classRelation.style || \"\",\n pattern: classRelation.relation.lineType == 1 ? \"dashed\" : \"solid\",\n look: config.look\n };\n edges.push(edge);\n }\n return { nodes, edges, other: {}, config, direction: this.getDirection() };\n }\n};\n\n// src/diagrams/class/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `g.classGroup text {\n fill: ${options.nodeBorder || options.classText};\n stroke: none;\n font-family: ${options.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${options.classText};\n}\n.edgeLabel .label rect {\n fill: ${options.mainBkg};\n}\n.label text {\n fill: ${options.classText};\n}\n\n.labelBkg {\n background: ${options.mainBkg};\n}\n.edgeLabel .label span {\n background: ${options.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${options.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/class/classRenderer-v3-unified.ts\nvar getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = \"TB\") => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n let dir = defaultDir;\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n return dir;\n}, \"getDir\");\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing class diagram (v3)\", id);\n const { securityLevel, state: conf, layout } = getConfig();\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"aggregation\", \"extension\", \"composition\", \"dependency\", \"lollipop\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n utils_default.insertTitle(\n svg,\n \"classDiagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"classDiagram\", conf?.useMaxWidth ?? true);\n}, \"draw\");\nvar classRenderer_v3_unified_default = {\n getClasses,\n draw,\n getDir\n};\n\nexport {\n classDiagram_default,\n ClassDB,\n styles_default,\n classRenderer_v3_unified_default\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","classDiagram_default","visibilityValues","ClassMember","_a","memberType","sanitizedInput","sanitizeText","getConfig","displayText","parseGenericTypes","cssStyle","potentialClassifier","detectedVisibility","lastChar","length","firstChar","combinedText","MERMAID_DOM_ID_PREFIX","classCounter","sanitizeText2","txt","common_default","ClassDB","element","tooltipElem","select","event","el","rect","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","_id","id","genericType","className","split","label","type","name","classId","classInterface","clear","classRelation","log","invalidTypes","annotation","validatedClassName","member","theClass","memberString","members","text","note","ids","classNode","style","styleClass","s","newStyle","value","tooltip","namespace","linkStr","target","config","utils_default","functionName","functionArgs","_domId","domId","elemId","argList","item","elem","fun","dir","classNames","styles","thisClass","marker","nodes","edges","namespaceKey","node","classKey","cnt","noteNode","noteClassId","edge","_interface","interfaceNode","getEdgeId","getStyles","options","getIconStyles","styles_default","getDir","parsedItem","defaultDir","parsedItemDoc","getClasses","diagramObj","draw","_version","diag","securityLevel","conf","layout","data4Layout","svg","getDiagramElement","getRegisteredLayoutAlgorithm","render","padding","setupViewPortForSVG","classRenderer_v3_unified_default"],"mappings":"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,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js b/massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js similarity index 99% rename from massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js rename to massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js index 5eaba5149..78816f04e 100644 --- a/massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js +++ b/massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js @@ -1,4 +1,4 @@ -import{g as te}from"./chunk-55IACEB6-BCQD3dNT.js";import{s as ee}from"./chunk-QN33PNHL-BF8yyMHO.js";import{_ as f,l as D,c as F,r as se,u as ie,a as re,b as ae,g as ne,s as oe,p as le,q as ce,T as he,k as W,y as ue}from"./index-yx4Z55Qu.js";var vt=(function(){var e=f(function(V,o,h,n){for(h=h||{},n=V.length;n--;h[V[n]]=o);return h},"o"),t=[1,2],s=[1,3],a=[1,4],i=[2,4],l=[1,9],d=[1,11],S=[1,16],p=[1,17],T=[1,18],_=[1,19],m=[1,33],k=[1,20],A=[1,21],$=[1,22],x=[1,23],R=[1,24],u=[1,26],L=[1,27],I=[1,28],N=[1,29],G=[1,30],P=[1,31],B=[1,32],at=[1,35],nt=[1,36],ot=[1,37],lt=[1,38],K=[1,34],y=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],ct=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],xt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],gt={trace:f(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:f(function(o,h,n,g,E,r,Z){var c=r.length-1;switch(E){case 3:return g.setRootDoc(r[c]),r[c];case 4:this.$=[];break;case 5:r[c]!="nl"&&(r[c-1].push(r[c]),this.$=r[c-1]);break;case 6:case 7:this.$=r[c];break;case 8:this.$="nl";break;case 12:this.$=r[c];break;case 13:const tt=r[c-1];tt.description=g.trimColon(r[c]),this.$=tt;break;case 14:this.$={stmt:"relation",state1:r[c-2],state2:r[c]};break;case 15:const Tt=g.trimColon(r[c]);this.$={stmt:"relation",state1:r[c-3],state2:r[c-1],description:Tt};break;case 19:this.$={stmt:"state",id:r[c-3],type:"default",description:"",doc:r[c-1]};break;case 20:var U=r[c],X=r[c-2].trim();if(r[c].match(":")){var ut=r[c].split(":");U=ut[0],X=[X,ut[1]]}this.$={stmt:"state",id:U,type:"default",description:X};break;case 21:this.$={stmt:"state",id:r[c-3],type:"default",description:r[c-5],doc:r[c-1]};break;case 22:this.$={stmt:"state",id:r[c],type:"fork"};break;case 23:this.$={stmt:"state",id:r[c],type:"join"};break;case 24:this.$={stmt:"state",id:r[c],type:"choice"};break;case 25:this.$={stmt:"state",id:g.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:r[c-1].trim(),note:{position:r[c-2].trim(),text:r[c].trim()}};break;case 29:this.$=r[c].trim(),g.setAccTitle(this.$);break;case 30:case 31:this.$=r[c].trim(),g.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:r[c-3],url:r[c-2],tooltip:r[c-1]};break;case 33:this.$={stmt:"click",id:r[c-3],url:r[c-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:r[c-1].trim(),classes:r[c].trim()};break;case 36:this.$={stmt:"style",id:r[c-1].trim(),styleClass:r[c].trim()};break;case 37:this.$={stmt:"applyClass",id:r[c-1].trim(),styleClass:r[c].trim()};break;case 38:g.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:g.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:g.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:g.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:r[c].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:r[c-2].trim(),classes:[r[c].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:r[c-2].trim(),classes:[r[c].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:t,5:s,6:a},{1:[3]},{3:5,4:t,5:s,6:a},{3:6,4:t,5:s,6:a},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:S,17:p,19:T,22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,7]),e(y,[2,8]),e(y,[2,9]),e(y,[2,10]),e(y,[2,11]),e(y,[2,12],{14:[1,40],15:[1,41]}),e(y,[2,16]),{18:[1,42]},e(y,[2,18],{20:[1,43]}),{23:[1,44]},e(y,[2,22]),e(y,[2,23]),e(y,[2,24]),e(y,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},e(y,[2,28]),{34:[1,49]},{36:[1,50]},e(y,[2,31]),{13:51,24:m,57:K},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},e(ct,[2,44],{58:[1,56]}),e(ct,[2,45],{58:[1,57]}),e(y,[2,38]),e(y,[2,39]),e(y,[2,40]),e(y,[2,41]),e(y,[2,6]),e(y,[2,13]),{13:58,24:m,57:K},e(y,[2,17]),e(xt,i,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},e(y,[2,29]),e(y,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},e(y,[2,14],{14:[1,71]}),{4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,21:[1,72],22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},e(y,[2,34]),e(y,[2,35]),e(y,[2,36]),e(y,[2,37]),e(ct,[2,46]),e(ct,[2,47]),e(y,[2,15]),e(y,[2,19]),e(xt,i,{7:78}),e(y,[2,26]),e(y,[2,27]),{5:[1,79]},{5:[1,80]},{4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,21:[1,81],22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,32]),e(y,[2,33]),e(y,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:f(function(o,h){if(h.recoverable)this.trace(o);else{var n=new Error(o);throw n.hash=h,n}},"parseError"),parse:f(function(o){var h=this,n=[0],g=[],E=[null],r=[],Z=this.table,c="",U=0,X=0,ut=2,tt=1,Tt=r.slice.call(arguments,1),b=Object.create(this.lexer),j={yy:{}};for(var Et in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Et)&&(j.yy[Et]=this.yy[Et]);b.setInput(o,j.yy),j.yy.lexer=b,j.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var _t=b.yylloc;r.push(_t);var Qt=b.options&&b.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Zt(O){n.length=n.length-2*O,E.length=E.length-O,r.length=r.length-O}f(Zt,"popStack");function Lt(){var O;return O=g.pop()||b.lex()||tt,typeof O!="number"&&(O instanceof Array&&(g=O,O=g.pop()),O=h.symbols_[O]||O),O}f(Lt,"lex");for(var C,H,w,mt,J={},dt,Y,Ot,ft;;){if(H=n[n.length-1],this.defaultActions[H]?w=this.defaultActions[H]:((C===null||typeof C>"u")&&(C=Lt()),w=Z[H]&&Z[H][C]),typeof w>"u"||!w.length||!w[0]){var Dt="";ft=[];for(dt in Z[H])this.terminals_[dt]&&dt>ut&&ft.push("'"+this.terminals_[dt]+"'");b.showPosition?Dt="Parse error on line "+(U+1)+`: +import{g as te}from"./chunk-55IACEB6-Do1tLUXI.js";import{s as ee}from"./chunk-QN33PNHL-Bl50RaE-.js";import{_ as f,l as D,c as F,r as se,u as ie,a as re,b as ae,g as ne,s as oe,p as le,q as ce,T as he,k as W,y as ue}from"./index-DbSnkTMx.js";var vt=(function(){var e=f(function(V,o,h,n){for(h=h||{},n=V.length;n--;h[V[n]]=o);return h},"o"),t=[1,2],s=[1,3],a=[1,4],i=[2,4],l=[1,9],d=[1,11],S=[1,16],p=[1,17],T=[1,18],_=[1,19],m=[1,33],k=[1,20],A=[1,21],$=[1,22],x=[1,23],R=[1,24],u=[1,26],L=[1,27],I=[1,28],N=[1,29],G=[1,30],P=[1,31],B=[1,32],at=[1,35],nt=[1,36],ot=[1,37],lt=[1,38],K=[1,34],y=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],ct=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],xt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],gt={trace:f(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:f(function(o,h,n,g,E,r,Z){var c=r.length-1;switch(E){case 3:return g.setRootDoc(r[c]),r[c];case 4:this.$=[];break;case 5:r[c]!="nl"&&(r[c-1].push(r[c]),this.$=r[c-1]);break;case 6:case 7:this.$=r[c];break;case 8:this.$="nl";break;case 12:this.$=r[c];break;case 13:const tt=r[c-1];tt.description=g.trimColon(r[c]),this.$=tt;break;case 14:this.$={stmt:"relation",state1:r[c-2],state2:r[c]};break;case 15:const Tt=g.trimColon(r[c]);this.$={stmt:"relation",state1:r[c-3],state2:r[c-1],description:Tt};break;case 19:this.$={stmt:"state",id:r[c-3],type:"default",description:"",doc:r[c-1]};break;case 20:var U=r[c],X=r[c-2].trim();if(r[c].match(":")){var ut=r[c].split(":");U=ut[0],X=[X,ut[1]]}this.$={stmt:"state",id:U,type:"default",description:X};break;case 21:this.$={stmt:"state",id:r[c-3],type:"default",description:r[c-5],doc:r[c-1]};break;case 22:this.$={stmt:"state",id:r[c],type:"fork"};break;case 23:this.$={stmt:"state",id:r[c],type:"join"};break;case 24:this.$={stmt:"state",id:r[c],type:"choice"};break;case 25:this.$={stmt:"state",id:g.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:r[c-1].trim(),note:{position:r[c-2].trim(),text:r[c].trim()}};break;case 29:this.$=r[c].trim(),g.setAccTitle(this.$);break;case 30:case 31:this.$=r[c].trim(),g.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:r[c-3],url:r[c-2],tooltip:r[c-1]};break;case 33:this.$={stmt:"click",id:r[c-3],url:r[c-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:r[c-1].trim(),classes:r[c].trim()};break;case 36:this.$={stmt:"style",id:r[c-1].trim(),styleClass:r[c].trim()};break;case 37:this.$={stmt:"applyClass",id:r[c-1].trim(),styleClass:r[c].trim()};break;case 38:g.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:g.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:g.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:g.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:r[c].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:r[c-2].trim(),classes:[r[c].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:r[c-2].trim(),classes:[r[c].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:t,5:s,6:a},{1:[3]},{3:5,4:t,5:s,6:a},{3:6,4:t,5:s,6:a},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:S,17:p,19:T,22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,7]),e(y,[2,8]),e(y,[2,9]),e(y,[2,10]),e(y,[2,11]),e(y,[2,12],{14:[1,40],15:[1,41]}),e(y,[2,16]),{18:[1,42]},e(y,[2,18],{20:[1,43]}),{23:[1,44]},e(y,[2,22]),e(y,[2,23]),e(y,[2,24]),e(y,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},e(y,[2,28]),{34:[1,49]},{36:[1,50]},e(y,[2,31]),{13:51,24:m,57:K},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},e(ct,[2,44],{58:[1,56]}),e(ct,[2,45],{58:[1,57]}),e(y,[2,38]),e(y,[2,39]),e(y,[2,40]),e(y,[2,41]),e(y,[2,6]),e(y,[2,13]),{13:58,24:m,57:K},e(y,[2,17]),e(xt,i,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},e(y,[2,29]),e(y,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},e(y,[2,14],{14:[1,71]}),{4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,21:[1,72],22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},e(y,[2,34]),e(y,[2,35]),e(y,[2,36]),e(y,[2,37]),e(ct,[2,46]),e(ct,[2,47]),e(y,[2,15]),e(y,[2,19]),e(xt,i,{7:78}),e(y,[2,26]),e(y,[2,27]),{5:[1,79]},{5:[1,80]},{4:l,5:d,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:p,19:T,21:[1,81],22:_,24:m,25:k,26:A,27:$,28:x,29:R,32:25,33:u,35:L,37:I,38:N,41:G,45:P,48:B,51:at,52:nt,53:ot,54:lt,57:K},e(y,[2,32]),e(y,[2,33]),e(y,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:f(function(o,h){if(h.recoverable)this.trace(o);else{var n=new Error(o);throw n.hash=h,n}},"parseError"),parse:f(function(o){var h=this,n=[0],g=[],E=[null],r=[],Z=this.table,c="",U=0,X=0,ut=2,tt=1,Tt=r.slice.call(arguments,1),b=Object.create(this.lexer),j={yy:{}};for(var Et in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Et)&&(j.yy[Et]=this.yy[Et]);b.setInput(o,j.yy),j.yy.lexer=b,j.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var _t=b.yylloc;r.push(_t);var Qt=b.options&&b.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Zt(O){n.length=n.length-2*O,E.length=E.length-O,r.length=r.length-O}f(Zt,"popStack");function Lt(){var O;return O=g.pop()||b.lex()||tt,typeof O!="number"&&(O instanceof Array&&(g=O,O=g.pop()),O=h.symbols_[O]||O),O}f(Lt,"lex");for(var C,H,w,mt,J={},dt,Y,Ot,ft;;){if(H=n[n.length-1],this.defaultActions[H]?w=this.defaultActions[H]:((C===null||typeof C>"u")&&(C=Lt()),w=Z[H]&&Z[H][C]),typeof w>"u"||!w.length||!w[0]){var Dt="";ft=[];for(dt in Z[H])this.terminals_[dt]&&dt>ut&&ft.push("'"+this.terminals_[dt]+"'");b.showPosition?Dt="Parse error on line "+(U+1)+`: `+b.showPosition()+` Expecting `+ft.join(", ")+", got '"+(this.terminals_[C]||C)+"'":Dt="Parse error on line "+(U+1)+": Unexpected "+(C==tt?"end of input":"'"+(this.terminals_[C]||C)+"'"),this.parseError(Dt,{text:b.match,token:this.terminals_[C]||C,line:b.yylineno,loc:_t,expected:ft})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+C);switch(w[0]){case 1:n.push(C),E.push(b.yytext),r.push(b.yylloc),n.push(w[1]),C=null,X=b.yyleng,c=b.yytext,U=b.yylineno,_t=b.yylloc;break;case 2:if(Y=this.productions_[w[1]][1],J.$=E[E.length-Y],J._$={first_line:r[r.length-(Y||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(Y||1)].first_column,last_column:r[r.length-1].last_column},Qt&&(J._$.range=[r[r.length-(Y||1)].range[0],r[r.length-1].range[1]]),mt=this.performAction.apply(J,[c,X,U,j.yy,w[1],E,r].concat(Tt)),typeof mt<"u")return mt;Y&&(n=n.slice(0,-1*Y*2),E=E.slice(0,-1*Y),r=r.slice(0,-1*Y)),n.push(this.productions_[w[1]][0]),E.push(J.$),r.push(J._$),Ot=Z[n[n.length-2]][n[n.length-1]],n.push(Ot);break;case 3:return!0}}return!0},"parse")},qt=(function(){var V={EOF:1,parseError:f(function(h,n){if(this.yy.parser)this.yy.parser.parseError(h,n);else throw new Error(h)},"parseError"),setInput:f(function(o,h){return this.yy=h||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:f(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var h=o.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:f(function(o){var h=o.length,n=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===g.length?this.yylloc.first_column:0)+g[g.length-n.length].length-n[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:f(function(){return this._more=!0,this},"more"),reject:f(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:f(function(o){this.unput(this.match.slice(o))},"less"),pastInput:f(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:f(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:f(function(){var o=this.pastInput(),h=new Array(o.length+1).join("-");return o+this.upcomingInput()+` @@ -218,4 +218,4 @@ g.stateGroup line { fill: ${e.textColor}; } `,"getStyles"),Ue=Pe;export{Me as S,Be as a,Ve as b,Ue as s}; -//# sourceMappingURL=chunk-DI55MBZ5-CBue57Xd.js.map +//# sourceMappingURL=chunk-DI55MBZ5-DM-WLRaf.js.map diff --git a/massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js.map b/massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js.map similarity index 99% rename from massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js.map rename to massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js.map index 6e3078d6e..5f6674597 100644 --- a/massgen/frontend/web/static/assets/chunk-DI55MBZ5-CBue57Xd.js.map +++ b/massgen/frontend/web/static/assets/chunk-DI55MBZ5-DM-WLRaf.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-DI55MBZ5-CBue57Xd.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-DI55MBZ5.mjs"],"sourcesContent":["import {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport {\n generateId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/parser/stateDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 16], $V7 = [1, 17], $V8 = [1, 18], $V9 = [1, 19], $Va = [1, 33], $Vb = [1, 20], $Vc = [1, 21], $Vd = [1, 22], $Ve = [1, 23], $Vf = [1, 24], $Vg = [1, 26], $Vh = [1, 27], $Vi = [1, 28], $Vj = [1, 29], $Vk = [1, 30], $Vl = [1, 31], $Vm = [1, 32], $Vn = [1, 35], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 38], $Vr = [1, 34], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 39, 40, 41, 45, 48, 51, 52, 53, 54, 57], $Vu = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"SPACE\": 4, \"NL\": 5, \"SD\": 6, \"document\": 7, \"line\": 8, \"statement\": 9, \"classDefStatement\": 10, \"styleStatement\": 11, \"cssClassStatement\": 12, \"idStatement\": 13, \"DESCR\": 14, \"-->\": 15, \"HIDE_EMPTY\": 16, \"scale\": 17, \"WIDTH\": 18, \"COMPOSIT_STATE\": 19, \"STRUCT_START\": 20, \"STRUCT_STOP\": 21, \"STATE_DESCR\": 22, \"AS\": 23, \"ID\": 24, \"FORK\": 25, \"JOIN\": 26, \"CHOICE\": 27, \"CONCURRENT\": 28, \"note\": 29, \"notePosition\": 30, \"NOTE_TEXT\": 31, \"direction\": 32, \"acc_title\": 33, \"acc_title_value\": 34, \"acc_descr\": 35, \"acc_descr_value\": 36, \"acc_descr_multiline_value\": 37, \"CLICK\": 38, \"STRING\": 39, \"HREF\": 40, \"classDef\": 41, \"CLASSDEF_ID\": 42, \"CLASSDEF_STYLEOPTS\": 43, \"DEFAULT\": 44, \"style\": 45, \"STYLE_IDS\": 46, \"STYLEDEF_STYLEOPTS\": 47, \"class\": 48, \"CLASSENTITY_IDS\": 49, \"STYLECLASS\": 50, \"direction_tb\": 51, \"direction_bt\": 52, \"direction_rl\": 53, \"direction_lr\": 54, \"eol\": 55, \";\": 56, \"EDGE_STATE\": 57, \"STYLE_SEPARATOR\": 58, \"left_of\": 59, \"right_of\": 60, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACE\", 5: \"NL\", 6: \"SD\", 14: \"DESCR\", 15: \"-->\", 16: \"HIDE_EMPTY\", 17: \"scale\", 18: \"WIDTH\", 19: \"COMPOSIT_STATE\", 20: \"STRUCT_START\", 21: \"STRUCT_STOP\", 22: \"STATE_DESCR\", 23: \"AS\", 24: \"ID\", 25: \"FORK\", 26: \"JOIN\", 27: \"CHOICE\", 28: \"CONCURRENT\", 29: \"note\", 31: \"NOTE_TEXT\", 33: \"acc_title\", 34: \"acc_title_value\", 35: \"acc_descr\", 36: \"acc_descr_value\", 37: \"acc_descr_multiline_value\", 38: \"CLICK\", 39: \"STRING\", 40: \"HREF\", 41: \"classDef\", 42: \"CLASSDEF_ID\", 43: \"CLASSDEF_STYLEOPTS\", 44: \"DEFAULT\", 45: \"style\", 46: \"STYLE_IDS\", 47: \"STYLEDEF_STYLEOPTS\", 48: \"class\", 49: \"CLASSENTITY_IDS\", 50: \"STYLECLASS\", 51: \"direction_tb\", 52: \"direction_bt\", 53: \"direction_rl\", 54: \"direction_lr\", 56: \";\", 57: \"EDGE_STATE\", 58: \"STYLE_SEPARATOR\", 59: \"left_of\", 60: \"right_of\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [9, 5], [9, 5], [10, 3], [10, 3], [11, 3], [12, 3], [32, 1], [32, 1], [32, 1], [32, 1], [55, 1], [55, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setRootDoc($$[$0]);\n return $$[$0];\n break;\n case 4:\n this.$ = [];\n break;\n case 5:\n if ($$[$0] != \"nl\") {\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n }\n break;\n case 6:\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = \"nl\";\n break;\n case 12:\n this.$ = $$[$0];\n break;\n case 13:\n const stateStmt = $$[$0 - 1];\n stateStmt.description = yy.trimColon($$[$0]);\n this.$ = stateStmt;\n break;\n case 14:\n this.$ = { stmt: \"relation\", state1: $$[$0 - 2], state2: $$[$0] };\n break;\n case 15:\n const relDescription = yy.trimColon($$[$0]);\n this.$ = { stmt: \"relation\", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };\n break;\n case 19:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: \"\", doc: $$[$0 - 1] };\n break;\n case 20:\n var id = $$[$0];\n var description = $$[$0 - 2].trim();\n if ($$[$0].match(\":\")) {\n var parts = $$[$0].split(\":\");\n id = parts[0];\n description = [description, parts[1]];\n }\n this.$ = { stmt: \"state\", id, type: \"default\", description };\n break;\n case 21:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: $$[$0 - 5], doc: $$[$0 - 1] };\n break;\n case 22:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"fork\" };\n break;\n case 23:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"join\" };\n break;\n case 24:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"choice\" };\n break;\n case 25:\n this.$ = { stmt: \"state\", id: yy.getDividerId(), type: \"divider\" };\n break;\n case 26:\n this.$ = { stmt: \"state\", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };\n break;\n case 29:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 30:\n case 31:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 32:\n this.$ = {\n stmt: \"click\",\n id: $$[$0 - 3],\n url: $$[$0 - 2],\n tooltip: $$[$0 - 1]\n };\n break;\n case 33:\n this.$ = {\n stmt: \"click\",\n id: $$[$0 - 3],\n url: $$[$0 - 1],\n tooltip: \"\"\n };\n break;\n case 34:\n case 35:\n this.$ = { stmt: \"classDef\", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };\n break;\n case 36:\n this.$ = { stmt: \"style\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 37:\n this.$ = { stmt: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n yy.setDirection(\"TB\");\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 39:\n yy.setDirection(\"BT\");\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 40:\n yy.setDirection(\"RL\");\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 41:\n yy.setDirection(\"LR\");\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n case 44:\n case 45:\n this.$ = { stmt: \"state\", id: $$[$0].trim(), type: \"default\", description: \"\" };\n break;\n case 46:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n case 47:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 5]), { 9: 39, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 7]), o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 40], 15: [1, 41] }), o($Vs, [2, 16]), { 18: [1, 42] }, o($Vs, [2, 18], { 20: [1, 43] }), { 23: [1, 44] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 45, 31: [1, 46], 59: [1, 47], 60: [1, 48] }, o($Vs, [2, 28]), { 34: [1, 49] }, { 36: [1, 50] }, o($Vs, [2, 31]), { 13: 51, 24: $Va, 57: $Vr }, { 42: [1, 52], 44: [1, 53] }, { 46: [1, 54] }, { 49: [1, 55] }, o($Vt, [2, 44], { 58: [1, 56] }), o($Vt, [2, 45], { 58: [1, 57] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vs, [2, 6]), o($Vs, [2, 13]), { 13: 58, 24: $Va, 57: $Vr }, o($Vs, [2, 17]), o($Vu, $V3, { 7: 59 }), { 24: [1, 60] }, { 24: [1, 61] }, { 23: [1, 62] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 29]), o($Vs, [2, 30]), { 39: [1, 63], 40: [1, 64] }, { 43: [1, 65] }, { 43: [1, 66] }, { 47: [1, 67] }, { 50: [1, 68] }, { 24: [1, 69] }, { 24: [1, 70] }, o($Vs, [2, 14], { 14: [1, 71] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 72], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 20], { 20: [1, 73] }), { 31: [1, 74] }, { 24: [1, 75] }, { 39: [1, 76] }, { 39: [1, 77] }, o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vs, [2, 36]), o($Vs, [2, 37]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vu, $V3, { 7: 78 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 5: [1, 79] }, { 5: [1, 80] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 81], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 32]), o($Vs, [2, 33]), o($Vs, [2, 21])],\n defaultActions: { 5: [2, 1], 6: [2, 2], 47: [2, 48], 48: [2, 49] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 38;\n break;\n case 1:\n return 40;\n break;\n case 2:\n return 39;\n break;\n case 3:\n return 44;\n break;\n case 4:\n return 51;\n break;\n case 5:\n return 52;\n break;\n case 6:\n return 53;\n break;\n case 7:\n return 54;\n break;\n case 8:\n break;\n case 9:\n {\n }\n break;\n case 10:\n return 5;\n break;\n case 11:\n break;\n case 12:\n break;\n case 13:\n break;\n case 14:\n break;\n case 15:\n this.pushState(\"SCALE\");\n return 17;\n break;\n case 16:\n return 18;\n break;\n case 17:\n this.popState();\n break;\n case 18:\n this.begin(\"acc_title\");\n return 33;\n break;\n case 19:\n this.popState();\n return \"acc_title_value\";\n break;\n case 20:\n this.begin(\"acc_descr\");\n return 35;\n break;\n case 21:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 22:\n this.begin(\"acc_descr_multiline\");\n break;\n case 23:\n this.popState();\n break;\n case 24:\n return \"acc_descr_multiline_value\";\n break;\n case 25:\n this.pushState(\"CLASSDEF\");\n return 41;\n break;\n case 26:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n break;\n case 27:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 42;\n break;\n case 28:\n this.popState();\n return 43;\n break;\n case 29:\n this.pushState(\"CLASS\");\n return 48;\n break;\n case 30:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 49;\n break;\n case 31:\n this.popState();\n return 50;\n break;\n case 32:\n this.pushState(\"STYLE\");\n return 45;\n break;\n case 33:\n this.popState();\n this.pushState(\"STYLEDEF_STYLES\");\n return 46;\n break;\n case 34:\n this.popState();\n return 47;\n break;\n case 35:\n this.pushState(\"SCALE\");\n return 17;\n break;\n case 36:\n return 18;\n break;\n case 37:\n this.popState();\n break;\n case 38:\n this.pushState(\"STATE\");\n break;\n case 39:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n break;\n case 40:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n break;\n case 41:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n break;\n case 42:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n break;\n case 43:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n break;\n case 44:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n break;\n case 45:\n return 51;\n break;\n case 46:\n return 52;\n break;\n case 47:\n return 53;\n break;\n case 48:\n return 54;\n break;\n case 49:\n this.pushState(\"STATE_STRING\");\n break;\n case 50:\n this.pushState(\"STATE_ID\");\n return \"AS\";\n break;\n case 51:\n this.popState();\n return \"ID\";\n break;\n case 52:\n this.popState();\n break;\n case 53:\n return \"STATE_DESCR\";\n break;\n case 54:\n return 19;\n break;\n case 55:\n this.popState();\n break;\n case 56:\n this.popState();\n this.pushState(\"struct\");\n return 20;\n break;\n case 57:\n break;\n case 58:\n this.popState();\n return 21;\n break;\n case 59:\n break;\n case 60:\n this.begin(\"NOTE\");\n return 29;\n break;\n case 61:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 59;\n break;\n case 62:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 60;\n break;\n case 63:\n this.popState();\n this.pushState(\"FLOATING_NOTE\");\n break;\n case 64:\n this.popState();\n this.pushState(\"FLOATING_NOTE_ID\");\n return \"AS\";\n break;\n case 65:\n break;\n case 66:\n return \"NOTE_TEXT\";\n break;\n case 67:\n this.popState();\n return \"ID\";\n break;\n case 68:\n this.popState();\n this.pushState(\"NOTE_TEXT\");\n return 24;\n break;\n case 69:\n this.popState();\n yy_.yytext = yy_.yytext.substr(2).trim();\n return 31;\n break;\n case 70:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 31;\n break;\n case 71:\n return 6;\n break;\n case 72:\n return 6;\n break;\n case 73:\n return 16;\n break;\n case 74:\n return 57;\n break;\n case 75:\n return 24;\n break;\n case 76:\n yy_.yytext = yy_.yytext.trim();\n return 14;\n break;\n case 77:\n return 15;\n break;\n case 78:\n return 28;\n break;\n case 79:\n return 58;\n break;\n case 80:\n return 5;\n break;\n case 81:\n return \"INVALID\";\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:click\\b)/i, /^(?:href\\b)/i, /^(?:\"[^\"]*\")/i, /^(?:default\\b)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:[\\s]+)/i, /^(?:((?!\\n)\\s)+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:classDef\\s+)/i, /^(?:DEFAULT\\s+)/i, /^(?:\\w+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:class\\s+)/i, /^(?:(\\w+)+((,\\s*\\w+)*))/i, /^(?:[^\\n]*)/i, /^(?:style\\s+)/i, /^(?:[\\w,]+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:state\\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\\[\\[fork\\]\\])/i, /^(?:.*\\[\\[join\\]\\])/i, /^(?:.*\\[\\[choice\\]\\])/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\"])/i, /^(?:\\s*as\\s+)/i, /^(?:[^\\n\\{]*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n\\s\\{]+)/i, /^(?:\\n)/i, /^(?:\\{)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:\\})/i, /^(?:[\\n])/i, /^(?:note\\s+)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:\")/i, /^(?:\\s*as\\s*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n]*)/i, /^(?:\\s*[^:\\n\\s\\-]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:[\\s\\S]*?end note\\b)/i, /^(?:stateDiagram\\s+)/i, /^(?:stateDiagram-v2\\s+)/i, /^(?:hide empty description\\b)/i, /^(?:\\[\\*\\])/i, /^(?:[^:\\n\\s\\-\\{]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"LINE\": { \"rules\": [12, 13], \"inclusive\": false }, \"struct\": { \"rules\": [12, 13, 25, 29, 32, 38, 45, 46, 47, 48, 57, 58, 59, 60, 74, 75, 76, 77, 78], \"inclusive\": false }, \"FLOATING_NOTE_ID\": { \"rules\": [67], \"inclusive\": false }, \"FLOATING_NOTE\": { \"rules\": [64, 65, 66], \"inclusive\": false }, \"NOTE_TEXT\": { \"rules\": [69, 70], \"inclusive\": false }, \"NOTE_ID\": { \"rules\": [68], \"inclusive\": false }, \"NOTE\": { \"rules\": [61, 62, 63], \"inclusive\": false }, \"STYLEDEF_STYLEOPTS\": { \"rules\": [], \"inclusive\": false }, \"STYLEDEF_STYLES\": { \"rules\": [34], \"inclusive\": false }, \"STYLE_IDS\": { \"rules\": [], \"inclusive\": false }, \"STYLE\": { \"rules\": [33], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [31], \"inclusive\": false }, \"CLASS\": { \"rules\": [30], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [28], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [26, 27], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [23, 24], \"inclusive\": false }, \"acc_descr\": { \"rules\": [21], \"inclusive\": false }, \"acc_title\": { \"rules\": [19], \"inclusive\": false }, \"SCALE\": { \"rules\": [16, 17, 36, 37], \"inclusive\": false }, \"ALIAS\": { \"rules\": [], \"inclusive\": false }, \"STATE_ID\": { \"rules\": [51], \"inclusive\": false }, \"STATE_STRING\": { \"rules\": [52, 53], \"inclusive\": false }, \"FORK_STATE\": { \"rules\": [], \"inclusive\": false }, \"STATE\": { \"rules\": [12, 13, 39, 40, 41, 42, 43, 44, 49, 50, 54, 55, 56], \"inclusive\": false }, \"ID\": { \"rules\": [12, 13], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 18, 20, 22, 25, 29, 32, 35, 38, 56, 60, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar stateDiagram_default = parser;\n\n// src/diagrams/state/stateCommon.ts\nvar DEFAULT_DIAGRAM_DIRECTION = \"TB\";\nvar DEFAULT_NESTED_DOC_DIR = \"TB\";\nvar STMT_DIRECTION = \"dir\";\nvar STMT_STATE = \"state\";\nvar STMT_ROOT = \"root\";\nvar STMT_RELATION = \"relation\";\nvar STMT_CLASSDEF = \"classDef\";\nvar STMT_STYLEDEF = \"style\";\nvar STMT_APPLYCLASS = \"applyClass\";\nvar DEFAULT_STATE_TYPE = \"default\";\nvar DIVIDER_TYPE = \"divider\";\nvar G_EDGE_STYLE = \"fill:none\";\nvar G_EDGE_ARROWHEADSTYLE = \"fill: #333\";\nvar G_EDGE_LABELPOS = \"c\";\nvar G_EDGE_LABELTYPE = \"text\";\nvar G_EDGE_THICKNESS = \"normal\";\nvar SHAPE_STATE = \"rect\";\nvar SHAPE_STATE_WITH_DESC = \"rectWithTitle\";\nvar SHAPE_START = \"stateStart\";\nvar SHAPE_END = \"stateEnd\";\nvar SHAPE_DIVIDER = \"divider\";\nvar SHAPE_GROUP = \"roundedWithTitle\";\nvar SHAPE_NOTE = \"note\";\nvar SHAPE_NOTEGROUP = \"noteGroup\";\nvar CSS_DIAGRAM = \"statediagram\";\nvar CSS_STATE = \"state\";\nvar CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;\nvar CSS_EDGE = \"transition\";\nvar CSS_NOTE = \"note\";\nvar CSS_NOTE_EDGE = \"note-edge\";\nvar CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;\nvar CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;\nvar CSS_CLUSTER = \"cluster\";\nvar CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;\nvar CSS_CLUSTER_ALT = \"cluster-alt\";\nvar CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;\nvar PARENT = \"parent\";\nvar NOTE = \"note\";\nvar DOMID_STATE = \"state\";\nvar DOMID_TYPE_SPACER = \"----\";\nvar NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;\nvar PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`;\n\n// src/diagrams/state/stateRenderer-v3-unified.ts\nvar getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n let dir = defaultDir;\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n return dir;\n}, \"getDir\");\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing state diagram (v2)\", id);\n const { securityLevel, state: conf, layout } = getConfig();\n diag.db.extract(diag.db.getRootDocV2());\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = layout;\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"barb\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n try {\n const links = typeof diag.db.getLinks === \"function\" ? diag.db.getLinks() : /* @__PURE__ */ new Map();\n links.forEach((linkInfo, key) => {\n const stateId = typeof key === \"string\" ? key : typeof key?.id === \"string\" ? key.id : \"\";\n if (!stateId) {\n log.warn(\"\\u26A0\\uFE0F Invalid or missing stateId from key:\", JSON.stringify(key));\n return;\n }\n const allNodes = svg.node()?.querySelectorAll(\"g\");\n let matchedElem;\n allNodes?.forEach((g) => {\n const text2 = g.textContent?.trim();\n if (text2 === stateId) {\n matchedElem = g;\n }\n });\n if (!matchedElem) {\n log.warn(\"\\u26A0\\uFE0F Could not find node matching text:\", stateId);\n return;\n }\n const parent = matchedElem.parentNode;\n if (!parent) {\n log.warn(\"\\u26A0\\uFE0F Node has no parent, cannot wrap:\", stateId);\n return;\n }\n const a = document.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n const cleanedUrl = linkInfo.url.replace(/^\"+|\"+$/g, \"\");\n a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", cleanedUrl);\n a.setAttribute(\"target\", \"_blank\");\n if (linkInfo.tooltip) {\n const tooltip = linkInfo.tooltip.replace(/^\"+|\"+$/g, \"\");\n a.setAttribute(\"title\", tooltip);\n }\n parent.replaceChild(a, matchedElem);\n a.appendChild(matchedElem);\n log.info(\"\\u{1F517} Wrapped node in tag for:\", stateId, linkInfo.url);\n });\n } catch (err) {\n log.error(\"\\u274C Error injecting clickable links:\", err);\n }\n utils_default.insertTitle(\n svg,\n \"statediagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, CSS_DIAGRAM, conf?.useMaxWidth ?? true);\n}, \"draw\");\nvar stateRenderer_v3_unified_default = {\n getClasses,\n draw,\n getDir\n};\n\n// src/diagrams/state/dataFetcher.ts\nvar nodeDb = /* @__PURE__ */ new Map();\nvar graphItemCount = 0;\nfunction stateDomId(itemId = \"\", counter = 0, type = \"\", typeSpacer = DOMID_TYPE_SPACER) {\n const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : \"\";\n return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;\n}\n__name(stateDomId, \"stateDomId\");\nvar setupDoc = /* @__PURE__ */ __name((parentParsedItem, doc, diagramStates, nodes, edges, altFlag, look, classes) => {\n log.trace(\"items\", doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case STMT_STATE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case DEFAULT_STATE_TYPE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case STMT_RELATION:\n {\n dataFetcher(\n parentParsedItem,\n item.state1,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n dataFetcher(\n parentParsedItem,\n item.state2,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n const edgeData = {\n id: \"edge\" + graphItemCount,\n start: item.state1.id,\n end: item.state2.id,\n arrowhead: \"normal\",\n arrowTypeEnd: \"arrow_barb\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n label: common_default.sanitizeText(item.description ?? \"\", getConfig()),\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n classes: CSS_EDGE,\n look\n };\n edges.push(edgeData);\n graphItemCount++;\n }\n break;\n }\n });\n}, \"setupDoc\");\nvar getDir2 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n let dir = defaultDir;\n if (parsedItem.doc) {\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n }\n return dir;\n}, \"getDir\");\nfunction insertOrUpdateNode(nodes, nodeData, classes) {\n if (!nodeData.id || nodeData.id === \"\" || nodeData.id === \"\") {\n return;\n }\n if (nodeData.cssClasses) {\n if (!Array.isArray(nodeData.cssCompiledStyles)) {\n nodeData.cssCompiledStyles = [];\n }\n nodeData.cssClasses.split(\" \").forEach((cssClass) => {\n const classDef = classes.get(cssClass);\n if (classDef) {\n nodeData.cssCompiledStyles = [...nodeData.cssCompiledStyles ?? [], ...classDef.styles];\n }\n });\n }\n const existingNodeData = nodes.find((node) => node.id === nodeData.id);\n if (existingNodeData) {\n Object.assign(existingNodeData, nodeData);\n } else {\n nodes.push(nodeData);\n }\n}\n__name(insertOrUpdateNode, \"insertOrUpdateNode\");\nfunction getClassesFromDbInfo(dbInfoItem) {\n return dbInfoItem?.classes?.join(\" \") ?? \"\";\n}\n__name(getClassesFromDbInfo, \"getClassesFromDbInfo\");\nfunction getStylesFromDbInfo(dbInfoItem) {\n return dbInfoItem?.styles ?? [];\n}\n__name(getStylesFromDbInfo, \"getStylesFromDbInfo\");\nvar dataFetcher = /* @__PURE__ */ __name((parent, parsedItem, diagramStates, nodes, edges, altFlag, look, classes) => {\n const itemId = parsedItem.id;\n const dbState = diagramStates.get(itemId);\n const classStr = getClassesFromDbInfo(dbState);\n const style = getStylesFromDbInfo(dbState);\n const config = getConfig();\n log.info(\"dataFetcher parsedItem\", parsedItem, dbState, style);\n if (itemId !== \"root\") {\n let shape = SHAPE_STATE;\n if (parsedItem.start === true) {\n shape = SHAPE_START;\n } else if (parsedItem.start === false) {\n shape = SHAPE_END;\n }\n if (parsedItem.type !== DEFAULT_STATE_TYPE) {\n shape = parsedItem.type;\n }\n if (!nodeDb.get(itemId)) {\n nodeDb.set(itemId, {\n id: itemId,\n shape,\n description: common_default.sanitizeText(itemId, config),\n cssClasses: `${classStr} ${CSS_DIAGRAM_STATE}`,\n cssStyles: style\n });\n }\n const newNode = nodeDb.get(itemId);\n if (parsedItem.description) {\n if (Array.isArray(newNode.description)) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n newNode.description.push(parsedItem.description);\n } else {\n if (newNode.description?.length && newNode.description.length > 0) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n if (newNode.description === itemId) {\n newNode.description = [parsedItem.description];\n } else {\n newNode.description = [newNode.description, parsedItem.description];\n }\n } else {\n newNode.shape = SHAPE_STATE;\n newNode.description = parsedItem.description;\n }\n }\n newNode.description = common_default.sanitizeTextOrArray(newNode.description, config);\n }\n if (newNode.description?.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {\n if (newNode.type === \"group\") {\n newNode.shape = SHAPE_GROUP;\n } else {\n newNode.shape = SHAPE_STATE;\n }\n }\n if (!newNode.type && parsedItem.doc) {\n log.info(\"Setting cluster for XCX\", itemId, getDir2(parsedItem));\n newNode.type = \"group\";\n newNode.isGroup = true;\n newNode.dir = getDir2(parsedItem);\n newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP;\n newNode.cssClasses = `${newNode.cssClasses} ${CSS_DIAGRAM_CLUSTER} ${altFlag ? CSS_DIAGRAM_CLUSTER_ALT : \"\"}`;\n }\n const nodeData = {\n labelStyle: \"\",\n shape: newNode.shape,\n label: newNode.description,\n cssClasses: newNode.cssClasses,\n cssCompiledStyles: [],\n cssStyles: newNode.cssStyles,\n id: itemId,\n dir: newNode.dir,\n domId: stateDomId(itemId, graphItemCount),\n type: newNode.type,\n isGroup: newNode.type === \"group\",\n padding: 8,\n rx: 10,\n ry: 10,\n look\n };\n if (nodeData.shape === SHAPE_DIVIDER) {\n nodeData.label = \"\";\n }\n if (parent && parent.id !== \"root\") {\n log.trace(\"Setting node \", itemId, \" to be child of its parent \", parent.id);\n nodeData.parentId = parent.id;\n }\n nodeData.centerLabel = true;\n if (parsedItem.note) {\n const noteData = {\n labelStyle: \"\",\n shape: SHAPE_NOTE,\n label: parsedItem.note.text,\n cssClasses: CSS_DIAGRAM_NOTE,\n // useHtmlLabels: false,\n cssStyles: [],\n cssCompiledStyles: [],\n id: itemId + NOTE_ID + \"-\" + graphItemCount,\n domId: stateDomId(itemId, graphItemCount, NOTE),\n type: newNode.type,\n isGroup: newNode.type === \"group\",\n padding: config.flowchart?.padding,\n look,\n position: parsedItem.note.position\n };\n const parentNodeId = itemId + PARENT_ID;\n const groupData = {\n labelStyle: \"\",\n shape: SHAPE_NOTEGROUP,\n label: parsedItem.note.text,\n cssClasses: newNode.cssClasses,\n cssStyles: [],\n id: itemId + PARENT_ID,\n domId: stateDomId(itemId, graphItemCount, PARENT),\n type: \"group\",\n isGroup: true,\n padding: 16,\n //getConfig().flowchart.padding\n look,\n position: parsedItem.note.position\n };\n graphItemCount++;\n groupData.id = parentNodeId;\n noteData.parentId = parentNodeId;\n insertOrUpdateNode(nodes, groupData, classes);\n insertOrUpdateNode(nodes, noteData, classes);\n insertOrUpdateNode(nodes, nodeData, classes);\n let from = itemId;\n let to = noteData.id;\n if (parsedItem.note.position === \"left of\") {\n from = noteData.id;\n to = itemId;\n }\n edges.push({\n id: from + \"-\" + to,\n start: from,\n end: to,\n arrowhead: \"none\",\n arrowTypeEnd: \"\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n classes: CSS_EDGE_NOTE_EDGE,\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n look\n });\n } else {\n insertOrUpdateNode(nodes, nodeData, classes);\n }\n }\n if (parsedItem.doc) {\n log.trace(\"Adding nodes children \");\n setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes, edges, !altFlag, look, classes);\n }\n}, \"dataFetcher\");\nvar reset = /* @__PURE__ */ __name(() => {\n nodeDb.clear();\n graphItemCount = 0;\n}, \"reset\");\n\n// src/diagrams/state/stateDb.ts\nvar CONSTANTS = {\n START_NODE: \"[*]\",\n START_TYPE: \"start\",\n END_NODE: \"[*]\",\n END_TYPE: \"end\",\n COLOR_KEYWORD: \"color\",\n FILL_KEYWORD: \"fill\",\n BG_FILL: \"bgFill\",\n STYLECLASS_SEP: \",\"\n};\nvar newClassesList = /* @__PURE__ */ __name(() => /* @__PURE__ */ new Map(), \"newClassesList\");\nvar newDoc = /* @__PURE__ */ __name(() => ({\n relations: [],\n states: /* @__PURE__ */ new Map(),\n documents: {}\n}), \"newDoc\");\nvar clone = /* @__PURE__ */ __name((o) => JSON.parse(JSON.stringify(o)), \"clone\");\nvar StateDB = class {\n constructor(version) {\n this.version = version;\n this.nodes = [];\n this.edges = [];\n this.rootDoc = [];\n this.classes = newClassesList();\n this.documents = { root: newDoc() };\n this.currentDocument = this.documents.root;\n this.startEndCount = 0;\n this.dividerCnt = 0;\n this.links = /* @__PURE__ */ new Map();\n this.getAccTitle = getAccTitle;\n this.setAccTitle = setAccTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.clear();\n this.setRootDoc = this.setRootDoc.bind(this);\n this.getDividerId = this.getDividerId.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.trimColon = this.trimColon.bind(this);\n }\n static {\n __name(this, \"StateDB\");\n }\n static {\n this.relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n };\n }\n /**\n * Convert all of the statements (stmts) that were parsed into states and relationships.\n * This is done because a state diagram may have nested sections,\n * where each section is a 'document' and has its own set of statements.\n * Ex: the section within a fork has its own statements, and incoming and outgoing statements\n * refer to the fork as a whole (document).\n * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement.\n * This will push the statement into the list of statements for the current document.\n */\n extract(statements) {\n this.clear(true);\n for (const item of Array.isArray(statements) ? statements : statements.doc) {\n switch (item.stmt) {\n case STMT_STATE:\n this.addState(item.id.trim(), item.type, item.doc, item.description, item.note);\n break;\n case STMT_RELATION:\n this.addRelation(item.state1, item.state2, item.description);\n break;\n case STMT_CLASSDEF:\n this.addStyleClass(item.id.trim(), item.classes);\n break;\n case STMT_STYLEDEF:\n this.handleStyleDef(item);\n break;\n case STMT_APPLYCLASS:\n this.setCssClass(item.id.trim(), item.styleClass);\n break;\n case \"click\":\n this.addLink(item.id, item.url, item.tooltip);\n break;\n }\n }\n const diagramStates = this.getStates();\n const config = getConfig();\n reset();\n dataFetcher(\n void 0,\n this.getRootDocV2(),\n diagramStates,\n this.nodes,\n this.edges,\n true,\n config.look,\n this.classes\n );\n for (const node of this.nodes) {\n if (!Array.isArray(node.label)) {\n continue;\n }\n node.description = node.label.slice(1);\n if (node.isGroup && node.description.length > 0) {\n throw new Error(\n `Group nodes can only have label. Remove the additional description for node [${node.id}]`\n );\n }\n node.label = node.label[0];\n }\n }\n handleStyleDef(item) {\n const ids = item.id.trim().split(\",\");\n const styles = item.styleClass.split(\",\");\n for (const id of ids) {\n let state = this.getState(id);\n if (!state) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n state = this.getState(trimmedId);\n }\n if (state) {\n state.styles = styles.map((s) => s.replace(/;/g, \"\")?.trim());\n }\n }\n }\n setRootDoc(o) {\n log.info(\"Setting root doc\", o);\n this.rootDoc = o;\n if (this.version === 1) {\n this.extract(o);\n } else {\n this.extract(this.getRootDocV2());\n }\n }\n docTranslator(parent, node, first) {\n if (node.stmt === STMT_RELATION) {\n this.docTranslator(parent, node.state1, true);\n this.docTranslator(parent, node.state2, false);\n return;\n }\n if (node.stmt === STMT_STATE) {\n if (node.id === CONSTANTS.START_NODE) {\n node.id = parent.id + (first ? \"_start\" : \"_end\");\n node.start = first;\n } else {\n node.id = node.id.trim();\n }\n }\n if (node.stmt !== STMT_ROOT && node.stmt !== STMT_STATE || !node.doc) {\n return;\n }\n const doc = [];\n let currentDoc = [];\n for (const stmt of node.doc) {\n if (stmt.type === DIVIDER_TYPE) {\n const newNode = clone(stmt);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(stmt);\n }\n }\n if (doc.length > 0 && currentDoc.length > 0) {\n const newNode = {\n stmt: STMT_STATE,\n id: generateId(),\n type: \"divider\",\n doc: clone(currentDoc)\n };\n doc.push(clone(newNode));\n node.doc = doc;\n }\n node.doc.forEach((docNode) => this.docTranslator(node, docNode, true));\n }\n getRootDocV2() {\n this.docTranslator(\n { id: STMT_ROOT, stmt: STMT_ROOT },\n { id: STMT_ROOT, stmt: STMT_ROOT, doc: this.rootDoc },\n true\n );\n return { id: STMT_ROOT, doc: this.rootDoc };\n }\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param descr - description for the state. Can be a string or a list or strings\n * @param classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class.\n * @param styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style.\n * @param textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style.\n */\n addState(id, type = DEFAULT_STATE_TYPE, doc = void 0, descr = void 0, note = void 0, classes = void 0, styles = void 0, textStyles = void 0) {\n const trimmedId = id?.trim();\n if (!this.currentDocument.states.has(trimmedId)) {\n log.info(\"Adding state \", trimmedId, descr);\n this.currentDocument.states.set(trimmedId, {\n stmt: STMT_STATE,\n id: trimmedId,\n descriptions: [],\n type,\n doc,\n note,\n classes: [],\n styles: [],\n textStyles: []\n });\n } else {\n const state = this.currentDocument.states.get(trimmedId);\n if (!state) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n if (!state.doc) {\n state.doc = doc;\n }\n if (!state.type) {\n state.type = type;\n }\n }\n if (descr) {\n log.info(\"Setting state description\", trimmedId, descr);\n const descriptions = Array.isArray(descr) ? descr : [descr];\n descriptions.forEach((des) => this.addDescription(trimmedId, des.trim()));\n }\n if (note) {\n const doc2 = this.currentDocument.states.get(trimmedId);\n if (!doc2) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n doc2.note = note;\n doc2.note.text = common_default.sanitizeText(doc2.note.text, getConfig());\n }\n if (classes) {\n log.info(\"Setting state classes\", trimmedId, classes);\n const classesList = Array.isArray(classes) ? classes : [classes];\n classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim()));\n }\n if (styles) {\n log.info(\"Setting state styles\", trimmedId, styles);\n const stylesList = Array.isArray(styles) ? styles : [styles];\n stylesList.forEach((style) => this.setStyle(trimmedId, style.trim()));\n }\n if (textStyles) {\n log.info(\"Setting state styles\", trimmedId, styles);\n const textStylesList = Array.isArray(textStyles) ? textStyles : [textStyles];\n textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim()));\n }\n }\n clear(saveCommon) {\n this.nodes = [];\n this.edges = [];\n this.documents = { root: newDoc() };\n this.currentDocument = this.documents.root;\n this.startEndCount = 0;\n this.classes = newClassesList();\n if (!saveCommon) {\n this.links = /* @__PURE__ */ new Map();\n clear();\n }\n }\n getState(id) {\n return this.currentDocument.states.get(id);\n }\n getStates() {\n return this.currentDocument.states;\n }\n logDocuments() {\n log.info(\"Documents = \", this.documents);\n }\n getRelations() {\n return this.currentDocument.relations;\n }\n /**\n * Adds a clickable link to a state.\n */\n addLink(stateId, url, tooltip) {\n this.links.set(stateId, { url, tooltip });\n log.warn(\"Adding link\", stateId, url, tooltip);\n }\n /**\n * Get all registered links.\n */\n getLinks() {\n return this.links;\n }\n /**\n * If the id is a start node ( [*] ), then return a new id constructed from\n * the start node name and the current start node count.\n * else return the given id\n */\n startIdIfNeeded(id = \"\") {\n if (id === CONSTANTS.START_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.START_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n /**\n * If the id is a start node ( [*] ), then return the start type ('start')\n * else return the given type\n */\n startTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.START_NODE ? CONSTANTS.START_TYPE : type;\n }\n /**\n * If the id is an end node ( [*] ), then return a new id constructed from\n * the end node name and the current start_end node count.\n * else return the given id\n */\n endIdIfNeeded(id = \"\") {\n if (id === CONSTANTS.END_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.END_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n /**\n * If the id is an end node ( [*] ), then return the end type\n * else return the given type\n *\n */\n endTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.END_NODE ? CONSTANTS.END_TYPE : type;\n }\n addRelationObjs(item1, item2, relationTitle = \"\") {\n const id1 = this.startIdIfNeeded(item1.id.trim());\n const type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type);\n const id2 = this.startIdIfNeeded(item2.id.trim());\n const type2 = this.startTypeIfNeeded(item2.id.trim(), item2.type);\n this.addState(\n id1,\n type1,\n item1.doc,\n item1.description,\n item1.note,\n item1.classes,\n item1.styles,\n item1.textStyles\n );\n this.addState(\n id2,\n type2,\n item2.doc,\n item2.description,\n item2.note,\n item2.classes,\n item2.styles,\n item2.textStyles\n );\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: common_default.sanitizeText(relationTitle, getConfig())\n });\n }\n /**\n * Add a relation between two items. The items may be full objects or just the string id of a state.\n */\n addRelation(item1, item2, title) {\n if (typeof item1 === \"object\" && typeof item2 === \"object\") {\n this.addRelationObjs(item1, item2, title);\n } else if (typeof item1 === \"string\" && typeof item2 === \"string\") {\n const id1 = this.startIdIfNeeded(item1.trim());\n const type1 = this.startTypeIfNeeded(item1);\n const id2 = this.endIdIfNeeded(item2.trim());\n const type2 = this.endTypeIfNeeded(item2);\n this.addState(id1, type1);\n this.addState(id2, type2);\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: title ? common_default.sanitizeText(title, getConfig()) : void 0\n });\n }\n }\n addDescription(id, descr) {\n const theState = this.currentDocument.states.get(id);\n const _descr = descr.startsWith(\":\") ? descr.replace(\":\", \"\").trim() : descr;\n theState?.descriptions?.push(common_default.sanitizeText(_descr, getConfig()));\n }\n cleanupLabel(label) {\n return label.startsWith(\":\") ? label.slice(2).trim() : label.trim();\n }\n getDividerId() {\n this.dividerCnt++;\n return `divider-id-${this.dividerCnt}`;\n }\n /**\n * Called when the parser comes across a (style) class definition\n * @example classDef my-style fill:#f96;\n *\n * @param id - the id of this (style) class\n * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)\n */\n addStyleClass(id, styleAttributes = \"\") {\n if (!this.classes.has(id)) {\n this.classes.set(id, { id, styles: [], textStyles: [] });\n }\n const foundClass = this.classes.get(id);\n if (styleAttributes && foundClass) {\n styleAttributes.split(CONSTANTS.STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (RegExp(CONSTANTS.COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(CONSTANTS.FILL_KEYWORD, CONSTANTS.BG_FILL);\n const newStyle2 = newStyle1.replace(CONSTANTS.COLOR_KEYWORD, CONSTANTS.FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n }\n getClasses() {\n return this.classes;\n }\n /**\n * Add a (style) class or css class to a state with the given id.\n * If the state isn't already in the list of known states, add it.\n * Might be called by parser when a style class or CSS class should be applied to a state\n *\n * @param itemIds - The id or a list of ids of the item(s) to apply the css class to\n * @param cssClassName - CSS class name\n */\n setCssClass(itemIds, cssClassName) {\n itemIds.split(\",\").forEach((id) => {\n let foundState = this.getState(id);\n if (!foundState) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n foundState = this.getState(trimmedId);\n }\n foundState?.classes?.push(cssClassName);\n });\n }\n /**\n * Add a style to a state with the given id.\n * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px\n * where 'style' is the keyword\n * stateId is the id of a state\n * the rest of the string is the styleText (all of the attributes to be applied to the state)\n *\n * @param itemId - The id of item to apply the style to\n * @param styleText - the text of the attributes for the style\n */\n setStyle(itemId, styleText) {\n this.getState(itemId)?.styles?.push(styleText);\n }\n /**\n * Add a text style to a state with the given id\n *\n * @param itemId - The id of item to apply the css class to\n * @param cssClassName - CSS class name\n */\n setTextStyle(itemId, cssClassName) {\n this.getState(itemId)?.textStyles?.push(cssClassName);\n }\n /**\n * Finds the direction statement in the root document.\n * @returns the direction statement if present\n */\n getDirectionStatement() {\n return this.rootDoc.find((doc) => doc.stmt === STMT_DIRECTION);\n }\n getDirection() {\n return this.getDirectionStatement()?.value ?? DEFAULT_DIAGRAM_DIRECTION;\n }\n setDirection(dir) {\n const doc = this.getDirectionStatement();\n if (doc) {\n doc.value = dir;\n } else {\n this.rootDoc.unshift({ stmt: STMT_DIRECTION, value: dir });\n }\n }\n trimColon(str) {\n return str.startsWith(\":\") ? str.slice(1).trim() : str.trim();\n }\n getData() {\n const config = getConfig();\n return {\n nodes: this.nodes,\n edges: this.edges,\n other: {},\n config,\n direction: getDir(this.getRootDocV2())\n };\n }\n getConfig() {\n return getConfig().state;\n }\n};\n\n// src/diagrams/state/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\ndefs #statediagram-barbEnd {\n fill: ${options.transitionColor};\n stroke: ${options.transitionColor};\n }\ng.stateGroup text {\n fill: ${options.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${options.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${options.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${options.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n\n text {\n fill: ${options.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${options.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n}\n.edgeLabel .label text {\n fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${options.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${options.innerEndBackground};\n stroke: ${options.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${options.compositeBackground || options.background};\n // stroke: ${options.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${options.stateBkg || options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${options.compositeTitleBackground};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${options.stateLabelColor};\n // line-height: 1;\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\nexport {\n stateDiagram_default,\n stateRenderer_v3_unified_default,\n StateDB,\n styles_default\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","stateStmt","relDescription","id","description","parts","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","stateDiagram_default","DEFAULT_DIAGRAM_DIRECTION","DEFAULT_NESTED_DOC_DIR","STMT_DIRECTION","STMT_STATE","STMT_ROOT","STMT_RELATION","STMT_CLASSDEF","STMT_STYLEDEF","STMT_APPLYCLASS","DEFAULT_STATE_TYPE","DIVIDER_TYPE","G_EDGE_STYLE","G_EDGE_ARROWHEADSTYLE","G_EDGE_LABELPOS","G_EDGE_LABELTYPE","G_EDGE_THICKNESS","SHAPE_STATE","SHAPE_STATE_WITH_DESC","SHAPE_START","SHAPE_END","SHAPE_DIVIDER","SHAPE_GROUP","SHAPE_NOTE","SHAPE_NOTEGROUP","CSS_DIAGRAM","CSS_STATE","CSS_DIAGRAM_STATE","CSS_EDGE","CSS_NOTE","CSS_NOTE_EDGE","CSS_EDGE_NOTE_EDGE","CSS_DIAGRAM_NOTE","CSS_CLUSTER","CSS_DIAGRAM_CLUSTER","CSS_CLUSTER_ALT","CSS_DIAGRAM_CLUSTER_ALT","PARENT","NOTE","DOMID_STATE","DOMID_TYPE_SPACER","NOTE_ID","PARENT_ID","getDir","parsedItem","defaultDir","dir","parsedItemDoc","getClasses","text","diagramObj","draw","_version","diag","log","securityLevel","conf","layout","getConfig","data4Layout","svg","getDiagramElement","render","padding","linkInfo","key","stateId","allNodes","_a","matchedElem","g","parent","a","cleanedUrl","tooltip","err","utils_default","setupViewPortForSVG","stateRenderer_v3_unified_default","nodeDb","graphItemCount","stateDomId","itemId","counter","type","typeSpacer","typeStr","setupDoc","parentParsedItem","doc","diagramStates","nodes","edges","altFlag","look","classes","item","dataFetcher","edgeData","common_default","getDir2","insertOrUpdateNode","nodeData","cssClass","classDef","existingNodeData","node","getClassesFromDbInfo","dbInfoItem","getStylesFromDbInfo","dbState","classStr","style","config","shape","newNode","_b","noteData","_c","parentNodeId","groupData","from","to","reset","CONSTANTS","newClassesList","newDoc","clone","StateDB","version","getAccTitle","setAccTitle","getAccDescription","setAccDescription","setDiagramTitle","getDiagramTitle","statements","ids","styles","trimmedId","s","first","currentDoc","stmt","generateId","docNode","descr","note","textStyles","des","doc2","textStyle","saveCommon","clear","url","item1","item2","relationTitle","id1","type1","id2","type2","title","theState","_descr","label","styleAttributes","foundClass","attrib","fixedAttrib","newStyle2","itemIds","cssClassName","foundState","styleText","getStyles","options","styles_default"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-DI55MBZ5-DM-WLRaf.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-DI55MBZ5.mjs"],"sourcesContent":["import {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport {\n generateId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/parser/stateDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 16], $V7 = [1, 17], $V8 = [1, 18], $V9 = [1, 19], $Va = [1, 33], $Vb = [1, 20], $Vc = [1, 21], $Vd = [1, 22], $Ve = [1, 23], $Vf = [1, 24], $Vg = [1, 26], $Vh = [1, 27], $Vi = [1, 28], $Vj = [1, 29], $Vk = [1, 30], $Vl = [1, 31], $Vm = [1, 32], $Vn = [1, 35], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 38], $Vr = [1, 34], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 39, 40, 41, 45, 48, 51, 52, 53, 54, 57], $Vu = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"SPACE\": 4, \"NL\": 5, \"SD\": 6, \"document\": 7, \"line\": 8, \"statement\": 9, \"classDefStatement\": 10, \"styleStatement\": 11, \"cssClassStatement\": 12, \"idStatement\": 13, \"DESCR\": 14, \"-->\": 15, \"HIDE_EMPTY\": 16, \"scale\": 17, \"WIDTH\": 18, \"COMPOSIT_STATE\": 19, \"STRUCT_START\": 20, \"STRUCT_STOP\": 21, \"STATE_DESCR\": 22, \"AS\": 23, \"ID\": 24, \"FORK\": 25, \"JOIN\": 26, \"CHOICE\": 27, \"CONCURRENT\": 28, \"note\": 29, \"notePosition\": 30, \"NOTE_TEXT\": 31, \"direction\": 32, \"acc_title\": 33, \"acc_title_value\": 34, \"acc_descr\": 35, \"acc_descr_value\": 36, \"acc_descr_multiline_value\": 37, \"CLICK\": 38, \"STRING\": 39, \"HREF\": 40, \"classDef\": 41, \"CLASSDEF_ID\": 42, \"CLASSDEF_STYLEOPTS\": 43, \"DEFAULT\": 44, \"style\": 45, \"STYLE_IDS\": 46, \"STYLEDEF_STYLEOPTS\": 47, \"class\": 48, \"CLASSENTITY_IDS\": 49, \"STYLECLASS\": 50, \"direction_tb\": 51, \"direction_bt\": 52, \"direction_rl\": 53, \"direction_lr\": 54, \"eol\": 55, \";\": 56, \"EDGE_STATE\": 57, \"STYLE_SEPARATOR\": 58, \"left_of\": 59, \"right_of\": 60, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACE\", 5: \"NL\", 6: \"SD\", 14: \"DESCR\", 15: \"-->\", 16: \"HIDE_EMPTY\", 17: \"scale\", 18: \"WIDTH\", 19: \"COMPOSIT_STATE\", 20: \"STRUCT_START\", 21: \"STRUCT_STOP\", 22: \"STATE_DESCR\", 23: \"AS\", 24: \"ID\", 25: \"FORK\", 26: \"JOIN\", 27: \"CHOICE\", 28: \"CONCURRENT\", 29: \"note\", 31: \"NOTE_TEXT\", 33: \"acc_title\", 34: \"acc_title_value\", 35: \"acc_descr\", 36: \"acc_descr_value\", 37: \"acc_descr_multiline_value\", 38: \"CLICK\", 39: \"STRING\", 40: \"HREF\", 41: \"classDef\", 42: \"CLASSDEF_ID\", 43: \"CLASSDEF_STYLEOPTS\", 44: \"DEFAULT\", 45: \"style\", 46: \"STYLE_IDS\", 47: \"STYLEDEF_STYLEOPTS\", 48: \"class\", 49: \"CLASSENTITY_IDS\", 50: \"STYLECLASS\", 51: \"direction_tb\", 52: \"direction_bt\", 53: \"direction_rl\", 54: \"direction_lr\", 56: \";\", 57: \"EDGE_STATE\", 58: \"STYLE_SEPARATOR\", 59: \"left_of\", 60: \"right_of\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [9, 5], [9, 5], [10, 3], [10, 3], [11, 3], [12, 3], [32, 1], [32, 1], [32, 1], [32, 1], [55, 1], [55, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setRootDoc($$[$0]);\n return $$[$0];\n break;\n case 4:\n this.$ = [];\n break;\n case 5:\n if ($$[$0] != \"nl\") {\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n }\n break;\n case 6:\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = \"nl\";\n break;\n case 12:\n this.$ = $$[$0];\n break;\n case 13:\n const stateStmt = $$[$0 - 1];\n stateStmt.description = yy.trimColon($$[$0]);\n this.$ = stateStmt;\n break;\n case 14:\n this.$ = { stmt: \"relation\", state1: $$[$0 - 2], state2: $$[$0] };\n break;\n case 15:\n const relDescription = yy.trimColon($$[$0]);\n this.$ = { stmt: \"relation\", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };\n break;\n case 19:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: \"\", doc: $$[$0 - 1] };\n break;\n case 20:\n var id = $$[$0];\n var description = $$[$0 - 2].trim();\n if ($$[$0].match(\":\")) {\n var parts = $$[$0].split(\":\");\n id = parts[0];\n description = [description, parts[1]];\n }\n this.$ = { stmt: \"state\", id, type: \"default\", description };\n break;\n case 21:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: $$[$0 - 5], doc: $$[$0 - 1] };\n break;\n case 22:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"fork\" };\n break;\n case 23:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"join\" };\n break;\n case 24:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"choice\" };\n break;\n case 25:\n this.$ = { stmt: \"state\", id: yy.getDividerId(), type: \"divider\" };\n break;\n case 26:\n this.$ = { stmt: \"state\", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };\n break;\n case 29:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 30:\n case 31:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 32:\n this.$ = {\n stmt: \"click\",\n id: $$[$0 - 3],\n url: $$[$0 - 2],\n tooltip: $$[$0 - 1]\n };\n break;\n case 33:\n this.$ = {\n stmt: \"click\",\n id: $$[$0 - 3],\n url: $$[$0 - 1],\n tooltip: \"\"\n };\n break;\n case 34:\n case 35:\n this.$ = { stmt: \"classDef\", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };\n break;\n case 36:\n this.$ = { stmt: \"style\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 37:\n this.$ = { stmt: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n yy.setDirection(\"TB\");\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 39:\n yy.setDirection(\"BT\");\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 40:\n yy.setDirection(\"RL\");\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 41:\n yy.setDirection(\"LR\");\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n case 44:\n case 45:\n this.$ = { stmt: \"state\", id: $$[$0].trim(), type: \"default\", description: \"\" };\n break;\n case 46:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n case 47:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 5]), { 9: 39, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 7]), o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 40], 15: [1, 41] }), o($Vs, [2, 16]), { 18: [1, 42] }, o($Vs, [2, 18], { 20: [1, 43] }), { 23: [1, 44] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 45, 31: [1, 46], 59: [1, 47], 60: [1, 48] }, o($Vs, [2, 28]), { 34: [1, 49] }, { 36: [1, 50] }, o($Vs, [2, 31]), { 13: 51, 24: $Va, 57: $Vr }, { 42: [1, 52], 44: [1, 53] }, { 46: [1, 54] }, { 49: [1, 55] }, o($Vt, [2, 44], { 58: [1, 56] }), o($Vt, [2, 45], { 58: [1, 57] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vs, [2, 6]), o($Vs, [2, 13]), { 13: 58, 24: $Va, 57: $Vr }, o($Vs, [2, 17]), o($Vu, $V3, { 7: 59 }), { 24: [1, 60] }, { 24: [1, 61] }, { 23: [1, 62] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 29]), o($Vs, [2, 30]), { 39: [1, 63], 40: [1, 64] }, { 43: [1, 65] }, { 43: [1, 66] }, { 47: [1, 67] }, { 50: [1, 68] }, { 24: [1, 69] }, { 24: [1, 70] }, o($Vs, [2, 14], { 14: [1, 71] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 72], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 20], { 20: [1, 73] }), { 31: [1, 74] }, { 24: [1, 75] }, { 39: [1, 76] }, { 39: [1, 77] }, o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vs, [2, 36]), o($Vs, [2, 37]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vu, $V3, { 7: 78 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 5: [1, 79] }, { 5: [1, 80] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 81], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o($Vs, [2, 32]), o($Vs, [2, 33]), o($Vs, [2, 21])],\n defaultActions: { 5: [2, 1], 6: [2, 2], 47: [2, 48], 48: [2, 49] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n return 38;\n break;\n case 1:\n return 40;\n break;\n case 2:\n return 39;\n break;\n case 3:\n return 44;\n break;\n case 4:\n return 51;\n break;\n case 5:\n return 52;\n break;\n case 6:\n return 53;\n break;\n case 7:\n return 54;\n break;\n case 8:\n break;\n case 9:\n {\n }\n break;\n case 10:\n return 5;\n break;\n case 11:\n break;\n case 12:\n break;\n case 13:\n break;\n case 14:\n break;\n case 15:\n this.pushState(\"SCALE\");\n return 17;\n break;\n case 16:\n return 18;\n break;\n case 17:\n this.popState();\n break;\n case 18:\n this.begin(\"acc_title\");\n return 33;\n break;\n case 19:\n this.popState();\n return \"acc_title_value\";\n break;\n case 20:\n this.begin(\"acc_descr\");\n return 35;\n break;\n case 21:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 22:\n this.begin(\"acc_descr_multiline\");\n break;\n case 23:\n this.popState();\n break;\n case 24:\n return \"acc_descr_multiline_value\";\n break;\n case 25:\n this.pushState(\"CLASSDEF\");\n return 41;\n break;\n case 26:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n break;\n case 27:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 42;\n break;\n case 28:\n this.popState();\n return 43;\n break;\n case 29:\n this.pushState(\"CLASS\");\n return 48;\n break;\n case 30:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 49;\n break;\n case 31:\n this.popState();\n return 50;\n break;\n case 32:\n this.pushState(\"STYLE\");\n return 45;\n break;\n case 33:\n this.popState();\n this.pushState(\"STYLEDEF_STYLES\");\n return 46;\n break;\n case 34:\n this.popState();\n return 47;\n break;\n case 35:\n this.pushState(\"SCALE\");\n return 17;\n break;\n case 36:\n return 18;\n break;\n case 37:\n this.popState();\n break;\n case 38:\n this.pushState(\"STATE\");\n break;\n case 39:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n break;\n case 40:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n break;\n case 41:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n break;\n case 42:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n break;\n case 43:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n break;\n case 44:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n break;\n case 45:\n return 51;\n break;\n case 46:\n return 52;\n break;\n case 47:\n return 53;\n break;\n case 48:\n return 54;\n break;\n case 49:\n this.pushState(\"STATE_STRING\");\n break;\n case 50:\n this.pushState(\"STATE_ID\");\n return \"AS\";\n break;\n case 51:\n this.popState();\n return \"ID\";\n break;\n case 52:\n this.popState();\n break;\n case 53:\n return \"STATE_DESCR\";\n break;\n case 54:\n return 19;\n break;\n case 55:\n this.popState();\n break;\n case 56:\n this.popState();\n this.pushState(\"struct\");\n return 20;\n break;\n case 57:\n break;\n case 58:\n this.popState();\n return 21;\n break;\n case 59:\n break;\n case 60:\n this.begin(\"NOTE\");\n return 29;\n break;\n case 61:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 59;\n break;\n case 62:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 60;\n break;\n case 63:\n this.popState();\n this.pushState(\"FLOATING_NOTE\");\n break;\n case 64:\n this.popState();\n this.pushState(\"FLOATING_NOTE_ID\");\n return \"AS\";\n break;\n case 65:\n break;\n case 66:\n return \"NOTE_TEXT\";\n break;\n case 67:\n this.popState();\n return \"ID\";\n break;\n case 68:\n this.popState();\n this.pushState(\"NOTE_TEXT\");\n return 24;\n break;\n case 69:\n this.popState();\n yy_.yytext = yy_.yytext.substr(2).trim();\n return 31;\n break;\n case 70:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 31;\n break;\n case 71:\n return 6;\n break;\n case 72:\n return 6;\n break;\n case 73:\n return 16;\n break;\n case 74:\n return 57;\n break;\n case 75:\n return 24;\n break;\n case 76:\n yy_.yytext = yy_.yytext.trim();\n return 14;\n break;\n case 77:\n return 15;\n break;\n case 78:\n return 28;\n break;\n case 79:\n return 58;\n break;\n case 80:\n return 5;\n break;\n case 81:\n return \"INVALID\";\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:click\\b)/i, /^(?:href\\b)/i, /^(?:\"[^\"]*\")/i, /^(?:default\\b)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:[\\s]+)/i, /^(?:((?!\\n)\\s)+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:classDef\\s+)/i, /^(?:DEFAULT\\s+)/i, /^(?:\\w+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:class\\s+)/i, /^(?:(\\w+)+((,\\s*\\w+)*))/i, /^(?:[^\\n]*)/i, /^(?:style\\s+)/i, /^(?:[\\w,]+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:state\\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\\[\\[fork\\]\\])/i, /^(?:.*\\[\\[join\\]\\])/i, /^(?:.*\\[\\[choice\\]\\])/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\"])/i, /^(?:\\s*as\\s+)/i, /^(?:[^\\n\\{]*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n\\s\\{]+)/i, /^(?:\\n)/i, /^(?:\\{)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:\\})/i, /^(?:[\\n])/i, /^(?:note\\s+)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:\")/i, /^(?:\\s*as\\s*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n]*)/i, /^(?:\\s*[^:\\n\\s\\-]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:[\\s\\S]*?end note\\b)/i, /^(?:stateDiagram\\s+)/i, /^(?:stateDiagram-v2\\s+)/i, /^(?:hide empty description\\b)/i, /^(?:\\[\\*\\])/i, /^(?:[^:\\n\\s\\-\\{]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"LINE\": { \"rules\": [12, 13], \"inclusive\": false }, \"struct\": { \"rules\": [12, 13, 25, 29, 32, 38, 45, 46, 47, 48, 57, 58, 59, 60, 74, 75, 76, 77, 78], \"inclusive\": false }, \"FLOATING_NOTE_ID\": { \"rules\": [67], \"inclusive\": false }, \"FLOATING_NOTE\": { \"rules\": [64, 65, 66], \"inclusive\": false }, \"NOTE_TEXT\": { \"rules\": [69, 70], \"inclusive\": false }, \"NOTE_ID\": { \"rules\": [68], \"inclusive\": false }, \"NOTE\": { \"rules\": [61, 62, 63], \"inclusive\": false }, \"STYLEDEF_STYLEOPTS\": { \"rules\": [], \"inclusive\": false }, \"STYLEDEF_STYLES\": { \"rules\": [34], \"inclusive\": false }, \"STYLE_IDS\": { \"rules\": [], \"inclusive\": false }, \"STYLE\": { \"rules\": [33], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [31], \"inclusive\": false }, \"CLASS\": { \"rules\": [30], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [28], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [26, 27], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [23, 24], \"inclusive\": false }, \"acc_descr\": { \"rules\": [21], \"inclusive\": false }, \"acc_title\": { \"rules\": [19], \"inclusive\": false }, \"SCALE\": { \"rules\": [16, 17, 36, 37], \"inclusive\": false }, \"ALIAS\": { \"rules\": [], \"inclusive\": false }, \"STATE_ID\": { \"rules\": [51], \"inclusive\": false }, \"STATE_STRING\": { \"rules\": [52, 53], \"inclusive\": false }, \"FORK_STATE\": { \"rules\": [], \"inclusive\": false }, \"STATE\": { \"rules\": [12, 13, 39, 40, 41, 42, 43, 44, 49, 50, 54, 55, 56], \"inclusive\": false }, \"ID\": { \"rules\": [12, 13], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 18, 20, 22, 25, 29, 32, 35, 38, 56, 60, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar stateDiagram_default = parser;\n\n// src/diagrams/state/stateCommon.ts\nvar DEFAULT_DIAGRAM_DIRECTION = \"TB\";\nvar DEFAULT_NESTED_DOC_DIR = \"TB\";\nvar STMT_DIRECTION = \"dir\";\nvar STMT_STATE = \"state\";\nvar STMT_ROOT = \"root\";\nvar STMT_RELATION = \"relation\";\nvar STMT_CLASSDEF = \"classDef\";\nvar STMT_STYLEDEF = \"style\";\nvar STMT_APPLYCLASS = \"applyClass\";\nvar DEFAULT_STATE_TYPE = \"default\";\nvar DIVIDER_TYPE = \"divider\";\nvar G_EDGE_STYLE = \"fill:none\";\nvar G_EDGE_ARROWHEADSTYLE = \"fill: #333\";\nvar G_EDGE_LABELPOS = \"c\";\nvar G_EDGE_LABELTYPE = \"text\";\nvar G_EDGE_THICKNESS = \"normal\";\nvar SHAPE_STATE = \"rect\";\nvar SHAPE_STATE_WITH_DESC = \"rectWithTitle\";\nvar SHAPE_START = \"stateStart\";\nvar SHAPE_END = \"stateEnd\";\nvar SHAPE_DIVIDER = \"divider\";\nvar SHAPE_GROUP = \"roundedWithTitle\";\nvar SHAPE_NOTE = \"note\";\nvar SHAPE_NOTEGROUP = \"noteGroup\";\nvar CSS_DIAGRAM = \"statediagram\";\nvar CSS_STATE = \"state\";\nvar CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;\nvar CSS_EDGE = \"transition\";\nvar CSS_NOTE = \"note\";\nvar CSS_NOTE_EDGE = \"note-edge\";\nvar CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;\nvar CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;\nvar CSS_CLUSTER = \"cluster\";\nvar CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;\nvar CSS_CLUSTER_ALT = \"cluster-alt\";\nvar CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;\nvar PARENT = \"parent\";\nvar NOTE = \"note\";\nvar DOMID_STATE = \"state\";\nvar DOMID_TYPE_SPACER = \"----\";\nvar NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;\nvar PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`;\n\n// src/diagrams/state/stateRenderer-v3-unified.ts\nvar getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n let dir = defaultDir;\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n return dir;\n}, \"getDir\");\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing state diagram (v2)\", id);\n const { securityLevel, state: conf, layout } = getConfig();\n diag.db.extract(diag.db.getRootDocV2());\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = layout;\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"barb\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n try {\n const links = typeof diag.db.getLinks === \"function\" ? diag.db.getLinks() : /* @__PURE__ */ new Map();\n links.forEach((linkInfo, key) => {\n const stateId = typeof key === \"string\" ? key : typeof key?.id === \"string\" ? key.id : \"\";\n if (!stateId) {\n log.warn(\"\\u26A0\\uFE0F Invalid or missing stateId from key:\", JSON.stringify(key));\n return;\n }\n const allNodes = svg.node()?.querySelectorAll(\"g\");\n let matchedElem;\n allNodes?.forEach((g) => {\n const text2 = g.textContent?.trim();\n if (text2 === stateId) {\n matchedElem = g;\n }\n });\n if (!matchedElem) {\n log.warn(\"\\u26A0\\uFE0F Could not find node matching text:\", stateId);\n return;\n }\n const parent = matchedElem.parentNode;\n if (!parent) {\n log.warn(\"\\u26A0\\uFE0F Node has no parent, cannot wrap:\", stateId);\n return;\n }\n const a = document.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n const cleanedUrl = linkInfo.url.replace(/^\"+|\"+$/g, \"\");\n a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", cleanedUrl);\n a.setAttribute(\"target\", \"_blank\");\n if (linkInfo.tooltip) {\n const tooltip = linkInfo.tooltip.replace(/^\"+|\"+$/g, \"\");\n a.setAttribute(\"title\", tooltip);\n }\n parent.replaceChild(a, matchedElem);\n a.appendChild(matchedElem);\n log.info(\"\\u{1F517} Wrapped node in tag for:\", stateId, linkInfo.url);\n });\n } catch (err) {\n log.error(\"\\u274C Error injecting clickable links:\", err);\n }\n utils_default.insertTitle(\n svg,\n \"statediagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, CSS_DIAGRAM, conf?.useMaxWidth ?? true);\n}, \"draw\");\nvar stateRenderer_v3_unified_default = {\n getClasses,\n draw,\n getDir\n};\n\n// src/diagrams/state/dataFetcher.ts\nvar nodeDb = /* @__PURE__ */ new Map();\nvar graphItemCount = 0;\nfunction stateDomId(itemId = \"\", counter = 0, type = \"\", typeSpacer = DOMID_TYPE_SPACER) {\n const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : \"\";\n return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;\n}\n__name(stateDomId, \"stateDomId\");\nvar setupDoc = /* @__PURE__ */ __name((parentParsedItem, doc, diagramStates, nodes, edges, altFlag, look, classes) => {\n log.trace(\"items\", doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case STMT_STATE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case DEFAULT_STATE_TYPE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case STMT_RELATION:\n {\n dataFetcher(\n parentParsedItem,\n item.state1,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n dataFetcher(\n parentParsedItem,\n item.state2,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n const edgeData = {\n id: \"edge\" + graphItemCount,\n start: item.state1.id,\n end: item.state2.id,\n arrowhead: \"normal\",\n arrowTypeEnd: \"arrow_barb\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n label: common_default.sanitizeText(item.description ?? \"\", getConfig()),\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n classes: CSS_EDGE,\n look\n };\n edges.push(edgeData);\n graphItemCount++;\n }\n break;\n }\n });\n}, \"setupDoc\");\nvar getDir2 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n let dir = defaultDir;\n if (parsedItem.doc) {\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n }\n return dir;\n}, \"getDir\");\nfunction insertOrUpdateNode(nodes, nodeData, classes) {\n if (!nodeData.id || nodeData.id === \"\" || nodeData.id === \"\") {\n return;\n }\n if (nodeData.cssClasses) {\n if (!Array.isArray(nodeData.cssCompiledStyles)) {\n nodeData.cssCompiledStyles = [];\n }\n nodeData.cssClasses.split(\" \").forEach((cssClass) => {\n const classDef = classes.get(cssClass);\n if (classDef) {\n nodeData.cssCompiledStyles = [...nodeData.cssCompiledStyles ?? [], ...classDef.styles];\n }\n });\n }\n const existingNodeData = nodes.find((node) => node.id === nodeData.id);\n if (existingNodeData) {\n Object.assign(existingNodeData, nodeData);\n } else {\n nodes.push(nodeData);\n }\n}\n__name(insertOrUpdateNode, \"insertOrUpdateNode\");\nfunction getClassesFromDbInfo(dbInfoItem) {\n return dbInfoItem?.classes?.join(\" \") ?? \"\";\n}\n__name(getClassesFromDbInfo, \"getClassesFromDbInfo\");\nfunction getStylesFromDbInfo(dbInfoItem) {\n return dbInfoItem?.styles ?? [];\n}\n__name(getStylesFromDbInfo, \"getStylesFromDbInfo\");\nvar dataFetcher = /* @__PURE__ */ __name((parent, parsedItem, diagramStates, nodes, edges, altFlag, look, classes) => {\n const itemId = parsedItem.id;\n const dbState = diagramStates.get(itemId);\n const classStr = getClassesFromDbInfo(dbState);\n const style = getStylesFromDbInfo(dbState);\n const config = getConfig();\n log.info(\"dataFetcher parsedItem\", parsedItem, dbState, style);\n if (itemId !== \"root\") {\n let shape = SHAPE_STATE;\n if (parsedItem.start === true) {\n shape = SHAPE_START;\n } else if (parsedItem.start === false) {\n shape = SHAPE_END;\n }\n if (parsedItem.type !== DEFAULT_STATE_TYPE) {\n shape = parsedItem.type;\n }\n if (!nodeDb.get(itemId)) {\n nodeDb.set(itemId, {\n id: itemId,\n shape,\n description: common_default.sanitizeText(itemId, config),\n cssClasses: `${classStr} ${CSS_DIAGRAM_STATE}`,\n cssStyles: style\n });\n }\n const newNode = nodeDb.get(itemId);\n if (parsedItem.description) {\n if (Array.isArray(newNode.description)) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n newNode.description.push(parsedItem.description);\n } else {\n if (newNode.description?.length && newNode.description.length > 0) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n if (newNode.description === itemId) {\n newNode.description = [parsedItem.description];\n } else {\n newNode.description = [newNode.description, parsedItem.description];\n }\n } else {\n newNode.shape = SHAPE_STATE;\n newNode.description = parsedItem.description;\n }\n }\n newNode.description = common_default.sanitizeTextOrArray(newNode.description, config);\n }\n if (newNode.description?.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {\n if (newNode.type === \"group\") {\n newNode.shape = SHAPE_GROUP;\n } else {\n newNode.shape = SHAPE_STATE;\n }\n }\n if (!newNode.type && parsedItem.doc) {\n log.info(\"Setting cluster for XCX\", itemId, getDir2(parsedItem));\n newNode.type = \"group\";\n newNode.isGroup = true;\n newNode.dir = getDir2(parsedItem);\n newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP;\n newNode.cssClasses = `${newNode.cssClasses} ${CSS_DIAGRAM_CLUSTER} ${altFlag ? CSS_DIAGRAM_CLUSTER_ALT : \"\"}`;\n }\n const nodeData = {\n labelStyle: \"\",\n shape: newNode.shape,\n label: newNode.description,\n cssClasses: newNode.cssClasses,\n cssCompiledStyles: [],\n cssStyles: newNode.cssStyles,\n id: itemId,\n dir: newNode.dir,\n domId: stateDomId(itemId, graphItemCount),\n type: newNode.type,\n isGroup: newNode.type === \"group\",\n padding: 8,\n rx: 10,\n ry: 10,\n look\n };\n if (nodeData.shape === SHAPE_DIVIDER) {\n nodeData.label = \"\";\n }\n if (parent && parent.id !== \"root\") {\n log.trace(\"Setting node \", itemId, \" to be child of its parent \", parent.id);\n nodeData.parentId = parent.id;\n }\n nodeData.centerLabel = true;\n if (parsedItem.note) {\n const noteData = {\n labelStyle: \"\",\n shape: SHAPE_NOTE,\n label: parsedItem.note.text,\n cssClasses: CSS_DIAGRAM_NOTE,\n // useHtmlLabels: false,\n cssStyles: [],\n cssCompiledStyles: [],\n id: itemId + NOTE_ID + \"-\" + graphItemCount,\n domId: stateDomId(itemId, graphItemCount, NOTE),\n type: newNode.type,\n isGroup: newNode.type === \"group\",\n padding: config.flowchart?.padding,\n look,\n position: parsedItem.note.position\n };\n const parentNodeId = itemId + PARENT_ID;\n const groupData = {\n labelStyle: \"\",\n shape: SHAPE_NOTEGROUP,\n label: parsedItem.note.text,\n cssClasses: newNode.cssClasses,\n cssStyles: [],\n id: itemId + PARENT_ID,\n domId: stateDomId(itemId, graphItemCount, PARENT),\n type: \"group\",\n isGroup: true,\n padding: 16,\n //getConfig().flowchart.padding\n look,\n position: parsedItem.note.position\n };\n graphItemCount++;\n groupData.id = parentNodeId;\n noteData.parentId = parentNodeId;\n insertOrUpdateNode(nodes, groupData, classes);\n insertOrUpdateNode(nodes, noteData, classes);\n insertOrUpdateNode(nodes, nodeData, classes);\n let from = itemId;\n let to = noteData.id;\n if (parsedItem.note.position === \"left of\") {\n from = noteData.id;\n to = itemId;\n }\n edges.push({\n id: from + \"-\" + to,\n start: from,\n end: to,\n arrowhead: \"none\",\n arrowTypeEnd: \"\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n classes: CSS_EDGE_NOTE_EDGE,\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n look\n });\n } else {\n insertOrUpdateNode(nodes, nodeData, classes);\n }\n }\n if (parsedItem.doc) {\n log.trace(\"Adding nodes children \");\n setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes, edges, !altFlag, look, classes);\n }\n}, \"dataFetcher\");\nvar reset = /* @__PURE__ */ __name(() => {\n nodeDb.clear();\n graphItemCount = 0;\n}, \"reset\");\n\n// src/diagrams/state/stateDb.ts\nvar CONSTANTS = {\n START_NODE: \"[*]\",\n START_TYPE: \"start\",\n END_NODE: \"[*]\",\n END_TYPE: \"end\",\n COLOR_KEYWORD: \"color\",\n FILL_KEYWORD: \"fill\",\n BG_FILL: \"bgFill\",\n STYLECLASS_SEP: \",\"\n};\nvar newClassesList = /* @__PURE__ */ __name(() => /* @__PURE__ */ new Map(), \"newClassesList\");\nvar newDoc = /* @__PURE__ */ __name(() => ({\n relations: [],\n states: /* @__PURE__ */ new Map(),\n documents: {}\n}), \"newDoc\");\nvar clone = /* @__PURE__ */ __name((o) => JSON.parse(JSON.stringify(o)), \"clone\");\nvar StateDB = class {\n constructor(version) {\n this.version = version;\n this.nodes = [];\n this.edges = [];\n this.rootDoc = [];\n this.classes = newClassesList();\n this.documents = { root: newDoc() };\n this.currentDocument = this.documents.root;\n this.startEndCount = 0;\n this.dividerCnt = 0;\n this.links = /* @__PURE__ */ new Map();\n this.getAccTitle = getAccTitle;\n this.setAccTitle = setAccTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.clear();\n this.setRootDoc = this.setRootDoc.bind(this);\n this.getDividerId = this.getDividerId.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.trimColon = this.trimColon.bind(this);\n }\n static {\n __name(this, \"StateDB\");\n }\n static {\n this.relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n };\n }\n /**\n * Convert all of the statements (stmts) that were parsed into states and relationships.\n * This is done because a state diagram may have nested sections,\n * where each section is a 'document' and has its own set of statements.\n * Ex: the section within a fork has its own statements, and incoming and outgoing statements\n * refer to the fork as a whole (document).\n * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement.\n * This will push the statement into the list of statements for the current document.\n */\n extract(statements) {\n this.clear(true);\n for (const item of Array.isArray(statements) ? statements : statements.doc) {\n switch (item.stmt) {\n case STMT_STATE:\n this.addState(item.id.trim(), item.type, item.doc, item.description, item.note);\n break;\n case STMT_RELATION:\n this.addRelation(item.state1, item.state2, item.description);\n break;\n case STMT_CLASSDEF:\n this.addStyleClass(item.id.trim(), item.classes);\n break;\n case STMT_STYLEDEF:\n this.handleStyleDef(item);\n break;\n case STMT_APPLYCLASS:\n this.setCssClass(item.id.trim(), item.styleClass);\n break;\n case \"click\":\n this.addLink(item.id, item.url, item.tooltip);\n break;\n }\n }\n const diagramStates = this.getStates();\n const config = getConfig();\n reset();\n dataFetcher(\n void 0,\n this.getRootDocV2(),\n diagramStates,\n this.nodes,\n this.edges,\n true,\n config.look,\n this.classes\n );\n for (const node of this.nodes) {\n if (!Array.isArray(node.label)) {\n continue;\n }\n node.description = node.label.slice(1);\n if (node.isGroup && node.description.length > 0) {\n throw new Error(\n `Group nodes can only have label. Remove the additional description for node [${node.id}]`\n );\n }\n node.label = node.label[0];\n }\n }\n handleStyleDef(item) {\n const ids = item.id.trim().split(\",\");\n const styles = item.styleClass.split(\",\");\n for (const id of ids) {\n let state = this.getState(id);\n if (!state) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n state = this.getState(trimmedId);\n }\n if (state) {\n state.styles = styles.map((s) => s.replace(/;/g, \"\")?.trim());\n }\n }\n }\n setRootDoc(o) {\n log.info(\"Setting root doc\", o);\n this.rootDoc = o;\n if (this.version === 1) {\n this.extract(o);\n } else {\n this.extract(this.getRootDocV2());\n }\n }\n docTranslator(parent, node, first) {\n if (node.stmt === STMT_RELATION) {\n this.docTranslator(parent, node.state1, true);\n this.docTranslator(parent, node.state2, false);\n return;\n }\n if (node.stmt === STMT_STATE) {\n if (node.id === CONSTANTS.START_NODE) {\n node.id = parent.id + (first ? \"_start\" : \"_end\");\n node.start = first;\n } else {\n node.id = node.id.trim();\n }\n }\n if (node.stmt !== STMT_ROOT && node.stmt !== STMT_STATE || !node.doc) {\n return;\n }\n const doc = [];\n let currentDoc = [];\n for (const stmt of node.doc) {\n if (stmt.type === DIVIDER_TYPE) {\n const newNode = clone(stmt);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(stmt);\n }\n }\n if (doc.length > 0 && currentDoc.length > 0) {\n const newNode = {\n stmt: STMT_STATE,\n id: generateId(),\n type: \"divider\",\n doc: clone(currentDoc)\n };\n doc.push(clone(newNode));\n node.doc = doc;\n }\n node.doc.forEach((docNode) => this.docTranslator(node, docNode, true));\n }\n getRootDocV2() {\n this.docTranslator(\n { id: STMT_ROOT, stmt: STMT_ROOT },\n { id: STMT_ROOT, stmt: STMT_ROOT, doc: this.rootDoc },\n true\n );\n return { id: STMT_ROOT, doc: this.rootDoc };\n }\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param descr - description for the state. Can be a string or a list or strings\n * @param classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class.\n * @param styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style.\n * @param textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style.\n */\n addState(id, type = DEFAULT_STATE_TYPE, doc = void 0, descr = void 0, note = void 0, classes = void 0, styles = void 0, textStyles = void 0) {\n const trimmedId = id?.trim();\n if (!this.currentDocument.states.has(trimmedId)) {\n log.info(\"Adding state \", trimmedId, descr);\n this.currentDocument.states.set(trimmedId, {\n stmt: STMT_STATE,\n id: trimmedId,\n descriptions: [],\n type,\n doc,\n note,\n classes: [],\n styles: [],\n textStyles: []\n });\n } else {\n const state = this.currentDocument.states.get(trimmedId);\n if (!state) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n if (!state.doc) {\n state.doc = doc;\n }\n if (!state.type) {\n state.type = type;\n }\n }\n if (descr) {\n log.info(\"Setting state description\", trimmedId, descr);\n const descriptions = Array.isArray(descr) ? descr : [descr];\n descriptions.forEach((des) => this.addDescription(trimmedId, des.trim()));\n }\n if (note) {\n const doc2 = this.currentDocument.states.get(trimmedId);\n if (!doc2) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n doc2.note = note;\n doc2.note.text = common_default.sanitizeText(doc2.note.text, getConfig());\n }\n if (classes) {\n log.info(\"Setting state classes\", trimmedId, classes);\n const classesList = Array.isArray(classes) ? classes : [classes];\n classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim()));\n }\n if (styles) {\n log.info(\"Setting state styles\", trimmedId, styles);\n const stylesList = Array.isArray(styles) ? styles : [styles];\n stylesList.forEach((style) => this.setStyle(trimmedId, style.trim()));\n }\n if (textStyles) {\n log.info(\"Setting state styles\", trimmedId, styles);\n const textStylesList = Array.isArray(textStyles) ? textStyles : [textStyles];\n textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim()));\n }\n }\n clear(saveCommon) {\n this.nodes = [];\n this.edges = [];\n this.documents = { root: newDoc() };\n this.currentDocument = this.documents.root;\n this.startEndCount = 0;\n this.classes = newClassesList();\n if (!saveCommon) {\n this.links = /* @__PURE__ */ new Map();\n clear();\n }\n }\n getState(id) {\n return this.currentDocument.states.get(id);\n }\n getStates() {\n return this.currentDocument.states;\n }\n logDocuments() {\n log.info(\"Documents = \", this.documents);\n }\n getRelations() {\n return this.currentDocument.relations;\n }\n /**\n * Adds a clickable link to a state.\n */\n addLink(stateId, url, tooltip) {\n this.links.set(stateId, { url, tooltip });\n log.warn(\"Adding link\", stateId, url, tooltip);\n }\n /**\n * Get all registered links.\n */\n getLinks() {\n return this.links;\n }\n /**\n * If the id is a start node ( [*] ), then return a new id constructed from\n * the start node name and the current start node count.\n * else return the given id\n */\n startIdIfNeeded(id = \"\") {\n if (id === CONSTANTS.START_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.START_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n /**\n * If the id is a start node ( [*] ), then return the start type ('start')\n * else return the given type\n */\n startTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.START_NODE ? CONSTANTS.START_TYPE : type;\n }\n /**\n * If the id is an end node ( [*] ), then return a new id constructed from\n * the end node name and the current start_end node count.\n * else return the given id\n */\n endIdIfNeeded(id = \"\") {\n if (id === CONSTANTS.END_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.END_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n /**\n * If the id is an end node ( [*] ), then return the end type\n * else return the given type\n *\n */\n endTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.END_NODE ? CONSTANTS.END_TYPE : type;\n }\n addRelationObjs(item1, item2, relationTitle = \"\") {\n const id1 = this.startIdIfNeeded(item1.id.trim());\n const type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type);\n const id2 = this.startIdIfNeeded(item2.id.trim());\n const type2 = this.startTypeIfNeeded(item2.id.trim(), item2.type);\n this.addState(\n id1,\n type1,\n item1.doc,\n item1.description,\n item1.note,\n item1.classes,\n item1.styles,\n item1.textStyles\n );\n this.addState(\n id2,\n type2,\n item2.doc,\n item2.description,\n item2.note,\n item2.classes,\n item2.styles,\n item2.textStyles\n );\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: common_default.sanitizeText(relationTitle, getConfig())\n });\n }\n /**\n * Add a relation between two items. The items may be full objects or just the string id of a state.\n */\n addRelation(item1, item2, title) {\n if (typeof item1 === \"object\" && typeof item2 === \"object\") {\n this.addRelationObjs(item1, item2, title);\n } else if (typeof item1 === \"string\" && typeof item2 === \"string\") {\n const id1 = this.startIdIfNeeded(item1.trim());\n const type1 = this.startTypeIfNeeded(item1);\n const id2 = this.endIdIfNeeded(item2.trim());\n const type2 = this.endTypeIfNeeded(item2);\n this.addState(id1, type1);\n this.addState(id2, type2);\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: title ? common_default.sanitizeText(title, getConfig()) : void 0\n });\n }\n }\n addDescription(id, descr) {\n const theState = this.currentDocument.states.get(id);\n const _descr = descr.startsWith(\":\") ? descr.replace(\":\", \"\").trim() : descr;\n theState?.descriptions?.push(common_default.sanitizeText(_descr, getConfig()));\n }\n cleanupLabel(label) {\n return label.startsWith(\":\") ? label.slice(2).trim() : label.trim();\n }\n getDividerId() {\n this.dividerCnt++;\n return `divider-id-${this.dividerCnt}`;\n }\n /**\n * Called when the parser comes across a (style) class definition\n * @example classDef my-style fill:#f96;\n *\n * @param id - the id of this (style) class\n * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)\n */\n addStyleClass(id, styleAttributes = \"\") {\n if (!this.classes.has(id)) {\n this.classes.set(id, { id, styles: [], textStyles: [] });\n }\n const foundClass = this.classes.get(id);\n if (styleAttributes && foundClass) {\n styleAttributes.split(CONSTANTS.STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (RegExp(CONSTANTS.COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(CONSTANTS.FILL_KEYWORD, CONSTANTS.BG_FILL);\n const newStyle2 = newStyle1.replace(CONSTANTS.COLOR_KEYWORD, CONSTANTS.FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n }\n getClasses() {\n return this.classes;\n }\n /**\n * Add a (style) class or css class to a state with the given id.\n * If the state isn't already in the list of known states, add it.\n * Might be called by parser when a style class or CSS class should be applied to a state\n *\n * @param itemIds - The id or a list of ids of the item(s) to apply the css class to\n * @param cssClassName - CSS class name\n */\n setCssClass(itemIds, cssClassName) {\n itemIds.split(\",\").forEach((id) => {\n let foundState = this.getState(id);\n if (!foundState) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n foundState = this.getState(trimmedId);\n }\n foundState?.classes?.push(cssClassName);\n });\n }\n /**\n * Add a style to a state with the given id.\n * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px\n * where 'style' is the keyword\n * stateId is the id of a state\n * the rest of the string is the styleText (all of the attributes to be applied to the state)\n *\n * @param itemId - The id of item to apply the style to\n * @param styleText - the text of the attributes for the style\n */\n setStyle(itemId, styleText) {\n this.getState(itemId)?.styles?.push(styleText);\n }\n /**\n * Add a text style to a state with the given id\n *\n * @param itemId - The id of item to apply the css class to\n * @param cssClassName - CSS class name\n */\n setTextStyle(itemId, cssClassName) {\n this.getState(itemId)?.textStyles?.push(cssClassName);\n }\n /**\n * Finds the direction statement in the root document.\n * @returns the direction statement if present\n */\n getDirectionStatement() {\n return this.rootDoc.find((doc) => doc.stmt === STMT_DIRECTION);\n }\n getDirection() {\n return this.getDirectionStatement()?.value ?? DEFAULT_DIAGRAM_DIRECTION;\n }\n setDirection(dir) {\n const doc = this.getDirectionStatement();\n if (doc) {\n doc.value = dir;\n } else {\n this.rootDoc.unshift({ stmt: STMT_DIRECTION, value: dir });\n }\n }\n trimColon(str) {\n return str.startsWith(\":\") ? str.slice(1).trim() : str.trim();\n }\n getData() {\n const config = getConfig();\n return {\n nodes: this.nodes,\n edges: this.edges,\n other: {},\n config,\n direction: getDir(this.getRootDocV2())\n };\n }\n getConfig() {\n return getConfig().state;\n }\n};\n\n// src/diagrams/state/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\ndefs #statediagram-barbEnd {\n fill: ${options.transitionColor};\n stroke: ${options.transitionColor};\n }\ng.stateGroup text {\n fill: ${options.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${options.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${options.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${options.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n\n text {\n fill: ${options.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${options.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n}\n.edgeLabel .label text {\n fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${options.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${options.innerEndBackground};\n stroke: ${options.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${options.compositeBackground || options.background};\n // stroke: ${options.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${options.stateBkg || options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${options.compositeTitleBackground};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${options.stateLabelColor};\n // line-height: 1;\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\nexport {\n stateDiagram_default,\n stateRenderer_v3_unified_default,\n StateDB,\n styles_default\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","stateStmt","relDescription","id","description","parts","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","stateDiagram_default","DEFAULT_DIAGRAM_DIRECTION","DEFAULT_NESTED_DOC_DIR","STMT_DIRECTION","STMT_STATE","STMT_ROOT","STMT_RELATION","STMT_CLASSDEF","STMT_STYLEDEF","STMT_APPLYCLASS","DEFAULT_STATE_TYPE","DIVIDER_TYPE","G_EDGE_STYLE","G_EDGE_ARROWHEADSTYLE","G_EDGE_LABELPOS","G_EDGE_LABELTYPE","G_EDGE_THICKNESS","SHAPE_STATE","SHAPE_STATE_WITH_DESC","SHAPE_START","SHAPE_END","SHAPE_DIVIDER","SHAPE_GROUP","SHAPE_NOTE","SHAPE_NOTEGROUP","CSS_DIAGRAM","CSS_STATE","CSS_DIAGRAM_STATE","CSS_EDGE","CSS_NOTE","CSS_NOTE_EDGE","CSS_EDGE_NOTE_EDGE","CSS_DIAGRAM_NOTE","CSS_CLUSTER","CSS_DIAGRAM_CLUSTER","CSS_CLUSTER_ALT","CSS_DIAGRAM_CLUSTER_ALT","PARENT","NOTE","DOMID_STATE","DOMID_TYPE_SPACER","NOTE_ID","PARENT_ID","getDir","parsedItem","defaultDir","dir","parsedItemDoc","getClasses","text","diagramObj","draw","_version","diag","log","securityLevel","conf","layout","getConfig","data4Layout","svg","getDiagramElement","render","padding","linkInfo","key","stateId","allNodes","_a","matchedElem","g","parent","a","cleanedUrl","tooltip","err","utils_default","setupViewPortForSVG","stateRenderer_v3_unified_default","nodeDb","graphItemCount","stateDomId","itemId","counter","type","typeSpacer","typeStr","setupDoc","parentParsedItem","doc","diagramStates","nodes","edges","altFlag","look","classes","item","dataFetcher","edgeData","common_default","getDir2","insertOrUpdateNode","nodeData","cssClass","classDef","existingNodeData","node","getClassesFromDbInfo","dbInfoItem","getStylesFromDbInfo","dbState","classStr","style","config","shape","newNode","_b","noteData","_c","parentNodeId","groupData","from","to","reset","CONSTANTS","newClassesList","newDoc","clone","StateDB","version","getAccTitle","setAccTitle","getAccDescription","setAccDescription","setDiagramTitle","getDiagramTitle","statements","ids","styles","trimmedId","s","first","currentDoc","stmt","generateId","docNode","descr","note","textStyles","des","doc2","textStyle","saveCommon","clear","url","item1","item2","relationTitle","id1","type1","id2","type2","title","theState","_descr","label","styleAttributes","foundClass","attrib","fixedAttrib","newStyle2","itemIds","cssClassName","foundState","styleText","getStyles","options","styles_default"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js b/massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js similarity index 74% rename from massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js rename to massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js index cf8790f86..0172c21ff 100644 --- a/massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js +++ b/massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js @@ -1,4 +1,4 @@ -import{_ as e}from"./index-yx4Z55Qu.js";var l=e(()=>` +import{_ as e}from"./index-DbSnkTMx.js";var l=e(()=>` /* Font Awesome icon styling - consolidated */ .label-icon { display: inline-block; @@ -13,4 +13,4 @@ import{_ as e}from"./index-yx4Z55Qu.js";var l=e(()=>` stroke-width: revert; } `,"getIconStyles");export{l as g}; -//# sourceMappingURL=chunk-FMBD7UC4-LU2vPcC6.js.map +//# sourceMappingURL=chunk-FMBD7UC4-DgHqX2i6.js.map diff --git a/massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js.map b/massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js.map similarity index 92% rename from massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js.map rename to massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js.map index 26d06271f..5c756c9db 100644 --- a/massgen/frontend/web/static/assets/chunk-FMBD7UC4-LU2vPcC6.js.map +++ b/massgen/frontend/web/static/assets/chunk-FMBD7UC4-DgHqX2i6.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-FMBD7UC4-LU2vPcC6.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-FMBD7UC4.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/globalStyles.ts\nvar getIconStyles = /* @__PURE__ */ __name(() => `\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n`, \"getIconStyles\");\n\nexport {\n getIconStyles\n};\n"],"names":["getIconStyles","__name"],"mappings":"wCAKG,IAACA,EAAgCC,EAAO,IAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9C,eAAe","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-FMBD7UC4-DgHqX2i6.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-FMBD7UC4.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/globalStyles.ts\nvar getIconStyles = /* @__PURE__ */ __name(() => `\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n`, \"getIconStyles\");\n\nexport {\n getIconStyles\n};\n"],"names":["getIconStyles","__name"],"mappings":"wCAKG,IAACA,EAAgCC,EAAO,IAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9C,eAAe","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js b/massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js similarity index 79% rename from massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js rename to massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js index c2919c5a0..a32e4e7e1 100644 --- a/massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js +++ b/massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js @@ -1,2 +1,2 @@ -import{_ as a,e as w,l as x}from"./index-yx4Z55Qu.js";var d=a((e,t,i,o)=>{e.attr("class",i);const{width:r,height:h,x:n,y:c}=u(e,t);w(e,h,r,o);const s=l(n,c,r,h,t);e.attr("viewBox",s),x.debug(`viewBox configured: ${s} with padding: ${t}`)},"setupViewPortForSVG"),u=a((e,t)=>{var o;const i=((o=e.node())==null?void 0:o.getBBox())||{width:0,height:0,x:0,y:0};return{width:i.width+t*2,height:i.height+t*2,x:i.x,y:i.y}},"calculateDimensionsWithPadding"),l=a((e,t,i,o,r)=>`${e-r} ${t-r} ${i} ${o}`,"createViewBox");export{d as s}; -//# sourceMappingURL=chunk-QN33PNHL-BF8yyMHO.js.map +import{_ as a,e as w,l as x}from"./index-DbSnkTMx.js";var d=a((e,t,i,o)=>{e.attr("class",i);const{width:r,height:h,x:n,y:c}=u(e,t);w(e,h,r,o);const s=l(n,c,r,h,t);e.attr("viewBox",s),x.debug(`viewBox configured: ${s} with padding: ${t}`)},"setupViewPortForSVG"),u=a((e,t)=>{var o;const i=((o=e.node())==null?void 0:o.getBBox())||{width:0,height:0,x:0,y:0};return{width:i.width+t*2,height:i.height+t*2,x:i.x,y:i.y}},"calculateDimensionsWithPadding"),l=a((e,t,i,o,r)=>`${e-r} ${t-r} ${i} ${o}`,"createViewBox");export{d as s}; +//# sourceMappingURL=chunk-QN33PNHL-Bl50RaE-.js.map diff --git a/massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js.map b/massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js.map similarity index 97% rename from massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js.map rename to massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js.map index 7c16a1eac..bd9da46b1 100644 --- a/massgen/frontend/web/static/assets/chunk-QN33PNHL-BF8yyMHO.js.map +++ b/massgen/frontend/web/static/assets/chunk-QN33PNHL-Bl50RaE-.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-QN33PNHL-BF8yyMHO.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-QN33PNHL.mjs"],"sourcesContent":["import {\n configureSvgSize\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/setupViewPortForSVG.ts\nvar setupViewPortForSVG = /* @__PURE__ */ __name((svg, padding, cssDiagram, useMaxWidth) => {\n svg.attr(\"class\", cssDiagram);\n const { width, height, x, y } = calculateDimensionsWithPadding(svg, padding);\n configureSvgSize(svg, height, width, useMaxWidth);\n const viewBox = createViewBox(x, y, width, height, padding);\n svg.attr(\"viewBox\", viewBox);\n log.debug(`viewBox configured: ${viewBox} with padding: ${padding}`);\n}, \"setupViewPortForSVG\");\nvar calculateDimensionsWithPadding = /* @__PURE__ */ __name((svg, padding) => {\n const bounds = svg.node()?.getBBox() || { width: 0, height: 0, x: 0, y: 0 };\n return {\n width: bounds.width + padding * 2,\n height: bounds.height + padding * 2,\n x: bounds.x,\n y: bounds.y\n };\n}, \"calculateDimensionsWithPadding\");\nvar createViewBox = /* @__PURE__ */ __name((x, y, width, height, padding) => {\n return `${x - padding} ${y - padding} ${width} ${height}`;\n}, \"createViewBox\");\n\nexport {\n setupViewPortForSVG\n};\n"],"names":["setupViewPortForSVG","__name","svg","padding","cssDiagram","useMaxWidth","width","height","x","y","calculateDimensionsWithPadding","configureSvgSize","viewBox","createViewBox","log","bounds","_a"],"mappings":"sDASG,IAACA,EAAsCC,EAAO,CAACC,EAAKC,EAASC,EAAYC,IAAgB,CAC1FH,EAAI,KAAK,QAASE,CAAU,EAC5B,KAAM,CAAE,MAAAE,EAAO,OAAAC,EAAQ,EAAAC,EAAG,EAAAC,CAAC,EAAKC,EAA+BR,EAAKC,CAAO,EAC3EQ,EAAiBT,EAAKK,EAAQD,EAAOD,CAAW,EAChD,MAAMO,EAAUC,EAAcL,EAAGC,EAAGH,EAAOC,EAAQJ,CAAO,EAC1DD,EAAI,KAAK,UAAWU,CAAO,EAC3BE,EAAI,MAAM,uBAAuBF,CAAO,kBAAkBT,CAAO,EAAE,CACrE,EAAG,qBAAqB,EACpBO,EAAiDT,EAAO,CAACC,EAAKC,IAAY,OAC5E,MAAMY,IAASC,EAAAd,EAAI,KAAI,IAAR,YAAAc,EAAY,YAAa,CAAE,MAAO,EAAG,OAAQ,EAAG,EAAG,EAAG,EAAG,CAAC,EACzE,MAAO,CACL,MAAOD,EAAO,MAAQZ,EAAU,EAChC,OAAQY,EAAO,OAASZ,EAAU,EAClC,EAAGY,EAAO,EACV,EAAGA,EAAO,CACd,CACA,EAAG,gCAAgC,EAC/BF,EAAgCZ,EAAO,CAACO,EAAGC,EAAGH,EAAOC,EAAQJ,IACxD,GAAGK,EAAIL,CAAO,IAAIM,EAAIN,CAAO,IAAIG,CAAK,IAAIC,CAAM,GACtD,eAAe","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-QN33PNHL-Bl50RaE-.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-QN33PNHL.mjs"],"sourcesContent":["import {\n configureSvgSize\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/setupViewPortForSVG.ts\nvar setupViewPortForSVG = /* @__PURE__ */ __name((svg, padding, cssDiagram, useMaxWidth) => {\n svg.attr(\"class\", cssDiagram);\n const { width, height, x, y } = calculateDimensionsWithPadding(svg, padding);\n configureSvgSize(svg, height, width, useMaxWidth);\n const viewBox = createViewBox(x, y, width, height, padding);\n svg.attr(\"viewBox\", viewBox);\n log.debug(`viewBox configured: ${viewBox} with padding: ${padding}`);\n}, \"setupViewPortForSVG\");\nvar calculateDimensionsWithPadding = /* @__PURE__ */ __name((svg, padding) => {\n const bounds = svg.node()?.getBBox() || { width: 0, height: 0, x: 0, y: 0 };\n return {\n width: bounds.width + padding * 2,\n height: bounds.height + padding * 2,\n x: bounds.x,\n y: bounds.y\n };\n}, \"calculateDimensionsWithPadding\");\nvar createViewBox = /* @__PURE__ */ __name((x, y, width, height, padding) => {\n return `${x - padding} ${y - padding} ${width} ${height}`;\n}, \"createViewBox\");\n\nexport {\n setupViewPortForSVG\n};\n"],"names":["setupViewPortForSVG","__name","svg","padding","cssDiagram","useMaxWidth","width","height","x","y","calculateDimensionsWithPadding","configureSvgSize","viewBox","createViewBox","log","bounds","_a"],"mappings":"sDASG,IAACA,EAAsCC,EAAO,CAACC,EAAKC,EAASC,EAAYC,IAAgB,CAC1FH,EAAI,KAAK,QAASE,CAAU,EAC5B,KAAM,CAAE,MAAAE,EAAO,OAAAC,EAAQ,EAAAC,EAAG,EAAAC,CAAC,EAAKC,EAA+BR,EAAKC,CAAO,EAC3EQ,EAAiBT,EAAKK,EAAQD,EAAOD,CAAW,EAChD,MAAMO,EAAUC,EAAcL,EAAGC,EAAGH,EAAOC,EAAQJ,CAAO,EAC1DD,EAAI,KAAK,UAAWU,CAAO,EAC3BE,EAAI,MAAM,uBAAuBF,CAAO,kBAAkBT,CAAO,EAAE,CACrE,EAAG,qBAAqB,EACpBO,EAAiDT,EAAO,CAACC,EAAKC,IAAY,OAC5E,MAAMY,IAASC,EAAAd,EAAI,KAAI,IAAR,YAAAc,EAAY,YAAa,CAAE,MAAO,EAAG,OAAQ,EAAG,EAAG,EAAG,EAAG,CAAC,EACzE,MAAO,CACL,MAAOD,EAAO,MAAQZ,EAAU,EAChC,OAAQY,EAAO,OAASZ,EAAU,EAClC,EAAGY,EAAO,EACV,EAAGA,EAAO,CACd,CACA,EAAG,gCAAgC,EAC/BF,EAAgCZ,EAAO,CAACO,EAAGC,EAAGH,EAAOC,EAAQJ,IACxD,GAAGK,EAAIL,CAAO,IAAIM,EAAIN,CAAO,IAAIG,CAAK,IAAIC,CAAM,GACtD,eAAe","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js b/massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js similarity index 51% rename from massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js rename to massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js index 0371f6a35..e80dbccb7 100644 --- a/massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js +++ b/massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js @@ -1,2 +1,2 @@ -import{_ as s}from"./index-yx4Z55Qu.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},s(t,"ImperativeState"),t);export{e as I}; -//# sourceMappingURL=chunk-QZHKN3VN-unwNdMgy.js.map +import{_ as s}from"./index-DbSnkTMx.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},s(t,"ImperativeState"),t);export{e as I}; +//# sourceMappingURL=chunk-QZHKN3VN-C81fAOmv.js.map diff --git a/massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js.map b/massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js.map similarity index 92% rename from massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js.map rename to massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js.map index 549bf9907..b38a4e43a 100644 --- a/massgen/frontend/web/static/assets/chunk-QZHKN3VN-unwNdMgy.js.map +++ b/massgen/frontend/web/static/assets/chunk-QZHKN3VN-C81fAOmv.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-QZHKN3VN-unwNdMgy.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-QZHKN3VN.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/imperativeState.ts\nvar ImperativeState = class {\n /**\n * @param init - Function that creates the default state.\n */\n constructor(init) {\n this.init = init;\n this.records = this.init();\n }\n static {\n __name(this, \"ImperativeState\");\n }\n reset() {\n this.records = this.init();\n }\n};\n\nexport {\n ImperativeState\n};\n"],"names":["ImperativeState","_a","init","__name"],"mappings":"8CAKIA,GAAkBC,EAAA,KAAM,CAI1B,YAAYC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,QAAU,KAAK,KAAI,CAC1B,CAIA,OAAQ,CACN,KAAK,QAAU,KAAK,KAAI,CAC1B,CACF,EALIC,EAAOF,EAAM,iBAAiB,EATZA","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-QZHKN3VN-C81fAOmv.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-QZHKN3VN.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/imperativeState.ts\nvar ImperativeState = class {\n /**\n * @param init - Function that creates the default state.\n */\n constructor(init) {\n this.init = init;\n this.records = this.init();\n }\n static {\n __name(this, \"ImperativeState\");\n }\n reset() {\n this.records = this.init();\n }\n};\n\nexport {\n ImperativeState\n};\n"],"names":["ImperativeState","_a","init","__name"],"mappings":"8CAKIA,GAAkBC,EAAA,KAAM,CAI1B,YAAYC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,QAAU,KAAK,KAAI,CAC1B,CAIA,OAAQ,CACN,KAAK,QAAU,KAAK,KAAI,CAC1B,CACF,EALIC,EAAOF,EAAM,iBAAiB,EATZA","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js b/massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js similarity index 92% rename from massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js rename to massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js index 57d9f0836..534039791 100644 --- a/massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js +++ b/massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js @@ -1,2 +1,2 @@ -import{_ as n,U as o,j as l}from"./index-yx4Z55Qu.js";var x=n((s,t)=>{const e=s.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx&&e.attr("rx",t.rx),t.ry&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class&&e.attr("class",t.class),e},"drawRect"),d=n((s,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};x(s,e).lower()},"drawBackgroundRect"),g=n((s,t)=>{const e=t.text.replace(o," "),r=s.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class&&r.attr("class",t.class);const a=r.append("tspan");return a.attr("x",t.x+t.textMargin*2),a.text(e),r},"drawText"),h=n((s,t,e,r)=>{const a=s.append("image");a.attr("x",t),a.attr("y",e);const i=l.sanitizeUrl(r);a.attr("xlink:href",i)},"drawImage"),m=n((s,t,e,r)=>{const a=s.append("use");a.attr("x",t),a.attr("y",e);const i=l.sanitizeUrl(r);a.attr("xlink:href",`#${i}`)},"drawEmbeddedImage"),y=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),p=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{d as a,p as b,m as c,x as d,h as e,g as f,y as g}; -//# sourceMappingURL=chunk-TZMSLE5B-C8IfDZlM.js.map +import{_ as n,U as o,j as l}from"./index-DbSnkTMx.js";var x=n((s,t)=>{const e=s.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx&&e.attr("rx",t.rx),t.ry&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class&&e.attr("class",t.class),e},"drawRect"),d=n((s,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};x(s,e).lower()},"drawBackgroundRect"),g=n((s,t)=>{const e=t.text.replace(o," "),r=s.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class&&r.attr("class",t.class);const a=r.append("tspan");return a.attr("x",t.x+t.textMargin*2),a.text(e),r},"drawText"),h=n((s,t,e,r)=>{const a=s.append("image");a.attr("x",t),a.attr("y",e);const i=l.sanitizeUrl(r);a.attr("xlink:href",i)},"drawImage"),m=n((s,t,e,r)=>{const a=s.append("use");a.attr("x",t),a.attr("y",e);const i=l.sanitizeUrl(r);a.attr("xlink:href",`#${i}`)},"drawEmbeddedImage"),y=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),p=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{d as a,p as b,m as c,x as d,h as e,g as f,y as g}; +//# sourceMappingURL=chunk-TZMSLE5B-CD_nzC2y.js.map diff --git a/massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js.map b/massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js.map similarity index 98% rename from massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js.map rename to massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js.map index 979e3fd16..6c5872386 100644 --- a/massgen/frontend/web/static/assets/chunk-TZMSLE5B-C8IfDZlM.js.map +++ b/massgen/frontend/web/static/assets/chunk-TZMSLE5B-CD_nzC2y.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-TZMSLE5B-C8IfDZlM.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.mjs"],"sourcesContent":["import {\n lineBreakRegex\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/svgDrawCommon.ts\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nvar drawRect = /* @__PURE__ */ __name((element, rectData) => {\n const rectElement = element.append(\"rect\");\n rectElement.attr(\"x\", rectData.x);\n rectElement.attr(\"y\", rectData.y);\n rectElement.attr(\"fill\", rectData.fill);\n rectElement.attr(\"stroke\", rectData.stroke);\n rectElement.attr(\"width\", rectData.width);\n rectElement.attr(\"height\", rectData.height);\n if (rectData.name) {\n rectElement.attr(\"name\", rectData.name);\n }\n if (rectData.rx) {\n rectElement.attr(\"rx\", rectData.rx);\n }\n if (rectData.ry) {\n rectElement.attr(\"ry\", rectData.ry);\n }\n if (rectData.attrs !== void 0) {\n for (const attrKey in rectData.attrs) {\n rectElement.attr(attrKey, rectData.attrs[attrKey]);\n }\n }\n if (rectData.class) {\n rectElement.attr(\"class\", rectData.class);\n }\n return rectElement;\n}, \"drawRect\");\nvar drawBackgroundRect = /* @__PURE__ */ __name((element, bounds) => {\n const rectData = {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n stroke: bounds.stroke,\n class: \"rect\"\n };\n const rectElement = drawRect(element, rectData);\n rectElement.lower();\n}, \"drawBackgroundRect\");\nvar drawText = /* @__PURE__ */ __name((element, textData) => {\n const nText = textData.text.replace(lineBreakRegex, \" \");\n const textElem = element.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.attr(\"class\", \"legend\");\n textElem.style(\"text-anchor\", textData.anchor);\n if (textData.class) {\n textElem.attr(\"class\", textData.class);\n }\n const tspan = textElem.append(\"tspan\");\n tspan.attr(\"x\", textData.x + textData.textMargin * 2);\n tspan.text(nText);\n return textElem;\n}, \"drawText\");\nvar drawImage = /* @__PURE__ */ __name((elem, x, y, link) => {\n const imageElement = elem.append(\"image\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", sanitizedLink);\n}, \"drawImage\");\nvar drawEmbeddedImage = /* @__PURE__ */ __name((element, x, y, link) => {\n const imageElement = element.append(\"use\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", `#${sanitizedLink}`);\n}, \"drawEmbeddedImage\");\nvar getNoteRect = /* @__PURE__ */ __name(() => {\n const noteRectData = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: \"#EDF2AE\",\n stroke: \"#666\",\n anchor: \"start\",\n rx: 0,\n ry: 0\n };\n return noteRectData;\n}, \"getNoteRect\");\nvar getTextObj = /* @__PURE__ */ __name(() => {\n const testObject = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n \"text-anchor\": \"start\",\n style: \"#666\",\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true\n };\n return testObject;\n}, \"getTextObj\");\n\nexport {\n drawRect,\n drawBackgroundRect,\n drawText,\n drawImage,\n drawEmbeddedImage,\n getNoteRect,\n getTextObj\n};\n"],"names":["drawRect","__name","element","rectData","rectElement","attrKey","drawBackgroundRect","bounds","drawText","textData","nText","lineBreakRegex","textElem","tspan","drawImage","elem","x","y","link","imageElement","sanitizedLink","sanitizeUrl","drawEmbeddedImage","getNoteRect","getTextObj"],"mappings":"sDASG,IAACA,EAA2BC,EAAO,CAACC,EAASC,IAAa,CAC3D,MAAMC,EAAcF,EAAQ,OAAO,MAAM,EAgBzC,GAfAE,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,OAAQD,EAAS,IAAI,EACtCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EAC1CC,EAAY,KAAK,QAASD,EAAS,KAAK,EACxCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EACtCA,EAAS,MACXC,EAAY,KAAK,OAAQD,EAAS,IAAI,EAEpCA,EAAS,IACXC,EAAY,KAAK,KAAMD,EAAS,EAAE,EAEhCA,EAAS,IACXC,EAAY,KAAK,KAAMD,EAAS,EAAE,EAEhCA,EAAS,QAAU,OACrB,UAAWE,KAAWF,EAAS,MAC7BC,EAAY,KAAKC,EAASF,EAAS,MAAME,CAAO,CAAC,EAGrD,OAAIF,EAAS,OACXC,EAAY,KAAK,QAASD,EAAS,KAAK,EAEnCC,CACT,EAAG,UAAU,EACTE,EAAqCL,EAAO,CAACC,EAASK,IAAW,CACnE,MAAMJ,EAAW,CACf,EAAGI,EAAO,OACV,EAAGA,EAAO,OACV,MAAOA,EAAO,MAAQA,EAAO,OAC7B,OAAQA,EAAO,MAAQA,EAAO,OAC9B,KAAMA,EAAO,KACb,OAAQA,EAAO,OACf,MAAO,MACX,EACsBP,EAASE,EAASC,CAAQ,EAClC,MAAK,CACnB,EAAG,oBAAoB,EACnBK,EAA2BP,EAAO,CAACC,EAASO,IAAa,CAC3D,MAAMC,EAAQD,EAAS,KAAK,QAAQE,EAAgB,GAAG,EACjDC,EAAWV,EAAQ,OAAO,MAAM,EACtCU,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,QAAS,QAAQ,EAC/BA,EAAS,MAAM,cAAeH,EAAS,MAAM,EACzCA,EAAS,OACXG,EAAS,KAAK,QAASH,EAAS,KAAK,EAEvC,MAAMI,EAAQD,EAAS,OAAO,OAAO,EACrC,OAAAC,EAAM,KAAK,IAAKJ,EAAS,EAAIA,EAAS,WAAa,CAAC,EACpDI,EAAM,KAAKH,CAAK,EACTE,CACT,EAAG,UAAU,EACTE,EAA4Bb,EAAO,CAACc,EAAMC,EAAGC,EAAGC,IAAS,CAC3D,MAAMC,EAAeJ,EAAK,OAAO,OAAO,EACxCI,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,MAAMG,EAAgBC,EAAAA,YAAYH,CAAI,EACtCC,EAAa,KAAK,aAAcC,CAAa,CAC/C,EAAG,WAAW,EACVE,EAAoCrB,EAAO,CAACC,EAASc,EAAGC,EAAGC,IAAS,CACtE,MAAMC,EAAejB,EAAQ,OAAO,KAAK,EACzCiB,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,MAAMG,EAAgBC,EAAAA,YAAYH,CAAI,EACtCC,EAAa,KAAK,aAAc,IAAIC,CAAa,EAAE,CACrD,EAAG,mBAAmB,EAClBG,EAA8BtB,EAAO,KAClB,CACnB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,KAAM,UACN,OAAQ,OACR,OAAQ,QACR,GAAI,EACJ,GAAI,CACR,GAEG,aAAa,EACZuB,EAA6BvB,EAAO,KACnB,CACjB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,cAAe,QACf,MAAO,OACP,WAAY,EACZ,GAAI,EACJ,GAAI,EACJ,MAAO,EACX,GAEG,YAAY","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"chunk-TZMSLE5B-CD_nzC2y.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.mjs"],"sourcesContent":["import {\n lineBreakRegex\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/svgDrawCommon.ts\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nvar drawRect = /* @__PURE__ */ __name((element, rectData) => {\n const rectElement = element.append(\"rect\");\n rectElement.attr(\"x\", rectData.x);\n rectElement.attr(\"y\", rectData.y);\n rectElement.attr(\"fill\", rectData.fill);\n rectElement.attr(\"stroke\", rectData.stroke);\n rectElement.attr(\"width\", rectData.width);\n rectElement.attr(\"height\", rectData.height);\n if (rectData.name) {\n rectElement.attr(\"name\", rectData.name);\n }\n if (rectData.rx) {\n rectElement.attr(\"rx\", rectData.rx);\n }\n if (rectData.ry) {\n rectElement.attr(\"ry\", rectData.ry);\n }\n if (rectData.attrs !== void 0) {\n for (const attrKey in rectData.attrs) {\n rectElement.attr(attrKey, rectData.attrs[attrKey]);\n }\n }\n if (rectData.class) {\n rectElement.attr(\"class\", rectData.class);\n }\n return rectElement;\n}, \"drawRect\");\nvar drawBackgroundRect = /* @__PURE__ */ __name((element, bounds) => {\n const rectData = {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n stroke: bounds.stroke,\n class: \"rect\"\n };\n const rectElement = drawRect(element, rectData);\n rectElement.lower();\n}, \"drawBackgroundRect\");\nvar drawText = /* @__PURE__ */ __name((element, textData) => {\n const nText = textData.text.replace(lineBreakRegex, \" \");\n const textElem = element.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.attr(\"class\", \"legend\");\n textElem.style(\"text-anchor\", textData.anchor);\n if (textData.class) {\n textElem.attr(\"class\", textData.class);\n }\n const tspan = textElem.append(\"tspan\");\n tspan.attr(\"x\", textData.x + textData.textMargin * 2);\n tspan.text(nText);\n return textElem;\n}, \"drawText\");\nvar drawImage = /* @__PURE__ */ __name((elem, x, y, link) => {\n const imageElement = elem.append(\"image\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", sanitizedLink);\n}, \"drawImage\");\nvar drawEmbeddedImage = /* @__PURE__ */ __name((element, x, y, link) => {\n const imageElement = element.append(\"use\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", `#${sanitizedLink}`);\n}, \"drawEmbeddedImage\");\nvar getNoteRect = /* @__PURE__ */ __name(() => {\n const noteRectData = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: \"#EDF2AE\",\n stroke: \"#666\",\n anchor: \"start\",\n rx: 0,\n ry: 0\n };\n return noteRectData;\n}, \"getNoteRect\");\nvar getTextObj = /* @__PURE__ */ __name(() => {\n const testObject = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n \"text-anchor\": \"start\",\n style: \"#666\",\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true\n };\n return testObject;\n}, \"getTextObj\");\n\nexport {\n drawRect,\n drawBackgroundRect,\n drawText,\n drawImage,\n drawEmbeddedImage,\n getNoteRect,\n getTextObj\n};\n"],"names":["drawRect","__name","element","rectData","rectElement","attrKey","drawBackgroundRect","bounds","drawText","textData","nText","lineBreakRegex","textElem","tspan","drawImage","elem","x","y","link","imageElement","sanitizedLink","sanitizeUrl","drawEmbeddedImage","getNoteRect","getTextObj"],"mappings":"sDASG,IAACA,EAA2BC,EAAO,CAACC,EAASC,IAAa,CAC3D,MAAMC,EAAcF,EAAQ,OAAO,MAAM,EAgBzC,GAfAE,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,OAAQD,EAAS,IAAI,EACtCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EAC1CC,EAAY,KAAK,QAASD,EAAS,KAAK,EACxCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EACtCA,EAAS,MACXC,EAAY,KAAK,OAAQD,EAAS,IAAI,EAEpCA,EAAS,IACXC,EAAY,KAAK,KAAMD,EAAS,EAAE,EAEhCA,EAAS,IACXC,EAAY,KAAK,KAAMD,EAAS,EAAE,EAEhCA,EAAS,QAAU,OACrB,UAAWE,KAAWF,EAAS,MAC7BC,EAAY,KAAKC,EAASF,EAAS,MAAME,CAAO,CAAC,EAGrD,OAAIF,EAAS,OACXC,EAAY,KAAK,QAASD,EAAS,KAAK,EAEnCC,CACT,EAAG,UAAU,EACTE,EAAqCL,EAAO,CAACC,EAASK,IAAW,CACnE,MAAMJ,EAAW,CACf,EAAGI,EAAO,OACV,EAAGA,EAAO,OACV,MAAOA,EAAO,MAAQA,EAAO,OAC7B,OAAQA,EAAO,MAAQA,EAAO,OAC9B,KAAMA,EAAO,KACb,OAAQA,EAAO,OACf,MAAO,MACX,EACsBP,EAASE,EAASC,CAAQ,EAClC,MAAK,CACnB,EAAG,oBAAoB,EACnBK,EAA2BP,EAAO,CAACC,EAASO,IAAa,CAC3D,MAAMC,EAAQD,EAAS,KAAK,QAAQE,EAAgB,GAAG,EACjDC,EAAWV,EAAQ,OAAO,MAAM,EACtCU,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,QAAS,QAAQ,EAC/BA,EAAS,MAAM,cAAeH,EAAS,MAAM,EACzCA,EAAS,OACXG,EAAS,KAAK,QAASH,EAAS,KAAK,EAEvC,MAAMI,EAAQD,EAAS,OAAO,OAAO,EACrC,OAAAC,EAAM,KAAK,IAAKJ,EAAS,EAAIA,EAAS,WAAa,CAAC,EACpDI,EAAM,KAAKH,CAAK,EACTE,CACT,EAAG,UAAU,EACTE,EAA4Bb,EAAO,CAACc,EAAMC,EAAGC,EAAGC,IAAS,CAC3D,MAAMC,EAAeJ,EAAK,OAAO,OAAO,EACxCI,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,MAAMG,EAAgBC,EAAAA,YAAYH,CAAI,EACtCC,EAAa,KAAK,aAAcC,CAAa,CAC/C,EAAG,WAAW,EACVE,EAAoCrB,EAAO,CAACC,EAASc,EAAGC,EAAGC,IAAS,CACtE,MAAMC,EAAejB,EAAQ,OAAO,KAAK,EACzCiB,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,MAAMG,EAAgBC,EAAAA,YAAYH,CAAI,EACtCC,EAAa,KAAK,aAAc,IAAIC,CAAa,EAAE,CACrD,EAAG,mBAAmB,EAClBG,EAA8BtB,EAAO,KAClB,CACnB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,KAAM,UACN,OAAQ,OACR,OAAQ,QACR,GAAI,EACJ,GAAI,CACR,GAEG,aAAa,EACZuB,EAA6BvB,EAAO,KACnB,CACjB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,cAAe,QACf,MAAO,OACP,WAAY,EACZ,GAAI,EACJ,GAAI,EACJ,MAAO,EACX,GAEG,YAAY","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js b/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js deleted file mode 100644 index 91215e251..000000000 --- a/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js +++ /dev/null @@ -1,2 +0,0 @@ -import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-CuEEgxYu.js";import{_ as i}from"./index-yx4Z55Qu.js";import"./chunk-FMBD7UC4-LU2vPcC6.js";import"./chunk-55IACEB6-BCQD3dNT.js";import"./chunk-QN33PNHL-BF8yyMHO.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram}; -//# sourceMappingURL=classDiagram-2ON5EDUG-BpsTyZ4V.js.map diff --git a/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js b/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js new file mode 100644 index 000000000..a5dc637ec --- /dev/null +++ b/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js @@ -0,0 +1,2 @@ +import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-CEAtt3i9.js";import{_ as i}from"./index-DbSnkTMx.js";import"./chunk-FMBD7UC4-DgHqX2i6.js";import"./chunk-55IACEB6-Do1tLUXI.js";import"./chunk-QN33PNHL-Bl50RaE-.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram}; +//# sourceMappingURL=classDiagram-2ON5EDUG-hvWxBdVY.js.map diff --git a/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js.map b/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js.map similarity index 95% rename from massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js.map rename to massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js.map index 3cd4d540d..3de8cb7d3 100644 --- a/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-BpsTyZ4V.js.map +++ b/massgen/frontend/web/static/assets/classDiagram-2ON5EDUG-hvWxBdVY.js.map @@ -1 +1 @@ -{"version":3,"file":"classDiagram-2ON5EDUG-BpsTyZ4V.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-2ON5EDUG.mjs"],"sourcesContent":["import {\n ClassDB,\n classDiagram_default,\n classRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-B4BG7PRW.mjs\";\nimport \"./chunk-FMBD7UC4.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/classDiagram.ts\nvar diagram = {\n parser: classDiagram_default,\n get db() {\n return new ClassDB();\n },\n renderer: classRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","classDiagram_default","ClassDB","classRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6NAuBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,CACb,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"classDiagram-2ON5EDUG-hvWxBdVY.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-2ON5EDUG.mjs"],"sourcesContent":["import {\n ClassDB,\n classDiagram_default,\n classRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-B4BG7PRW.mjs\";\nimport \"./chunk-FMBD7UC4.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/classDiagram.ts\nvar diagram = {\n parser: classDiagram_default,\n get db() {\n return new ClassDB();\n },\n renderer: classRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","classDiagram_default","ClassDB","classRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6NAuBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,CACb,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js b/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js deleted file mode 100644 index bb3b1fc82..000000000 --- a/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js +++ /dev/null @@ -1,2 +0,0 @@ -import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-CuEEgxYu.js";import{_ as i}from"./index-yx4Z55Qu.js";import"./chunk-FMBD7UC4-LU2vPcC6.js";import"./chunk-55IACEB6-BCQD3dNT.js";import"./chunk-QN33PNHL-BF8yyMHO.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram}; -//# sourceMappingURL=classDiagram-v2-WZHVMYZB-BpsTyZ4V.js.map diff --git a/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js b/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js new file mode 100644 index 000000000..c382a1958 --- /dev/null +++ b/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js @@ -0,0 +1,2 @@ +import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-CEAtt3i9.js";import{_ as i}from"./index-DbSnkTMx.js";import"./chunk-FMBD7UC4-DgHqX2i6.js";import"./chunk-55IACEB6-Do1tLUXI.js";import"./chunk-QN33PNHL-Bl50RaE-.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram}; +//# sourceMappingURL=classDiagram-v2-WZHVMYZB-hvWxBdVY.js.map diff --git a/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js.map b/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js.map similarity index 95% rename from massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js.map rename to massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js.map index c109442a5..9acc1d234 100644 --- a/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js.map +++ b/massgen/frontend/web/static/assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js.map @@ -1 +1 @@ -{"version":3,"file":"classDiagram-v2-WZHVMYZB-BpsTyZ4V.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs"],"sourcesContent":["import {\n ClassDB,\n classDiagram_default,\n classRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-B4BG7PRW.mjs\";\nimport \"./chunk-FMBD7UC4.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/classDiagram-v2.ts\nvar diagram = {\n parser: classDiagram_default,\n get db() {\n return new ClassDB();\n },\n renderer: classRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","classDiagram_default","ClassDB","classRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6NAuBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,CACb,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"classDiagram-v2-WZHVMYZB-hvWxBdVY.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs"],"sourcesContent":["import {\n ClassDB,\n classDiagram_default,\n classRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-B4BG7PRW.mjs\";\nimport \"./chunk-FMBD7UC4.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/class/classDiagram-v2.ts\nvar diagram = {\n parser: classDiagram_default,\n get db() {\n return new ClassDB();\n },\n renderer: classRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","classDiagram_default","ClassDB","classRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6NAuBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,CACb,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/clone-DEFp9e4A.js b/massgen/frontend/web/static/assets/clone-DEFp9e4A.js deleted file mode 100644 index 1c1c5ce10..000000000 --- a/massgen/frontend/web/static/assets/clone-DEFp9e4A.js +++ /dev/null @@ -1,2 +0,0 @@ -import{b as r}from"./graph-4lxArx4u.js";var e=4;function a(o){return r(o,e)}export{a as c}; -//# sourceMappingURL=clone-DEFp9e4A.js.map diff --git a/massgen/frontend/web/static/assets/clone-OwIowIht.js b/massgen/frontend/web/static/assets/clone-OwIowIht.js new file mode 100644 index 000000000..0ba777daa --- /dev/null +++ b/massgen/frontend/web/static/assets/clone-OwIowIht.js @@ -0,0 +1,2 @@ +import{b as r}from"./graph-ClFPgZSo.js";var e=4;function a(o){return r(o,e)}export{a as c}; +//# sourceMappingURL=clone-OwIowIht.js.map diff --git a/massgen/frontend/web/static/assets/clone-DEFp9e4A.js.map b/massgen/frontend/web/static/assets/clone-OwIowIht.js.map similarity index 95% rename from massgen/frontend/web/static/assets/clone-DEFp9e4A.js.map rename to massgen/frontend/web/static/assets/clone-OwIowIht.js.map index 108dcac10..48ef01531 100644 --- a/massgen/frontend/web/static/assets/clone-DEFp9e4A.js.map +++ b/massgen/frontend/web/static/assets/clone-OwIowIht.js.map @@ -1 +1 @@ -{"version":3,"file":"clone-DEFp9e4A.js","sources":["../../../../../webui/node_modules/lodash-es/clone.js"],"sourcesContent":["import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n"],"names":["CLONE_SYMBOLS_FLAG","clone","value","baseClone"],"mappings":"wCAGA,IAAIA,EAAqB,EA4BzB,SAASC,EAAMC,EAAO,CACpB,OAAOC,EAAUD,EAAOF,CAAkB,CAC5C","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"clone-OwIowIht.js","sources":["../../../../../webui/node_modules/lodash-es/clone.js"],"sourcesContent":["import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n"],"names":["CLONE_SYMBOLS_FLAG","clone","value","baseClone"],"mappings":"wCAGA,IAAIA,EAAqB,EA4BzB,SAASC,EAAMC,EAAO,CACpB,OAAOC,EAAUD,EAAOF,CAAkB,CAC5C","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/consoleHook-59e792cb-BtJ0yZKI.js b/massgen/frontend/web/static/assets/consoleHook-59e792cb-CpqUu8vm.js similarity index 99% rename from massgen/frontend/web/static/assets/consoleHook-59e792cb-BtJ0yZKI.js rename to massgen/frontend/web/static/assets/consoleHook-59e792cb-CpqUu8vm.js index ac5f43842..e49b1a664 100644 --- a/massgen/frontend/web/static/assets/consoleHook-59e792cb-BtJ0yZKI.js +++ b/massgen/frontend/web/static/assets/consoleHook-59e792cb-CpqUu8vm.js @@ -1,3 +1,3 @@ -import{ar as h,as as M}from"./index-yx4Z55Qu.js";var k=(function(){function t(){this.listeners={},this.listenersCount=0,this.channelId=Math.floor(Math.random()*1e6),this.listeners=[]}return t.prototype.cleanup=function(){this.listeners={},this.listenersCount=0},t.prototype.dispatch=function(r){Object.values(this.listeners).forEach(function(e){return e(r)})},t.prototype.listener=function(r){var e=this;if(typeof r!="function")return function(){};var s=this.listenersCount;return this.listeners[s]=r,this.listenersCount++,function(){delete e.listeners[s]}},t})();function v(t){return/[a-zA-Z.]/.test(t)}function b(t){return/[a-zA-Z]/.test(t)}function S(t){return/\s/.test(t)}function y(t){return/[&|]/.test(t)}function g(t){return/-/.test(t)}function w(t){return/["']/.test(t)}function _(t){return b(t)&&t===t.toUpperCase()}var a;(function(t){t.OR="OR",t.AND="AND",t.PIPE="PIPE",t.Command="Command",t.Argument="Argument",t.String="String",t.EnvVar="EnvVar"})(a||(a={}));var O=new Map([["&&",{type:a.AND}],["||",{type:a.OR}],["|",{type:a.PIPE}],["-",{type:a.Argument}]]);function E(t){var r=0,e=[];function s(){for(var n="";v(t[r])&&r-1){var n=this.circularCandidatesDescrs[e];return-1===n.refIdx&&(n.refIdx=n.parent?++this.circularRefCount:0),t._createRefMark(n.refIdx)}return null},t.prototype._handleValue=function(t,r,e){try{var n=t(),a=typeof n,o="object"===a&&null!==n;if(o){var i=this._ensureCircularReference(n);if(i)return i}var u=this._findTransform(a,n);return u?this._applyTransform(n,r,e,u):o?this._handleObject(n,r,e):n}catch(t){try{return this._handleValue((function(){return t instanceof Error?t:new Error(t)}),r,e)}catch(t){return null}}},t.prototype._makeTransformsMap=function(){if(o){var t=new Map;return this.transforms.forEach((function(r){r.lookup&&t.set(r.lookup,r)})),t}},t.prototype._findTransform=function(t,r){if(o&&r&&r.constructor&&(null==(a=this.transformsMap.get(r.constructor))?void 0:a.shouldTransform(t,r)))return a;for(var e=0,n=this.transforms;e0&&(e[o.refIdx]=o.parent[o.key],o.parent[o.key]=t._createRefMark(o.refIdx))}return e},t}(),l=function(){function t(t,r){this.activeTransformsStack=[],this.visitedRefs=Object.create(null),this.references=t,this.transformMap=r}return t.prototype._handlePlainObject=function(t){var r=Object.create(null);for(var n in"constructor"in t&&(t.constructor&&"string"==typeof t.constructor.name||(t.constructor={name:"Object"})),t)t.hasOwnProperty(n)&&(this._handleValue(t[n],t,n),e.test(n)&&(r[n.substring(1)]=t[n],delete t[n]));for(var a in r)t[a]=r[a]},t.prototype._handleTransformedObject=function(t,e,n){var a=t[r],o=this.transformMap[a];if(!o)throw new Error("Can't find transform for \\""+a+'" type.');this.activeTransformsStack.push(t),this._handleValue(t.data,t,"data"),this.activeTransformsStack.pop(),e[n]=o.fromSerializable(t.data)},t.prototype._handleCircularSelfRefDuringTransform=function(t,r,e){var n=this.references;Object.defineProperty(r,e,{val:void 0,configurable:!0,enumerable:!0,get:function(){return void 0===this.val&&(this.val=n[t]),this.val},set:function(t){this.val=t}})},t.prototype._handleCircularRef=function(t,r,e){this.activeTransformsStack.includes(this.references[t])?this._handleCircularSelfRefDuringTransform(t,r,e):(this.visitedRefs[t]||(this.visitedRefs[t]=!0,this._handleValue(this.references[t],this.references,t)),r[e]=this.references[t])},t.prototype._handleValue=function(t,e,n){if("object"==typeof t&&null!==t){var a=t["@r"];if(void 0!==a)this._handleCircularRef(a,e,n);else if(t[r])this._handleTransformedObject(t,e,n);else if(Array.isArray(t))for(var o=0;o-1&&this.transforms.splice(a,1),delete this.transformsMap[n.type]}return this},t.prototype.encode=function(t){var r=new c(t,this.transforms).transform();return this.serializer.serialize(r)},t.prototype.decode=function(t){var r=this.serializer.deserialize(t);return new l(r,this.transformsMap).transform()},t}();t.default=p}(z);var E=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};S.__esModule=!0,S.Decode=P=S.Encode=void 0;var k=E(O),C=E(w),D=E(A),I=E(j),N=E(z),R=[D.default,C.default,k.default,I.default],x=new N.default;x.addTransforms(R);var P=S.Encode=function(t){return JSON.parse(x.encode(t))};S.Decode=function(t){return x.decode(JSON.stringify(t))},function(r){var e=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};r.__esModule=!0;var a=e(n),i=e(o),u=S;r.default=function(t,r,e){void 0===e&&(e=!0);for(var n=t,o={pointers:{},src:{npm:"https://npmjs.com/package/console-feed",github:"https://github.com/samdenty99/console-feed"}},s=function(t){var a=n[t];n[t]=function(){a.apply(this,arguments);var n=[].slice.call(arguments);setTimeout((function(){var a=i.default(t,n);if(a){var o=a;e&&(o=u.Encode(a)),r(o,a)}}))},o.pointers[t]=a},f=0,c=a.default;f-1){var n=this.circularCandidatesDescrs[e];return-1===n.refIdx&&(n.refIdx=n.parent?++this.circularRefCount:0),t._createRefMark(n.refIdx)}return null},t.prototype._handleValue=function(t,r,e){try{var n=t(),a=typeof n,o="object"===a&&null!==n;if(o){var i=this._ensureCircularReference(n);if(i)return i}var u=this._findTransform(a,n);return u?this._applyTransform(n,r,e,u):o?this._handleObject(n,r,e):n}catch(t){try{return this._handleValue((function(){return t instanceof Error?t:new Error(t)}),r,e)}catch(t){return null}}},t.prototype._makeTransformsMap=function(){if(o){var t=new Map;return this.transforms.forEach((function(r){r.lookup&&t.set(r.lookup,r)})),t}},t.prototype._findTransform=function(t,r){if(o&&r&&r.constructor&&(null==(a=this.transformsMap.get(r.constructor))?void 0:a.shouldTransform(t,r)))return a;for(var e=0,n=this.transforms;e0&&(e[o.refIdx]=o.parent[o.key],o.parent[o.key]=t._createRefMark(o.refIdx))}return e},t}(),l=function(){function t(t,r){this.activeTransformsStack=[],this.visitedRefs=Object.create(null),this.references=t,this.transformMap=r}return t.prototype._handlePlainObject=function(t){var r=Object.create(null);for(var n in"constructor"in t&&(t.constructor&&"string"==typeof t.constructor.name||(t.constructor={name:"Object"})),t)t.hasOwnProperty(n)&&(this._handleValue(t[n],t,n),e.test(n)&&(r[n.substring(1)]=t[n],delete t[n]));for(var a in r)t[a]=r[a]},t.prototype._handleTransformedObject=function(t,e,n){var a=t[r],o=this.transformMap[a];if(!o)throw new Error("Can't find transform for \\""+a+'" type.');this.activeTransformsStack.push(t),this._handleValue(t.data,t,"data"),this.activeTransformsStack.pop(),e[n]=o.fromSerializable(t.data)},t.prototype._handleCircularSelfRefDuringTransform=function(t,r,e){var n=this.references;Object.defineProperty(r,e,{val:void 0,configurable:!0,enumerable:!0,get:function(){return void 0===this.val&&(this.val=n[t]),this.val},set:function(t){this.val=t}})},t.prototype._handleCircularRef=function(t,r,e){this.activeTransformsStack.includes(this.references[t])?this._handleCircularSelfRefDuringTransform(t,r,e):(this.visitedRefs[t]||(this.visitedRefs[t]=!0,this._handleValue(this.references[t],this.references,t)),r[e]=this.references[t])},t.prototype._handleValue=function(t,e,n){if("object"==typeof t&&null!==t){var a=t["@r"];if(void 0!==a)this._handleCircularRef(a,e,n);else if(t[r])this._handleTransformedObject(t,e,n);else if(Array.isArray(t))for(var o=0;o-1&&this.transforms.splice(a,1),delete this.transformsMap[n.type]}return this},t.prototype.encode=function(t){var r=new c(t,this.transforms).transform();return this.serializer.serialize(r)},t.prototype.decode=function(t){var r=this.serializer.deserialize(t);return new l(r,this.transformsMap).transform()},t}();t.default=p}(z);var E=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};S.__esModule=!0,S.Decode=P=S.Encode=void 0;var k=E(O),C=E(w),D=E(A),I=E(j),N=E(z),R=[D.default,C.default,k.default,I.default],x=new N.default;x.addTransforms(R);var P=S.Encode=function(t){return JSON.parse(x.encode(t))};S.Decode=function(t){return x.decode(JSON.stringify(t))},function(r){var e=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};r.__esModule=!0;var a=e(n),i=e(o),u=S;r.default=function(t,r,e){void 0===e&&(e=!0);for(var n=t,o={pointers:{},src:{npm:"https://npmjs.com/package/console-feed",github:"https://github.com/samdenty99/console-feed"}},s=function(t){var a=n[t];n[t]=function(){a.apply(this,arguments);var n=[].slice.call(arguments);setTimeout((function(){var a=i.default(t,n);if(a){var o=a;e&&(o=u.Encode(a)),r(o,a)}}))},o.pointers[t]=a},f=0,c=a.default;f-1){var n=this.circularCandidatesDescrs[e];return-1===n.refIdx&&(n.refIdx=n.parent?++this.circularRefCount:0),t._createRefMark(n.refIdx)}return null},t.prototype._handleValue=function(t,r,e){try{var n=t(),a=typeof n,o=\\\"object\\\"===a&&null!==n;if(o){var i=this._ensureCircularReference(n);if(i)return i}var u=this._findTransform(a,n);return u?this._applyTransform(n,r,e,u):o?this._handleObject(n,r,e):n}catch(t){try{return this._handleValue((function(){return t instanceof Error?t:new Error(t)}),r,e)}catch(t){return null}}},t.prototype._makeTransformsMap=function(){if(o){var t=new Map;return this.transforms.forEach((function(r){r.lookup&&t.set(r.lookup,r)})),t}},t.prototype._findTransform=function(t,r){if(o&&r&&r.constructor&&(null==(a=this.transformsMap.get(r.constructor))?void 0:a.shouldTransform(t,r)))return a;for(var e=0,n=this.transforms;e0&&(e[o.refIdx]=o.parent[o.key],o.parent[o.key]=t._createRefMark(o.refIdx))}return e},t}(),l=function(){function t(t,r){this.activeTransformsStack=[],this.visitedRefs=Object.create(null),this.references=t,this.transformMap=r}return t.prototype._handlePlainObject=function(t){var r=Object.create(null);for(var n in\\\"constructor\\\"in t&&(t.constructor&&\\\"string\\\"==typeof t.constructor.name||(t.constructor={name:\\\"Object\\\"})),t)t.hasOwnProperty(n)&&(this._handleValue(t[n],t,n),e.test(n)&&(r[n.substring(1)]=t[n],delete t[n]));for(var a in r)t[a]=r[a]},t.prototype._handleTransformedObject=function(t,e,n){var a=t[r],o=this.transformMap[a];if(!o)throw new Error(\\\"Can't find transform for \\\\\\\"\\\"+a+'\\\" type.');this.activeTransformsStack.push(t),this._handleValue(t.data,t,\\\"data\\\"),this.activeTransformsStack.pop(),e[n]=o.fromSerializable(t.data)},t.prototype._handleCircularSelfRefDuringTransform=function(t,r,e){var n=this.references;Object.defineProperty(r,e,{val:void 0,configurable:!0,enumerable:!0,get:function(){return void 0===this.val&&(this.val=n[t]),this.val},set:function(t){this.val=t}})},t.prototype._handleCircularRef=function(t,r,e){this.activeTransformsStack.includes(this.references[t])?this._handleCircularSelfRefDuringTransform(t,r,e):(this.visitedRefs[t]||(this.visitedRefs[t]=!0,this._handleValue(this.references[t],this.references,t)),r[e]=this.references[t])},t.prototype._handleValue=function(t,e,n){if(\\\"object\\\"==typeof t&&null!==t){var a=t[\\\"@r\\\"];if(void 0!==a)this._handleCircularRef(a,e,n);else if(t[r])this._handleTransformedObject(t,e,n);else if(Array.isArray(t))for(var o=0;o-1&&this.transforms.splice(a,1),delete this.transformsMap[n.type]}return this},t.prototype.encode=function(t){var r=new c(t,this.transforms).transform();return this.serializer.serialize(r)},t.prototype.decode=function(t){var r=this.serializer.deserialize(t);return new l(r,this.transformsMap).transform()},t}();t.default=p}(z);var E=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};S.__esModule=!0,S.Decode=P=S.Encode=void 0;var k=E(O),C=E(w),D=E(A),I=E(j),N=E(z),R=[D.default,C.default,k.default,I.default],x=new N.default;x.addTransforms(R);var P=S.Encode=function(t){return JSON.parse(x.encode(t))};S.Decode=function(t){return x.decode(JSON.stringify(t))},function(r){var e=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};r.__esModule=!0;var a=e(n),i=e(o),u=S;r.default=function(t,r,e){void 0===e&&(e=!0);for(var n=t,o={pointers:{},src:{npm:\\\"https://npmjs.com/package/console-feed\\\",github:\\\"https://github.com/samdenty99/console-feed\\\"}},s=function(t){var a=n[t];n[t]=function(){a.apply(this,arguments);var n=[].slice.call(arguments);setTimeout((function(){var a=i.default(t,n);if(a){var o=a;e&&(o=u.Encode(a)),r(o,a)}}))},o.pointers[t]=a},f=0,c=a.default;f-1){var n=this.circularCandidatesDescrs[e];return-1===n.refIdx&&(n.refIdx=n.parent?++this.circularRefCount:0),t._createRefMark(n.refIdx)}return null},t.prototype._handleValue=function(t,r,e){try{var n=t(),a=typeof n,o=\\\"object\\\"===a&&null!==n;if(o){var i=this._ensureCircularReference(n);if(i)return i}var u=this._findTransform(a,n);return u?this._applyTransform(n,r,e,u):o?this._handleObject(n,r,e):n}catch(t){try{return this._handleValue((function(){return t instanceof Error?t:new Error(t)}),r,e)}catch(t){return null}}},t.prototype._makeTransformsMap=function(){if(o){var t=new Map;return this.transforms.forEach((function(r){r.lookup&&t.set(r.lookup,r)})),t}},t.prototype._findTransform=function(t,r){if(o&&r&&r.constructor&&(null==(a=this.transformsMap.get(r.constructor))?void 0:a.shouldTransform(t,r)))return a;for(var e=0,n=this.transforms;e0&&(e[o.refIdx]=o.parent[o.key],o.parent[o.key]=t._createRefMark(o.refIdx))}return e},t}(),l=function(){function t(t,r){this.activeTransformsStack=[],this.visitedRefs=Object.create(null),this.references=t,this.transformMap=r}return t.prototype._handlePlainObject=function(t){var r=Object.create(null);for(var n in\\\"constructor\\\"in t&&(t.constructor&&\\\"string\\\"==typeof t.constructor.name||(t.constructor={name:\\\"Object\\\"})),t)t.hasOwnProperty(n)&&(this._handleValue(t[n],t,n),e.test(n)&&(r[n.substring(1)]=t[n],delete t[n]));for(var a in r)t[a]=r[a]},t.prototype._handleTransformedObject=function(t,e,n){var a=t[r],o=this.transformMap[a];if(!o)throw new Error(\\\"Can't find transform for \\\\\\\"\\\"+a+'\\\" type.');this.activeTransformsStack.push(t),this._handleValue(t.data,t,\\\"data\\\"),this.activeTransformsStack.pop(),e[n]=o.fromSerializable(t.data)},t.prototype._handleCircularSelfRefDuringTransform=function(t,r,e){var n=this.references;Object.defineProperty(r,e,{val:void 0,configurable:!0,enumerable:!0,get:function(){return void 0===this.val&&(this.val=n[t]),this.val},set:function(t){this.val=t}})},t.prototype._handleCircularRef=function(t,r,e){this.activeTransformsStack.includes(this.references[t])?this._handleCircularSelfRefDuringTransform(t,r,e):(this.visitedRefs[t]||(this.visitedRefs[t]=!0,this._handleValue(this.references[t],this.references,t)),r[e]=this.references[t])},t.prototype._handleValue=function(t,e,n){if(\\\"object\\\"==typeof t&&null!==t){var a=t[\\\"@r\\\"];if(void 0!==a)this._handleCircularRef(a,e,n);else if(t[r])this._handleTransformedObject(t,e,n);else if(Array.isArray(t))for(var o=0;o-1&&this.transforms.splice(a,1),delete this.transformsMap[n.type]}return this},t.prototype.encode=function(t){var r=new c(t,this.transforms).transform();return this.serializer.serialize(r)},t.prototype.decode=function(t){var r=this.serializer.deserialize(t);return new l(r,this.transformsMap).transform()},t}();t.default=p}(z);var E=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};S.__esModule=!0,S.Decode=P=S.Encode=void 0;var k=E(O),C=E(w),D=E(A),I=E(j),N=E(z),R=[D.default,C.default,k.default,I.default],x=new N.default;x.addTransforms(R);var P=S.Encode=function(t){return JSON.parse(x.encode(t))};S.Decode=function(t){return x.decode(JSON.stringify(t))},function(r){var e=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};r.__esModule=!0;var a=e(n),i=e(o),u=S;r.default=function(t,r,e){void 0===e&&(e=!0);for(var n=t,o={pointers:{},src:{npm:\\\"https://npmjs.com/package/console-feed\\\",github:\\\"https://github.com/samdenty99/console-feed\\\"}},s=function(t){var a=n[t];n[t]=function(){a.apply(this,arguments);var n=[].slice.call(arguments);setTimeout((function(){var a=i.default(t,n);if(a){var o=a;e&&(o=u.Encode(a)),r(o,a)}}))},o.pointers[t]=a},f=0,c=a.default;fh&&(this.rect.x-=(this.labelWidth-h)/2,this.setWidth(this.labelWidth)),this.labelHeight>a&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-a)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-a),this.setHeight(this.labelHeight))}}},n.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==e.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},n.prototype.transform=function(r){var h=this.rect.x;h>i.WORLD_BOUNDARY?h=i.WORLD_BOUNDARY:h<-i.WORLD_BOUNDARY&&(h=-i.WORLD_BOUNDARY);var a=this.rect.y;a>i.WORLD_BOUNDARY?a=i.WORLD_BOUNDARY:a<-i.WORLD_BOUNDARY&&(a=-i.WORLD_BOUNDARY);var p=new g(h,a),v=r.inverseTransformPoint(p);this.setLocation(v.x,v.y)},n.prototype.getLeft=function(){return this.rect.x},n.prototype.getRight=function(){return this.rect.x+this.rect.width},n.prototype.getTop=function(){return this.rect.y},n.prototype.getBottom=function(){return this.rect.y+this.rect.height},n.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},N.exports=n}),(function(N,I,T){function o(e,t){e==null&&t==null?(this.x=0,this.y=0):(this.x=e,this.y=t)}o.prototype.getX=function(){return this.x},o.prototype.getY=function(){return this.y},o.prototype.setX=function(e){this.x=e},o.prototype.setY=function(e){this.y=e},o.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},o.prototype.getCopy=function(){return new o(this.x,this.y)},o.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},N.exports=o}),(function(N,I,T){var o=T(2),e=T(10),t=T(0),i=T(6),l=T(3),g=T(1),n=T(13),d=T(12),r=T(11);function h(p,v,D){o.call(this,D),this.estimatedSize=e.MIN_VALUE,this.margin=t.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=p,v!=null&&v instanceof i?this.graphManager=v:v!=null&&v instanceof Layout&&(this.graphManager=v.graphManager)}h.prototype=Object.create(o.prototype);for(var a in o)h[a]=o[a];h.prototype.getNodes=function(){return this.nodes},h.prototype.getEdges=function(){return this.edges},h.prototype.getGraphManager=function(){return this.graphManager},h.prototype.getParent=function(){return this.parent},h.prototype.getLeft=function(){return this.left},h.prototype.getRight=function(){return this.right},h.prototype.getTop=function(){return this.top},h.prototype.getBottom=function(){return this.bottom},h.prototype.isConnected=function(){return this.isConnected},h.prototype.add=function(p,v,D){if(v==null&&D==null){var u=p;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(u)>-1)throw"Node already in graph!";return u.owner=this,this.getNodes().push(u),u}else{var E=p;if(!(this.getNodes().indexOf(v)>-1&&this.getNodes().indexOf(D)>-1))throw"Source or target not in graph!";if(!(v.owner==D.owner&&v.owner==this))throw"Both owners must be this graph!";return v.owner!=D.owner?null:(E.source=v,E.target=D,E.isInterGraph=!1,this.getEdges().push(E),v.edges.push(E),D!=v&&D.edges.push(E),E)}},h.prototype.remove=function(p){var v=p;if(p instanceof l){if(v==null)throw"Node is null!";if(!(v.owner!=null&&v.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var D=v.edges.slice(),u,E=D.length,y=0;y-1&&f>-1))throw"Source and/or target doesn't know this edge!";u.source.edges.splice(s,1),u.target!=u.source&&u.target.edges.splice(f,1);var O=u.source.owner.getEdges().indexOf(u);if(O==-1)throw"Not in owner's edge list!";u.source.owner.getEdges().splice(O,1)}},h.prototype.updateLeftTop=function(){for(var p=e.MAX_VALUE,v=e.MAX_VALUE,D,u,E,y=this.getNodes(),O=y.length,s=0;sD&&(p=D),v>u&&(v=u)}return p==e.MAX_VALUE?null:(y[0].getParent().paddingLeft!=null?E=y[0].getParent().paddingLeft:E=this.margin,this.left=v-E,this.top=p-E,new d(this.left,this.top))},h.prototype.updateBounds=function(p){for(var v=e.MAX_VALUE,D=-e.MAX_VALUE,u=e.MAX_VALUE,E=-e.MAX_VALUE,y,O,s,f,c,L=this.nodes,A=L.length,m=0;my&&(v=y),Ds&&(u=s),Ey&&(v=y),Ds&&(u=s),E=this.nodes.length){var A=0;D.forEach(function(m){m.owner==p&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},N.exports=h}),(function(N,I,T){var o,e=T(1);function t(i){o=T(5),this.layout=i,this.graphs=[],this.edges=[]}t.prototype.addRoot=function(){var i=this.layout.newGraph(),l=this.layout.newNode(null),g=this.add(i,l);return this.setRootGraph(g),this.rootGraph},t.prototype.add=function(i,l,g,n,d){if(g==null&&n==null&&d==null){if(i==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(i)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(i),i.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return i.parent=l,l.child=i,i}else{d=g,n=l,g=i;var r=n.getOwner(),h=d.getOwner();if(!(r!=null&&r.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(h!=null&&h.getGraphManager()==this))throw"Target not in this graph mgr!";if(r==h)return g.isInterGraph=!1,r.add(g,n,d);if(g.isInterGraph=!0,g.source=n,g.target=d,this.edges.indexOf(g)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(g),!(g.source!=null&&g.target!=null))throw"Edge source and/or target is null!";if(!(g.source.edges.indexOf(g)==-1&&g.target.edges.indexOf(g)==-1))throw"Edge already in source and/or target incidency list!";return g.source.edges.push(g),g.target.edges.push(g),g}},t.prototype.remove=function(i){if(i instanceof o){var l=i;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var g=[];g=g.concat(l.getEdges());for(var n,d=g.length,r=0;r=i.getRight()?l[0]+=Math.min(i.getX()-t.getX(),t.getRight()-i.getRight()):i.getX()<=t.getX()&&i.getRight()>=t.getRight()&&(l[0]+=Math.min(t.getX()-i.getX(),i.getRight()-t.getRight())),t.getY()<=i.getY()&&t.getBottom()>=i.getBottom()?l[1]+=Math.min(i.getY()-t.getY(),t.getBottom()-i.getBottom()):i.getY()<=t.getY()&&i.getBottom()>=t.getBottom()&&(l[1]+=Math.min(t.getY()-i.getY(),i.getBottom()-t.getBottom()));var d=Math.abs((i.getCenterY()-t.getCenterY())/(i.getCenterX()-t.getCenterX()));i.getCenterY()===t.getCenterY()&&i.getCenterX()===t.getCenterX()&&(d=1);var r=d*l[0],h=l[1]/d;l[0]r)return l[0]=g,l[1]=a,l[2]=d,l[3]=L,!1;if(nd)return l[0]=h,l[1]=n,l[2]=f,l[3]=r,!1;if(gd?(l[0]=v,l[1]=D,R=!0):(l[0]=p,l[1]=a,R=!0):S===w&&(g>d?(l[0]=h,l[1]=a,R=!0):(l[0]=u,l[1]=D,R=!0)),-Y===w?d>g?(l[2]=c,l[3]=L,M=!0):(l[2]=f,l[3]=s,M=!0):Y===w&&(d>g?(l[2]=O,l[3]=s,M=!0):(l[2]=A,l[3]=L,M=!0)),R&&M)return!1;if(g>d?n>r?(x=this.getCardinalDirection(S,w,4),F=this.getCardinalDirection(Y,w,2)):(x=this.getCardinalDirection(-S,w,3),F=this.getCardinalDirection(-Y,w,1)):n>r?(x=this.getCardinalDirection(-S,w,1),F=this.getCardinalDirection(-Y,w,3)):(x=this.getCardinalDirection(S,w,2),F=this.getCardinalDirection(Y,w,4)),!R)switch(x){case 1:P=a,U=g+-y/w,l[0]=U,l[1]=P;break;case 2:U=u,P=n+E*w,l[0]=U,l[1]=P;break;case 3:P=D,U=g+y/w,l[0]=U,l[1]=P;break;case 4:U=v,P=n+-E*w,l[0]=U,l[1]=P;break}if(!M)switch(F){case 1:X=s,_=d+-C/w,l[2]=_,l[3]=X;break;case 2:_=A,X=r+m*w,l[2]=_,l[3]=X;break;case 3:X=L,_=d+C/w,l[2]=_,l[3]=X;break;case 4:_=c,X=r+-m*w,l[2]=_,l[3]=X;break}}return!1},e.getCardinalDirection=function(t,i,l){return t>i?l:1+l%4},e.getIntersection=function(t,i,l,g){if(g==null)return this.getIntersection2(t,i,l);var n=t.x,d=t.y,r=i.x,h=i.y,a=l.x,p=l.y,v=g.x,D=g.y,u=void 0,E=void 0,y=void 0,O=void 0,s=void 0,f=void 0,c=void 0,L=void 0,A=void 0;return y=h-d,s=n-r,c=r*d-n*h,O=D-p,f=a-v,L=v*p-a*D,A=y*f-O*s,A===0?null:(u=(s*L-f*c)/A,E=(O*c-y*L)/A,new o(u,E))},e.angleOfVector=function(t,i,l,g){var n=void 0;return t!==l?(n=Math.atan((g-i)/(l-t)),l0?1:e<0?-1:0},o.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},o.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},N.exports=o}),(function(N,I,T){function o(){}o.MAX_VALUE=2147483647,o.MIN_VALUE=-2147483648,N.exports=o}),(function(N,I,T){var o=(function(){function n(d,r){for(var h=0;h"u"?"undefined":o(t);return t==null||i!="object"&&i!="function"},N.exports=e}),(function(N,I,T){function o(a){if(Array.isArray(a)){for(var p=0,v=Array(a.length);p0&&p;){for(y.push(s[0]);y.length>0&&p;){var f=y[0];y.splice(0,1),E.add(f);for(var c=f.getEdges(),u=0;u-1&&s.splice(C,1)}E=new Set,O=new Map}}return a},h.prototype.createDummyNodesForBendpoints=function(a){for(var p=[],v=a.source,D=this.graphManager.calcLowestCommonAncestor(a.source,a.target),u=0;u0){for(var D=this.edgeToDummyNodes.get(v),u=0;u=0&&p.splice(L,1);var A=O.getNeighborsList();A.forEach(function(R){if(v.indexOf(R)<0){var M=D.get(R),S=M-1;S==1&&f.push(R),D.set(R,S)}})}v=v.concat(f),(p.length==1||p.length==2)&&(u=!0,E=p[0])}return E},h.prototype.setGraphManager=function(a){this.graphManager=a},N.exports=h}),(function(N,I,T){function o(){}o.seed=1,o.x=0,o.nextDouble=function(){return o.x=Math.sin(o.seed++)*1e4,o.x-Math.floor(o.x)},N.exports=o}),(function(N,I,T){var o=T(4);function e(t,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}e.prototype.getWorldOrgX=function(){return this.lworldOrgX},e.prototype.setWorldOrgX=function(t){this.lworldOrgX=t},e.prototype.getWorldOrgY=function(){return this.lworldOrgY},e.prototype.setWorldOrgY=function(t){this.lworldOrgY=t},e.prototype.getWorldExtX=function(){return this.lworldExtX},e.prototype.setWorldExtX=function(t){this.lworldExtX=t},e.prototype.getWorldExtY=function(){return this.lworldExtY},e.prototype.setWorldExtY=function(t){this.lworldExtY=t},e.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},e.prototype.setDeviceOrgX=function(t){this.ldeviceOrgX=t},e.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},e.prototype.setDeviceOrgY=function(t){this.ldeviceOrgY=t},e.prototype.getDeviceExtX=function(){return this.ldeviceExtX},e.prototype.setDeviceExtX=function(t){this.ldeviceExtX=t},e.prototype.getDeviceExtY=function(){return this.ldeviceExtY},e.prototype.setDeviceExtY=function(t){this.ldeviceExtY=t},e.prototype.transformX=function(t){var i=0,l=this.lworldExtX;return l!=0&&(i=this.ldeviceOrgX+(t-this.lworldOrgX)*this.ldeviceExtX/l),i},e.prototype.transformY=function(t){var i=0,l=this.lworldExtY;return l!=0&&(i=this.ldeviceOrgY+(t-this.lworldOrgY)*this.ldeviceExtY/l),i},e.prototype.inverseTransformX=function(t){var i=0,l=this.ldeviceExtX;return l!=0&&(i=this.lworldOrgX+(t-this.ldeviceOrgX)*this.lworldExtX/l),i},e.prototype.inverseTransformY=function(t){var i=0,l=this.ldeviceExtY;return l!=0&&(i=this.lworldOrgY+(t-this.ldeviceOrgY)*this.lworldExtY/l),i},e.prototype.inverseTransformPoint=function(t){var i=new o(this.inverseTransformX(t.x),this.inverseTransformY(t.y));return i},N.exports=e}),(function(N,I,T){function o(r){if(Array.isArray(r)){for(var h=0,a=Array(r.length);ht.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*t.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-t.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT_INCREMENTAL):(r>t.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(t.COOLING_ADAPTATION_FACTOR,1-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*(1-t.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},n.prototype.calcSpringForces=function(){for(var r=this.getAllEdges(),h,a=0;a0&&arguments[0]!==void 0?arguments[0]:!0,h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a,p,v,D,u=this.getAllNodes(),E;if(this.useFRGridVariant)for(this.totalIterations%t.GRID_CALCULATION_CHECK_PERIOD==1&&r&&this.updateGrid(),E=new Set,a=0;ay||E>y)&&(r.gravitationForceX=-this.gravityConstant*v,r.gravitationForceY=-this.gravityConstant*D)):(y=h.getEstimatedSize()*this.compoundGravityRangeFactor,(u>y||E>y)&&(r.gravitationForceX=-this.gravityConstant*v*this.compoundGravityConstant,r.gravitationForceY=-this.gravityConstant*D*this.compoundGravityConstant))},n.prototype.isConverged=function(){var r,h=!1;return this.totalIterations>this.maxIterations/3&&(h=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),r=this.totalDisplacement=u.length||y>=u[0].length)){for(var O=0;On}}]),l})();N.exports=i}),(function(N,I,T){var o=(function(){function i(l,g){for(var n=0;n2&&arguments[2]!==void 0?arguments[2]:1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;e(this,i),this.sequence1=l,this.sequence2=g,this.match_score=n,this.mismatch_penalty=d,this.gap_penalty=r,this.iMax=l.length+1,this.jMax=g.length+1,this.grid=new Array(this.iMax);for(var h=0;h=0;l--){var g=this.listeners[l];g.event===t&&g.callback===i&&this.listeners.splice(l,1)}},e.emit=function(t,i){for(var l=0;lg.coolingFactor*g.maxNodeDisplacement&&(this.displacementX=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementX)),Math.abs(this.displacementY)>g.coolingFactor*g.maxNodeDisplacement&&(this.displacementY=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),g.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},i.prototype.propogateDisplacementToChildren=function(g,n){for(var d=this.getChild().getNodes(),r,h=0;h0)this.positionNodesRadially(s);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var f=new Set(this.getAllNodes()),c=this.nodesWithGravity.filter(function(L){return f.has(L)});this.graphManager.setAllNodesToApplyGravitation(c),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},y.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%d.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var s=new Set(this.getAllNodes()),f=this.nodesWithGravity.filter(function(A){return s.has(A)});this.graphManager.setAllNodesToApplyGravitation(f),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var c=!this.isTreeGrowing&&!this.isGrowthFinished,L=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(c,L),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},y.prototype.getPositionsData=function(){for(var s=this.graphManager.getAllNodes(),f={},c=0;c1){var R;for(R=0;RL&&(L=Math.floor(C.y)),m=Math.floor(C.x+n.DEFAULT_COMPONENT_SEPERATION)}this.transform(new a(r.WORLD_CENTER_X-C.x/2,r.WORLD_CENTER_Y-C.y/2))},y.radialLayout=function(s,f,c){var L=Math.max(this.maxDiagonalInTree(s),n.DEFAULT_RADIAL_SEPARATION);y.branchRadialLayout(f,null,0,359,0,L);var A=u.calculateBounds(s),m=new E;m.setDeviceOrgX(A.getMinX()),m.setDeviceOrgY(A.getMinY()),m.setWorldOrgX(c.x),m.setWorldOrgY(c.y);for(var C=0;C1;){var X=_[0];_.splice(0,1);var H=w.indexOf(X);H>=0&&w.splice(H,1),U--,x--}f!=null?P=(w.indexOf(_[0])+1)%U:P=0;for(var W=Math.abs(L-c)/x,B=P;F!=x;B=++B%U){var K=w[B].getOtherEnd(s);if(K!=f){var q=(c+F*W)%360,ht=(q+W)%360;y.branchRadialLayout(K,s,q,ht,A+m,m),F++}}},y.maxDiagonalInTree=function(s){for(var f=v.MIN_VALUE,c=0;cf&&(f=A)}return f},y.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},y.prototype.groupZeroDegreeMembers=function(){var s=this,f={};this.memberGroups={},this.idToDummyNode={};for(var c=[],L=this.graphManager.getAllNodes(),A=0;A"u"&&(f[R]=[]),f[R]=f[R].concat(m)}Object.keys(f).forEach(function(M){if(f[M].length>1){var S="DummyCompound_"+M;s.memberGroups[S]=f[M];var Y=f[M][0].getParent(),w=new l(s.graphManager);w.id=S,w.paddingLeft=Y.paddingLeft||0,w.paddingRight=Y.paddingRight||0,w.paddingBottom=Y.paddingBottom||0,w.paddingTop=Y.paddingTop||0,s.idToDummyNode[S]=w;var x=s.getGraphManager().add(s.newGraph(),w),F=Y.getChild();F.add(w);for(var U=0;U=0;s--){var f=this.compoundOrder[s],c=f.id,L=f.paddingLeft,A=f.paddingTop;this.adjustLocations(this.tiledMemberPack[c],f.rect.x,f.rect.y,L,A)}},y.prototype.repopulateZeroDegreeMembers=function(){var s=this,f=this.tiledZeroDegreePack;Object.keys(f).forEach(function(c){var L=s.idToDummyNode[c],A=L.paddingLeft,m=L.paddingTop;s.adjustLocations(f[c],L.rect.x,L.rect.y,A,m)})},y.prototype.getToBeTiled=function(s){var f=s.id;if(this.toBeTiled[f]!=null)return this.toBeTiled[f];var c=s.getChild();if(c==null)return this.toBeTiled[f]=!1,!1;for(var L=c.getNodes(),A=0;A0)return this.toBeTiled[f]=!1,!1;if(m.getChild()==null){this.toBeTiled[m.id]=!1;continue}if(!this.getToBeTiled(m))return this.toBeTiled[f]=!1,!1}return this.toBeTiled[f]=!0,!0},y.prototype.getNodeDegree=function(s){s.id;for(var f=s.getEdges(),c=0,L=0;LM&&(M=Y.rect.height)}c+=M+s.verticalPadding}},y.prototype.tileCompoundMembers=function(s,f){var c=this;this.tiledMemberPack=[],Object.keys(s).forEach(function(L){var A=f[L];c.tiledMemberPack[L]=c.tileNodes(s[L],A.paddingLeft+A.paddingRight),A.rect.width=c.tiledMemberPack[L].width,A.rect.height=c.tiledMemberPack[L].height})},y.prototype.tileNodes=function(s,f){var c=n.TILING_PADDING_VERTICAL,L=n.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:f,verticalPadding:c,horizontalPadding:L};s.sort(function(R,M){return R.rect.width*R.rect.height>M.rect.width*M.rect.height?-1:R.rect.width*R.rect.height0&&(C+=s.horizontalPadding),s.rowWidth[c]=C,s.width0&&(R+=s.verticalPadding);var M=0;R>s.rowHeight[c]&&(M=s.rowHeight[c],s.rowHeight[c]=R,M=s.rowHeight[c]-M),s.height+=M,s.rows[c].push(f)},y.prototype.getShortestRowIndex=function(s){for(var f=-1,c=Number.MAX_VALUE,L=0;Lc&&(f=L,c=s.rowWidth[L]);return f},y.prototype.canAddHorizontal=function(s,f,c){var L=this.getShortestRowIndex(s);if(L<0)return!0;var A=s.rowWidth[L];if(A+s.horizontalPadding+f<=s.width)return!0;var m=0;s.rowHeight[L]0&&(m=c+s.verticalPadding-s.rowHeight[L]);var C;s.width-A>=f+s.horizontalPadding?C=(s.height+m)/(A+f+s.horizontalPadding):C=(s.height+m)/s.width,m=c+s.verticalPadding;var R;return s.widthm&&f!=c){L.splice(-1,1),s.rows[c].push(A),s.rowWidth[f]=s.rowWidth[f]-m,s.rowWidth[c]=s.rowWidth[c]+m,s.width=s.rowWidth[instance.getLongestRowIndex(s)];for(var C=Number.MIN_VALUE,R=0;RC&&(C=L[R].height);f>0&&(C+=s.verticalPadding);var M=s.rowHeight[f]+s.rowHeight[c];s.rowHeight[f]=C,s.rowHeight[c]0)for(var F=A;F<=m;F++)x[0]+=this.grid[F][C-1].length+this.grid[F][C].length-1;if(m0)for(var F=C;F<=R;F++)x[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var U=v.MAX_VALUE,P,_,X=0;X0){var R;R=E.getGraphManager().add(E.newGraph(),c),this.processChildrenList(R,f,E)}}},a.prototype.stop=function(){return this.stopped=!0,this};var v=function(u){u("layout","cose-bilkent",a)};typeof cytoscape<"u"&&v(cytoscape),I.exports=v})])})})(k)),k.exports}var yt=vt();const Et=lt(yt);tt.use(Et);function et(G,b){G.forEach(N=>{const I={id:N.id,labelText:N.label,height:N.height,width:N.width,padding:N.padding??0};Object.keys(N).forEach(T=>{["id","label","height","width","padding","x","y"].includes(T)||(I[T]=N[T])}),b.add({group:"nodes",data:I,position:{x:N.x??0,y:N.y??0}})})}V(et,"addNodes");function rt(G,b){G.forEach(N=>{const I={id:N.id,source:N.start,target:N.end};Object.keys(N).forEach(T=>{["id","start","end"].includes(T)||(I[T]=N[T])}),b.add({group:"edges",data:I})})}V(rt,"addEdges");function it(G){return new Promise(b=>{const N=gt("body").append("div").attr("id","cy").attr("style","display:none"),I=tt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});N.remove(),et(G.nodes,I),rt(G.edges,I),I.nodes().forEach(function(o){o.layoutDimensions=()=>{const e=o.data();return{w:e.width,h:e.height}}});const T={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};I.layout(T).run(),I.ready(o=>{$.info("Cytoscape ready",o),b(I)})})}V(it,"createCytoscapeInstance");function nt(G){return G.nodes().map(b=>{const N=b.data(),I=b.position(),T={id:N.id,x:I.x,y:I.y};return Object.keys(N).forEach(o=>{o!=="id"&&(T[o]=N[o])}),T})}V(nt,"extractPositionedNodes");function ot(G){return G.edges().map(b=>{const N=b.data(),I=b._private.rscratch,T={id:N.id,source:N.source,target:N.target,startX:I.startX,startY:I.startY,midX:I.midX,midY:I.midY,endX:I.endX,endY:I.endY};return Object.keys(N).forEach(o=>{["id","source","target"].includes(o)||(T[o]=N[o])}),T})}V(ot,"extractPositionedEdges");async function st(G,b){$.debug("Starting cose-bilkent layout algorithm");try{at(G);const N=await it(G),I=nt(N),T=ot(N);return $.debug(`Layout completed: ${I.length} nodes, ${T.length} edges`),{nodes:I,edges:T}}catch(N){throw $.error("Error in cose-bilkent layout algorithm:",N),N}}V(st,"executeCoseBilkentLayout");function at(G){if(!G)throw new Error("Layout data is required");if(!G.config)throw new Error("Configuration is required in layout data");if(!G.rootNode)throw new Error("Root node is required");if(!G.nodes||!Array.isArray(G.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(G.edges))throw new Error("Edges array is required in layout data");return!0}V(at,"validateLayoutData");var Lt=V(async(G,b,{insertCluster:N,insertEdge:I,insertEdgeLabel:T,insertMarkers:o,insertNode:e,log:t,positionEdgeLabel:i},{algorithm:l})=>{const g={},n={},d=b.select("g");o(d,G.markers,G.type,G.diagramId);const r=d.insert("g").attr("class","subgraphs"),h=d.insert("g").attr("class","edgePaths"),a=d.insert("g").attr("class","edgeLabels"),p=d.insert("g").attr("class","nodes");t.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(G.nodes.map(async u=>{if(u.isGroup){const E={...u};n[u.id]=E,g[u.id]=E,await N(r,u)}else{const E={...u};g[u.id]=E;const y=await e(p,u,{config:G.config,dir:G.direction||"TB"}),O=y.node().getBBox();E.width=O.width,E.height=O.height,E.domId=y,t.debug(`Node ${u.id} dimensions: ${O.width}x${O.height}`)}})),t.debug("Running cose-bilkent layout algorithm");const v={...G,nodes:G.nodes.map(u=>{const E=g[u.id];return{...u,width:E.width,height:E.height}})},D=await st(v,G.config);t.debug("Positioning nodes based on layout results"),D.nodes.forEach(u=>{const E=g[u.id];E!=null&&E.domId&&(E.domId.attr("transform",`translate(${u.x}, ${u.y})`),E.x=u.x,E.y=u.y,t.debug(`Positioned node ${E.id} at center (${u.x}, ${u.y})`))}),D.edges.forEach(u=>{const E=G.edges.find(y=>y.id===u.id);E&&(E.points=[{x:u.startX,y:u.startY},{x:u.midX,y:u.midY},{x:u.endX,y:u.endY}])}),t.debug("Inserting and positioning edges"),await Promise.all(G.edges.map(async u=>{await T(a,u);const E=g[u.start??""],y=g[u.end??""];if(E&&y){const O=D.edges.find(s=>s.id===u.id);if(O){t.debug("APA01 positionedEdge",O);const s={...u},f=I(h,s,n,G.type,E,y,G.diagramId);i(s,f)}else{const s={...u,points:[{x:E.x||0,y:E.y||0},{x:y.x||0,y:y.y||0}]},f=I(h,s,n,G.type,E,y,G.diagramId);i(s,f)}}})),t.debug("Cose-bilkent rendering completed")},"render"),At=Lt;export{At as render}; -//# sourceMappingURL=cose-bilkent-S5V4N54A-m9SYVIAm.js.map +import{aK as lt,_ as V,l as $,d as gt}from"./index-DbSnkTMx.js";import{c as tt}from"./cytoscape.esm-BQaXIfA_.js";var k={exports:{}},Z={exports:{}},Q={exports:{}},ut=Q.exports,j;function ft(){return j||(j=1,(function(G,b){(function(I,T){G.exports=T()})(ut,function(){return(function(N){var I={};function T(o){if(I[o])return I[o].exports;var e=I[o]={i:o,l:!1,exports:{}};return N[o].call(e.exports,e,e.exports,T),e.l=!0,e.exports}return T.m=N,T.c=I,T.i=function(o){return o},T.d=function(o,e,t){T.o(o,e)||Object.defineProperty(o,e,{configurable:!1,enumerable:!0,get:t})},T.n=function(o){var e=o&&o.__esModule?function(){return o.default}:function(){return o};return T.d(e,"a",e),e},T.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},T.p="",T(T.s=26)})([(function(N,I,T){function o(){}o.QUALITY=1,o.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,o.DEFAULT_INCREMENTAL=!1,o.DEFAULT_ANIMATION_ON_LAYOUT=!0,o.DEFAULT_ANIMATION_DURING_LAYOUT=!1,o.DEFAULT_ANIMATION_PERIOD=50,o.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,o.DEFAULT_GRAPH_MARGIN=15,o.NODE_DIMENSIONS_INCLUDE_LABELS=!1,o.SIMPLE_NODE_SIZE=40,o.SIMPLE_NODE_HALF_SIZE=o.SIMPLE_NODE_SIZE/2,o.EMPTY_COMPOUND_NODE_SIZE=40,o.MIN_EDGE_LENGTH=1,o.WORLD_BOUNDARY=1e6,o.INITIAL_WORLD_BOUNDARY=o.WORLD_BOUNDARY/1e3,o.WORLD_CENTER_X=1200,o.WORLD_CENTER_Y=900,N.exports=o}),(function(N,I,T){var o=T(2),e=T(8),t=T(9);function i(g,n,d){o.call(this,d),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=d,this.bendpoints=[],this.source=g,this.target=n}i.prototype=Object.create(o.prototype);for(var l in o)i[l]=o[l];i.prototype.getSource=function(){return this.source},i.prototype.getTarget=function(){return this.target},i.prototype.isInterGraph=function(){return this.isInterGraph},i.prototype.getLength=function(){return this.length},i.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},i.prototype.getBendpoints=function(){return this.bendpoints},i.prototype.getLca=function(){return this.lca},i.prototype.getSourceInLca=function(){return this.sourceInLca},i.prototype.getTargetInLca=function(){return this.targetInLca},i.prototype.getOtherEnd=function(g){if(this.source===g)return this.target;if(this.target===g)return this.source;throw"Node is not incident with this edge"},i.prototype.getOtherEndInGraph=function(g,n){for(var d=this.getOtherEnd(g),r=n.getGraphManager().getRoot();;){if(d.getOwner()==n)return d;if(d.getOwner()==r)break;d=d.getOwner().getParent()}return null},i.prototype.updateLength=function(){var g=new Array(4);this.isOverlapingSourceAndTarget=e.getIntersection(this.target.getRect(),this.source.getRect(),g),this.isOverlapingSourceAndTarget||(this.lengthX=g[0]-g[2],this.lengthY=g[1]-g[3],Math.abs(this.lengthX)<1&&(this.lengthX=t.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=t.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},i.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=t.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=t.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},N.exports=i}),(function(N,I,T){function o(e){this.vGraphObject=e}N.exports=o}),(function(N,I,T){var o=T(2),e=T(10),t=T(13),i=T(0),l=T(16),g=T(4);function n(r,h,a,p){a==null&&p==null&&(p=h),o.call(this,p),r.graphManager!=null&&(r=r.graphManager),this.estimatedSize=e.MIN_VALUE,this.inclusionTreeDepth=e.MAX_VALUE,this.vGraphObject=p,this.edges=[],this.graphManager=r,a!=null&&h!=null?this.rect=new t(h.x,h.y,a.width,a.height):this.rect=new t}n.prototype=Object.create(o.prototype);for(var d in o)n[d]=o[d];n.prototype.getEdges=function(){return this.edges},n.prototype.getChild=function(){return this.child},n.prototype.getOwner=function(){return this.owner},n.prototype.getWidth=function(){return this.rect.width},n.prototype.setWidth=function(r){this.rect.width=r},n.prototype.getHeight=function(){return this.rect.height},n.prototype.setHeight=function(r){this.rect.height=r},n.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},n.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},n.prototype.getCenter=function(){return new g(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},n.prototype.getLocation=function(){return new g(this.rect.x,this.rect.y)},n.prototype.getRect=function(){return this.rect},n.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},n.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},n.prototype.setRect=function(r,h){this.rect.x=r.x,this.rect.y=r.y,this.rect.width=h.width,this.rect.height=h.height},n.prototype.setCenter=function(r,h){this.rect.x=r-this.rect.width/2,this.rect.y=h-this.rect.height/2},n.prototype.setLocation=function(r,h){this.rect.x=r,this.rect.y=h},n.prototype.moveBy=function(r,h){this.rect.x+=r,this.rect.y+=h},n.prototype.getEdgeListToNode=function(r){var h=[],a=this;return a.edges.forEach(function(p){if(p.target==r){if(p.source!=a)throw"Incorrect edge source!";h.push(p)}}),h},n.prototype.getEdgesBetween=function(r){var h=[],a=this;return a.edges.forEach(function(p){if(!(p.source==a||p.target==a))throw"Incorrect edge source and/or target";(p.target==r||p.source==r)&&h.push(p)}),h},n.prototype.getNeighborsList=function(){var r=new Set,h=this;return h.edges.forEach(function(a){if(a.source==h)r.add(a.target);else{if(a.target!=h)throw"Incorrect incidency!";r.add(a.source)}}),r},n.prototype.withChildren=function(){var r=new Set,h,a;if(r.add(this),this.child!=null)for(var p=this.child.getNodes(),v=0;vh&&(this.rect.x-=(this.labelWidth-h)/2,this.setWidth(this.labelWidth)),this.labelHeight>a&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-a)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-a),this.setHeight(this.labelHeight))}}},n.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==e.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},n.prototype.transform=function(r){var h=this.rect.x;h>i.WORLD_BOUNDARY?h=i.WORLD_BOUNDARY:h<-i.WORLD_BOUNDARY&&(h=-i.WORLD_BOUNDARY);var a=this.rect.y;a>i.WORLD_BOUNDARY?a=i.WORLD_BOUNDARY:a<-i.WORLD_BOUNDARY&&(a=-i.WORLD_BOUNDARY);var p=new g(h,a),v=r.inverseTransformPoint(p);this.setLocation(v.x,v.y)},n.prototype.getLeft=function(){return this.rect.x},n.prototype.getRight=function(){return this.rect.x+this.rect.width},n.prototype.getTop=function(){return this.rect.y},n.prototype.getBottom=function(){return this.rect.y+this.rect.height},n.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},N.exports=n}),(function(N,I,T){function o(e,t){e==null&&t==null?(this.x=0,this.y=0):(this.x=e,this.y=t)}o.prototype.getX=function(){return this.x},o.prototype.getY=function(){return this.y},o.prototype.setX=function(e){this.x=e},o.prototype.setY=function(e){this.y=e},o.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},o.prototype.getCopy=function(){return new o(this.x,this.y)},o.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},N.exports=o}),(function(N,I,T){var o=T(2),e=T(10),t=T(0),i=T(6),l=T(3),g=T(1),n=T(13),d=T(12),r=T(11);function h(p,v,D){o.call(this,D),this.estimatedSize=e.MIN_VALUE,this.margin=t.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=p,v!=null&&v instanceof i?this.graphManager=v:v!=null&&v instanceof Layout&&(this.graphManager=v.graphManager)}h.prototype=Object.create(o.prototype);for(var a in o)h[a]=o[a];h.prototype.getNodes=function(){return this.nodes},h.prototype.getEdges=function(){return this.edges},h.prototype.getGraphManager=function(){return this.graphManager},h.prototype.getParent=function(){return this.parent},h.prototype.getLeft=function(){return this.left},h.prototype.getRight=function(){return this.right},h.prototype.getTop=function(){return this.top},h.prototype.getBottom=function(){return this.bottom},h.prototype.isConnected=function(){return this.isConnected},h.prototype.add=function(p,v,D){if(v==null&&D==null){var u=p;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(u)>-1)throw"Node already in graph!";return u.owner=this,this.getNodes().push(u),u}else{var E=p;if(!(this.getNodes().indexOf(v)>-1&&this.getNodes().indexOf(D)>-1))throw"Source or target not in graph!";if(!(v.owner==D.owner&&v.owner==this))throw"Both owners must be this graph!";return v.owner!=D.owner?null:(E.source=v,E.target=D,E.isInterGraph=!1,this.getEdges().push(E),v.edges.push(E),D!=v&&D.edges.push(E),E)}},h.prototype.remove=function(p){var v=p;if(p instanceof l){if(v==null)throw"Node is null!";if(!(v.owner!=null&&v.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var D=v.edges.slice(),u,E=D.length,y=0;y-1&&f>-1))throw"Source and/or target doesn't know this edge!";u.source.edges.splice(s,1),u.target!=u.source&&u.target.edges.splice(f,1);var O=u.source.owner.getEdges().indexOf(u);if(O==-1)throw"Not in owner's edge list!";u.source.owner.getEdges().splice(O,1)}},h.prototype.updateLeftTop=function(){for(var p=e.MAX_VALUE,v=e.MAX_VALUE,D,u,E,y=this.getNodes(),O=y.length,s=0;sD&&(p=D),v>u&&(v=u)}return p==e.MAX_VALUE?null:(y[0].getParent().paddingLeft!=null?E=y[0].getParent().paddingLeft:E=this.margin,this.left=v-E,this.top=p-E,new d(this.left,this.top))},h.prototype.updateBounds=function(p){for(var v=e.MAX_VALUE,D=-e.MAX_VALUE,u=e.MAX_VALUE,E=-e.MAX_VALUE,y,O,s,f,c,L=this.nodes,A=L.length,m=0;my&&(v=y),Ds&&(u=s),Ey&&(v=y),Ds&&(u=s),E=this.nodes.length){var A=0;D.forEach(function(m){m.owner==p&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},N.exports=h}),(function(N,I,T){var o,e=T(1);function t(i){o=T(5),this.layout=i,this.graphs=[],this.edges=[]}t.prototype.addRoot=function(){var i=this.layout.newGraph(),l=this.layout.newNode(null),g=this.add(i,l);return this.setRootGraph(g),this.rootGraph},t.prototype.add=function(i,l,g,n,d){if(g==null&&n==null&&d==null){if(i==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(i)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(i),i.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return i.parent=l,l.child=i,i}else{d=g,n=l,g=i;var r=n.getOwner(),h=d.getOwner();if(!(r!=null&&r.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(h!=null&&h.getGraphManager()==this))throw"Target not in this graph mgr!";if(r==h)return g.isInterGraph=!1,r.add(g,n,d);if(g.isInterGraph=!0,g.source=n,g.target=d,this.edges.indexOf(g)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(g),!(g.source!=null&&g.target!=null))throw"Edge source and/or target is null!";if(!(g.source.edges.indexOf(g)==-1&&g.target.edges.indexOf(g)==-1))throw"Edge already in source and/or target incidency list!";return g.source.edges.push(g),g.target.edges.push(g),g}},t.prototype.remove=function(i){if(i instanceof o){var l=i;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var g=[];g=g.concat(l.getEdges());for(var n,d=g.length,r=0;r=i.getRight()?l[0]+=Math.min(i.getX()-t.getX(),t.getRight()-i.getRight()):i.getX()<=t.getX()&&i.getRight()>=t.getRight()&&(l[0]+=Math.min(t.getX()-i.getX(),i.getRight()-t.getRight())),t.getY()<=i.getY()&&t.getBottom()>=i.getBottom()?l[1]+=Math.min(i.getY()-t.getY(),t.getBottom()-i.getBottom()):i.getY()<=t.getY()&&i.getBottom()>=t.getBottom()&&(l[1]+=Math.min(t.getY()-i.getY(),i.getBottom()-t.getBottom()));var d=Math.abs((i.getCenterY()-t.getCenterY())/(i.getCenterX()-t.getCenterX()));i.getCenterY()===t.getCenterY()&&i.getCenterX()===t.getCenterX()&&(d=1);var r=d*l[0],h=l[1]/d;l[0]r)return l[0]=g,l[1]=a,l[2]=d,l[3]=L,!1;if(nd)return l[0]=h,l[1]=n,l[2]=f,l[3]=r,!1;if(gd?(l[0]=v,l[1]=D,R=!0):(l[0]=p,l[1]=a,R=!0):S===w&&(g>d?(l[0]=h,l[1]=a,R=!0):(l[0]=u,l[1]=D,R=!0)),-Y===w?d>g?(l[2]=c,l[3]=L,M=!0):(l[2]=f,l[3]=s,M=!0):Y===w&&(d>g?(l[2]=O,l[3]=s,M=!0):(l[2]=A,l[3]=L,M=!0)),R&&M)return!1;if(g>d?n>r?(x=this.getCardinalDirection(S,w,4),F=this.getCardinalDirection(Y,w,2)):(x=this.getCardinalDirection(-S,w,3),F=this.getCardinalDirection(-Y,w,1)):n>r?(x=this.getCardinalDirection(-S,w,1),F=this.getCardinalDirection(-Y,w,3)):(x=this.getCardinalDirection(S,w,2),F=this.getCardinalDirection(Y,w,4)),!R)switch(x){case 1:P=a,U=g+-y/w,l[0]=U,l[1]=P;break;case 2:U=u,P=n+E*w,l[0]=U,l[1]=P;break;case 3:P=D,U=g+y/w,l[0]=U,l[1]=P;break;case 4:U=v,P=n+-E*w,l[0]=U,l[1]=P;break}if(!M)switch(F){case 1:X=s,_=d+-C/w,l[2]=_,l[3]=X;break;case 2:_=A,X=r+m*w,l[2]=_,l[3]=X;break;case 3:X=L,_=d+C/w,l[2]=_,l[3]=X;break;case 4:_=c,X=r+-m*w,l[2]=_,l[3]=X;break}}return!1},e.getCardinalDirection=function(t,i,l){return t>i?l:1+l%4},e.getIntersection=function(t,i,l,g){if(g==null)return this.getIntersection2(t,i,l);var n=t.x,d=t.y,r=i.x,h=i.y,a=l.x,p=l.y,v=g.x,D=g.y,u=void 0,E=void 0,y=void 0,O=void 0,s=void 0,f=void 0,c=void 0,L=void 0,A=void 0;return y=h-d,s=n-r,c=r*d-n*h,O=D-p,f=a-v,L=v*p-a*D,A=y*f-O*s,A===0?null:(u=(s*L-f*c)/A,E=(O*c-y*L)/A,new o(u,E))},e.angleOfVector=function(t,i,l,g){var n=void 0;return t!==l?(n=Math.atan((g-i)/(l-t)),l0?1:e<0?-1:0},o.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},o.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},N.exports=o}),(function(N,I,T){function o(){}o.MAX_VALUE=2147483647,o.MIN_VALUE=-2147483648,N.exports=o}),(function(N,I,T){var o=(function(){function n(d,r){for(var h=0;h"u"?"undefined":o(t);return t==null||i!="object"&&i!="function"},N.exports=e}),(function(N,I,T){function o(a){if(Array.isArray(a)){for(var p=0,v=Array(a.length);p0&&p;){for(y.push(s[0]);y.length>0&&p;){var f=y[0];y.splice(0,1),E.add(f);for(var c=f.getEdges(),u=0;u-1&&s.splice(C,1)}E=new Set,O=new Map}}return a},h.prototype.createDummyNodesForBendpoints=function(a){for(var p=[],v=a.source,D=this.graphManager.calcLowestCommonAncestor(a.source,a.target),u=0;u0){for(var D=this.edgeToDummyNodes.get(v),u=0;u=0&&p.splice(L,1);var A=O.getNeighborsList();A.forEach(function(R){if(v.indexOf(R)<0){var M=D.get(R),S=M-1;S==1&&f.push(R),D.set(R,S)}})}v=v.concat(f),(p.length==1||p.length==2)&&(u=!0,E=p[0])}return E},h.prototype.setGraphManager=function(a){this.graphManager=a},N.exports=h}),(function(N,I,T){function o(){}o.seed=1,o.x=0,o.nextDouble=function(){return o.x=Math.sin(o.seed++)*1e4,o.x-Math.floor(o.x)},N.exports=o}),(function(N,I,T){var o=T(4);function e(t,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}e.prototype.getWorldOrgX=function(){return this.lworldOrgX},e.prototype.setWorldOrgX=function(t){this.lworldOrgX=t},e.prototype.getWorldOrgY=function(){return this.lworldOrgY},e.prototype.setWorldOrgY=function(t){this.lworldOrgY=t},e.prototype.getWorldExtX=function(){return this.lworldExtX},e.prototype.setWorldExtX=function(t){this.lworldExtX=t},e.prototype.getWorldExtY=function(){return this.lworldExtY},e.prototype.setWorldExtY=function(t){this.lworldExtY=t},e.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},e.prototype.setDeviceOrgX=function(t){this.ldeviceOrgX=t},e.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},e.prototype.setDeviceOrgY=function(t){this.ldeviceOrgY=t},e.prototype.getDeviceExtX=function(){return this.ldeviceExtX},e.prototype.setDeviceExtX=function(t){this.ldeviceExtX=t},e.prototype.getDeviceExtY=function(){return this.ldeviceExtY},e.prototype.setDeviceExtY=function(t){this.ldeviceExtY=t},e.prototype.transformX=function(t){var i=0,l=this.lworldExtX;return l!=0&&(i=this.ldeviceOrgX+(t-this.lworldOrgX)*this.ldeviceExtX/l),i},e.prototype.transformY=function(t){var i=0,l=this.lworldExtY;return l!=0&&(i=this.ldeviceOrgY+(t-this.lworldOrgY)*this.ldeviceExtY/l),i},e.prototype.inverseTransformX=function(t){var i=0,l=this.ldeviceExtX;return l!=0&&(i=this.lworldOrgX+(t-this.ldeviceOrgX)*this.lworldExtX/l),i},e.prototype.inverseTransformY=function(t){var i=0,l=this.ldeviceExtY;return l!=0&&(i=this.lworldOrgY+(t-this.ldeviceOrgY)*this.lworldExtY/l),i},e.prototype.inverseTransformPoint=function(t){var i=new o(this.inverseTransformX(t.x),this.inverseTransformY(t.y));return i},N.exports=e}),(function(N,I,T){function o(r){if(Array.isArray(r)){for(var h=0,a=Array(r.length);ht.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*t.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-t.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT_INCREMENTAL):(r>t.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(t.COOLING_ADAPTATION_FACTOR,1-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*(1-t.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},n.prototype.calcSpringForces=function(){for(var r=this.getAllEdges(),h,a=0;a0&&arguments[0]!==void 0?arguments[0]:!0,h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a,p,v,D,u=this.getAllNodes(),E;if(this.useFRGridVariant)for(this.totalIterations%t.GRID_CALCULATION_CHECK_PERIOD==1&&r&&this.updateGrid(),E=new Set,a=0;ay||E>y)&&(r.gravitationForceX=-this.gravityConstant*v,r.gravitationForceY=-this.gravityConstant*D)):(y=h.getEstimatedSize()*this.compoundGravityRangeFactor,(u>y||E>y)&&(r.gravitationForceX=-this.gravityConstant*v*this.compoundGravityConstant,r.gravitationForceY=-this.gravityConstant*D*this.compoundGravityConstant))},n.prototype.isConverged=function(){var r,h=!1;return this.totalIterations>this.maxIterations/3&&(h=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),r=this.totalDisplacement=u.length||y>=u[0].length)){for(var O=0;On}}]),l})();N.exports=i}),(function(N,I,T){var o=(function(){function i(l,g){for(var n=0;n2&&arguments[2]!==void 0?arguments[2]:1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;e(this,i),this.sequence1=l,this.sequence2=g,this.match_score=n,this.mismatch_penalty=d,this.gap_penalty=r,this.iMax=l.length+1,this.jMax=g.length+1,this.grid=new Array(this.iMax);for(var h=0;h=0;l--){var g=this.listeners[l];g.event===t&&g.callback===i&&this.listeners.splice(l,1)}},e.emit=function(t,i){for(var l=0;lg.coolingFactor*g.maxNodeDisplacement&&(this.displacementX=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementX)),Math.abs(this.displacementY)>g.coolingFactor*g.maxNodeDisplacement&&(this.displacementY=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),g.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},i.prototype.propogateDisplacementToChildren=function(g,n){for(var d=this.getChild().getNodes(),r,h=0;h0)this.positionNodesRadially(s);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var f=new Set(this.getAllNodes()),c=this.nodesWithGravity.filter(function(L){return f.has(L)});this.graphManager.setAllNodesToApplyGravitation(c),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},y.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%d.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var s=new Set(this.getAllNodes()),f=this.nodesWithGravity.filter(function(A){return s.has(A)});this.graphManager.setAllNodesToApplyGravitation(f),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var c=!this.isTreeGrowing&&!this.isGrowthFinished,L=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(c,L),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},y.prototype.getPositionsData=function(){for(var s=this.graphManager.getAllNodes(),f={},c=0;c1){var R;for(R=0;RL&&(L=Math.floor(C.y)),m=Math.floor(C.x+n.DEFAULT_COMPONENT_SEPERATION)}this.transform(new a(r.WORLD_CENTER_X-C.x/2,r.WORLD_CENTER_Y-C.y/2))},y.radialLayout=function(s,f,c){var L=Math.max(this.maxDiagonalInTree(s),n.DEFAULT_RADIAL_SEPARATION);y.branchRadialLayout(f,null,0,359,0,L);var A=u.calculateBounds(s),m=new E;m.setDeviceOrgX(A.getMinX()),m.setDeviceOrgY(A.getMinY()),m.setWorldOrgX(c.x),m.setWorldOrgY(c.y);for(var C=0;C1;){var X=_[0];_.splice(0,1);var H=w.indexOf(X);H>=0&&w.splice(H,1),U--,x--}f!=null?P=(w.indexOf(_[0])+1)%U:P=0;for(var W=Math.abs(L-c)/x,B=P;F!=x;B=++B%U){var K=w[B].getOtherEnd(s);if(K!=f){var q=(c+F*W)%360,ht=(q+W)%360;y.branchRadialLayout(K,s,q,ht,A+m,m),F++}}},y.maxDiagonalInTree=function(s){for(var f=v.MIN_VALUE,c=0;cf&&(f=A)}return f},y.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},y.prototype.groupZeroDegreeMembers=function(){var s=this,f={};this.memberGroups={},this.idToDummyNode={};for(var c=[],L=this.graphManager.getAllNodes(),A=0;A"u"&&(f[R]=[]),f[R]=f[R].concat(m)}Object.keys(f).forEach(function(M){if(f[M].length>1){var S="DummyCompound_"+M;s.memberGroups[S]=f[M];var Y=f[M][0].getParent(),w=new l(s.graphManager);w.id=S,w.paddingLeft=Y.paddingLeft||0,w.paddingRight=Y.paddingRight||0,w.paddingBottom=Y.paddingBottom||0,w.paddingTop=Y.paddingTop||0,s.idToDummyNode[S]=w;var x=s.getGraphManager().add(s.newGraph(),w),F=Y.getChild();F.add(w);for(var U=0;U=0;s--){var f=this.compoundOrder[s],c=f.id,L=f.paddingLeft,A=f.paddingTop;this.adjustLocations(this.tiledMemberPack[c],f.rect.x,f.rect.y,L,A)}},y.prototype.repopulateZeroDegreeMembers=function(){var s=this,f=this.tiledZeroDegreePack;Object.keys(f).forEach(function(c){var L=s.idToDummyNode[c],A=L.paddingLeft,m=L.paddingTop;s.adjustLocations(f[c],L.rect.x,L.rect.y,A,m)})},y.prototype.getToBeTiled=function(s){var f=s.id;if(this.toBeTiled[f]!=null)return this.toBeTiled[f];var c=s.getChild();if(c==null)return this.toBeTiled[f]=!1,!1;for(var L=c.getNodes(),A=0;A0)return this.toBeTiled[f]=!1,!1;if(m.getChild()==null){this.toBeTiled[m.id]=!1;continue}if(!this.getToBeTiled(m))return this.toBeTiled[f]=!1,!1}return this.toBeTiled[f]=!0,!0},y.prototype.getNodeDegree=function(s){s.id;for(var f=s.getEdges(),c=0,L=0;LM&&(M=Y.rect.height)}c+=M+s.verticalPadding}},y.prototype.tileCompoundMembers=function(s,f){var c=this;this.tiledMemberPack=[],Object.keys(s).forEach(function(L){var A=f[L];c.tiledMemberPack[L]=c.tileNodes(s[L],A.paddingLeft+A.paddingRight),A.rect.width=c.tiledMemberPack[L].width,A.rect.height=c.tiledMemberPack[L].height})},y.prototype.tileNodes=function(s,f){var c=n.TILING_PADDING_VERTICAL,L=n.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:f,verticalPadding:c,horizontalPadding:L};s.sort(function(R,M){return R.rect.width*R.rect.height>M.rect.width*M.rect.height?-1:R.rect.width*R.rect.height0&&(C+=s.horizontalPadding),s.rowWidth[c]=C,s.width0&&(R+=s.verticalPadding);var M=0;R>s.rowHeight[c]&&(M=s.rowHeight[c],s.rowHeight[c]=R,M=s.rowHeight[c]-M),s.height+=M,s.rows[c].push(f)},y.prototype.getShortestRowIndex=function(s){for(var f=-1,c=Number.MAX_VALUE,L=0;Lc&&(f=L,c=s.rowWidth[L]);return f},y.prototype.canAddHorizontal=function(s,f,c){var L=this.getShortestRowIndex(s);if(L<0)return!0;var A=s.rowWidth[L];if(A+s.horizontalPadding+f<=s.width)return!0;var m=0;s.rowHeight[L]0&&(m=c+s.verticalPadding-s.rowHeight[L]);var C;s.width-A>=f+s.horizontalPadding?C=(s.height+m)/(A+f+s.horizontalPadding):C=(s.height+m)/s.width,m=c+s.verticalPadding;var R;return s.widthm&&f!=c){L.splice(-1,1),s.rows[c].push(A),s.rowWidth[f]=s.rowWidth[f]-m,s.rowWidth[c]=s.rowWidth[c]+m,s.width=s.rowWidth[instance.getLongestRowIndex(s)];for(var C=Number.MIN_VALUE,R=0;RC&&(C=L[R].height);f>0&&(C+=s.verticalPadding);var M=s.rowHeight[f]+s.rowHeight[c];s.rowHeight[f]=C,s.rowHeight[c]0)for(var F=A;F<=m;F++)x[0]+=this.grid[F][C-1].length+this.grid[F][C].length-1;if(m0)for(var F=C;F<=R;F++)x[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var U=v.MAX_VALUE,P,_,X=0;X0){var R;R=E.getGraphManager().add(E.newGraph(),c),this.processChildrenList(R,f,E)}}},a.prototype.stop=function(){return this.stopped=!0,this};var v=function(u){u("layout","cose-bilkent",a)};typeof cytoscape<"u"&&v(cytoscape),I.exports=v})])})})(k)),k.exports}var yt=vt();const Et=lt(yt);tt.use(Et);function et(G,b){G.forEach(N=>{const I={id:N.id,labelText:N.label,height:N.height,width:N.width,padding:N.padding??0};Object.keys(N).forEach(T=>{["id","label","height","width","padding","x","y"].includes(T)||(I[T]=N[T])}),b.add({group:"nodes",data:I,position:{x:N.x??0,y:N.y??0}})})}V(et,"addNodes");function rt(G,b){G.forEach(N=>{const I={id:N.id,source:N.start,target:N.end};Object.keys(N).forEach(T=>{["id","start","end"].includes(T)||(I[T]=N[T])}),b.add({group:"edges",data:I})})}V(rt,"addEdges");function it(G){return new Promise(b=>{const N=gt("body").append("div").attr("id","cy").attr("style","display:none"),I=tt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});N.remove(),et(G.nodes,I),rt(G.edges,I),I.nodes().forEach(function(o){o.layoutDimensions=()=>{const e=o.data();return{w:e.width,h:e.height}}});const T={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};I.layout(T).run(),I.ready(o=>{$.info("Cytoscape ready",o),b(I)})})}V(it,"createCytoscapeInstance");function nt(G){return G.nodes().map(b=>{const N=b.data(),I=b.position(),T={id:N.id,x:I.x,y:I.y};return Object.keys(N).forEach(o=>{o!=="id"&&(T[o]=N[o])}),T})}V(nt,"extractPositionedNodes");function ot(G){return G.edges().map(b=>{const N=b.data(),I=b._private.rscratch,T={id:N.id,source:N.source,target:N.target,startX:I.startX,startY:I.startY,midX:I.midX,midY:I.midY,endX:I.endX,endY:I.endY};return Object.keys(N).forEach(o=>{["id","source","target"].includes(o)||(T[o]=N[o])}),T})}V(ot,"extractPositionedEdges");async function st(G,b){$.debug("Starting cose-bilkent layout algorithm");try{at(G);const N=await it(G),I=nt(N),T=ot(N);return $.debug(`Layout completed: ${I.length} nodes, ${T.length} edges`),{nodes:I,edges:T}}catch(N){throw $.error("Error in cose-bilkent layout algorithm:",N),N}}V(st,"executeCoseBilkentLayout");function at(G){if(!G)throw new Error("Layout data is required");if(!G.config)throw new Error("Configuration is required in layout data");if(!G.rootNode)throw new Error("Root node is required");if(!G.nodes||!Array.isArray(G.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(G.edges))throw new Error("Edges array is required in layout data");return!0}V(at,"validateLayoutData");var Lt=V(async(G,b,{insertCluster:N,insertEdge:I,insertEdgeLabel:T,insertMarkers:o,insertNode:e,log:t,positionEdgeLabel:i},{algorithm:l})=>{const g={},n={},d=b.select("g");o(d,G.markers,G.type,G.diagramId);const r=d.insert("g").attr("class","subgraphs"),h=d.insert("g").attr("class","edgePaths"),a=d.insert("g").attr("class","edgeLabels"),p=d.insert("g").attr("class","nodes");t.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(G.nodes.map(async u=>{if(u.isGroup){const E={...u};n[u.id]=E,g[u.id]=E,await N(r,u)}else{const E={...u};g[u.id]=E;const y=await e(p,u,{config:G.config,dir:G.direction||"TB"}),O=y.node().getBBox();E.width=O.width,E.height=O.height,E.domId=y,t.debug(`Node ${u.id} dimensions: ${O.width}x${O.height}`)}})),t.debug("Running cose-bilkent layout algorithm");const v={...G,nodes:G.nodes.map(u=>{const E=g[u.id];return{...u,width:E.width,height:E.height}})},D=await st(v,G.config);t.debug("Positioning nodes based on layout results"),D.nodes.forEach(u=>{const E=g[u.id];E!=null&&E.domId&&(E.domId.attr("transform",`translate(${u.x}, ${u.y})`),E.x=u.x,E.y=u.y,t.debug(`Positioned node ${E.id} at center (${u.x}, ${u.y})`))}),D.edges.forEach(u=>{const E=G.edges.find(y=>y.id===u.id);E&&(E.points=[{x:u.startX,y:u.startY},{x:u.midX,y:u.midY},{x:u.endX,y:u.endY}])}),t.debug("Inserting and positioning edges"),await Promise.all(G.edges.map(async u=>{await T(a,u);const E=g[u.start??""],y=g[u.end??""];if(E&&y){const O=D.edges.find(s=>s.id===u.id);if(O){t.debug("APA01 positionedEdge",O);const s={...u},f=I(h,s,n,G.type,E,y,G.diagramId);i(s,f)}else{const s={...u,points:[{x:E.x||0,y:E.y||0},{x:y.x||0,y:y.y||0}]},f=I(h,s,n,G.type,E,y,G.diagramId);i(s,f)}}})),t.debug("Cose-bilkent rendering completed")},"render"),At=Lt;export{At as render}; +//# sourceMappingURL=cose-bilkent-S5V4N54A-AeeFqK7R.js.map diff --git a/massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-m9SYVIAm.js.map b/massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-AeeFqK7R.js.map similarity index 99% rename from massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-m9SYVIAm.js.map rename to massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-AeeFqK7R.js.map index dd348c341..1def7f601 100644 --- a/massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-m9SYVIAm.js.map +++ b/massgen/frontend/web/static/assets/cose-bilkent-S5V4N54A-AeeFqK7R.js.map @@ -1 +1 @@ -{"version":3,"file":"cose-bilkent-S5V4N54A-m9SYVIAm.js","sources":["../../../../../webui/node_modules/layout-base/layout-base.js","../../../../../webui/node_modules/cose-base/cose-base.js","../../../../../webui/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/cose-bilkent-S5V4N54A.mjs"],"sourcesContent":["(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[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(4);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n }\n\n if (this.labelHeight > height) {\n if (this.labelPos == \"center\") {\n this.rect.y -= (this.labelHeight - height) / 2;\n } else if (this.labelPos == \"top\") {\n this.rect.y -= this.labelHeight - height;\n }\n this.setHeight(this.labelHeight);\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n return true;\n }\n }\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(5);\nvar PointD = __webpack_require__(4);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(27);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(4);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(7);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n edge.idealLength = this.idealEdgeLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = this.springConstant * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(7);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(7);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(4);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(24);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(5);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(6);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(25);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutEdge = __webpack_require__(0).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph = __webpack_require__(0).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphManager = __webpack_require__(0).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutNode = __webpack_require__(0).FDLayoutNode;\nvar IMath = __webpack_require__(0).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // a simple node, just move it\n if (this.child == null) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // an empty compound node, again just move it\n else if (this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // non-empty compound node, propogate movement to children as well\n else {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.moveBy(dX, dY);\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayout = __webpack_require__(0).FDLayout;\nvar CoSEGraphManager = __webpack_require__(4);\nvar CoSEGraph = __webpack_require__(3);\nvar CoSENode = __webpack_require__(5);\nvar CoSEEdge = __webpack_require__(2);\nvar CoSEConstants = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(0).LayoutConstants;\nvar Point = __webpack_require__(0).Point;\nvar PointD = __webpack_require__(0).PointD;\nvar Layout = __webpack_require__(0).Layout;\nvar Integer = __webpack_require__(0).Integer;\nvar IGeometry = __webpack_require__(0).IGeometry;\nvar LGraph = __webpack_require__(0).LGraph;\nvar Transform = __webpack_require__(0).Transform;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;\n this.coolingAdjuster = 1;\n }\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n this.initSpringEmbedder();\n this.runSpringEmbedder();\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) {\n x += compoundHorizontalMargin;\n y += compoundVerticalMargin;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding\n };\n\n // Sort the nodes in ascending order of their areas\n nodes.sort(function (n1, n2) {\n if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;\n if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;\n return 0;\n });\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(0);\ncoseBase.CoSEConstants = __webpack_require__(1);\ncoseBase.CoSEEdge = __webpack_require__(2);\ncoseBase.CoSEGraph = __webpack_require__(3);\ncoseBase.CoSEGraphManager = __webpack_require__(4);\ncoseBase.CoSELayout = __webpack_require__(6);\ncoseBase.CoSENode = __webpack_require__(5);\n\nmodule.exports = coseBase;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeCoseBilkent\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeCoseBilkent\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(0).CoSEConstants;\nvar CoSELayout = __webpack_require__(0).CoSELayout;\nvar CoSENode = __webpack_require__(0).CoSENode;\nvar PointD = __webpack_require__(0).layoutBase.PointD;\nvar DimensionD = __webpack_require__(0).layoutBase.DimensionD;\n\nvar defaults = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // 'draft', 'default' or 'proof\" \n // - 'draft' fast cooling rate \n // - 'default' moderate cooling rate \n // - \"proof\" slow cooling rate\n quality: 'default',\n // include labels in node dimensions\n nodeDimensionsIncludeLabels: false,\n // number of ticks per frame; higher is faster but more jerky\n refresh: 30,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 10,\n // Whether to enable incremental mode\n randomize: true,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: 4500,\n // Ideal edge (non nested) length\n idealEdgeLength: 50,\n // Divisor to compute edge forces\n edgeElasticity: 0.45,\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // Type of layout animation. The option set is {'during', 'end', false}\n animate: 'end',\n // Duration for animate:end\n animationDuration: 500,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5\n};\n\nfunction extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n};\n\nfunction _CoSELayout(_options) {\n this.options = extend(defaults, _options);\n getUserOptions(this.options);\n}\n\nvar getUserOptions = function getUserOptions(options) {\n if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion;\n if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;\n if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity;\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n};\n\n_CoSELayout.prototype.run = function () {\n var ready;\n var frameId;\n var options = this.options;\n var idToLNode = this.idToLNode = {};\n var layout = this.layout = new CoSELayout();\n var self = this;\n\n self.stopped = false;\n\n this.cy = this.options.cy;\n\n this.cy.trigger({ type: 'layoutstart', layout: this });\n\n var gm = layout.newGraphManager();\n this.gm = gm;\n\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n\n this.root = gm.addRoot();\n this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout);\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = this.idToLNode[edge.data(\"source\")];\n var targetNode = this.idToLNode[edge.data(\"target\")];\n if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n }\n }\n\n var getPositions = function getPositions(ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var theId = ele.data('id');\n var lNode = self.idToLNode[theId];\n\n return {\n x: lNode.getRect().getCenterX(),\n y: lNode.getRect().getCenterY()\n };\n };\n\n /*\n * Reposition nodes in iterations animatedly\n */\n var iterateAnimated = function iterateAnimated() {\n // Thigs to perform after nodes are repositioned on screen\n var afterReposition = function afterReposition() {\n if (options.fit) {\n options.cy.fit(options.eles, options.padding);\n }\n\n if (!ready) {\n ready = true;\n self.cy.one('layoutready', options.ready);\n self.cy.trigger({ type: 'layoutready', layout: self });\n }\n };\n\n var ticksPerFrame = self.options.refresh;\n var isDone;\n\n for (var i = 0; i < ticksPerFrame && !isDone; i++) {\n isDone = self.stopped || self.layout.tick();\n }\n\n // If layout is done\n if (isDone) {\n // If the layout is not a sublayout and it is successful perform post layout.\n if (layout.checkLayoutSuccess() && !layout.isSubLayout) {\n layout.doPostLayout();\n }\n\n // If layout has a tilingPostLayout function property call it.\n if (layout.tilingPostLayout) {\n layout.tilingPostLayout();\n }\n\n layout.isLayoutFinished = true;\n\n self.options.eles.nodes().positions(getPositions);\n\n afterReposition();\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n self.cy.one('layoutstop', self.options.stop);\n self.cy.trigger({ type: 'layoutstop', layout: self });\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n\n ready = false;\n return;\n }\n\n var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling\n\n // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds)\n // use position of their ancestors or dummy ancestors\n options.eles.nodes().positions(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n // If ele is a compound node, then its position will be defined by its children\n if (!ele.isParent()) {\n var theId = ele.id();\n var pNode = animationData[theId];\n var temp = ele;\n // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well)\n while (pNode == null) {\n pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')];\n animationData[theId] = pNode;\n temp = temp.parent()[0];\n if (temp == undefined) {\n break;\n }\n }\n if (pNode != null) {\n return {\n x: pNode.x,\n y: pNode.y\n };\n } else {\n return {\n x: ele.position('x'),\n y: ele.position('y')\n };\n }\n }\n });\n\n afterReposition();\n\n frameId = requestAnimationFrame(iterateAnimated);\n };\n\n /*\n * Listen 'layoutstarted' event and start animated iteration if animate option is 'during'\n */\n layout.addListener('layoutstarted', function () {\n if (self.options.animate === 'during') {\n frameId = requestAnimationFrame(iterateAnimated);\n }\n });\n\n layout.runLayout(); // Run cose layout\n\n /*\n * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed)\n */\n if (this.options.animate !== \"during\") {\n self.options.eles.nodes().not(\":parent\").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter\n ready = false;\n }\n\n return this; // chaining\n};\n\n//Get the top most ones of a list of nodes\n_CoSELayout.prototype.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n_CoSELayout.prototype.processChildrenList = function (parent, children, layout) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = theChild.children();\n var theNode;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node\n theNode.id = theChild.data(\"id\");\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to compound if labels will be included in node dimensions \n if (this.options.nodeDimensionsIncludeLabels) {\n if (theChild.isParent()) {\n var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;\n var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;\n var labelPos = theChild.css(\"text-halign\");\n theNode.labelWidth = labelWidth;\n theNode.labelHeight = labelHeight;\n theNode.labelPos = labelPos;\n }\n }\n\n // Map the layout node\n this.idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n this.processChildrenList(theNewGraph, children_of_children, layout);\n }\n }\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\n_CoSELayout.prototype.stop = function () {\n this.stopped = true;\n\n return this; // chaining\n};\n\nvar register = function register(cytoscape) {\n // var Layout = getLayout( cytoscape );\n\n cytoscape('layout', 'cose-bilkent', _CoSELayout);\n};\n\n// auto reg for globals\nif (typeof cytoscape !== 'undefined') {\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ })\n/******/ ]);\n});","import {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts\nimport cytoscape from \"cytoscape\";\nimport coseBilkent from \"cytoscape-cose-bilkent\";\nimport { select } from \"d3\";\ncytoscape.use(coseBilkent);\nfunction addNodes(nodes, cy) {\n nodes.forEach((node) => {\n const nodeData = {\n id: node.id,\n labelText: node.label,\n height: node.height,\n width: node.width,\n padding: node.padding ?? 0\n };\n Object.keys(node).forEach((key) => {\n if (![\"id\", \"label\", \"height\", \"width\", \"padding\", \"x\", \"y\"].includes(key)) {\n nodeData[key] = node[key];\n }\n });\n cy.add({\n group: \"nodes\",\n data: nodeData,\n position: {\n x: node.x ?? 0,\n y: node.y ?? 0\n }\n });\n });\n}\n__name(addNodes, \"addNodes\");\nfunction addEdges(edges, cy) {\n edges.forEach((edge) => {\n const edgeData = {\n id: edge.id,\n source: edge.start,\n target: edge.end\n };\n Object.keys(edge).forEach((key) => {\n if (![\"id\", \"start\", \"end\"].includes(key)) {\n edgeData[key] = edge[key];\n }\n });\n cy.add({\n group: \"edges\",\n data: edgeData\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction createCytoscapeInstance(data) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n // container to render in\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"bezier\"\n }\n }\n ]\n });\n renderEl.remove();\n addNodes(data.nodes, cy);\n addEdges(data.edges, cy);\n cy.nodes().forEach(function(n) {\n n.layoutDimensions = () => {\n const nodeData = n.data();\n return { w: nodeData.width, h: nodeData.height };\n };\n });\n const layoutConfig = {\n name: \"cose-bilkent\",\n // @ts-ignore Types for cose-bilkent are not correct?\n quality: \"proof\",\n styleEnabled: false,\n animate: false\n };\n cy.layout(layoutConfig).run();\n cy.ready((e) => {\n log.info(\"Cytoscape ready\", e);\n resolve(cy);\n });\n });\n}\n__name(createCytoscapeInstance, \"createCytoscapeInstance\");\nfunction extractPositionedNodes(cy) {\n return cy.nodes().map((node) => {\n const data = node.data();\n const position = node.position();\n const positionedNode = {\n id: data.id,\n x: position.x,\n y: position.y\n };\n Object.keys(data).forEach((key) => {\n if (key !== \"id\") {\n positionedNode[key] = data[key];\n }\n });\n return positionedNode;\n });\n}\n__name(extractPositionedNodes, \"extractPositionedNodes\");\nfunction extractPositionedEdges(cy) {\n return cy.edges().map((edge) => {\n const data = edge.data();\n const rscratch = edge._private.rscratch;\n const positionedEdge = {\n id: data.id,\n source: data.source,\n target: data.target,\n startX: rscratch.startX,\n startY: rscratch.startY,\n midX: rscratch.midX,\n midY: rscratch.midY,\n endX: rscratch.endX,\n endY: rscratch.endY\n };\n Object.keys(data).forEach((key) => {\n if (![\"id\", \"source\", \"target\"].includes(key)) {\n positionedEdge[key] = data[key];\n }\n });\n return positionedEdge;\n });\n}\n__name(extractPositionedEdges, \"extractPositionedEdges\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/layout.ts\nasync function executeCoseBilkentLayout(data, _config) {\n log.debug(\"Starting cose-bilkent layout algorithm\");\n try {\n validateLayoutData(data);\n const cy = await createCytoscapeInstance(data);\n const positionedNodes = extractPositionedNodes(cy);\n const positionedEdges = extractPositionedEdges(cy);\n log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`);\n return {\n nodes: positionedNodes,\n edges: positionedEdges\n };\n } catch (error) {\n log.error(\"Error in cose-bilkent layout algorithm:\", error);\n throw error;\n }\n}\n__name(executeCoseBilkentLayout, \"executeCoseBilkentLayout\");\nfunction validateLayoutData(data) {\n if (!data) {\n throw new Error(\"Layout data is required\");\n }\n if (!data.config) {\n throw new Error(\"Configuration is required in layout data\");\n }\n if (!data.rootNode) {\n throw new Error(\"Root node is required\");\n }\n if (!data.nodes || !Array.isArray(data.nodes)) {\n throw new Error(\"No nodes found in layout data\");\n }\n if (!Array.isArray(data.edges)) {\n throw new Error(\"Edges array is required in layout data\");\n }\n return true;\n}\n__name(validateLayoutData, \"validateLayoutData\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/render.ts\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg, {\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers,\n insertNode,\n log: log2,\n positionEdgeLabel\n}, { algorithm: _algorithm }) => {\n const nodeDb = {};\n const clusterDb = {};\n const element = svg.select(\"g\");\n insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n const subGraphsEl = element.insert(\"g\").attr(\"class\", \"subgraphs\");\n const edgePaths = element.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = element.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = element.insert(\"g\").attr(\"class\", \"nodes\");\n log2.debug(\"Inserting nodes into DOM for dimension calculation\");\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n const clusterNode = { ...node };\n clusterDb[node.id] = clusterNode;\n nodeDb[node.id] = clusterNode;\n await insertCluster(subGraphsEl, node);\n } else {\n const nodeWithPosition = { ...node };\n nodeDb[node.id] = nodeWithPosition;\n const nodeEl = await insertNode(nodes, node, {\n config: data4Layout.config,\n dir: data4Layout.direction || \"TB\"\n });\n const boundingBox = nodeEl.node().getBBox();\n nodeWithPosition.width = boundingBox.width;\n nodeWithPosition.height = boundingBox.height;\n nodeWithPosition.domId = nodeEl;\n log2.debug(`Node ${node.id} dimensions: ${boundingBox.width}x${boundingBox.height}`);\n }\n })\n );\n log2.debug(\"Running cose-bilkent layout algorithm\");\n const updatedLayoutData = {\n ...data4Layout,\n nodes: data4Layout.nodes.map((node) => {\n const nodeWithDimensions = nodeDb[node.id];\n return {\n ...node,\n width: nodeWithDimensions.width,\n height: nodeWithDimensions.height\n };\n })\n };\n const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config);\n log2.debug(\"Positioning nodes based on layout results\");\n layoutResult.nodes.forEach((positionedNode) => {\n const node = nodeDb[positionedNode.id];\n if (node?.domId) {\n node.domId.attr(\n \"transform\",\n `translate(${positionedNode.x}, ${positionedNode.y})`\n );\n node.x = positionedNode.x;\n node.y = positionedNode.y;\n log2.debug(`Positioned node ${node.id} at center (${positionedNode.x}, ${positionedNode.y})`);\n }\n });\n layoutResult.edges.forEach((positionedEdge) => {\n const edge = data4Layout.edges.find((e) => e.id === positionedEdge.id);\n if (edge) {\n edge.points = [\n { x: positionedEdge.startX, y: positionedEdge.startY },\n { x: positionedEdge.midX, y: positionedEdge.midY },\n { x: positionedEdge.endX, y: positionedEdge.endY }\n ];\n }\n });\n log2.debug(\"Inserting and positioning edges\");\n await Promise.all(\n data4Layout.edges.map(async (edge) => {\n const _edgeLabel = await insertEdgeLabel(edgeLabels, edge);\n const startNode = nodeDb[edge.start ?? \"\"];\n const endNode = nodeDb[edge.end ?? \"\"];\n if (startNode && endNode) {\n const positionedEdge = layoutResult.edges.find((e) => e.id === edge.id);\n if (positionedEdge) {\n log2.debug(\"APA01 positionedEdge\", positionedEdge);\n const edgeWithPath = { ...edge };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n } else {\n const edgeWithPath = {\n ...edge,\n points: [\n { x: startNode.x || 0, y: startNode.y || 0 },\n { x: endNode.x || 0, y: endNode.y || 0 }\n ]\n };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n }\n }\n })\n );\n log2.debug(\"Cose-bilkent rendering completed\");\n}, \"render\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/index.ts\nvar render2 = render;\nexport {\n render2 as render\n};\n"],"names":["root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","FDLayoutConstants","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Quicksort","A","compareFunction","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","_i","_j","_i2","_j2","diag","up","maxOf","indices","inProcessAlignments","indexes","array","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE_0__","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","dX","dY","pred1","processed","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","compoundNode","lCompoundNode","horizontalMargin","verticalMargin","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","row","maxHeight","lnode","minWidth","verticalPadding","horizontalPadding","n1","n2","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","diff","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","prunedNodesInStep","lengthOfPrunedNodesInStep","nodeData","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","coseBase","defaults","extend","options","_CoSELayout","_options","getUserOptions","ready","frameId","e1","getPositions","ele","iterateAnimated","afterReposition","ticksPerFrame","isDone","animationData","pNode","nodesMap","roots","children_of_children","theNode","dimensions","labelWidth","labelHeight","labelPos","theNewGraph","register","cytoscape","coseBilkent","addNodes","__name","addEdges","edgeData","createCytoscapeInstance","resolve","renderEl","select","n","layoutConfig","e","log","extractPositionedNodes","position","positionedNode","extractPositionedEdges","rscratch","positionedEdge","executeCoseBilkentLayout","_config","validateLayoutData","positionedNodes","positionedEdges","error","render","data4Layout","svg","insertCluster","insertEdge","insertEdgeLabel","insertMarkers","insertNode","log2","positionEdgeLabel","_algorithm","nodeDb","clusterDb","element","subGraphsEl","edgePaths","edgeLabels","clusterNode","nodeWithPosition","nodeEl","boundingBox","updatedLayoutData","nodeWithDimensions","layoutResult","startNode","endNode","edgeWithPath","paths","render2"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file +{"version":3,"file":"cose-bilkent-S5V4N54A-AeeFqK7R.js","sources":["../../../../../webui/node_modules/layout-base/layout-base.js","../../../../../webui/node_modules/cose-base/cose-base.js","../../../../../webui/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/cose-bilkent-S5V4N54A.mjs"],"sourcesContent":["(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[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(4);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n }\n\n if (this.labelHeight > height) {\n if (this.labelPos == \"center\") {\n this.rect.y -= (this.labelHeight - height) / 2;\n } else if (this.labelPos == \"top\") {\n this.rect.y -= this.labelHeight - height;\n }\n this.setHeight(this.labelHeight);\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n return true;\n }\n }\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(5);\nvar PointD = __webpack_require__(4);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(27);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(4);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(7);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n edge.idealLength = this.idealEdgeLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = this.springConstant * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(7);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(7);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(4);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(24);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(5);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(6);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(25);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutEdge = __webpack_require__(0).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph = __webpack_require__(0).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphManager = __webpack_require__(0).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutNode = __webpack_require__(0).FDLayoutNode;\nvar IMath = __webpack_require__(0).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // a simple node, just move it\n if (this.child == null) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // an empty compound node, again just move it\n else if (this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // non-empty compound node, propogate movement to children as well\n else {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.moveBy(dX, dY);\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayout = __webpack_require__(0).FDLayout;\nvar CoSEGraphManager = __webpack_require__(4);\nvar CoSEGraph = __webpack_require__(3);\nvar CoSENode = __webpack_require__(5);\nvar CoSEEdge = __webpack_require__(2);\nvar CoSEConstants = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(0).LayoutConstants;\nvar Point = __webpack_require__(0).Point;\nvar PointD = __webpack_require__(0).PointD;\nvar Layout = __webpack_require__(0).Layout;\nvar Integer = __webpack_require__(0).Integer;\nvar IGeometry = __webpack_require__(0).IGeometry;\nvar LGraph = __webpack_require__(0).LGraph;\nvar Transform = __webpack_require__(0).Transform;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;\n this.coolingAdjuster = 1;\n }\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n this.initSpringEmbedder();\n this.runSpringEmbedder();\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) {\n x += compoundHorizontalMargin;\n y += compoundVerticalMargin;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding\n };\n\n // Sort the nodes in ascending order of their areas\n nodes.sort(function (n1, n2) {\n if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;\n if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;\n return 0;\n });\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(0);\ncoseBase.CoSEConstants = __webpack_require__(1);\ncoseBase.CoSEEdge = __webpack_require__(2);\ncoseBase.CoSEGraph = __webpack_require__(3);\ncoseBase.CoSEGraphManager = __webpack_require__(4);\ncoseBase.CoSELayout = __webpack_require__(6);\ncoseBase.CoSENode = __webpack_require__(5);\n\nmodule.exports = coseBase;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeCoseBilkent\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeCoseBilkent\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(0).CoSEConstants;\nvar CoSELayout = __webpack_require__(0).CoSELayout;\nvar CoSENode = __webpack_require__(0).CoSENode;\nvar PointD = __webpack_require__(0).layoutBase.PointD;\nvar DimensionD = __webpack_require__(0).layoutBase.DimensionD;\n\nvar defaults = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // 'draft', 'default' or 'proof\" \n // - 'draft' fast cooling rate \n // - 'default' moderate cooling rate \n // - \"proof\" slow cooling rate\n quality: 'default',\n // include labels in node dimensions\n nodeDimensionsIncludeLabels: false,\n // number of ticks per frame; higher is faster but more jerky\n refresh: 30,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 10,\n // Whether to enable incremental mode\n randomize: true,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: 4500,\n // Ideal edge (non nested) length\n idealEdgeLength: 50,\n // Divisor to compute edge forces\n edgeElasticity: 0.45,\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // Type of layout animation. The option set is {'during', 'end', false}\n animate: 'end',\n // Duration for animate:end\n animationDuration: 500,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5\n};\n\nfunction extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n};\n\nfunction _CoSELayout(_options) {\n this.options = extend(defaults, _options);\n getUserOptions(this.options);\n}\n\nvar getUserOptions = function getUserOptions(options) {\n if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion;\n if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;\n if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity;\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n};\n\n_CoSELayout.prototype.run = function () {\n var ready;\n var frameId;\n var options = this.options;\n var idToLNode = this.idToLNode = {};\n var layout = this.layout = new CoSELayout();\n var self = this;\n\n self.stopped = false;\n\n this.cy = this.options.cy;\n\n this.cy.trigger({ type: 'layoutstart', layout: this });\n\n var gm = layout.newGraphManager();\n this.gm = gm;\n\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n\n this.root = gm.addRoot();\n this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout);\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = this.idToLNode[edge.data(\"source\")];\n var targetNode = this.idToLNode[edge.data(\"target\")];\n if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n }\n }\n\n var getPositions = function getPositions(ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var theId = ele.data('id');\n var lNode = self.idToLNode[theId];\n\n return {\n x: lNode.getRect().getCenterX(),\n y: lNode.getRect().getCenterY()\n };\n };\n\n /*\n * Reposition nodes in iterations animatedly\n */\n var iterateAnimated = function iterateAnimated() {\n // Thigs to perform after nodes are repositioned on screen\n var afterReposition = function afterReposition() {\n if (options.fit) {\n options.cy.fit(options.eles, options.padding);\n }\n\n if (!ready) {\n ready = true;\n self.cy.one('layoutready', options.ready);\n self.cy.trigger({ type: 'layoutready', layout: self });\n }\n };\n\n var ticksPerFrame = self.options.refresh;\n var isDone;\n\n for (var i = 0; i < ticksPerFrame && !isDone; i++) {\n isDone = self.stopped || self.layout.tick();\n }\n\n // If layout is done\n if (isDone) {\n // If the layout is not a sublayout and it is successful perform post layout.\n if (layout.checkLayoutSuccess() && !layout.isSubLayout) {\n layout.doPostLayout();\n }\n\n // If layout has a tilingPostLayout function property call it.\n if (layout.tilingPostLayout) {\n layout.tilingPostLayout();\n }\n\n layout.isLayoutFinished = true;\n\n self.options.eles.nodes().positions(getPositions);\n\n afterReposition();\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n self.cy.one('layoutstop', self.options.stop);\n self.cy.trigger({ type: 'layoutstop', layout: self });\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n\n ready = false;\n return;\n }\n\n var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling\n\n // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds)\n // use position of their ancestors or dummy ancestors\n options.eles.nodes().positions(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n // If ele is a compound node, then its position will be defined by its children\n if (!ele.isParent()) {\n var theId = ele.id();\n var pNode = animationData[theId];\n var temp = ele;\n // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well)\n while (pNode == null) {\n pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')];\n animationData[theId] = pNode;\n temp = temp.parent()[0];\n if (temp == undefined) {\n break;\n }\n }\n if (pNode != null) {\n return {\n x: pNode.x,\n y: pNode.y\n };\n } else {\n return {\n x: ele.position('x'),\n y: ele.position('y')\n };\n }\n }\n });\n\n afterReposition();\n\n frameId = requestAnimationFrame(iterateAnimated);\n };\n\n /*\n * Listen 'layoutstarted' event and start animated iteration if animate option is 'during'\n */\n layout.addListener('layoutstarted', function () {\n if (self.options.animate === 'during') {\n frameId = requestAnimationFrame(iterateAnimated);\n }\n });\n\n layout.runLayout(); // Run cose layout\n\n /*\n * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed)\n */\n if (this.options.animate !== \"during\") {\n self.options.eles.nodes().not(\":parent\").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter\n ready = false;\n }\n\n return this; // chaining\n};\n\n//Get the top most ones of a list of nodes\n_CoSELayout.prototype.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n_CoSELayout.prototype.processChildrenList = function (parent, children, layout) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = theChild.children();\n var theNode;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node\n theNode.id = theChild.data(\"id\");\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to compound if labels will be included in node dimensions \n if (this.options.nodeDimensionsIncludeLabels) {\n if (theChild.isParent()) {\n var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;\n var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;\n var labelPos = theChild.css(\"text-halign\");\n theNode.labelWidth = labelWidth;\n theNode.labelHeight = labelHeight;\n theNode.labelPos = labelPos;\n }\n }\n\n // Map the layout node\n this.idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n this.processChildrenList(theNewGraph, children_of_children, layout);\n }\n }\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\n_CoSELayout.prototype.stop = function () {\n this.stopped = true;\n\n return this; // chaining\n};\n\nvar register = function register(cytoscape) {\n // var Layout = getLayout( cytoscape );\n\n cytoscape('layout', 'cose-bilkent', _CoSELayout);\n};\n\n// auto reg for globals\nif (typeof cytoscape !== 'undefined') {\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ })\n/******/ ]);\n});","import {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts\nimport cytoscape from \"cytoscape\";\nimport coseBilkent from \"cytoscape-cose-bilkent\";\nimport { select } from \"d3\";\ncytoscape.use(coseBilkent);\nfunction addNodes(nodes, cy) {\n nodes.forEach((node) => {\n const nodeData = {\n id: node.id,\n labelText: node.label,\n height: node.height,\n width: node.width,\n padding: node.padding ?? 0\n };\n Object.keys(node).forEach((key) => {\n if (![\"id\", \"label\", \"height\", \"width\", \"padding\", \"x\", \"y\"].includes(key)) {\n nodeData[key] = node[key];\n }\n });\n cy.add({\n group: \"nodes\",\n data: nodeData,\n position: {\n x: node.x ?? 0,\n y: node.y ?? 0\n }\n });\n });\n}\n__name(addNodes, \"addNodes\");\nfunction addEdges(edges, cy) {\n edges.forEach((edge) => {\n const edgeData = {\n id: edge.id,\n source: edge.start,\n target: edge.end\n };\n Object.keys(edge).forEach((key) => {\n if (![\"id\", \"start\", \"end\"].includes(key)) {\n edgeData[key] = edge[key];\n }\n });\n cy.add({\n group: \"edges\",\n data: edgeData\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction createCytoscapeInstance(data) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n // container to render in\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"bezier\"\n }\n }\n ]\n });\n renderEl.remove();\n addNodes(data.nodes, cy);\n addEdges(data.edges, cy);\n cy.nodes().forEach(function(n) {\n n.layoutDimensions = () => {\n const nodeData = n.data();\n return { w: nodeData.width, h: nodeData.height };\n };\n });\n const layoutConfig = {\n name: \"cose-bilkent\",\n // @ts-ignore Types for cose-bilkent are not correct?\n quality: \"proof\",\n styleEnabled: false,\n animate: false\n };\n cy.layout(layoutConfig).run();\n cy.ready((e) => {\n log.info(\"Cytoscape ready\", e);\n resolve(cy);\n });\n });\n}\n__name(createCytoscapeInstance, \"createCytoscapeInstance\");\nfunction extractPositionedNodes(cy) {\n return cy.nodes().map((node) => {\n const data = node.data();\n const position = node.position();\n const positionedNode = {\n id: data.id,\n x: position.x,\n y: position.y\n };\n Object.keys(data).forEach((key) => {\n if (key !== \"id\") {\n positionedNode[key] = data[key];\n }\n });\n return positionedNode;\n });\n}\n__name(extractPositionedNodes, \"extractPositionedNodes\");\nfunction extractPositionedEdges(cy) {\n return cy.edges().map((edge) => {\n const data = edge.data();\n const rscratch = edge._private.rscratch;\n const positionedEdge = {\n id: data.id,\n source: data.source,\n target: data.target,\n startX: rscratch.startX,\n startY: rscratch.startY,\n midX: rscratch.midX,\n midY: rscratch.midY,\n endX: rscratch.endX,\n endY: rscratch.endY\n };\n Object.keys(data).forEach((key) => {\n if (![\"id\", \"source\", \"target\"].includes(key)) {\n positionedEdge[key] = data[key];\n }\n });\n return positionedEdge;\n });\n}\n__name(extractPositionedEdges, \"extractPositionedEdges\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/layout.ts\nasync function executeCoseBilkentLayout(data, _config) {\n log.debug(\"Starting cose-bilkent layout algorithm\");\n try {\n validateLayoutData(data);\n const cy = await createCytoscapeInstance(data);\n const positionedNodes = extractPositionedNodes(cy);\n const positionedEdges = extractPositionedEdges(cy);\n log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`);\n return {\n nodes: positionedNodes,\n edges: positionedEdges\n };\n } catch (error) {\n log.error(\"Error in cose-bilkent layout algorithm:\", error);\n throw error;\n }\n}\n__name(executeCoseBilkentLayout, \"executeCoseBilkentLayout\");\nfunction validateLayoutData(data) {\n if (!data) {\n throw new Error(\"Layout data is required\");\n }\n if (!data.config) {\n throw new Error(\"Configuration is required in layout data\");\n }\n if (!data.rootNode) {\n throw new Error(\"Root node is required\");\n }\n if (!data.nodes || !Array.isArray(data.nodes)) {\n throw new Error(\"No nodes found in layout data\");\n }\n if (!Array.isArray(data.edges)) {\n throw new Error(\"Edges array is required in layout data\");\n }\n return true;\n}\n__name(validateLayoutData, \"validateLayoutData\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/render.ts\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg, {\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers,\n insertNode,\n log: log2,\n positionEdgeLabel\n}, { algorithm: _algorithm }) => {\n const nodeDb = {};\n const clusterDb = {};\n const element = svg.select(\"g\");\n insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n const subGraphsEl = element.insert(\"g\").attr(\"class\", \"subgraphs\");\n const edgePaths = element.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = element.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = element.insert(\"g\").attr(\"class\", \"nodes\");\n log2.debug(\"Inserting nodes into DOM for dimension calculation\");\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n const clusterNode = { ...node };\n clusterDb[node.id] = clusterNode;\n nodeDb[node.id] = clusterNode;\n await insertCluster(subGraphsEl, node);\n } else {\n const nodeWithPosition = { ...node };\n nodeDb[node.id] = nodeWithPosition;\n const nodeEl = await insertNode(nodes, node, {\n config: data4Layout.config,\n dir: data4Layout.direction || \"TB\"\n });\n const boundingBox = nodeEl.node().getBBox();\n nodeWithPosition.width = boundingBox.width;\n nodeWithPosition.height = boundingBox.height;\n nodeWithPosition.domId = nodeEl;\n log2.debug(`Node ${node.id} dimensions: ${boundingBox.width}x${boundingBox.height}`);\n }\n })\n );\n log2.debug(\"Running cose-bilkent layout algorithm\");\n const updatedLayoutData = {\n ...data4Layout,\n nodes: data4Layout.nodes.map((node) => {\n const nodeWithDimensions = nodeDb[node.id];\n return {\n ...node,\n width: nodeWithDimensions.width,\n height: nodeWithDimensions.height\n };\n })\n };\n const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config);\n log2.debug(\"Positioning nodes based on layout results\");\n layoutResult.nodes.forEach((positionedNode) => {\n const node = nodeDb[positionedNode.id];\n if (node?.domId) {\n node.domId.attr(\n \"transform\",\n `translate(${positionedNode.x}, ${positionedNode.y})`\n );\n node.x = positionedNode.x;\n node.y = positionedNode.y;\n log2.debug(`Positioned node ${node.id} at center (${positionedNode.x}, ${positionedNode.y})`);\n }\n });\n layoutResult.edges.forEach((positionedEdge) => {\n const edge = data4Layout.edges.find((e) => e.id === positionedEdge.id);\n if (edge) {\n edge.points = [\n { x: positionedEdge.startX, y: positionedEdge.startY },\n { x: positionedEdge.midX, y: positionedEdge.midY },\n { x: positionedEdge.endX, y: positionedEdge.endY }\n ];\n }\n });\n log2.debug(\"Inserting and positioning edges\");\n await Promise.all(\n data4Layout.edges.map(async (edge) => {\n const _edgeLabel = await insertEdgeLabel(edgeLabels, edge);\n const startNode = nodeDb[edge.start ?? \"\"];\n const endNode = nodeDb[edge.end ?? \"\"];\n if (startNode && endNode) {\n const positionedEdge = layoutResult.edges.find((e) => e.id === edge.id);\n if (positionedEdge) {\n log2.debug(\"APA01 positionedEdge\", positionedEdge);\n const edgeWithPath = { ...edge };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n } else {\n const edgeWithPath = {\n ...edge,\n points: [\n { x: startNode.x || 0, y: startNode.y || 0 },\n { x: endNode.x || 0, y: endNode.y || 0 }\n ]\n };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n }\n }\n })\n );\n log2.debug(\"Cose-bilkent rendering completed\");\n}, \"render\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/index.ts\nvar render2 = render;\nexport {\n render2 as render\n};\n"],"names":["root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","FDLayoutConstants","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Quicksort","A","compareFunction","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","_i","_j","_i2","_j2","diag","up","maxOf","indices","inProcessAlignments","indexes","array","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE_0__","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","dX","dY","pred1","processed","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","compoundNode","lCompoundNode","horizontalMargin","verticalMargin","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","row","maxHeight","lnode","minWidth","verticalPadding","horizontalPadding","n1","n2","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","diff","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","prunedNodesInStep","lengthOfPrunedNodesInStep","nodeData","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","coseBase","defaults","extend","options","_CoSELayout","_options","getUserOptions","ready","frameId","e1","getPositions","ele","iterateAnimated","afterReposition","ticksPerFrame","isDone","animationData","pNode","nodesMap","roots","children_of_children","theNode","dimensions","labelWidth","labelHeight","labelPos","theNewGraph","register","cytoscape","coseBilkent","addNodes","__name","addEdges","edgeData","createCytoscapeInstance","resolve","renderEl","select","n","layoutConfig","e","log","extractPositionedNodes","position","positionedNode","extractPositionedEdges","rscratch","positionedEdge","executeCoseBilkentLayout","_config","validateLayoutData","positionedNodes","positionedEdges","error","render","data4Layout","svg","insertCluster","insertEdge","insertEdgeLabel","insertMarkers","insertNode","log2","positionEdgeLabel","_algorithm","nodeDb","clusterDb","element","subGraphsEl","edgePaths","edgeLabels","clusterNode","nodeWithPosition","nodeEl","boundingBox","updatedLayoutData","nodeWithDimensions","layoutResult","startNode","endNode","edgeWithPath","paths","render2"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/dagre-6UL2VRFP-BTZbZ3_n.js b/massgen/frontend/web/static/assets/dagre-6UL2VRFP-CF9gbs_G.js similarity index 97% rename from massgen/frontend/web/static/assets/dagre-6UL2VRFP-BTZbZ3_n.js rename to massgen/frontend/web/static/assets/dagre-6UL2VRFP-CF9gbs_G.js index 05d309247..a4b3d0509 100644 --- a/massgen/frontend/web/static/assets/dagre-6UL2VRFP-BTZbZ3_n.js +++ b/massgen/frontend/web/static/assets/dagre-6UL2VRFP-CF9gbs_G.js @@ -1,5 +1,5 @@ -import{_ as X,au as F,av as Y,aw as _,ax as H,l as i,c as V,ay as z,az as U,ag as $,al as q,ah as P,af as K,aA as Q,aB as W,aC as Z}from"./index-yx4Z55Qu.js";import{i as x,G as B}from"./graph-4lxArx4u.js";import{l as I}from"./layout-C3hQsxO7.js";import{c as L}from"./clone-DEFp9e4A.js";import{m as A}from"./min-DVxmWhZZ.js";import"./_baseUniq-LXHsPSjj.js";function p(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:ee(e),edges:ne(e)};return x(e.graph())||(t.value=L(e.graph())),t}function ee(e){return A(e.nodes(),function(t){var n=e.node(t),o=e.parent(t),c={v:t};return x(n)||(c.value=n),x(o)||(c.parent=o),c})}function ne(e){return A(e.edges(),function(t){var n=e.edge(t),o={v:t.v,w:t.w};return x(t.name)||(o.name=t.name),x(n)||(o.value=n),o})}var f=new Map,b=new Map,J=new Map,te=X(()=>{b.clear(),J.clear(),f.clear()},"clear"),O=X((e,t)=>{const n=b.get(t)||[];return i.trace("In isDescendant",t," ",e," = ",n.includes(e)),n.includes(e)},"isDescendant"),se=X((e,t)=>{const n=b.get(t)||[];return i.info("Descendants of ",t," is ",n),i.info("Edge is ",e),e.v===t||e.w===t?!1:n?n.includes(e.v)||O(e.v,t)||O(e.w,t)||n.includes(e.w):(i.debug("Tilt, ",t,",not in descendants"),!1)},"edgeInCluster"),G=X((e,t,n,o)=>{i.warn("Copying children of ",e,"root",o,"data",t.node(e),o);const c=t.children(e)||[];e!==o&&c.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",c),c.forEach(a=>{if(t.children(a).length>0)G(a,t,n,o);else{const r=t.node(a);i.info("cp ",a," to ",o," with parent ",e),n.setNode(a,r),o!==t.parent(a)&&(i.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==o&&a!==e?(i.debug("Setting parent",a,e),n.setParent(a,e)):(i.info("In copy ",e,"root",o,"data",t.node(e),o),i.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==o,"node!==clusterId",a!==e));const u=t.edges(a);i.debug("Copying Edges",u),u.forEach(l=>{i.info("Edge",l);const v=t.edge(l.v,l.w,l.name);i.info("Edge data",v,o);try{se(l,o)?(i.info("Copying as ",l.v,l.w,v,l.name),n.setEdge(l.v,l.w,v,l.name),i.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.info("Skipping copy of edge ",l.v,"-->",l.w," rootId: ",o," clusterId:",e)}catch(C){i.error(C)}})}i.debug("Removing node",a),t.removeNode(a)})},"copy"),R=X((e,t)=>{const n=t.children(e);let o=[...n];for(const c of n)J.set(c,e),o=[...o,...R(c,t)];return o},"extractDescendants"),ie=X((e,t,n)=>{const o=e.edges().filter(l=>l.v===t||l.w===t),c=e.edges().filter(l=>l.v===n||l.w===n),a=o.map(l=>({v:l.v===t?n:l.v,w:l.w===t?t:l.w})),r=c.map(l=>({v:l.v,w:l.w}));return a.filter(l=>r.some(v=>l.v===v.v&&l.w===v.w))},"findCommonEdges"),D=X((e,t,n)=>{const o=t.children(e);if(i.trace("Searching children of id ",e,o),o.length<1)return e;let c;for(const a of o){const r=D(a,t,n),u=ie(t,n,r);if(r)if(u.length>0)c=r;else return r}return c},"findNonClusterChild"),k=X(e=>!f.has(e)||!f.get(e).externalConnections?e:f.has(e)?f.get(e).id:e,"getAnchorId"),re=X((e,t)=>{if(!e||t>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.warn("Cluster identified",n," Replacement id in edges: ",D(n,e,n)),b.set(n,R(n,e)),f.set(n,{id:D(n,e,n),clusterData:e.node(n)}))}),e.nodes().forEach(function(n){const o=e.children(n),c=e.edges();o.length>0?(i.debug("Cluster identified",n,b),c.forEach(a=>{const r=O(a.v,n),u=O(a.w,n);r^u&&(i.warn("Edge: ",a," leaves cluster ",n),i.warn("Descendants of XXX ",n,": ",b.get(n)),f.get(n).externalConnections=!0)})):i.debug("Not a cluster ",n,b)});for(let n of f.keys()){const o=f.get(n).id,c=e.parent(o);c!==n&&f.has(c)&&!f.get(c).externalConnections&&(f.get(n).id=c)}e.edges().forEach(function(n){const o=e.edge(n);i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let c=n.v,a=n.w;if(i.warn("Fix XXX",f,"ids:",n.v,n.w,"Translating: ",f.get(n.v)," --- ",f.get(n.w)),f.get(n.v)||f.get(n.w)){if(i.warn("Fixing and trying - removing XXX",n.v,n.w,n.name),c=k(n.v),a=k(n.w),e.removeEdge(n.v,n.w,n.name),c!==n.v){const r=e.parent(c);f.get(r).externalConnections=!0,o.fromCluster=n.v}if(a!==n.w){const r=e.parent(a);f.get(r).externalConnections=!0,o.toCluster=n.w}i.warn("Fix Replacing with XXX",c,a,n.name),e.setEdge(c,a,o,n.name)}}),i.warn("Adjusted Graph",p(e)),T(e,0),i.trace(f)},"adjustClustersAndEdges"),T=X((e,t)=>{var c,a;if(i.warn("extractor - ",t,p(e),e.children("D")),t>10){i.error("Bailing out");return}let n=e.nodes(),o=!1;for(const r of n){const u=e.children(r);o=o||u.length>0}if(!o){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",n,t);for(const r of n)if(i.debug("Extracting node",r,f,f.has(r)&&!f.get(r).externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),!f.has(r))i.debug("Not a cluster",r,t);else if(!f.get(r).externalConnections&&e.children(r)&&e.children(r).length>0){i.warn("Cluster without external connections, without a parent and with children",r,t);let l=e.graph().rankdir==="TB"?"LR":"TB";(a=(c=f.get(r))==null?void 0:c.clusterData)!=null&&a.dir&&(l=f.get(r).clusterData.dir,i.warn("Fixing dir",f.get(r).clusterData.dir,l));const v=new B({multigraph:!0,compound:!0}).setGraph({rankdir:l,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",p(e)),G(r,e,v,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:f.get(r).clusterData,label:f.get(r).label,graph:v}),i.warn("New graph after copy node: (",r,")",p(v)),i.debug("Old graph after copy",p(e))}else i.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!f.get(r).externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),i.debug(f);n=e.nodes(),i.warn("New list of nodes",n);for(const r of n){const u=e.node(r);i.warn(" Now next level",r,u),u!=null&&u.clusterNode&&T(u.graph,t+1)}},"extractor"),M=X((e,t)=>{if(t.length===0)return[];let n=Object.assign([],t);return t.forEach(o=>{const c=e.children(o),a=M(e,c);n=[...n,...a]}),n},"sorter"),oe=X(e=>M(e,e.children()),"sortNodesByHierarchy"),j=X(async(e,t,n,o,c,a)=>{i.warn("Graph in recursive render:XAX",p(t),c);const r=t.graph().rankdir;i.trace("Dir in recursive render - dir:",r);const u=e.insert("g").attr("class","root");t.nodes()?i.info("Recursive render XXX",t.nodes()):i.info("No nodes found for",t),t.edges().length>0&&i.info("Recursive edges",t.edge(t.edges()[0]));const l=u.insert("g").attr("class","clusters"),v=u.insert("g").attr("class","edgePaths"),C=u.insert("g").attr("class","edgeLabels"),g=u.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(d){const s=t.node(d);if(c!==void 0){const w=JSON.parse(JSON.stringify(c.clusterData));i.trace(`Setting data for parent cluster XXX +import{_ as X,au as F,av as Y,aw as _,ax as H,l as i,c as V,ay as z,az as U,ag as $,al as q,ah as P,af as K,aA as Q,aB as W,aC as Z}from"./index-DbSnkTMx.js";import{i as x,G as B}from"./graph-ClFPgZSo.js";import{l as I}from"./layout-BnnDy5vP.js";import{c as L}from"./clone-OwIowIht.js";import{m as A}from"./min-jMRXb9Wh.js";import"./_baseUniq-CR-Qd8A8.js";function p(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:ee(e),edges:ne(e)};return x(e.graph())||(t.value=L(e.graph())),t}function ee(e){return A(e.nodes(),function(t){var n=e.node(t),o=e.parent(t),c={v:t};return x(n)||(c.value=n),x(o)||(c.parent=o),c})}function ne(e){return A(e.edges(),function(t){var n=e.edge(t),o={v:t.v,w:t.w};return x(t.name)||(o.name=t.name),x(n)||(o.value=n),o})}var f=new Map,b=new Map,J=new Map,te=X(()=>{b.clear(),J.clear(),f.clear()},"clear"),O=X((e,t)=>{const n=b.get(t)||[];return i.trace("In isDescendant",t," ",e," = ",n.includes(e)),n.includes(e)},"isDescendant"),se=X((e,t)=>{const n=b.get(t)||[];return i.info("Descendants of ",t," is ",n),i.info("Edge is ",e),e.v===t||e.w===t?!1:n?n.includes(e.v)||O(e.v,t)||O(e.w,t)||n.includes(e.w):(i.debug("Tilt, ",t,",not in descendants"),!1)},"edgeInCluster"),G=X((e,t,n,o)=>{i.warn("Copying children of ",e,"root",o,"data",t.node(e),o);const c=t.children(e)||[];e!==o&&c.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",c),c.forEach(a=>{if(t.children(a).length>0)G(a,t,n,o);else{const r=t.node(a);i.info("cp ",a," to ",o," with parent ",e),n.setNode(a,r),o!==t.parent(a)&&(i.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==o&&a!==e?(i.debug("Setting parent",a,e),n.setParent(a,e)):(i.info("In copy ",e,"root",o,"data",t.node(e),o),i.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==o,"node!==clusterId",a!==e));const u=t.edges(a);i.debug("Copying Edges",u),u.forEach(l=>{i.info("Edge",l);const v=t.edge(l.v,l.w,l.name);i.info("Edge data",v,o);try{se(l,o)?(i.info("Copying as ",l.v,l.w,v,l.name),n.setEdge(l.v,l.w,v,l.name),i.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.info("Skipping copy of edge ",l.v,"-->",l.w," rootId: ",o," clusterId:",e)}catch(C){i.error(C)}})}i.debug("Removing node",a),t.removeNode(a)})},"copy"),R=X((e,t)=>{const n=t.children(e);let o=[...n];for(const c of n)J.set(c,e),o=[...o,...R(c,t)];return o},"extractDescendants"),ie=X((e,t,n)=>{const o=e.edges().filter(l=>l.v===t||l.w===t),c=e.edges().filter(l=>l.v===n||l.w===n),a=o.map(l=>({v:l.v===t?n:l.v,w:l.w===t?t:l.w})),r=c.map(l=>({v:l.v,w:l.w}));return a.filter(l=>r.some(v=>l.v===v.v&&l.w===v.w))},"findCommonEdges"),D=X((e,t,n)=>{const o=t.children(e);if(i.trace("Searching children of id ",e,o),o.length<1)return e;let c;for(const a of o){const r=D(a,t,n),u=ie(t,n,r);if(r)if(u.length>0)c=r;else return r}return c},"findNonClusterChild"),k=X(e=>!f.has(e)||!f.get(e).externalConnections?e:f.has(e)?f.get(e).id:e,"getAnchorId"),re=X((e,t)=>{if(!e||t>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.warn("Cluster identified",n," Replacement id in edges: ",D(n,e,n)),b.set(n,R(n,e)),f.set(n,{id:D(n,e,n),clusterData:e.node(n)}))}),e.nodes().forEach(function(n){const o=e.children(n),c=e.edges();o.length>0?(i.debug("Cluster identified",n,b),c.forEach(a=>{const r=O(a.v,n),u=O(a.w,n);r^u&&(i.warn("Edge: ",a," leaves cluster ",n),i.warn("Descendants of XXX ",n,": ",b.get(n)),f.get(n).externalConnections=!0)})):i.debug("Not a cluster ",n,b)});for(let n of f.keys()){const o=f.get(n).id,c=e.parent(o);c!==n&&f.has(c)&&!f.get(c).externalConnections&&(f.get(n).id=c)}e.edges().forEach(function(n){const o=e.edge(n);i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let c=n.v,a=n.w;if(i.warn("Fix XXX",f,"ids:",n.v,n.w,"Translating: ",f.get(n.v)," --- ",f.get(n.w)),f.get(n.v)||f.get(n.w)){if(i.warn("Fixing and trying - removing XXX",n.v,n.w,n.name),c=k(n.v),a=k(n.w),e.removeEdge(n.v,n.w,n.name),c!==n.v){const r=e.parent(c);f.get(r).externalConnections=!0,o.fromCluster=n.v}if(a!==n.w){const r=e.parent(a);f.get(r).externalConnections=!0,o.toCluster=n.w}i.warn("Fix Replacing with XXX",c,a,n.name),e.setEdge(c,a,o,n.name)}}),i.warn("Adjusted Graph",p(e)),T(e,0),i.trace(f)},"adjustClustersAndEdges"),T=X((e,t)=>{var c,a;if(i.warn("extractor - ",t,p(e),e.children("D")),t>10){i.error("Bailing out");return}let n=e.nodes(),o=!1;for(const r of n){const u=e.children(r);o=o||u.length>0}if(!o){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",n,t);for(const r of n)if(i.debug("Extracting node",r,f,f.has(r)&&!f.get(r).externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),!f.has(r))i.debug("Not a cluster",r,t);else if(!f.get(r).externalConnections&&e.children(r)&&e.children(r).length>0){i.warn("Cluster without external connections, without a parent and with children",r,t);let l=e.graph().rankdir==="TB"?"LR":"TB";(a=(c=f.get(r))==null?void 0:c.clusterData)!=null&&a.dir&&(l=f.get(r).clusterData.dir,i.warn("Fixing dir",f.get(r).clusterData.dir,l));const v=new B({multigraph:!0,compound:!0}).setGraph({rankdir:l,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",p(e)),G(r,e,v,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:f.get(r).clusterData,label:f.get(r).label,graph:v}),i.warn("New graph after copy node: (",r,")",p(v)),i.debug("Old graph after copy",p(e))}else i.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!f.get(r).externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),i.debug(f);n=e.nodes(),i.warn("New list of nodes",n);for(const r of n){const u=e.node(r);i.warn(" Now next level",r,u),u!=null&&u.clusterNode&&T(u.graph,t+1)}},"extractor"),M=X((e,t)=>{if(t.length===0)return[];let n=Object.assign([],t);return t.forEach(o=>{const c=e.children(o),a=M(e,c);n=[...n,...a]}),n},"sorter"),oe=X(e=>M(e,e.children()),"sortNodesByHierarchy"),j=X(async(e,t,n,o,c,a)=>{i.warn("Graph in recursive render:XAX",p(t),c);const r=t.graph().rankdir;i.trace("Dir in recursive render - dir:",r);const u=e.insert("g").attr("class","root");t.nodes()?i.info("Recursive render XXX",t.nodes()):i.info("No nodes found for",t),t.edges().length>0&&i.info("Recursive edges",t.edge(t.edges()[0]));const l=u.insert("g").attr("class","clusters"),v=u.insert("g").attr("class","edgePaths"),C=u.insert("g").attr("class","edgeLabels"),g=u.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(d){const s=t.node(d);if(c!==void 0){const w=JSON.parse(JSON.stringify(c.clusterData));i.trace(`Setting data for parent cluster XXX Node.id = `,d,` data=`,w.height,` Parent cluster`,c.height),t.setNode(c.id,w),t.parent(d)||(i.trace("Setting parent",d,c.id),t.setParent(d,c.id,w))}if(i.info("(Insert) Node XXX"+d+": "+JSON.stringify(t.node(d))),s!=null&&s.clusterNode){i.info("Cluster identified XBX",d,s.width,t.node(d));const{ranksep:w,nodesep:m}=t.graph();s.graph.setGraph({...s.graph.graph(),ranksep:w+25,nodesep:m});const N=await j(g,s.graph,n,o,t.node(d),a),S=N.elem;z(s,S),s.diff=N.diff||0,i.info("New compound node after recursive render XAX",d,"width",s.width,"height",s.height),U(S,s)}else t.children(d).length>0?(i.trace("Cluster - the non recursive path XBX",d,s.id,s,s.width,"Graph:",t),i.trace(D(s.id,t)),f.set(s.id,{id:D(s.id,t),node:s})):(i.trace("Node - the non recursive path XAX",d,g,t.node(d),r),await $(g,t.node(d),{config:a,dir:r}))})),await X(async()=>{const d=t.edges().map(async function(s){const w=t.edge(s.v,s.w,s.name);i.info("Edge "+s.v+" -> "+s.w+": "+JSON.stringify(s)),i.info("Edge "+s.v+" -> "+s.w+": ",s," ",JSON.stringify(t.edge(s))),i.info("Fix",f,"ids:",s.v,s.w,"Translating: ",f.get(s.v),f.get(s.w)),await Z(C,w)});await Promise.all(d)},"processEdges")(),i.info("Graph before layout:",JSON.stringify(p(t))),i.info("############################################# XXX"),i.info("### Layout ### XXX"),i.info("############################################# XXX"),I(t),i.info("Graph after layout:",JSON.stringify(p(t)));let E=0,{subGraphTitleTotalMargin:y}=q(a);return await Promise.all(oe(t).map(async function(d){var w;const s=t.node(d);if(i.info("Position XBX => "+d+": ("+s.x,","+s.y,") width: ",s.width," height: ",s.height),s!=null&&s.clusterNode)s.y+=y,i.info("A tainted cluster node XBX1",d,s.id,s.width,s.height,s.x,s.y,t.parent(d)),f.get(s.id).node=s,P(s);else if(t.children(d).length>0){i.info("A pure cluster node XBX1",d,s.id,s.x,s.y,s.width,s.height,t.parent(d)),s.height+=y,t.node(s.parentId);const m=(s==null?void 0:s.padding)/2||0,N=((w=s==null?void 0:s.labelBBox)==null?void 0:w.height)||0,S=N-m||0;i.debug("OffsetY",S,"labelHeight",N,"halfPadding",m),await K(l,s),f.get(s.id).node=s}else{const m=t.node(s.parentId);s.y+=y/2,i.info("A regular node XBX1 - using the padding",s.id,"parent",s.parentId,s.width,s.height,s.x,s.y,"offsetY",s.offsetY,"parent",m,m==null?void 0:m.offsetY,s),P(s)}})),t.edges().forEach(function(d){const s=t.edge(d);i.info("Edge "+d.v+" -> "+d.w+": "+JSON.stringify(s),s),s.points.forEach(S=>S.y+=y/2);const w=t.node(d.v);var m=t.node(d.w);const N=Q(v,s,f,n,w,m,o);W(s,N)}),t.nodes().forEach(function(d){const s=t.node(d);i.info(d,s.type,s.diff),s.isGroup&&(E=s.diff)}),i.warn("Returning from recursive render XAX",u,E),{elem:u,diff:E}},"recursiveRender"),ge=X(async(e,t)=>{var a,r,u,l,v,C;const n=new B({multigraph:!0,compound:!0}).setGraph({rankdir:e.direction,nodesep:((a=e.config)==null?void 0:a.nodeSpacing)||((u=(r=e.config)==null?void 0:r.flowchart)==null?void 0:u.nodeSpacing)||e.nodeSpacing,ranksep:((l=e.config)==null?void 0:l.rankSpacing)||((C=(v=e.config)==null?void 0:v.flowchart)==null?void 0:C.rankSpacing)||e.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),o=t.select("g");F(o,e.markers,e.type,e.diagramId),Y(),_(),H(),te(),e.nodes.forEach(g=>{n.setNode(g.id,{...g}),g.parentId&&n.setParent(g.id,g.parentId)}),i.debug("Edges:",e.edges),e.edges.forEach(g=>{if(g.start===g.end){const h=g.start,E=h+"---"+h+"---1",y=h+"---"+h+"---2",d=n.node(h);n.setNode(E,{domId:E,id:E,parentId:d.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),n.setParent(E,d.parentId),n.setNode(y,{domId:y,id:y,parentId:d.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),n.setParent(y,d.parentId);const s=structuredClone(g),w=structuredClone(g),m=structuredClone(g);s.label="",s.arrowTypeEnd="none",s.id=h+"-cyclic-special-1",w.arrowTypeStart="none",w.arrowTypeEnd="none",w.id=h+"-cyclic-special-mid",m.label="",d.isGroup&&(s.fromCluster=h,m.toCluster=h),m.id=h+"-cyclic-special-2",m.arrowTypeStart="none",n.setEdge(h,E,s,h+"-cyclic-special-0"),n.setEdge(E,y,w,h+"-cyclic-special-1"),n.setEdge(y,h,m,h+"-cyc {\n descendants.clear();\n parents.clear();\n clusterDb.clear();\n}, \"clear\");\nvar isDescendant = /* @__PURE__ */ __name((id, ancestorId) => {\n const ancestorDescendants = descendants.get(ancestorId) || [];\n log.trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", ancestorDescendants.includes(id));\n return ancestorDescendants.includes(id);\n}, \"isDescendant\");\nvar edgeInCluster = /* @__PURE__ */ __name((edge, clusterId) => {\n const clusterDescendants = descendants.get(clusterId) || [];\n log.info(\"Descendants of \", clusterId, \" is \", clusterDescendants);\n log.info(\"Edge is \", edge);\n if (edge.v === clusterId || edge.w === clusterId) {\n return false;\n }\n if (!clusterDescendants) {\n log.debug(\"Tilt, \", clusterId, \",not in descendants\");\n return false;\n }\n return clusterDescendants.includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || clusterDescendants.includes(edge.w);\n}, \"edgeInCluster\");\nvar copy = /* @__PURE__ */ __name((clusterId, graph, newGraph, rootId) => {\n log.warn(\n \"Copying children of \",\n clusterId,\n \"root\",\n rootId,\n \"data\",\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n log.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n log.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n log.warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n log.debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n log.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n log.debug(\n \"Not Setting parent for node=\",\n node,\n \"cluster!==rootId\",\n clusterId !== rootId,\n \"node!==clusterId\",\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n log.debug(\"Copying Edges\", edges);\n edges.forEach((edge) => {\n log.info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n log.info(\"Edge data\", data2, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n log.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n log.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n log.info(\n \"Skipping copy of edge \",\n edge.v,\n \"-->\",\n edge.w,\n \" rootId: \",\n rootId,\n \" clusterId:\",\n clusterId\n );\n }\n } catch (e) {\n log.error(e);\n }\n });\n }\n log.debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n}, \"copy\");\nvar extractDescendants = /* @__PURE__ */ __name((id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n for (const child of children) {\n parents.set(child, id);\n res = [...res, ...extractDescendants(child, graph)];\n }\n return res;\n}, \"extractDescendants\");\nvar findCommonEdges = /* @__PURE__ */ __name((graph, id1, id2) => {\n const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1);\n const edges2 = graph.edges().filter((edge) => edge.v === id2 || edge.w === id2);\n const edges1Prim = edges1.map((edge) => {\n return { v: edge.v === id1 ? id2 : edge.v, w: edge.w === id1 ? id1 : edge.w };\n });\n const edges2Prim = edges2.map((edge) => {\n return { v: edge.v, w: edge.w };\n });\n const result = edges1Prim.filter((edgeIn1) => {\n return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w);\n });\n return result;\n}, \"findCommonEdges\");\nvar findNonClusterChild = /* @__PURE__ */ __name((id, graph, clusterId) => {\n const children = graph.children(id);\n log.trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n return id;\n }\n let reserve;\n for (const child of children) {\n const _id = findNonClusterChild(child, graph, clusterId);\n const commonEdges = findCommonEdges(graph, clusterId, _id);\n if (_id) {\n if (commonEdges.length > 0) {\n reserve = _id;\n } else {\n return _id;\n }\n }\n }\n return reserve;\n}, \"findNonClusterChild\");\nvar getAnchorId = /* @__PURE__ */ __name((id) => {\n if (!clusterDb.has(id)) {\n return id;\n }\n if (!clusterDb.get(id).externalConnections) {\n return id;\n }\n if (clusterDb.has(id)) {\n return clusterDb.get(id).id;\n }\n return id;\n}, \"getAnchorId\");\nvar adjustClustersAndEdges = /* @__PURE__ */ __name((graph, depth) => {\n if (!graph || depth > 10) {\n log.debug(\"Opting out, no graph \");\n return;\n } else {\n log.debug(\"Opting in, graph \");\n }\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n log.warn(\n \"Cluster identified\",\n id,\n \" Replacement id in edges: \",\n findNonClusterChild(id, graph, id)\n );\n descendants.set(id, extractDescendants(id, graph));\n clusterDb.set(id, { id: findNonClusterChild(id, graph, id), clusterData: graph.node(id) });\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n log.debug(\"Cluster identified\", id, descendants);\n edges.forEach((edge) => {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n if (d1 ^ d2) {\n log.warn(\"Edge: \", edge, \" leaves cluster \", id);\n log.warn(\"Descendants of XXX \", id, \": \", descendants.get(id));\n clusterDb.get(id).externalConnections = true;\n }\n });\n } else {\n log.debug(\"Not a cluster \", id, descendants);\n }\n });\n for (let id of clusterDb.keys()) {\n const nonClusterChild = clusterDb.get(id).id;\n const parent = graph.parent(nonClusterChild);\n if (parent !== id && clusterDb.has(parent) && !clusterDb.get(parent).externalConnections) {\n clusterDb.get(id).id = parent;\n }\n }\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n log.warn(\n \"Fix XXX\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb.get(e.v),\n \" --- \",\n clusterDb.get(e.w)\n );\n if (clusterDb.get(e.v) || clusterDb.get(e.w)) {\n log.warn(\"Fixing and trying - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n clusterDb.get(parent).externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n clusterDb.get(parent).externalConnections = true;\n edge.toCluster = e.w;\n }\n log.warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n log.warn(\"Adjusted Graph\", graphlibJson.write(graph));\n extractor(graph, 0);\n log.trace(clusterDb);\n}, \"adjustClustersAndEdges\");\nvar extractor = /* @__PURE__ */ __name((graph, depth) => {\n log.warn(\"extractor - \", depth, graphlibJson.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n log.error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n log.debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n log.debug(\"Nodes = \", nodes, depth);\n for (const node of nodes) {\n log.debug(\n \"Extracting node\",\n node,\n clusterDb,\n clusterDb.has(node) && !clusterDb.get(node).externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children(\"D\"),\n \" Depth \",\n depth\n );\n if (!clusterDb.has(node)) {\n log.debug(\"Not a cluster\", node, depth);\n } else if (!clusterDb.get(node).externalConnections && graph.children(node) && graph.children(node).length > 0) {\n log.warn(\n \"Cluster without external connections, without a parent and with children\",\n node,\n depth\n );\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if (clusterDb.get(node)?.clusterData?.dir) {\n dir = clusterDb.get(node).clusterData.dir;\n log.warn(\"Fixing dir\", clusterDb.get(node).clusterData.dir, dir);\n }\n const clusterGraph = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n log.warn(\"Old graph before copy\", graphlibJson.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb.get(node).clusterData,\n label: clusterDb.get(node).label,\n graph: clusterGraph\n });\n log.warn(\"New graph after copy node: (\", node, \")\", graphlibJson.write(clusterGraph));\n log.debug(\"Old graph after copy\", graphlibJson.write(graph));\n } else {\n log.warn(\n \"Cluster ** \",\n node,\n \" **not meeting the criteria !externalConnections:\",\n !clusterDb.get(node).externalConnections,\n \" no parent: \",\n !graph.parent(node),\n \" children \",\n graph.children(node) && graph.children(node).length > 0,\n graph.children(\"D\"),\n depth\n );\n log.debug(clusterDb);\n }\n }\n nodes = graph.nodes();\n log.warn(\"New list of nodes\", nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n log.warn(\" Now next level\", node, data);\n if (data?.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n}, \"extractor\");\nvar sorter = /* @__PURE__ */ __name((graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign([], nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n return result;\n}, \"sorter\");\nvar sortNodesByHierarchy = /* @__PURE__ */ __name((graph) => sorter(graph, graph.children()), \"sortNodesByHierarchy\");\n\n// src/rendering-util/layout-algorithms/dagre/index.js\nvar recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n log.warn(\"Graph in recursive render:XAX\", graphlibJson2.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n log.trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) {\n log.info(\"No nodes found for\", graph);\n } else {\n log.info(\"Recursive render XXX\", graph.nodes());\n }\n if (graph.edges().length > 0) {\n log.info(\"Recursive edges\", graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(\n graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n log.trace(\n \"Setting data for parent cluster XXX\\n Node.id = \",\n v,\n \"\\n data=\",\n data.height,\n \"\\nParent cluster\",\n parentCluster.height\n );\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n log.trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n log.info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node?.clusterNode) {\n log.info(\"Cluster identified XBX\", v, node.width, graph.node(v));\n const { ranksep, nodesep } = graph.graph();\n node.graph.setGraph({\n ...node.graph.graph(),\n ranksep: ranksep + 25,\n nodesep\n });\n const o = await recursiveRender(\n nodes,\n node.graph,\n diagramType,\n id,\n graph.node(v),\n siteConfig\n );\n const newEl = o.elem;\n updateNodeBounds(node, newEl);\n node.diff = o.diff || 0;\n log.info(\n \"New compound node after recursive render XAX\",\n v,\n \"width\",\n // node,\n node.width,\n \"height\",\n node.height\n // node.x,\n // node.y\n );\n setNodeElem(newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n log.trace(\n \"Cluster - the non recursive path XBX\",\n v,\n node.id,\n node,\n node.width,\n \"Graph:\",\n graph\n );\n log.trace(findNonClusterChild(node.id, graph));\n clusterDb.set(node.id, { id: findNonClusterChild(node.id, graph), node });\n } else {\n log.trace(\"Node - the non recursive path XAX\", v, nodes, graph.node(v), dir);\n await insertNode(nodes, graph.node(v), { config: siteConfig, dir });\n }\n }\n })\n );\n const processEdges = /* @__PURE__ */ __name(async () => {\n const edgePromises = graph.edges().map(async function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n log.info(\n \"Fix\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb.get(e.v),\n clusterDb.get(e.w)\n );\n await insertEdgeLabel(edgeLabels, edge);\n });\n await Promise.all(edgePromises);\n }, \"processEdges\");\n await processEdges();\n log.info(\"Graph before layout:\", JSON.stringify(graphlibJson2.write(graph)));\n log.info(\"############################################# XXX\");\n log.info(\"### Layout ### XXX\");\n log.info(\"############################################# XXX\");\n dagreLayout(graph);\n log.info(\"Graph after layout:\", JSON.stringify(graphlibJson2.write(graph)));\n let diff = 0;\n let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n await Promise.all(\n sortNodesByHierarchy(graph).map(async function(v) {\n const node = graph.node(v);\n log.info(\n \"Position XBX => \" + v + \": (\" + node.x,\n \",\" + node.y,\n \") width: \",\n node.width,\n \" height: \",\n node.height\n );\n if (node?.clusterNode) {\n node.y += subGraphTitleTotalMargin;\n log.info(\n \"A tainted cluster node XBX1\",\n v,\n node.id,\n node.width,\n node.height,\n node.x,\n node.y,\n graph.parent(v)\n );\n clusterDb.get(node.id).node = node;\n positionNode(node);\n } else {\n if (graph.children(v).length > 0) {\n log.info(\n \"A pure cluster node XBX1\",\n v,\n node.id,\n node.x,\n node.y,\n node.width,\n node.height,\n graph.parent(v)\n );\n node.height += subGraphTitleTotalMargin;\n graph.node(node.parentId);\n const halfPadding = node?.padding / 2 || 0;\n const labelHeight = node?.labelBBox?.height || 0;\n const offsetY = labelHeight - halfPadding || 0;\n log.debug(\"OffsetY\", offsetY, \"labelHeight\", labelHeight, \"halfPadding\", halfPadding);\n await insertCluster(clusters, node);\n clusterDb.get(node.id).node = node;\n } else {\n const parent = graph.node(node.parentId);\n node.y += subGraphTitleTotalMargin / 2;\n log.info(\n \"A regular node XBX1 - using the padding\",\n node.id,\n \"parent\",\n node.parentId,\n node.width,\n node.height,\n node.x,\n node.y,\n \"offsetY\",\n node.offsetY,\n \"parent\",\n parent,\n parent?.offsetY,\n node\n );\n positionNode(node);\n }\n }\n })\n );\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2);\n const startNode = graph.node(e.v);\n var endNode = graph.node(e.w);\n const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id);\n positionEdgeLabel(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n log.info(v, n.type, n.diff);\n if (n.isGroup) {\n diff = n.diff;\n }\n });\n log.warn(\"Returning from recursive render XAX\", elem, diff);\n return { elem, diff };\n}, \"recursiveRender\");\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg) => {\n const graph = new graphlib2.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: data4Layout.direction,\n nodesep: data4Layout.config?.nodeSpacing || data4Layout.config?.flowchart?.nodeSpacing || data4Layout.nodeSpacing,\n ranksep: data4Layout.config?.rankSpacing || data4Layout.config?.flowchart?.rankSpacing || data4Layout.rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const element = svg.select(\"g\");\n markers_default(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n clear3();\n clear2();\n clear();\n clear4();\n data4Layout.nodes.forEach((node) => {\n graph.setNode(node.id, { ...node });\n if (node.parentId) {\n graph.setParent(node.id, node.parentId);\n }\n });\n log.debug(\"Edges:\", data4Layout.edges);\n data4Layout.edges.forEach((edge) => {\n if (edge.start === edge.end) {\n const nodeId = edge.start;\n const specialId1 = nodeId + \"---\" + nodeId + \"---1\";\n const specialId2 = nodeId + \"---\" + nodeId + \"---2\";\n const node = graph.node(nodeId);\n graph.setNode(specialId1, {\n domId: specialId1,\n id: specialId1,\n parentId: node.parentId,\n labelStyle: \"\",\n label: \"\",\n padding: 0,\n shape: \"labelRect\",\n // shape: 'rect',\n style: \"\",\n width: 10,\n height: 10\n });\n graph.setParent(specialId1, node.parentId);\n graph.setNode(specialId2, {\n domId: specialId2,\n id: specialId2,\n parentId: node.parentId,\n labelStyle: \"\",\n padding: 0,\n // shape: 'rect',\n shape: \"labelRect\",\n label: \"\",\n style: \"\",\n width: 10,\n height: 10\n });\n graph.setParent(specialId2, node.parentId);\n const edge1 = structuredClone(edge);\n const edgeMid = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge1.id = nodeId + \"-cyclic-special-1\";\n edgeMid.arrowTypeStart = \"none\";\n edgeMid.arrowTypeEnd = \"none\";\n edgeMid.id = nodeId + \"-cyclic-special-mid\";\n edge2.label = \"\";\n if (node.isGroup) {\n edge1.fromCluster = nodeId;\n edge2.toCluster = nodeId;\n }\n edge2.id = nodeId + \"-cyclic-special-2\";\n edge2.arrowTypeStart = \"none\";\n graph.setEdge(nodeId, specialId1, edge1, nodeId + \"-cyclic-special-0\");\n graph.setEdge(specialId1, specialId2, edgeMid, nodeId + \"-cyclic-special-1\");\n graph.setEdge(specialId2, nodeId, edge2, nodeId + \"-cyc {\n descendants.clear();\n parents.clear();\n clusterDb.clear();\n}, \"clear\");\nvar isDescendant = /* @__PURE__ */ __name((id, ancestorId) => {\n const ancestorDescendants = descendants.get(ancestorId) || [];\n log.trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", ancestorDescendants.includes(id));\n return ancestorDescendants.includes(id);\n}, \"isDescendant\");\nvar edgeInCluster = /* @__PURE__ */ __name((edge, clusterId) => {\n const clusterDescendants = descendants.get(clusterId) || [];\n log.info(\"Descendants of \", clusterId, \" is \", clusterDescendants);\n log.info(\"Edge is \", edge);\n if (edge.v === clusterId || edge.w === clusterId) {\n return false;\n }\n if (!clusterDescendants) {\n log.debug(\"Tilt, \", clusterId, \",not in descendants\");\n return false;\n }\n return clusterDescendants.includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || clusterDescendants.includes(edge.w);\n}, \"edgeInCluster\");\nvar copy = /* @__PURE__ */ __name((clusterId, graph, newGraph, rootId) => {\n log.warn(\n \"Copying children of \",\n clusterId,\n \"root\",\n rootId,\n \"data\",\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n log.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n log.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n log.warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n log.debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n log.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n log.debug(\n \"Not Setting parent for node=\",\n node,\n \"cluster!==rootId\",\n clusterId !== rootId,\n \"node!==clusterId\",\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n log.debug(\"Copying Edges\", edges);\n edges.forEach((edge) => {\n log.info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n log.info(\"Edge data\", data2, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n log.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n log.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n log.info(\n \"Skipping copy of edge \",\n edge.v,\n \"-->\",\n edge.w,\n \" rootId: \",\n rootId,\n \" clusterId:\",\n clusterId\n );\n }\n } catch (e) {\n log.error(e);\n }\n });\n }\n log.debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n}, \"copy\");\nvar extractDescendants = /* @__PURE__ */ __name((id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n for (const child of children) {\n parents.set(child, id);\n res = [...res, ...extractDescendants(child, graph)];\n }\n return res;\n}, \"extractDescendants\");\nvar findCommonEdges = /* @__PURE__ */ __name((graph, id1, id2) => {\n const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1);\n const edges2 = graph.edges().filter((edge) => edge.v === id2 || edge.w === id2);\n const edges1Prim = edges1.map((edge) => {\n return { v: edge.v === id1 ? id2 : edge.v, w: edge.w === id1 ? id1 : edge.w };\n });\n const edges2Prim = edges2.map((edge) => {\n return { v: edge.v, w: edge.w };\n });\n const result = edges1Prim.filter((edgeIn1) => {\n return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w);\n });\n return result;\n}, \"findCommonEdges\");\nvar findNonClusterChild = /* @__PURE__ */ __name((id, graph, clusterId) => {\n const children = graph.children(id);\n log.trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n return id;\n }\n let reserve;\n for (const child of children) {\n const _id = findNonClusterChild(child, graph, clusterId);\n const commonEdges = findCommonEdges(graph, clusterId, _id);\n if (_id) {\n if (commonEdges.length > 0) {\n reserve = _id;\n } else {\n return _id;\n }\n }\n }\n return reserve;\n}, \"findNonClusterChild\");\nvar getAnchorId = /* @__PURE__ */ __name((id) => {\n if (!clusterDb.has(id)) {\n return id;\n }\n if (!clusterDb.get(id).externalConnections) {\n return id;\n }\n if (clusterDb.has(id)) {\n return clusterDb.get(id).id;\n }\n return id;\n}, \"getAnchorId\");\nvar adjustClustersAndEdges = /* @__PURE__ */ __name((graph, depth) => {\n if (!graph || depth > 10) {\n log.debug(\"Opting out, no graph \");\n return;\n } else {\n log.debug(\"Opting in, graph \");\n }\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n log.warn(\n \"Cluster identified\",\n id,\n \" Replacement id in edges: \",\n findNonClusterChild(id, graph, id)\n );\n descendants.set(id, extractDescendants(id, graph));\n clusterDb.set(id, { id: findNonClusterChild(id, graph, id), clusterData: graph.node(id) });\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n log.debug(\"Cluster identified\", id, descendants);\n edges.forEach((edge) => {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n if (d1 ^ d2) {\n log.warn(\"Edge: \", edge, \" leaves cluster \", id);\n log.warn(\"Descendants of XXX \", id, \": \", descendants.get(id));\n clusterDb.get(id).externalConnections = true;\n }\n });\n } else {\n log.debug(\"Not a cluster \", id, descendants);\n }\n });\n for (let id of clusterDb.keys()) {\n const nonClusterChild = clusterDb.get(id).id;\n const parent = graph.parent(nonClusterChild);\n if (parent !== id && clusterDb.has(parent) && !clusterDb.get(parent).externalConnections) {\n clusterDb.get(id).id = parent;\n }\n }\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n log.warn(\n \"Fix XXX\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb.get(e.v),\n \" --- \",\n clusterDb.get(e.w)\n );\n if (clusterDb.get(e.v) || clusterDb.get(e.w)) {\n log.warn(\"Fixing and trying - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n clusterDb.get(parent).externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n clusterDb.get(parent).externalConnections = true;\n edge.toCluster = e.w;\n }\n log.warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n log.warn(\"Adjusted Graph\", graphlibJson.write(graph));\n extractor(graph, 0);\n log.trace(clusterDb);\n}, \"adjustClustersAndEdges\");\nvar extractor = /* @__PURE__ */ __name((graph, depth) => {\n log.warn(\"extractor - \", depth, graphlibJson.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n log.error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n log.debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n log.debug(\"Nodes = \", nodes, depth);\n for (const node of nodes) {\n log.debug(\n \"Extracting node\",\n node,\n clusterDb,\n clusterDb.has(node) && !clusterDb.get(node).externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children(\"D\"),\n \" Depth \",\n depth\n );\n if (!clusterDb.has(node)) {\n log.debug(\"Not a cluster\", node, depth);\n } else if (!clusterDb.get(node).externalConnections && graph.children(node) && graph.children(node).length > 0) {\n log.warn(\n \"Cluster without external connections, without a parent and with children\",\n node,\n depth\n );\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if (clusterDb.get(node)?.clusterData?.dir) {\n dir = clusterDb.get(node).clusterData.dir;\n log.warn(\"Fixing dir\", clusterDb.get(node).clusterData.dir, dir);\n }\n const clusterGraph = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n log.warn(\"Old graph before copy\", graphlibJson.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb.get(node).clusterData,\n label: clusterDb.get(node).label,\n graph: clusterGraph\n });\n log.warn(\"New graph after copy node: (\", node, \")\", graphlibJson.write(clusterGraph));\n log.debug(\"Old graph after copy\", graphlibJson.write(graph));\n } else {\n log.warn(\n \"Cluster ** \",\n node,\n \" **not meeting the criteria !externalConnections:\",\n !clusterDb.get(node).externalConnections,\n \" no parent: \",\n !graph.parent(node),\n \" children \",\n graph.children(node) && graph.children(node).length > 0,\n graph.children(\"D\"),\n depth\n );\n log.debug(clusterDb);\n }\n }\n nodes = graph.nodes();\n log.warn(\"New list of nodes\", nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n log.warn(\" Now next level\", node, data);\n if (data?.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n}, \"extractor\");\nvar sorter = /* @__PURE__ */ __name((graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign([], nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n return result;\n}, \"sorter\");\nvar sortNodesByHierarchy = /* @__PURE__ */ __name((graph) => sorter(graph, graph.children()), \"sortNodesByHierarchy\");\n\n// src/rendering-util/layout-algorithms/dagre/index.js\nvar recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n log.warn(\"Graph in recursive render:XAX\", graphlibJson2.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n log.trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) {\n log.info(\"No nodes found for\", graph);\n } else {\n log.info(\"Recursive render XXX\", graph.nodes());\n }\n if (graph.edges().length > 0) {\n log.info(\"Recursive edges\", graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(\n graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n log.trace(\n \"Setting data for parent cluster XXX\\n Node.id = \",\n v,\n \"\\n data=\",\n data.height,\n \"\\nParent cluster\",\n parentCluster.height\n );\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n log.trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n log.info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node?.clusterNode) {\n log.info(\"Cluster identified XBX\", v, node.width, graph.node(v));\n const { ranksep, nodesep } = graph.graph();\n node.graph.setGraph({\n ...node.graph.graph(),\n ranksep: ranksep + 25,\n nodesep\n });\n const o = await recursiveRender(\n nodes,\n node.graph,\n diagramType,\n id,\n graph.node(v),\n siteConfig\n );\n const newEl = o.elem;\n updateNodeBounds(node, newEl);\n node.diff = o.diff || 0;\n log.info(\n \"New compound node after recursive render XAX\",\n v,\n \"width\",\n // node,\n node.width,\n \"height\",\n node.height\n // node.x,\n // node.y\n );\n setNodeElem(newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n log.trace(\n \"Cluster - the non recursive path XBX\",\n v,\n node.id,\n node,\n node.width,\n \"Graph:\",\n graph\n );\n log.trace(findNonClusterChild(node.id, graph));\n clusterDb.set(node.id, { id: findNonClusterChild(node.id, graph), node });\n } else {\n log.trace(\"Node - the non recursive path XAX\", v, nodes, graph.node(v), dir);\n await insertNode(nodes, graph.node(v), { config: siteConfig, dir });\n }\n }\n })\n );\n const processEdges = /* @__PURE__ */ __name(async () => {\n const edgePromises = graph.edges().map(async function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n log.info(\n \"Fix\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb.get(e.v),\n clusterDb.get(e.w)\n );\n await insertEdgeLabel(edgeLabels, edge);\n });\n await Promise.all(edgePromises);\n }, \"processEdges\");\n await processEdges();\n log.info(\"Graph before layout:\", JSON.stringify(graphlibJson2.write(graph)));\n log.info(\"############################################# XXX\");\n log.info(\"### Layout ### XXX\");\n log.info(\"############################################# XXX\");\n dagreLayout(graph);\n log.info(\"Graph after layout:\", JSON.stringify(graphlibJson2.write(graph)));\n let diff = 0;\n let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n await Promise.all(\n sortNodesByHierarchy(graph).map(async function(v) {\n const node = graph.node(v);\n log.info(\n \"Position XBX => \" + v + \": (\" + node.x,\n \",\" + node.y,\n \") width: \",\n node.width,\n \" height: \",\n node.height\n );\n if (node?.clusterNode) {\n node.y += subGraphTitleTotalMargin;\n log.info(\n \"A tainted cluster node XBX1\",\n v,\n node.id,\n node.width,\n node.height,\n node.x,\n node.y,\n graph.parent(v)\n );\n clusterDb.get(node.id).node = node;\n positionNode(node);\n } else {\n if (graph.children(v).length > 0) {\n log.info(\n \"A pure cluster node XBX1\",\n v,\n node.id,\n node.x,\n node.y,\n node.width,\n node.height,\n graph.parent(v)\n );\n node.height += subGraphTitleTotalMargin;\n graph.node(node.parentId);\n const halfPadding = node?.padding / 2 || 0;\n const labelHeight = node?.labelBBox?.height || 0;\n const offsetY = labelHeight - halfPadding || 0;\n log.debug(\"OffsetY\", offsetY, \"labelHeight\", labelHeight, \"halfPadding\", halfPadding);\n await insertCluster(clusters, node);\n clusterDb.get(node.id).node = node;\n } else {\n const parent = graph.node(node.parentId);\n node.y += subGraphTitleTotalMargin / 2;\n log.info(\n \"A regular node XBX1 - using the padding\",\n node.id,\n \"parent\",\n node.parentId,\n node.width,\n node.height,\n node.x,\n node.y,\n \"offsetY\",\n node.offsetY,\n \"parent\",\n parent,\n parent?.offsetY,\n node\n );\n positionNode(node);\n }\n }\n })\n );\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2);\n const startNode = graph.node(e.v);\n var endNode = graph.node(e.w);\n const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id);\n positionEdgeLabel(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n log.info(v, n.type, n.diff);\n if (n.isGroup) {\n diff = n.diff;\n }\n });\n log.warn(\"Returning from recursive render XAX\", elem, diff);\n return { elem, diff };\n}, \"recursiveRender\");\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg) => {\n const graph = new graphlib2.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: data4Layout.direction,\n nodesep: data4Layout.config?.nodeSpacing || data4Layout.config?.flowchart?.nodeSpacing || data4Layout.nodeSpacing,\n ranksep: data4Layout.config?.rankSpacing || data4Layout.config?.flowchart?.rankSpacing || data4Layout.rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const element = svg.select(\"g\");\n markers_default(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n clear3();\n clear2();\n clear();\n clear4();\n data4Layout.nodes.forEach((node) => {\n graph.setNode(node.id, { ...node });\n if (node.parentId) {\n graph.setParent(node.id, node.parentId);\n }\n });\n log.debug(\"Edges:\", data4Layout.edges);\n data4Layout.edges.forEach((edge) => {\n if (edge.start === edge.end) {\n const nodeId = edge.start;\n const specialId1 = nodeId + \"---\" + nodeId + \"---1\";\n const specialId2 = nodeId + \"---\" + nodeId + \"---2\";\n const node = graph.node(nodeId);\n graph.setNode(specialId1, {\n domId: specialId1,\n id: specialId1,\n parentId: node.parentId,\n labelStyle: \"\",\n label: \"\",\n padding: 0,\n shape: \"labelRect\",\n // shape: 'rect',\n style: \"\",\n width: 10,\n height: 10\n });\n graph.setParent(specialId1, node.parentId);\n graph.setNode(specialId2, {\n domId: specialId2,\n id: specialId2,\n parentId: node.parentId,\n labelStyle: \"\",\n padding: 0,\n // shape: 'rect',\n shape: \"labelRect\",\n label: \"\",\n style: \"\",\n width: 10,\n height: 10\n });\n graph.setParent(specialId2, node.parentId);\n const edge1 = structuredClone(edge);\n const edgeMid = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge1.id = nodeId + \"-cyclic-special-1\";\n edgeMid.arrowTypeStart = \"none\";\n edgeMid.arrowTypeEnd = \"none\";\n edgeMid.id = nodeId + \"-cyclic-special-mid\";\n edge2.label = \"\";\n if (node.isGroup) {\n edge1.fromCluster = nodeId;\n edge2.toCluster = nodeId;\n }\n edge2.id = nodeId + \"-cyclic-special-2\";\n edge2.arrowTypeStart = \"none\";\n graph.setEdge(nodeId, specialId1, edge1, nodeId + \"-cyclic-special-0\");\n graph.setEdge(specialId1, specialId2, edgeMid, nodeId + \"-cyclic-special-1\");\n graph.setEdge(specialId2, nodeId, edge2, nodeId + \"-cyc=0;)a+=l[n].value;t.value=a}function $e(){return this.eachAfter(Le)}function Ae(t,a){let l=-1;for(const n of this)t.call(a,n,++l,this);return this}function Fe(t,a){for(var l=this,n=[l],o,s,d=-1;l=n.pop();)if(t.call(a,l,++d,this),o=l.children)for(s=o.length-1;s>=0;--s)n.push(o[s]);return this}function ke(t,a){for(var l=this,n=[l],o=[],s,d,h,g=-1;l=n.pop();)if(o.push(l),s=l.children)for(d=0,h=s.length;d=0;)l+=n[o].value;a.value=l})}function _e(t){return this.eachBefore(function(a){a.children&&a.children.sort(t)})}function ze(t){for(var a=this,l=Ve(a,t),n=[a];a!==l;)a=a.parent,n.push(a);for(var o=n.length;t!==l;)n.splice(o,0,t),t=t.parent;return n}function Ve(t,a){if(t===a)return t;var l=t.ancestors(),n=a.ancestors(),o=null;for(t=l.pop(),a=n.pop();t===a;)o=t,t=l.pop(),a=n.pop();return o}function De(){for(var t=this,a=[t];t=t.parent;)a.push(t);return a}function Pe(){return Array.from(this)}function Be(){var t=[];return this.eachBefore(function(a){a.children||t.push(a)}),t}function Ee(){var t=this,a=[];return t.each(function(l){l!==t&&a.push({source:l.parent,target:l})}),a}function*Re(){var t=this,a,l=[t],n,o,s;do for(a=l.reverse(),l=[];t=a.pop();)if(yield t,n=t.children)for(o=0,s=n.length;o=0;--h)o.push(s=d[h]=new U(d[h])),s.parent=n,s.depth=n.depth+1;return l.eachBefore(qe)}function We(){return Q(this).eachBefore(Oe)}function He(t){return t.children}function Ie(t){return Array.isArray(t)?t[1]:null}function Oe(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function qe(t){var a=0;do t.height=a;while((t=t.parent)&&t.height<++a)}function U(t){this.data=t,this.depth=this.height=0,this.parent=null}U.prototype=Q.prototype={constructor:U,count:$e,each:Ae,eachAfter:ke,eachBefore:Fe,find:Ne,sum:Me,sort:_e,path:ze,ancestors:De,descendants:Pe,leaves:Be,links:Ee,copy:We,[Symbol.iterator]:Re};function Ge(t){if(typeof t!="function")throw new Error;return t}function q(){return 0}function G(t){return function(){return t}}function Xe(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function je(t,a,l,n,o){for(var s=t.children,d,h=-1,g=s.length,c=t.value&&(n-a)/t.value;++hN&&(N=c),M=p*p*R,k=Math.max(N/M,M/m),k>V){p-=c;break}V=k}d.push(g={value:p,dice:x1?n:1)},l})(Ue);function Ke(){var t=Je,a=!1,l=1,n=1,o=[0],s=q,d=q,h=q,g=q,c=q;function u(r){return r.x0=r.y0=0,r.x1=l,r.y1=n,r.eachBefore(b),o=[0],a&&r.eachBefore(Xe),r}function b(r){var x=o[r.depth],S=r.x0+x,v=r.y0+x,p=r.x1-x,m=r.y1-x;p{xe(s)&&(n!=null&&n.textStyles?n.textStyles.push(s):n.textStyles=[s]),n!=null&&n.styles?n.styles.push(s):n.styles=[s]}),this.classes.set(a,n)}getClasses(){return this.classes}getStylesForClass(a){var l;return((l=this.classes.get(a))==null?void 0:l.styles)??[]}clear(){be(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}},w(E,"TreeMapDB"),E);function le(t){if(!t.length)return[];const a=[],l=[];return t.forEach(n=>{const o={name:n.name,children:n.type==="Leaf"?void 0:[]};for(o.classSelector=n==null?void 0:n.classSelector,n!=null&&n.cssCompiledStyles&&(o.cssCompiledStyles=[n.cssCompiledStyles]),n.type==="Leaf"&&n.value!==void 0&&(o.value=n.value);l.length>0&&l[l.length-1].level>=n.level;)l.pop();if(l.length===0)a.push(o);else{const s=l[l.length-1].node;s.children?s.children.push(o):s.children=[o]}n.type!=="Leaf"&&l.push({node:o,level:n.level})}),a}w(le,"buildHierarchy");var Qe=w((t,a)=>{Ce(t,a);const l=[];for(const s of t.TreemapRows??[])s.$type==="ClassDefStatement"&&a.addClass(s.className??"",s.styleText??"");for(const s of t.TreemapRows??[]){const d=s.item;if(!d)continue;const h=s.indent?parseInt(s.indent):0,g=et(d),c=d.classSelector?a.getStylesForClass(d.classSelector):[],u=c.length>0?c.join(";"):void 0,b={level:h,name:g,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:u};l.push(b)}const n=le(l),o=w((s,d)=>{for(const h of s)a.addNode(h,d),h.children&&h.children.length>0&&o(h.children,d+1)},"addNodesRecursively");o(n,0)},"populate"),et=w(t=>t.name?String(t.name):"","getItemName"),re={parser:{yy:void 0},parse:w(async t=>{var a;try{const n=await Te("treemap",t);K.debug("Treemap AST:",n);const o=(a=re.parser)==null?void 0:a.yy;if(!(o instanceof ne))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Qe(n,o)}catch(l){throw K.error("Error parsing treemap:",l),l}},"parse")},tt=10,B=10,X=25,at=w((t,a,l,n)=>{const o=n.db,s=o.getConfig(),d=s.padding??tt,h=o.getDiagramTitle(),g=o.getRoot(),{themeVariables:c}=ae();if(!g)return;const u=h?30:0,b=he(a),r=s.nodeWidth?s.nodeWidth*B:960,x=s.nodeHeight?s.nodeHeight*B:500,S=r,v=x+u;b.attr("viewBox",`0 0 ${S} ${v}`),ue(b,v,S,s.useMaxWidth);let p;try{const e=s.valueFormat||",";if(e==="$0,0")p=w(i=>"$"+O(",")(i),"valueFormat");else if(e.startsWith("$")&&e.includes(",")){const i=/\.\d+/.exec(e),f=i?i[0]:"";p=w(C=>"$"+O(","+f)(C),"valueFormat")}else if(e.startsWith("$")){const i=e.substring(1);p=w(f=>"$"+O(i||"")(f),"valueFormat")}else p=O(e)}catch(e){K.error("Error creating format function:",e),p=O(",")}const m=J().range(["transparent",c.cScale0,c.cScale1,c.cScale2,c.cScale3,c.cScale4,c.cScale5,c.cScale6,c.cScale7,c.cScale8,c.cScale9,c.cScale10,c.cScale11]),N=J().range(["transparent",c.cScalePeer0,c.cScalePeer1,c.cScalePeer2,c.cScalePeer3,c.cScalePeer4,c.cScalePeer5,c.cScalePeer6,c.cScalePeer7,c.cScalePeer8,c.cScalePeer9,c.cScalePeer10,c.cScalePeer11]),k=J().range([c.cScaleLabel0,c.cScaleLabel1,c.cScaleLabel2,c.cScaleLabel3,c.cScaleLabel4,c.cScaleLabel5,c.cScaleLabel6,c.cScaleLabel7,c.cScaleLabel8,c.cScaleLabel9,c.cScaleLabel10,c.cScaleLabel11]);h&&b.append("text").attr("x",S/2).attr("y",u/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);const V=b.append("g").attr("transform",`translate(0, ${u})`).attr("class","treemapContainer"),R=Q(g).sum(e=>e.value??0).sort((e,i)=>(i.value??0)-(e.value??0)),ee=Ke().size([r,x]).paddingTop(e=>e.children&&e.children.length>0?X+B:0).paddingInner(d).paddingLeft(e=>e.children&&e.children.length>0?B:0).paddingRight(e=>e.children&&e.children.length>0?B:0).paddingBottom(e=>e.children&&e.children.length>0?B:0).round(!0)(R),se=ee.descendants().filter(e=>e.children&&e.children.length>0),W=V.selectAll(".treemapSection").data(se).enter().append("g").attr("class","treemapSection").attr("transform",e=>`translate(${e.x0},${e.y0})`);W.append("rect").attr("width",e=>e.x1-e.x0).attr("height",X).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",e=>e.depth===0?"display: none;":""),W.append("clipPath").attr("id",(e,i)=>`clip-section-${a}-${i}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-12)).attr("height",X),W.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class",(e,i)=>`treemapSection section${i}`).attr("fill",e=>m(e.data.name)).attr("fill-opacity",.6).attr("stroke",e=>N(e.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",e=>{if(e.depth===0)return"display: none;";const i=P({cssCompiledStyles:e.data.cssCompiledStyles});return i.nodeStyles+";"+i.borderStyles.join(";")}),W.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",X/2).attr("dominant-baseline","middle").text(e=>e.depth===0?"":e.data.name).attr("font-weight","bold").attr("style",e=>{if(e.depth===0)return"display: none;";const i="dominant-baseline: middle; font-size: 12px; fill:"+k(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")}).each(function(e){if(e.depth===0)return;const i=Y(this),f=e.data.name;i.text(f);const C=e.x1-e.x0,L=6;let $;s.showValues!==!1&&e.value?$=C-10-30-10-L:$=C-L-6;const A=Math.max(15,$),y=i.node();if(y.getComputedTextLength()>A){let T=f;for(;T.length>0;){if(T=f.substring(0,T.length-1),T.length===0){i.text("..."),y.getComputedTextLength()>A&&i.text("");break}if(i.text(T+"..."),y.getComputedTextLength()<=A)break}}}),s.showValues!==!1&&W.append("text").attr("class","treemapSectionValue").attr("x",e=>e.x1-e.x0-10).attr("y",X/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(e=>e.value?p(e.value):"").attr("font-style","italic").attr("style",e=>{if(e.depth===0)return"display: none;";const i="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+k(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")});const ie=ee.leaves(),j=V.selectAll(".treemapLeafGroup").data(ie).enter().append("g").attr("class",(e,i)=>`treemapNode treemapLeafGroup leaf${i}${e.data.classSelector?` ${e.data.classSelector}`:""}x`).attr("transform",e=>`translate(${e.x0},${e.y0})`);j.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class","treemapLeaf").attr("fill",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("style",e=>P({cssCompiledStyles:e.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("stroke-width",3),j.append("clipPath").attr("id",(e,i)=>`clip-${a}-${i}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-4)).attr("height",e=>Math.max(0,e.y1-e.y0-4)),j.append("text").attr("class","treemapLabel").attr("x",e=>(e.x1-e.x0)/2).attr("y",e=>(e.y1-e.y0)/2).attr("style",e=>{const i="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+k(e.data.name)+";",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,i)=>`url(#clip-${a}-${i})`).text(e=>e.data.name).each(function(e){const i=Y(this),f=e.x1-e.x0,C=e.y1-e.y0,L=i.node(),$=4,D=f-2*$,A=C-2*$;if(D<10||A<10){i.style("display","none");return}let y=parseInt(i.style("font-size"),10);const _=8,F=28,T=.6,z=6,H=2;for(;L.getComputedTextLength()>D&&y>_;)y--,i.style("font-size",`${y}px`);let I=Math.max(z,Math.min(F,Math.round(y*T))),Z=y+H+I;for(;Z>A&&y>_&&(y--,I=Math.max(z,Math.min(F,Math.round(y*T))),!(ID||y<_||A(i.x1-i.x0)/2).attr("y",function(i){return(i.y1-i.y0)/2}).attr("style",i=>{const f="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+k(i.data.name)+";",C=P({cssCompiledStyles:i.data.cssCompiledStyles});return f+C.labelStyles.replace("color:","fill:")}).attr("clip-path",(i,f)=>`url(#clip-${a}-${f})`).text(i=>i.value?p(i.value):"").each(function(i){const f=Y(this),C=this.parentNode;if(!C){f.style("display","none");return}const L=Y(C).select(".treemapLabel");if(L.empty()||L.style("display")==="none"){f.style("display","none");return}const $=parseFloat(L.style("font-size")),D=28,A=.6,y=6,_=2,F=Math.max(y,Math.min(D,Math.round($*A)));f.style("font-size",`${F}px`);const z=(i.y1-i.y0)/2+$/2+_;f.attr("y",z);const H=i.x1-i.x0,ce=i.y1-i.y0-4,de=H-8;f.node().getComputedTextLength()>de||z+F>ce||F{const a=te(rt,t);return` +import{_ as w,D as te,E as ae,H as he,e as ue,l as K,bm as P,d as Y,b as pe,a as fe,p as ge,q as me,g as ye,s as Se,F as ve,bn as xe,y as be}from"./index-DbSnkTMx.js";import{s as we}from"./chunk-QN33PNHL-Bl50RaE-.js";import{p as Ce}from"./chunk-4BX2VUAB-PBVZf6Qi.js";import{p as Te}from"./treemap-KMMF4GRG-DVJsp5UK.js";import{b as O}from"./defaultLocale-C4B-KCzX.js";import{o as J}from"./ordinal-Cboi1Yqb.js";import"./min-jMRXb9Wh.js";import"./_baseUniq-CR-Qd8A8.js";import"./init-Gi6I4Gst.js";function Le(t){var a=0,l=t.children,n=l&&l.length;if(!n)a=1;else for(;--n>=0;)a+=l[n].value;t.value=a}function $e(){return this.eachAfter(Le)}function Ae(t,a){let l=-1;for(const n of this)t.call(a,n,++l,this);return this}function Fe(t,a){for(var l=this,n=[l],o,s,d=-1;l=n.pop();)if(t.call(a,l,++d,this),o=l.children)for(s=o.length-1;s>=0;--s)n.push(o[s]);return this}function ke(t,a){for(var l=this,n=[l],o=[],s,d,h,g=-1;l=n.pop();)if(o.push(l),s=l.children)for(d=0,h=s.length;d=0;)l+=n[o].value;a.value=l})}function _e(t){return this.eachBefore(function(a){a.children&&a.children.sort(t)})}function ze(t){for(var a=this,l=Ve(a,t),n=[a];a!==l;)a=a.parent,n.push(a);for(var o=n.length;t!==l;)n.splice(o,0,t),t=t.parent;return n}function Ve(t,a){if(t===a)return t;var l=t.ancestors(),n=a.ancestors(),o=null;for(t=l.pop(),a=n.pop();t===a;)o=t,t=l.pop(),a=n.pop();return o}function De(){for(var t=this,a=[t];t=t.parent;)a.push(t);return a}function Pe(){return Array.from(this)}function Be(){var t=[];return this.eachBefore(function(a){a.children||t.push(a)}),t}function Ee(){var t=this,a=[];return t.each(function(l){l!==t&&a.push({source:l.parent,target:l})}),a}function*Re(){var t=this,a,l=[t],n,o,s;do for(a=l.reverse(),l=[];t=a.pop();)if(yield t,n=t.children)for(o=0,s=n.length;o=0;--h)o.push(s=d[h]=new U(d[h])),s.parent=n,s.depth=n.depth+1;return l.eachBefore(qe)}function We(){return Q(this).eachBefore(Oe)}function He(t){return t.children}function Ie(t){return Array.isArray(t)?t[1]:null}function Oe(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function qe(t){var a=0;do t.height=a;while((t=t.parent)&&t.height<++a)}function U(t){this.data=t,this.depth=this.height=0,this.parent=null}U.prototype=Q.prototype={constructor:U,count:$e,each:Ae,eachAfter:ke,eachBefore:Fe,find:Ne,sum:Me,sort:_e,path:ze,ancestors:De,descendants:Pe,leaves:Be,links:Ee,copy:We,[Symbol.iterator]:Re};function Ge(t){if(typeof t!="function")throw new Error;return t}function q(){return 0}function G(t){return function(){return t}}function Xe(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function je(t,a,l,n,o){for(var s=t.children,d,h=-1,g=s.length,c=t.value&&(n-a)/t.value;++hN&&(N=c),M=p*p*R,k=Math.max(N/M,M/m),k>V){p-=c;break}V=k}d.push(g={value:p,dice:x1?n:1)},l})(Ue);function Ke(){var t=Je,a=!1,l=1,n=1,o=[0],s=q,d=q,h=q,g=q,c=q;function u(r){return r.x0=r.y0=0,r.x1=l,r.y1=n,r.eachBefore(b),o=[0],a&&r.eachBefore(Xe),r}function b(r){var x=o[r.depth],S=r.x0+x,v=r.y0+x,p=r.x1-x,m=r.y1-x;p{xe(s)&&(n!=null&&n.textStyles?n.textStyles.push(s):n.textStyles=[s]),n!=null&&n.styles?n.styles.push(s):n.styles=[s]}),this.classes.set(a,n)}getClasses(){return this.classes}getStylesForClass(a){var l;return((l=this.classes.get(a))==null?void 0:l.styles)??[]}clear(){be(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}},w(E,"TreeMapDB"),E);function le(t){if(!t.length)return[];const a=[],l=[];return t.forEach(n=>{const o={name:n.name,children:n.type==="Leaf"?void 0:[]};for(o.classSelector=n==null?void 0:n.classSelector,n!=null&&n.cssCompiledStyles&&(o.cssCompiledStyles=[n.cssCompiledStyles]),n.type==="Leaf"&&n.value!==void 0&&(o.value=n.value);l.length>0&&l[l.length-1].level>=n.level;)l.pop();if(l.length===0)a.push(o);else{const s=l[l.length-1].node;s.children?s.children.push(o):s.children=[o]}n.type!=="Leaf"&&l.push({node:o,level:n.level})}),a}w(le,"buildHierarchy");var Qe=w((t,a)=>{Ce(t,a);const l=[];for(const s of t.TreemapRows??[])s.$type==="ClassDefStatement"&&a.addClass(s.className??"",s.styleText??"");for(const s of t.TreemapRows??[]){const d=s.item;if(!d)continue;const h=s.indent?parseInt(s.indent):0,g=et(d),c=d.classSelector?a.getStylesForClass(d.classSelector):[],u=c.length>0?c.join(";"):void 0,b={level:h,name:g,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:u};l.push(b)}const n=le(l),o=w((s,d)=>{for(const h of s)a.addNode(h,d),h.children&&h.children.length>0&&o(h.children,d+1)},"addNodesRecursively");o(n,0)},"populate"),et=w(t=>t.name?String(t.name):"","getItemName"),re={parser:{yy:void 0},parse:w(async t=>{var a;try{const n=await Te("treemap",t);K.debug("Treemap AST:",n);const o=(a=re.parser)==null?void 0:a.yy;if(!(o instanceof ne))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Qe(n,o)}catch(l){throw K.error("Error parsing treemap:",l),l}},"parse")},tt=10,B=10,X=25,at=w((t,a,l,n)=>{const o=n.db,s=o.getConfig(),d=s.padding??tt,h=o.getDiagramTitle(),g=o.getRoot(),{themeVariables:c}=ae();if(!g)return;const u=h?30:0,b=he(a),r=s.nodeWidth?s.nodeWidth*B:960,x=s.nodeHeight?s.nodeHeight*B:500,S=r,v=x+u;b.attr("viewBox",`0 0 ${S} ${v}`),ue(b,v,S,s.useMaxWidth);let p;try{const e=s.valueFormat||",";if(e==="$0,0")p=w(i=>"$"+O(",")(i),"valueFormat");else if(e.startsWith("$")&&e.includes(",")){const i=/\.\d+/.exec(e),f=i?i[0]:"";p=w(C=>"$"+O(","+f)(C),"valueFormat")}else if(e.startsWith("$")){const i=e.substring(1);p=w(f=>"$"+O(i||"")(f),"valueFormat")}else p=O(e)}catch(e){K.error("Error creating format function:",e),p=O(",")}const m=J().range(["transparent",c.cScale0,c.cScale1,c.cScale2,c.cScale3,c.cScale4,c.cScale5,c.cScale6,c.cScale7,c.cScale8,c.cScale9,c.cScale10,c.cScale11]),N=J().range(["transparent",c.cScalePeer0,c.cScalePeer1,c.cScalePeer2,c.cScalePeer3,c.cScalePeer4,c.cScalePeer5,c.cScalePeer6,c.cScalePeer7,c.cScalePeer8,c.cScalePeer9,c.cScalePeer10,c.cScalePeer11]),k=J().range([c.cScaleLabel0,c.cScaleLabel1,c.cScaleLabel2,c.cScaleLabel3,c.cScaleLabel4,c.cScaleLabel5,c.cScaleLabel6,c.cScaleLabel7,c.cScaleLabel8,c.cScaleLabel9,c.cScaleLabel10,c.cScaleLabel11]);h&&b.append("text").attr("x",S/2).attr("y",u/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);const V=b.append("g").attr("transform",`translate(0, ${u})`).attr("class","treemapContainer"),R=Q(g).sum(e=>e.value??0).sort((e,i)=>(i.value??0)-(e.value??0)),ee=Ke().size([r,x]).paddingTop(e=>e.children&&e.children.length>0?X+B:0).paddingInner(d).paddingLeft(e=>e.children&&e.children.length>0?B:0).paddingRight(e=>e.children&&e.children.length>0?B:0).paddingBottom(e=>e.children&&e.children.length>0?B:0).round(!0)(R),se=ee.descendants().filter(e=>e.children&&e.children.length>0),W=V.selectAll(".treemapSection").data(se).enter().append("g").attr("class","treemapSection").attr("transform",e=>`translate(${e.x0},${e.y0})`);W.append("rect").attr("width",e=>e.x1-e.x0).attr("height",X).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",e=>e.depth===0?"display: none;":""),W.append("clipPath").attr("id",(e,i)=>`clip-section-${a}-${i}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-12)).attr("height",X),W.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class",(e,i)=>`treemapSection section${i}`).attr("fill",e=>m(e.data.name)).attr("fill-opacity",.6).attr("stroke",e=>N(e.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",e=>{if(e.depth===0)return"display: none;";const i=P({cssCompiledStyles:e.data.cssCompiledStyles});return i.nodeStyles+";"+i.borderStyles.join(";")}),W.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",X/2).attr("dominant-baseline","middle").text(e=>e.depth===0?"":e.data.name).attr("font-weight","bold").attr("style",e=>{if(e.depth===0)return"display: none;";const i="dominant-baseline: middle; font-size: 12px; fill:"+k(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")}).each(function(e){if(e.depth===0)return;const i=Y(this),f=e.data.name;i.text(f);const C=e.x1-e.x0,L=6;let $;s.showValues!==!1&&e.value?$=C-10-30-10-L:$=C-L-6;const A=Math.max(15,$),y=i.node();if(y.getComputedTextLength()>A){let T=f;for(;T.length>0;){if(T=f.substring(0,T.length-1),T.length===0){i.text("..."),y.getComputedTextLength()>A&&i.text("");break}if(i.text(T+"..."),y.getComputedTextLength()<=A)break}}}),s.showValues!==!1&&W.append("text").attr("class","treemapSectionValue").attr("x",e=>e.x1-e.x0-10).attr("y",X/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(e=>e.value?p(e.value):"").attr("font-style","italic").attr("style",e=>{if(e.depth===0)return"display: none;";const i="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+k(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")});const ie=ee.leaves(),j=V.selectAll(".treemapLeafGroup").data(ie).enter().append("g").attr("class",(e,i)=>`treemapNode treemapLeafGroup leaf${i}${e.data.classSelector?` ${e.data.classSelector}`:""}x`).attr("transform",e=>`translate(${e.x0},${e.y0})`);j.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class","treemapLeaf").attr("fill",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("style",e=>P({cssCompiledStyles:e.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("stroke-width",3),j.append("clipPath").attr("id",(e,i)=>`clip-${a}-${i}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-4)).attr("height",e=>Math.max(0,e.y1-e.y0-4)),j.append("text").attr("class","treemapLabel").attr("x",e=>(e.x1-e.x0)/2).attr("y",e=>(e.y1-e.y0)/2).attr("style",e=>{const i="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+k(e.data.name)+";",f=P({cssCompiledStyles:e.data.cssCompiledStyles});return i+f.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,i)=>`url(#clip-${a}-${i})`).text(e=>e.data.name).each(function(e){const i=Y(this),f=e.x1-e.x0,C=e.y1-e.y0,L=i.node(),$=4,D=f-2*$,A=C-2*$;if(D<10||A<10){i.style("display","none");return}let y=parseInt(i.style("font-size"),10);const _=8,F=28,T=.6,z=6,H=2;for(;L.getComputedTextLength()>D&&y>_;)y--,i.style("font-size",`${y}px`);let I=Math.max(z,Math.min(F,Math.round(y*T))),Z=y+H+I;for(;Z>A&&y>_&&(y--,I=Math.max(z,Math.min(F,Math.round(y*T))),!(ID||y<_||A(i.x1-i.x0)/2).attr("y",function(i){return(i.y1-i.y0)/2}).attr("style",i=>{const f="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+k(i.data.name)+";",C=P({cssCompiledStyles:i.data.cssCompiledStyles});return f+C.labelStyles.replace("color:","fill:")}).attr("clip-path",(i,f)=>`url(#clip-${a}-${f})`).text(i=>i.value?p(i.value):"").each(function(i){const f=Y(this),C=this.parentNode;if(!C){f.style("display","none");return}const L=Y(C).select(".treemapLabel");if(L.empty()||L.style("display")==="none"){f.style("display","none");return}const $=parseFloat(L.style("font-size")),D=28,A=.6,y=6,_=2,F=Math.max(y,Math.min(D,Math.round($*A)));f.style("font-size",`${F}px`);const z=(i.y1-i.y0)/2+$/2+_;f.attr("y",z);const H=i.x1-i.x0,ce=i.y1-i.y0-4,de=H-8;f.node().getComputedTextLength()>de||z+F>ce||F{const a=te(rt,t);return` .treemapNode.section { stroke: ${a.sectionStrokeColor}; stroke-width: ${a.sectionStrokeWidth}; @@ -22,4 +22,4 @@ import{_ as w,D as te,E as ae,H as he,e as ue,l as K,bm as P,d as Y,b as pe,a as font-size: ${a.titleFontSize}; } `},"getStyles"),it=st,St={parser:re,get db(){return new ne},renderer:lt,styles:it};export{St as diagram}; -//# sourceMappingURL=diagram-PSM6KHXK-BAtW2jSB.js.map +//# sourceMappingURL=diagram-PSM6KHXK-DQIU_Et_.js.map diff --git a/massgen/frontend/web/static/assets/diagram-PSM6KHXK-BAtW2jSB.js.map b/massgen/frontend/web/static/assets/diagram-PSM6KHXK-DQIU_Et_.js.map similarity index 99% rename from massgen/frontend/web/static/assets/diagram-PSM6KHXK-BAtW2jSB.js.map rename to massgen/frontend/web/static/assets/diagram-PSM6KHXK-DQIU_Et_.js.map index 0afef1b47..e1d38275c 100644 --- a/massgen/frontend/web/static/assets/diagram-PSM6KHXK-BAtW2jSB.js.map +++ b/massgen/frontend/web/static/assets/diagram-PSM6KHXK-DQIU_Et_.js.map @@ -1 +1 @@ -{"version":3,"file":"diagram-PSM6KHXK-BAtW2jSB.js","sources":["../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/count.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/each.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/find.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/path.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/links.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/index.js","../../../../../webui/node_modules/d3-hierarchy/src/accessors.js","../../../../../webui/node_modules/d3-hierarchy/src/constant.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/round.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/dice.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/slice.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/squarify.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/index.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/diagram-PSM6KHXK.mjs"],"sourcesContent":["function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n isLabelStyle,\n styles2String\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n configureSvgSize,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/treemap/db.ts\nvar TreeMapDB = class {\n constructor() {\n this.nodes = [];\n this.levels = /* @__PURE__ */ new Map();\n this.outerNodes = [];\n this.classes = /* @__PURE__ */ new Map();\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n }\n static {\n __name(this, \"TreeMapDB\");\n }\n getNodes() {\n return this.nodes;\n }\n getConfig() {\n const defaultConfig = defaultConfig_default;\n const userConfig = getConfig();\n return cleanAndMerge({\n ...defaultConfig.treemap,\n ...userConfig.treemap ?? {}\n });\n }\n addNode(node, level) {\n this.nodes.push(node);\n this.levels.set(node, level);\n if (level === 0) {\n this.outerNodes.push(node);\n this.root ??= node;\n }\n }\n getRoot() {\n return { name: \"\", children: this.outerNodes };\n }\n addClass(id, _style) {\n const styleClass = this.classes.get(id) ?? { id, styles: [], textStyles: [] };\n const styles = _style.replace(/\\\\,/g, \"\\xA7\\xA7\\xA7\").replace(/,/g, \";\").replace(/§§§/g, \",\").split(\";\");\n if (styles) {\n styles.forEach((s) => {\n if (isLabelStyle(s)) {\n if (styleClass?.textStyles) {\n styleClass.textStyles.push(s);\n } else {\n styleClass.textStyles = [s];\n }\n }\n if (styleClass?.styles) {\n styleClass.styles.push(s);\n } else {\n styleClass.styles = [s];\n }\n });\n }\n this.classes.set(id, styleClass);\n }\n getClasses() {\n return this.classes;\n }\n getStylesForClass(classSelector) {\n return this.classes.get(classSelector)?.styles ?? [];\n }\n clear() {\n clear();\n this.nodes = [];\n this.levels = /* @__PURE__ */ new Map();\n this.outerNodes = [];\n this.classes = /* @__PURE__ */ new Map();\n this.root = void 0;\n }\n};\n\n// src/diagrams/treemap/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/treemap/utils.ts\nfunction buildHierarchy(items) {\n if (!items.length) {\n return [];\n }\n const root = [];\n const stack = [];\n items.forEach((item) => {\n const node = {\n name: item.name,\n children: item.type === \"Leaf\" ? void 0 : []\n };\n node.classSelector = item?.classSelector;\n if (item?.cssCompiledStyles) {\n node.cssCompiledStyles = [item.cssCompiledStyles];\n }\n if (item.type === \"Leaf\" && item.value !== void 0) {\n node.value = item.value;\n }\n while (stack.length > 0 && stack[stack.length - 1].level >= item.level) {\n stack.pop();\n }\n if (stack.length === 0) {\n root.push(node);\n } else {\n const parent = stack[stack.length - 1].node;\n if (parent.children) {\n parent.children.push(node);\n } else {\n parent.children = [node];\n }\n }\n if (item.type !== \"Leaf\") {\n stack.push({ node, level: item.level });\n }\n });\n return root;\n}\n__name(buildHierarchy, \"buildHierarchy\");\n\n// src/diagrams/treemap/parser.ts\nvar populate = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n const items = [];\n for (const row of ast.TreemapRows ?? []) {\n if (row.$type === \"ClassDefStatement\") {\n db.addClass(row.className ?? \"\", row.styleText ?? \"\");\n }\n }\n for (const row of ast.TreemapRows ?? []) {\n const item = row.item;\n if (!item) {\n continue;\n }\n const level = row.indent ? parseInt(row.indent) : 0;\n const name = getItemName(item);\n const styles = item.classSelector ? db.getStylesForClass(item.classSelector) : [];\n const cssCompiledStyles = styles.length > 0 ? styles.join(\";\") : void 0;\n const itemData = {\n level,\n name,\n type: item.$type,\n value: item.value,\n classSelector: item.classSelector,\n cssCompiledStyles\n };\n items.push(itemData);\n }\n const hierarchyNodes = buildHierarchy(items);\n const addNodesRecursively = /* @__PURE__ */ __name((nodes, level) => {\n for (const node of nodes) {\n db.addNode(node, level);\n if (node.children && node.children.length > 0) {\n addNodesRecursively(node.children, level + 1);\n }\n }\n }, \"addNodesRecursively\");\n addNodesRecursively(hierarchyNodes, 0);\n}, \"populate\");\nvar getItemName = /* @__PURE__ */ __name((item) => {\n return item.name ? String(item.name) : \"\";\n}, \"getItemName\");\nvar parser = {\n // @ts-expect-error - TreeMapDB is not assignable to DiagramDB\n parser: { yy: void 0 },\n parse: /* @__PURE__ */ __name(async (text) => {\n try {\n const parseFunc = parse;\n const ast = await parseFunc(\"treemap\", text);\n log.debug(\"Treemap AST:\", ast);\n const db = parser.parser?.yy;\n if (!(db instanceof TreeMapDB)) {\n throw new Error(\n \"parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n populate(ast, db);\n } catch (error) {\n log.error(\"Error parsing treemap:\", error);\n throw error;\n }\n }, \"parse\")\n};\n\n// src/diagrams/treemap/renderer.ts\nimport { scaleOrdinal, treemap, hierarchy, format, select } from \"d3\";\nvar DEFAULT_INNER_PADDING = 10;\nvar SECTION_INNER_PADDING = 10;\nvar SECTION_HEADER_HEIGHT = 25;\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const treemapDb = diagram2.db;\n const config = treemapDb.getConfig();\n const treemapInnerPadding = config.padding ?? DEFAULT_INNER_PADDING;\n const title = treemapDb.getDiagramTitle();\n const root = treemapDb.getRoot();\n const { themeVariables } = getConfig();\n if (!root) {\n return;\n }\n const titleHeight = title ? 30 : 0;\n const svg = selectSvgElement(id);\n const width = config.nodeWidth ? config.nodeWidth * SECTION_INNER_PADDING : 960;\n const height = config.nodeHeight ? config.nodeHeight * SECTION_INNER_PADDING : 500;\n const svgWidth = width;\n const svgHeight = height + titleHeight;\n svg.attr(\"viewBox\", `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n let valueFormat;\n try {\n const formatStr = config.valueFormat || \",\";\n if (formatStr === \"$0,0\") {\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(\",\")(value), \"valueFormat\");\n } else if (formatStr.startsWith(\"$\") && formatStr.includes(\",\")) {\n const precision = /\\.\\d+/.exec(formatStr);\n const precisionStr = precision ? precision[0] : \"\";\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(\",\" + precisionStr)(value), \"valueFormat\");\n } else if (formatStr.startsWith(\"$\")) {\n const restOfFormat = formatStr.substring(1);\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(restOfFormat || \"\")(value), \"valueFormat\");\n } else {\n valueFormat = format(formatStr);\n }\n } catch (error) {\n log.error(\"Error creating format function:\", error);\n valueFormat = format(\",\");\n }\n const colorScale = scaleOrdinal().range([\n \"transparent\",\n themeVariables.cScale0,\n themeVariables.cScale1,\n themeVariables.cScale2,\n themeVariables.cScale3,\n themeVariables.cScale4,\n themeVariables.cScale5,\n themeVariables.cScale6,\n themeVariables.cScale7,\n themeVariables.cScale8,\n themeVariables.cScale9,\n themeVariables.cScale10,\n themeVariables.cScale11\n ]);\n const colorScalePeer = scaleOrdinal().range([\n \"transparent\",\n themeVariables.cScalePeer0,\n themeVariables.cScalePeer1,\n themeVariables.cScalePeer2,\n themeVariables.cScalePeer3,\n themeVariables.cScalePeer4,\n themeVariables.cScalePeer5,\n themeVariables.cScalePeer6,\n themeVariables.cScalePeer7,\n themeVariables.cScalePeer8,\n themeVariables.cScalePeer9,\n themeVariables.cScalePeer10,\n themeVariables.cScalePeer11\n ]);\n const colorScaleLabel = scaleOrdinal().range([\n themeVariables.cScaleLabel0,\n themeVariables.cScaleLabel1,\n themeVariables.cScaleLabel2,\n themeVariables.cScaleLabel3,\n themeVariables.cScaleLabel4,\n themeVariables.cScaleLabel5,\n themeVariables.cScaleLabel6,\n themeVariables.cScaleLabel7,\n themeVariables.cScaleLabel8,\n themeVariables.cScaleLabel9,\n themeVariables.cScaleLabel10,\n themeVariables.cScaleLabel11\n ]);\n if (title) {\n svg.append(\"text\").attr(\"x\", svgWidth / 2).attr(\"y\", titleHeight / 2).attr(\"class\", \"treemapTitle\").attr(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").text(title);\n }\n const g = svg.append(\"g\").attr(\"transform\", `translate(0, ${titleHeight})`).attr(\"class\", \"treemapContainer\");\n const hierarchyRoot = hierarchy(root).sum((d) => d.value ?? 0).sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n const treemapLayout = treemap().size([width, height]).paddingTop(\n (d) => d.children && d.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0\n ).paddingInner(treemapInnerPadding).paddingLeft((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingRight((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingBottom((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).round(true);\n const treemapData = treemapLayout(hierarchyRoot);\n const branchNodes = treemapData.descendants().filter((d) => d.children && d.children.length > 0);\n const sections = g.selectAll(\".treemapSection\").data(branchNodes).enter().append(\"g\").attr(\"class\", \"treemapSection\").attr(\"transform\", (d) => `translate(${d.x0},${d.y0})`);\n sections.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", SECTION_HEADER_HEIGHT).attr(\"class\", \"treemapSectionHeader\").attr(\"fill\", \"none\").attr(\"fill-opacity\", 0.6).attr(\"stroke-width\", 0.6).attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n return \"\";\n });\n sections.append(\"clipPath\").attr(\"id\", (_d, i) => `clip-section-${id}-${i}`).append(\"rect\").attr(\"width\", (d) => Math.max(0, d.x1 - d.x0 - 12)).attr(\"height\", SECTION_HEADER_HEIGHT);\n sections.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", (d) => d.y1 - d.y0).attr(\"class\", (_d, i) => {\n return `treemapSection section${i}`;\n }).attr(\"fill\", (d) => colorScale(d.data.name)).attr(\"fill-opacity\", 0.6).attr(\"stroke\", (d) => colorScalePeer(d.data.name)).attr(\"stroke-width\", 2).attr(\"stroke-opacity\", 0.4).attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return styles.nodeStyles + \";\" + styles.borderStyles.join(\";\");\n });\n sections.append(\"text\").attr(\"class\", \"treemapSectionLabel\").attr(\"x\", 6).attr(\"y\", SECTION_HEADER_HEIGHT / 2).attr(\"dominant-baseline\", \"middle\").text((d) => d.depth === 0 ? \"\" : d.data.name).attr(\"font-weight\", \"bold\").attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const labelStyles = \"dominant-baseline: middle; font-size: 12px; fill:\" + colorScaleLabel(d.data.name) + \"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).each(function(d) {\n if (d.depth === 0) {\n return;\n }\n const self = select(this);\n const originalText = d.data.name;\n self.text(originalText);\n const totalHeaderWidth = d.x1 - d.x0;\n const labelXPosition = 6;\n let spaceForTextContent;\n if (config.showValues !== false && d.value) {\n const valueEndsAtXRelative = totalHeaderWidth - 10;\n const estimatedValueTextActualWidth = 30;\n const gapBetweenLabelAndValue = 10;\n const labelMustEndBeforeX = valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue;\n spaceForTextContent = labelMustEndBeforeX - labelXPosition;\n } else {\n const labelOwnRightPadding = 6;\n spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding;\n }\n const minimumWidthToDisplay = 15;\n const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent);\n const textNode = self.node();\n const currentTextContentLength = textNode.getComputedTextLength();\n if (currentTextContentLength > actualAvailableWidth) {\n const ellipsis = \"...\";\n let currentTruncatedText = originalText;\n while (currentTruncatedText.length > 0) {\n currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1);\n if (currentTruncatedText.length === 0) {\n self.text(ellipsis);\n if (textNode.getComputedTextLength() > actualAvailableWidth) {\n self.text(\"\");\n }\n break;\n }\n self.text(currentTruncatedText + ellipsis);\n if (textNode.getComputedTextLength() <= actualAvailableWidth) {\n break;\n }\n }\n }\n });\n if (config.showValues !== false) {\n sections.append(\"text\").attr(\"class\", \"treemapSectionValue\").attr(\"x\", (d) => d.x1 - d.x0 - 10).attr(\"y\", SECTION_HEADER_HEIGHT / 2).attr(\"text-anchor\", \"end\").attr(\"dominant-baseline\", \"middle\").text((d) => d.value ? valueFormat(d.value) : \"\").attr(\"font-style\", \"italic\").attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const labelStyles = \"text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:\" + colorScaleLabel(d.data.name) + \"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n });\n }\n const leafNodes = treemapData.leaves();\n const cell = g.selectAll(\".treemapLeafGroup\").data(leafNodes).enter().append(\"g\").attr(\"class\", (d, i) => {\n return `treemapNode treemapLeafGroup leaf${i}${d.data.classSelector ? ` ${d.data.classSelector}` : \"\"}x`;\n }).attr(\"transform\", (d) => `translate(${d.x0},${d.y0})`);\n cell.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", (d) => d.y1 - d.y0).attr(\"class\", \"treemapLeaf\").attr(\"fill\", (d) => {\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n }).attr(\"style\", (d) => {\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return styles.nodeStyles;\n }).attr(\"fill-opacity\", 0.3).attr(\"stroke\", (d) => {\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n }).attr(\"stroke-width\", 3);\n cell.append(\"clipPath\").attr(\"id\", (_d, i) => `clip-${id}-${i}`).append(\"rect\").attr(\"width\", (d) => Math.max(0, d.x1 - d.x0 - 4)).attr(\"height\", (d) => Math.max(0, d.y1 - d.y0 - 4));\n const leafLabels = cell.append(\"text\").attr(\"class\", \"treemapLabel\").attr(\"x\", (d) => (d.x1 - d.x0) / 2).attr(\"y\", (d) => (d.y1 - d.y0) / 2).attr(\"style\", (d) => {\n const labelStyles = \"text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:\" + colorScaleLabel(d.data.name) + \";\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).attr(\"clip-path\", (_d, i) => `url(#clip-${id}-${i})`).text((d) => d.data.name);\n leafLabels.each(function(d) {\n const self = select(this);\n const nodeWidth = d.x1 - d.x0;\n const nodeHeight = d.y1 - d.y0;\n const textNode = self.node();\n const padding = 4;\n const availableWidth = nodeWidth - 2 * padding;\n const availableHeight = nodeHeight - 2 * padding;\n if (availableWidth < 10 || availableHeight < 10) {\n self.style(\"display\", \"none\");\n return;\n }\n let currentLabelFontSize = parseInt(self.style(\"font-size\"), 10);\n const minLabelFontSize = 8;\n const originalValueRelFontSize = 28;\n const valueScaleFactor = 0.6;\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n while (textNode.getComputedTextLength() > availableWidth && currentLabelFontSize > minLabelFontSize) {\n currentLabelFontSize--;\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n }\n let prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n let combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) {\n currentLabelFontSize--;\n prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n if (prospectiveValueFontSize < minValueFontSize && currentLabelFontSize === minLabelFontSize) {\n break;\n }\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) {\n }\n }\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n if (textNode.getComputedTextLength() > availableWidth || currentLabelFontSize < minLabelFontSize || availableHeight < currentLabelFontSize) {\n self.style(\"display\", \"none\");\n }\n });\n if (config.showValues !== false) {\n const leafValues = cell.append(\"text\").attr(\"class\", \"treemapValue\").attr(\"x\", (d) => (d.x1 - d.x0) / 2).attr(\"y\", function(d) {\n return (d.y1 - d.y0) / 2;\n }).attr(\"style\", (d) => {\n const labelStyles = \"text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:\" + colorScaleLabel(d.data.name) + \";\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).attr(\"clip-path\", (_d, i) => `url(#clip-${id}-${i})`).text((d) => d.value ? valueFormat(d.value) : \"\");\n leafValues.each(function(d) {\n const valueTextElement = select(this);\n const parentCellNode = this.parentNode;\n if (!parentCellNode) {\n valueTextElement.style(\"display\", \"none\");\n return;\n }\n const labelElement = select(parentCellNode).select(\".treemapLabel\");\n if (labelElement.empty() || labelElement.style(\"display\") === \"none\") {\n valueTextElement.style(\"display\", \"none\");\n return;\n }\n const finalLabelFontSize = parseFloat(labelElement.style(\"font-size\"));\n const originalValueFontSize = 28;\n const valueScaleFactor = 0.6;\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n const actualValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor))\n );\n valueTextElement.style(\"font-size\", `${actualValueFontSize}px`);\n const labelCenterY = (d.y1 - d.y0) / 2;\n const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue;\n valueTextElement.attr(\"y\", valueTopActualY);\n const nodeWidth = d.x1 - d.x0;\n const nodeTotalHeight = d.y1 - d.y0;\n const cellBottomPadding = 4;\n const maxValueBottomY = nodeTotalHeight - cellBottomPadding;\n const availableWidthForValue = nodeWidth - 2 * 4;\n if (valueTextElement.node().getComputedTextLength() > availableWidthForValue || valueTopActualY + actualValueFontSize > maxValueBottomY || actualValueFontSize < minValueFontSize) {\n valueTextElement.style(\"display\", \"none\");\n } else {\n valueTextElement.style(\"display\", null);\n }\n });\n }\n const diagramPadding = config.diagramPadding ?? 8;\n setupViewPortForSVG(svg, diagramPadding, \"flowchart\", config?.useMaxWidth || false);\n}, \"draw\");\nvar getClasses = /* @__PURE__ */ __name(function(_text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar renderer = { draw, getClasses };\n\n// src/diagrams/treemap/styles.ts\nvar defaultTreemapStyleOptions = {\n sectionStrokeColor: \"black\",\n sectionStrokeWidth: \"1\",\n sectionFillColor: \"#efefef\",\n leafStrokeColor: \"black\",\n leafStrokeWidth: \"1\",\n leafFillColor: \"#efefef\",\n labelColor: \"black\",\n labelFontSize: \"12px\",\n valueFontSize: \"10px\",\n valueColor: \"black\",\n titleColor: \"black\",\n titleFontSize: \"14px\"\n};\nvar getStyles = /* @__PURE__ */ __name(({\n treemap: treemap2\n} = {}) => {\n const options = cleanAndMerge(defaultTreemapStyleOptions, treemap2);\n return `\n .treemapNode.section {\n stroke: ${options.sectionStrokeColor};\n stroke-width: ${options.sectionStrokeWidth};\n fill: ${options.sectionFillColor};\n }\n .treemapNode.leaf {\n stroke: ${options.leafStrokeColor};\n stroke-width: ${options.leafStrokeWidth};\n fill: ${options.leafFillColor};\n }\n .treemapLabel {\n fill: ${options.labelColor};\n font-size: ${options.labelFontSize};\n }\n .treemapValue {\n fill: ${options.valueColor};\n font-size: ${options.valueFontSize};\n }\n .treemapTitle {\n fill: ${options.titleColor};\n font-size: ${options.titleFontSize};\n }\n `;\n}, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/treemap/diagram.ts\nvar diagram = {\n parser,\n get db() {\n return new TreeMapDB();\n },\n renderer,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["count","node","sum","children","i","node_count","node_each","callback","that","index","node_eachBefore","nodes","node_eachAfter","next","n","node_find","node_sum","value","node_sort","compare","node_path","end","start","ancestor","leastCommonAncestor","k","a","b","aNodes","bNodes","c","node_ancestors","node_descendants","node_leaves","leaves","node_links","root","links","node_iterator","current","hierarchy","data","mapChildren","objectChildren","Node","child","childs","computeHeight","node_copy","copyData","d","height","required","f","constantZero","constant","x","roundNode","treemapDice","parent","x0","y0","x1","y1","treemapSlice","phi","squarifyRatio","ratio","rows","row","nodeValue","i0","i1","dx","dy","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","squarify","custom","treemap","tile","round","paddingStack","paddingInner","paddingTop","paddingRight","paddingBottom","paddingLeft","positionNode","p","TreeMapDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","defaultConfig","defaultConfig_default","userConfig","getConfig","cleanAndMerge","level","id","_style","styleClass","styles","isLabelStyle","classSelector","clear","__name","buildHierarchy","items","stack","item","populate","ast","db","populateCommonDb","name","getItemName","cssCompiledStyles","itemData","hierarchyNodes","addNodesRecursively","parser","text","parse","log","error","DEFAULT_INNER_PADDING","SECTION_INNER_PADDING","SECTION_HEADER_HEIGHT","draw","_text","_version","diagram2","treemapDb","config","treemapInnerPadding","title","themeVariables","titleHeight","svg","selectSvgElement","width","svgWidth","svgHeight","configureSvgSize","valueFormat","formatStr","format","precision","precisionStr","restOfFormat","colorScale","scaleOrdinal","colorScalePeer","colorScaleLabel","g","hierarchyRoot","treemapData","branchNodes","sections","_d","styles2String","labelStyles","self","select","originalText","totalHeaderWidth","labelXPosition","spaceForTextContent","actualAvailableWidth","textNode","currentTruncatedText","leafNodes","cell","nodeWidth","nodeHeight","padding","availableWidth","availableHeight","currentLabelFontSize","minLabelFontSize","originalValueRelFontSize","valueScaleFactor","minValueFontSize","spacingBetweenLabelAndValue","prospectiveValueFontSize","combinedHeight","valueTextElement","parentCellNode","labelElement","finalLabelFontSize","originalValueFontSize","actualValueFontSize","valueTopActualY","maxValueBottomY","availableWidthForValue","diagramPadding","setupViewPortForSVG","getClasses","diagramObj","renderer","defaultTreemapStyleOptions","getStyles","treemap2","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]} \ No newline at end of file +{"version":3,"file":"diagram-PSM6KHXK-DQIU_Et_.js","sources":["../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/count.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/each.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/find.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/path.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/links.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../../../webui/node_modules/d3-hierarchy/src/hierarchy/index.js","../../../../../webui/node_modules/d3-hierarchy/src/accessors.js","../../../../../webui/node_modules/d3-hierarchy/src/constant.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/round.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/dice.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/slice.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/squarify.js","../../../../../webui/node_modules/d3-hierarchy/src/treemap/index.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/diagram-PSM6KHXK.mjs"],"sourcesContent":["function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n isLabelStyle,\n styles2String\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n configureSvgSize,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/treemap/db.ts\nvar TreeMapDB = class {\n constructor() {\n this.nodes = [];\n this.levels = /* @__PURE__ */ new Map();\n this.outerNodes = [];\n this.classes = /* @__PURE__ */ new Map();\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n }\n static {\n __name(this, \"TreeMapDB\");\n }\n getNodes() {\n return this.nodes;\n }\n getConfig() {\n const defaultConfig = defaultConfig_default;\n const userConfig = getConfig();\n return cleanAndMerge({\n ...defaultConfig.treemap,\n ...userConfig.treemap ?? {}\n });\n }\n addNode(node, level) {\n this.nodes.push(node);\n this.levels.set(node, level);\n if (level === 0) {\n this.outerNodes.push(node);\n this.root ??= node;\n }\n }\n getRoot() {\n return { name: \"\", children: this.outerNodes };\n }\n addClass(id, _style) {\n const styleClass = this.classes.get(id) ?? { id, styles: [], textStyles: [] };\n const styles = _style.replace(/\\\\,/g, \"\\xA7\\xA7\\xA7\").replace(/,/g, \";\").replace(/§§§/g, \",\").split(\";\");\n if (styles) {\n styles.forEach((s) => {\n if (isLabelStyle(s)) {\n if (styleClass?.textStyles) {\n styleClass.textStyles.push(s);\n } else {\n styleClass.textStyles = [s];\n }\n }\n if (styleClass?.styles) {\n styleClass.styles.push(s);\n } else {\n styleClass.styles = [s];\n }\n });\n }\n this.classes.set(id, styleClass);\n }\n getClasses() {\n return this.classes;\n }\n getStylesForClass(classSelector) {\n return this.classes.get(classSelector)?.styles ?? [];\n }\n clear() {\n clear();\n this.nodes = [];\n this.levels = /* @__PURE__ */ new Map();\n this.outerNodes = [];\n this.classes = /* @__PURE__ */ new Map();\n this.root = void 0;\n }\n};\n\n// src/diagrams/treemap/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/treemap/utils.ts\nfunction buildHierarchy(items) {\n if (!items.length) {\n return [];\n }\n const root = [];\n const stack = [];\n items.forEach((item) => {\n const node = {\n name: item.name,\n children: item.type === \"Leaf\" ? void 0 : []\n };\n node.classSelector = item?.classSelector;\n if (item?.cssCompiledStyles) {\n node.cssCompiledStyles = [item.cssCompiledStyles];\n }\n if (item.type === \"Leaf\" && item.value !== void 0) {\n node.value = item.value;\n }\n while (stack.length > 0 && stack[stack.length - 1].level >= item.level) {\n stack.pop();\n }\n if (stack.length === 0) {\n root.push(node);\n } else {\n const parent = stack[stack.length - 1].node;\n if (parent.children) {\n parent.children.push(node);\n } else {\n parent.children = [node];\n }\n }\n if (item.type !== \"Leaf\") {\n stack.push({ node, level: item.level });\n }\n });\n return root;\n}\n__name(buildHierarchy, \"buildHierarchy\");\n\n// src/diagrams/treemap/parser.ts\nvar populate = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n const items = [];\n for (const row of ast.TreemapRows ?? []) {\n if (row.$type === \"ClassDefStatement\") {\n db.addClass(row.className ?? \"\", row.styleText ?? \"\");\n }\n }\n for (const row of ast.TreemapRows ?? []) {\n const item = row.item;\n if (!item) {\n continue;\n }\n const level = row.indent ? parseInt(row.indent) : 0;\n const name = getItemName(item);\n const styles = item.classSelector ? db.getStylesForClass(item.classSelector) : [];\n const cssCompiledStyles = styles.length > 0 ? styles.join(\";\") : void 0;\n const itemData = {\n level,\n name,\n type: item.$type,\n value: item.value,\n classSelector: item.classSelector,\n cssCompiledStyles\n };\n items.push(itemData);\n }\n const hierarchyNodes = buildHierarchy(items);\n const addNodesRecursively = /* @__PURE__ */ __name((nodes, level) => {\n for (const node of nodes) {\n db.addNode(node, level);\n if (node.children && node.children.length > 0) {\n addNodesRecursively(node.children, level + 1);\n }\n }\n }, \"addNodesRecursively\");\n addNodesRecursively(hierarchyNodes, 0);\n}, \"populate\");\nvar getItemName = /* @__PURE__ */ __name((item) => {\n return item.name ? String(item.name) : \"\";\n}, \"getItemName\");\nvar parser = {\n // @ts-expect-error - TreeMapDB is not assignable to DiagramDB\n parser: { yy: void 0 },\n parse: /* @__PURE__ */ __name(async (text) => {\n try {\n const parseFunc = parse;\n const ast = await parseFunc(\"treemap\", text);\n log.debug(\"Treemap AST:\", ast);\n const db = parser.parser?.yy;\n if (!(db instanceof TreeMapDB)) {\n throw new Error(\n \"parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n populate(ast, db);\n } catch (error) {\n log.error(\"Error parsing treemap:\", error);\n throw error;\n }\n }, \"parse\")\n};\n\n// src/diagrams/treemap/renderer.ts\nimport { scaleOrdinal, treemap, hierarchy, format, select } from \"d3\";\nvar DEFAULT_INNER_PADDING = 10;\nvar SECTION_INNER_PADDING = 10;\nvar SECTION_HEADER_HEIGHT = 25;\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const treemapDb = diagram2.db;\n const config = treemapDb.getConfig();\n const treemapInnerPadding = config.padding ?? DEFAULT_INNER_PADDING;\n const title = treemapDb.getDiagramTitle();\n const root = treemapDb.getRoot();\n const { themeVariables } = getConfig();\n if (!root) {\n return;\n }\n const titleHeight = title ? 30 : 0;\n const svg = selectSvgElement(id);\n const width = config.nodeWidth ? config.nodeWidth * SECTION_INNER_PADDING : 960;\n const height = config.nodeHeight ? config.nodeHeight * SECTION_INNER_PADDING : 500;\n const svgWidth = width;\n const svgHeight = height + titleHeight;\n svg.attr(\"viewBox\", `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n let valueFormat;\n try {\n const formatStr = config.valueFormat || \",\";\n if (formatStr === \"$0,0\") {\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(\",\")(value), \"valueFormat\");\n } else if (formatStr.startsWith(\"$\") && formatStr.includes(\",\")) {\n const precision = /\\.\\d+/.exec(formatStr);\n const precisionStr = precision ? precision[0] : \"\";\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(\",\" + precisionStr)(value), \"valueFormat\");\n } else if (formatStr.startsWith(\"$\")) {\n const restOfFormat = formatStr.substring(1);\n valueFormat = /* @__PURE__ */ __name((value) => \"$\" + format(restOfFormat || \"\")(value), \"valueFormat\");\n } else {\n valueFormat = format(formatStr);\n }\n } catch (error) {\n log.error(\"Error creating format function:\", error);\n valueFormat = format(\",\");\n }\n const colorScale = scaleOrdinal().range([\n \"transparent\",\n themeVariables.cScale0,\n themeVariables.cScale1,\n themeVariables.cScale2,\n themeVariables.cScale3,\n themeVariables.cScale4,\n themeVariables.cScale5,\n themeVariables.cScale6,\n themeVariables.cScale7,\n themeVariables.cScale8,\n themeVariables.cScale9,\n themeVariables.cScale10,\n themeVariables.cScale11\n ]);\n const colorScalePeer = scaleOrdinal().range([\n \"transparent\",\n themeVariables.cScalePeer0,\n themeVariables.cScalePeer1,\n themeVariables.cScalePeer2,\n themeVariables.cScalePeer3,\n themeVariables.cScalePeer4,\n themeVariables.cScalePeer5,\n themeVariables.cScalePeer6,\n themeVariables.cScalePeer7,\n themeVariables.cScalePeer8,\n themeVariables.cScalePeer9,\n themeVariables.cScalePeer10,\n themeVariables.cScalePeer11\n ]);\n const colorScaleLabel = scaleOrdinal().range([\n themeVariables.cScaleLabel0,\n themeVariables.cScaleLabel1,\n themeVariables.cScaleLabel2,\n themeVariables.cScaleLabel3,\n themeVariables.cScaleLabel4,\n themeVariables.cScaleLabel5,\n themeVariables.cScaleLabel6,\n themeVariables.cScaleLabel7,\n themeVariables.cScaleLabel8,\n themeVariables.cScaleLabel9,\n themeVariables.cScaleLabel10,\n themeVariables.cScaleLabel11\n ]);\n if (title) {\n svg.append(\"text\").attr(\"x\", svgWidth / 2).attr(\"y\", titleHeight / 2).attr(\"class\", \"treemapTitle\").attr(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").text(title);\n }\n const g = svg.append(\"g\").attr(\"transform\", `translate(0, ${titleHeight})`).attr(\"class\", \"treemapContainer\");\n const hierarchyRoot = hierarchy(root).sum((d) => d.value ?? 0).sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n const treemapLayout = treemap().size([width, height]).paddingTop(\n (d) => d.children && d.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0\n ).paddingInner(treemapInnerPadding).paddingLeft((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingRight((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingBottom((d) => d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0).round(true);\n const treemapData = treemapLayout(hierarchyRoot);\n const branchNodes = treemapData.descendants().filter((d) => d.children && d.children.length > 0);\n const sections = g.selectAll(\".treemapSection\").data(branchNodes).enter().append(\"g\").attr(\"class\", \"treemapSection\").attr(\"transform\", (d) => `translate(${d.x0},${d.y0})`);\n sections.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", SECTION_HEADER_HEIGHT).attr(\"class\", \"treemapSectionHeader\").attr(\"fill\", \"none\").attr(\"fill-opacity\", 0.6).attr(\"stroke-width\", 0.6).attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n return \"\";\n });\n sections.append(\"clipPath\").attr(\"id\", (_d, i) => `clip-section-${id}-${i}`).append(\"rect\").attr(\"width\", (d) => Math.max(0, d.x1 - d.x0 - 12)).attr(\"height\", SECTION_HEADER_HEIGHT);\n sections.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", (d) => d.y1 - d.y0).attr(\"class\", (_d, i) => {\n return `treemapSection section${i}`;\n }).attr(\"fill\", (d) => colorScale(d.data.name)).attr(\"fill-opacity\", 0.6).attr(\"stroke\", (d) => colorScalePeer(d.data.name)).attr(\"stroke-width\", 2).attr(\"stroke-opacity\", 0.4).attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return styles.nodeStyles + \";\" + styles.borderStyles.join(\";\");\n });\n sections.append(\"text\").attr(\"class\", \"treemapSectionLabel\").attr(\"x\", 6).attr(\"y\", SECTION_HEADER_HEIGHT / 2).attr(\"dominant-baseline\", \"middle\").text((d) => d.depth === 0 ? \"\" : d.data.name).attr(\"font-weight\", \"bold\").attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const labelStyles = \"dominant-baseline: middle; font-size: 12px; fill:\" + colorScaleLabel(d.data.name) + \"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).each(function(d) {\n if (d.depth === 0) {\n return;\n }\n const self = select(this);\n const originalText = d.data.name;\n self.text(originalText);\n const totalHeaderWidth = d.x1 - d.x0;\n const labelXPosition = 6;\n let spaceForTextContent;\n if (config.showValues !== false && d.value) {\n const valueEndsAtXRelative = totalHeaderWidth - 10;\n const estimatedValueTextActualWidth = 30;\n const gapBetweenLabelAndValue = 10;\n const labelMustEndBeforeX = valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue;\n spaceForTextContent = labelMustEndBeforeX - labelXPosition;\n } else {\n const labelOwnRightPadding = 6;\n spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding;\n }\n const minimumWidthToDisplay = 15;\n const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent);\n const textNode = self.node();\n const currentTextContentLength = textNode.getComputedTextLength();\n if (currentTextContentLength > actualAvailableWidth) {\n const ellipsis = \"...\";\n let currentTruncatedText = originalText;\n while (currentTruncatedText.length > 0) {\n currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1);\n if (currentTruncatedText.length === 0) {\n self.text(ellipsis);\n if (textNode.getComputedTextLength() > actualAvailableWidth) {\n self.text(\"\");\n }\n break;\n }\n self.text(currentTruncatedText + ellipsis);\n if (textNode.getComputedTextLength() <= actualAvailableWidth) {\n break;\n }\n }\n }\n });\n if (config.showValues !== false) {\n sections.append(\"text\").attr(\"class\", \"treemapSectionValue\").attr(\"x\", (d) => d.x1 - d.x0 - 10).attr(\"y\", SECTION_HEADER_HEIGHT / 2).attr(\"text-anchor\", \"end\").attr(\"dominant-baseline\", \"middle\").text((d) => d.value ? valueFormat(d.value) : \"\").attr(\"font-style\", \"italic\").attr(\"style\", (d) => {\n if (d.depth === 0) {\n return \"display: none;\";\n }\n const labelStyles = \"text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:\" + colorScaleLabel(d.data.name) + \"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n });\n }\n const leafNodes = treemapData.leaves();\n const cell = g.selectAll(\".treemapLeafGroup\").data(leafNodes).enter().append(\"g\").attr(\"class\", (d, i) => {\n return `treemapNode treemapLeafGroup leaf${i}${d.data.classSelector ? ` ${d.data.classSelector}` : \"\"}x`;\n }).attr(\"transform\", (d) => `translate(${d.x0},${d.y0})`);\n cell.append(\"rect\").attr(\"width\", (d) => d.x1 - d.x0).attr(\"height\", (d) => d.y1 - d.y0).attr(\"class\", \"treemapLeaf\").attr(\"fill\", (d) => {\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n }).attr(\"style\", (d) => {\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return styles.nodeStyles;\n }).attr(\"fill-opacity\", 0.3).attr(\"stroke\", (d) => {\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n }).attr(\"stroke-width\", 3);\n cell.append(\"clipPath\").attr(\"id\", (_d, i) => `clip-${id}-${i}`).append(\"rect\").attr(\"width\", (d) => Math.max(0, d.x1 - d.x0 - 4)).attr(\"height\", (d) => Math.max(0, d.y1 - d.y0 - 4));\n const leafLabels = cell.append(\"text\").attr(\"class\", \"treemapLabel\").attr(\"x\", (d) => (d.x1 - d.x0) / 2).attr(\"y\", (d) => (d.y1 - d.y0) / 2).attr(\"style\", (d) => {\n const labelStyles = \"text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:\" + colorScaleLabel(d.data.name) + \";\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).attr(\"clip-path\", (_d, i) => `url(#clip-${id}-${i})`).text((d) => d.data.name);\n leafLabels.each(function(d) {\n const self = select(this);\n const nodeWidth = d.x1 - d.x0;\n const nodeHeight = d.y1 - d.y0;\n const textNode = self.node();\n const padding = 4;\n const availableWidth = nodeWidth - 2 * padding;\n const availableHeight = nodeHeight - 2 * padding;\n if (availableWidth < 10 || availableHeight < 10) {\n self.style(\"display\", \"none\");\n return;\n }\n let currentLabelFontSize = parseInt(self.style(\"font-size\"), 10);\n const minLabelFontSize = 8;\n const originalValueRelFontSize = 28;\n const valueScaleFactor = 0.6;\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n while (textNode.getComputedTextLength() > availableWidth && currentLabelFontSize > minLabelFontSize) {\n currentLabelFontSize--;\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n }\n let prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n let combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) {\n currentLabelFontSize--;\n prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n if (prospectiveValueFontSize < minValueFontSize && currentLabelFontSize === minLabelFontSize) {\n break;\n }\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) {\n }\n }\n self.style(\"font-size\", `${currentLabelFontSize}px`);\n if (textNode.getComputedTextLength() > availableWidth || currentLabelFontSize < minLabelFontSize || availableHeight < currentLabelFontSize) {\n self.style(\"display\", \"none\");\n }\n });\n if (config.showValues !== false) {\n const leafValues = cell.append(\"text\").attr(\"class\", \"treemapValue\").attr(\"x\", (d) => (d.x1 - d.x0) / 2).attr(\"y\", function(d) {\n return (d.y1 - d.y0) / 2;\n }).attr(\"style\", (d) => {\n const labelStyles = \"text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:\" + colorScaleLabel(d.data.name) + \";\";\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles });\n return labelStyles + styles.labelStyles.replace(\"color:\", \"fill:\");\n }).attr(\"clip-path\", (_d, i) => `url(#clip-${id}-${i})`).text((d) => d.value ? valueFormat(d.value) : \"\");\n leafValues.each(function(d) {\n const valueTextElement = select(this);\n const parentCellNode = this.parentNode;\n if (!parentCellNode) {\n valueTextElement.style(\"display\", \"none\");\n return;\n }\n const labelElement = select(parentCellNode).select(\".treemapLabel\");\n if (labelElement.empty() || labelElement.style(\"display\") === \"none\") {\n valueTextElement.style(\"display\", \"none\");\n return;\n }\n const finalLabelFontSize = parseFloat(labelElement.style(\"font-size\"));\n const originalValueFontSize = 28;\n const valueScaleFactor = 0.6;\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n const actualValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor))\n );\n valueTextElement.style(\"font-size\", `${actualValueFontSize}px`);\n const labelCenterY = (d.y1 - d.y0) / 2;\n const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue;\n valueTextElement.attr(\"y\", valueTopActualY);\n const nodeWidth = d.x1 - d.x0;\n const nodeTotalHeight = d.y1 - d.y0;\n const cellBottomPadding = 4;\n const maxValueBottomY = nodeTotalHeight - cellBottomPadding;\n const availableWidthForValue = nodeWidth - 2 * 4;\n if (valueTextElement.node().getComputedTextLength() > availableWidthForValue || valueTopActualY + actualValueFontSize > maxValueBottomY || actualValueFontSize < minValueFontSize) {\n valueTextElement.style(\"display\", \"none\");\n } else {\n valueTextElement.style(\"display\", null);\n }\n });\n }\n const diagramPadding = config.diagramPadding ?? 8;\n setupViewPortForSVG(svg, diagramPadding, \"flowchart\", config?.useMaxWidth || false);\n}, \"draw\");\nvar getClasses = /* @__PURE__ */ __name(function(_text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar renderer = { draw, getClasses };\n\n// src/diagrams/treemap/styles.ts\nvar defaultTreemapStyleOptions = {\n sectionStrokeColor: \"black\",\n sectionStrokeWidth: \"1\",\n sectionFillColor: \"#efefef\",\n leafStrokeColor: \"black\",\n leafStrokeWidth: \"1\",\n leafFillColor: \"#efefef\",\n labelColor: \"black\",\n labelFontSize: \"12px\",\n valueFontSize: \"10px\",\n valueColor: \"black\",\n titleColor: \"black\",\n titleFontSize: \"14px\"\n};\nvar getStyles = /* @__PURE__ */ __name(({\n treemap: treemap2\n} = {}) => {\n const options = cleanAndMerge(defaultTreemapStyleOptions, treemap2);\n return `\n .treemapNode.section {\n stroke: ${options.sectionStrokeColor};\n stroke-width: ${options.sectionStrokeWidth};\n fill: ${options.sectionFillColor};\n }\n .treemapNode.leaf {\n stroke: ${options.leafStrokeColor};\n stroke-width: ${options.leafStrokeWidth};\n fill: ${options.leafFillColor};\n }\n .treemapLabel {\n fill: ${options.labelColor};\n font-size: ${options.labelFontSize};\n }\n .treemapValue {\n fill: ${options.valueColor};\n font-size: ${options.valueFontSize};\n }\n .treemapTitle {\n fill: ${options.titleColor};\n font-size: ${options.titleFontSize};\n }\n `;\n}, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/treemap/diagram.ts\nvar diagram = {\n parser,\n get db() {\n return new TreeMapDB();\n },\n renderer,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["count","node","sum","children","i","node_count","node_each","callback","that","index","node_eachBefore","nodes","node_eachAfter","next","n","node_find","node_sum","value","node_sort","compare","node_path","end","start","ancestor","leastCommonAncestor","k","a","b","aNodes","bNodes","c","node_ancestors","node_descendants","node_leaves","leaves","node_links","root","links","node_iterator","current","hierarchy","data","mapChildren","objectChildren","Node","child","childs","computeHeight","node_copy","copyData","d","height","required","f","constantZero","constant","x","roundNode","treemapDice","parent","x0","y0","x1","y1","treemapSlice","phi","squarifyRatio","ratio","rows","row","nodeValue","i0","i1","dx","dy","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","squarify","custom","treemap","tile","round","paddingStack","paddingInner","paddingTop","paddingRight","paddingBottom","paddingLeft","positionNode","p","TreeMapDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","defaultConfig","defaultConfig_default","userConfig","getConfig","cleanAndMerge","level","id","_style","styleClass","styles","isLabelStyle","classSelector","clear","__name","buildHierarchy","items","stack","item","populate","ast","db","populateCommonDb","name","getItemName","cssCompiledStyles","itemData","hierarchyNodes","addNodesRecursively","parser","text","parse","log","error","DEFAULT_INNER_PADDING","SECTION_INNER_PADDING","SECTION_HEADER_HEIGHT","draw","_text","_version","diagram2","treemapDb","config","treemapInnerPadding","title","themeVariables","titleHeight","svg","selectSvgElement","width","svgWidth","svgHeight","configureSvgSize","valueFormat","formatStr","format","precision","precisionStr","restOfFormat","colorScale","scaleOrdinal","colorScalePeer","colorScaleLabel","g","hierarchyRoot","treemapData","branchNodes","sections","_d","styles2String","labelStyles","self","select","originalText","totalHeaderWidth","labelXPosition","spaceForTextContent","actualAvailableWidth","textNode","currentTruncatedText","leafNodes","cell","nodeWidth","nodeHeight","padding","availableWidth","availableHeight","currentLabelFontSize","minLabelFontSize","originalValueRelFontSize","valueScaleFactor","minValueFontSize","spacingBetweenLabelAndValue","prospectiveValueFontSize","combinedHeight","valueTextElement","parentCellNode","labelElement","finalLabelFontSize","originalValueFontSize","actualValueFontSize","valueTopActualY","maxValueBottomY","availableWidthForValue","diagramPadding","setupViewPortForSVG","getClasses","diagramObj","renderer","defaultTreemapStyleOptions","getStyles","treemap2","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/diagram-QEK2KX5R-BzZrhy2L.js b/massgen/frontend/web/static/assets/diagram-QEK2KX5R-CTDcm0Uh.js similarity index 94% rename from massgen/frontend/web/static/assets/diagram-QEK2KX5R-BzZrhy2L.js rename to massgen/frontend/web/static/assets/diagram-QEK2KX5R-CTDcm0Uh.js index 5b7c032ad..9448ad686 100644 --- a/massgen/frontend/web/static/assets/diagram-QEK2KX5R-BzZrhy2L.js +++ b/massgen/frontend/web/static/assets/diagram-QEK2KX5R-CTDcm0Uh.js @@ -1,4 +1,4 @@ -import{_ as l,s as k,g as R,q as E,p as F,a as I,b as _,H as D,y as G,D as f,E as C,F as P,l as z,K as H}from"./index-yx4Z55Qu.js";import{p as V}from"./chunk-4BX2VUAB-zPP-xzOW.js";import{p as W}from"./treemap-KMMF4GRG-DeY5gSJ9.js";import"./min-DVxmWhZZ.js";import"./_baseUniq-LXHsPSjj.js";var m={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},w={axes:[],curves:[],options:m},h=structuredClone(w),B=P.radar,j=l(()=>f({...B,...C().radar}),"getConfig"),b=l(()=>h.axes,"getAxes"),q=l(()=>h.curves,"getCurves"),K=l(()=>h.options,"getOptions"),N=l(a=>{h.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),U=l(a=>{h.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:X(t.entries)}))},"setCurves"),X=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=b();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>{var o;return((o=s.axis)==null?void 0:o.$refText)===e.name});if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),Y=l(a=>{var e,r,s,o,i;const t=a.reduce((n,c)=>(n[c.name]=c,n),{});h.options={showLegend:((e=t.showLegend)==null?void 0:e.value)??m.showLegend,ticks:((r=t.ticks)==null?void 0:r.value)??m.ticks,max:((s=t.max)==null?void 0:s.value)??m.max,min:((o=t.min)==null?void 0:o.value)??m.min,graticule:((i=t.graticule)==null?void 0:i.value)??m.graticule}},"setOptions"),Z=l(()=>{G(),h=structuredClone(w)},"clear"),$={getAxes:b,getCurves:q,getOptions:K,setAxes:N,setCurves:U,setOptions:Y,getConfig:j,clear:Z,setAccTitle:_,getAccTitle:I,setDiagramTitle:F,getDiagramTitle:E,getAccDescription:R,setAccDescription:k},J=l(a=>{V(a,$);const{axes:t,curves:e,options:r}=a;$.setAxes(t),$.setCurves(e),$.setOptions(r)},"populate"),Q={parse:l(async a=>{const t=await W("radar",a);z.debug(t),J(t)},"parse")},tt=l((a,t,e,r)=>{const s=r.db,o=s.getAxes(),i=s.getCurves(),n=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),u=D(t),p=et(u,c),g=n.max??Math.max(...i.map(y=>Math.max(...y.entries))),x=n.min,v=Math.min(c.width,c.height)/2;at(p,o,v,n.ticks,n.graticule),rt(p,o,v,c),M(p,o,i,x,g,n.graticule,c),T(p,i,n.showLegend,c),p.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),et=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return a.attr("viewbox",`0 0 ${e} ${r}`).attr("width",e).attr("height",r),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),at=l((a,t,e,r,s)=>{if(s==="circle")for(let o=0;o{const p=2*u*Math.PI/o-Math.PI/2,g=n*Math.cos(p),x=n*Math.sin(p);return`${g},${x}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),rt=l((a,t,e,r)=>{const s=t.length;for(let o=0;o{if(d.entries.length!==n)return;const p=d.entries.map((g,x)=>{const v=2*Math.PI*x/n-Math.PI/2,y=A(g,r,s,c),O=y*Math.cos(v),S=y*Math.sin(v);return{x:O,y:S}});o==="circle"?a.append("path").attr("d",L(p,i.curveTension)).attr("class",`radarCurve-${u}`):o==="polygon"&&a.append("polygon").attr("points",p.map(g=>`${g.x},${g.y}`).join(" ")).attr("class",`radarCurve-${u}`)})}l(M,"drawCurves");function A(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(A,"relativeRadius");function L(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s{const d=a.append("g").attr("transform",`translate(${s}, ${o+c*i})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(n.label)})}l(T,"drawLegend");var st={draw:tt},nt=l((a,t)=>{let e="";for(let r=0;rf({...B,...C().radar}),"getConfig"),b=l(()=>h.axes,"getAxes"),q=l(()=>h.curves,"getCurves"),K=l(()=>h.options,"getOptions"),N=l(a=>{h.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),U=l(a=>{h.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:X(t.entries)}))},"setCurves"),X=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=b();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>{var o;return((o=s.axis)==null?void 0:o.$refText)===e.name});if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),Y=l(a=>{var e,r,s,o,i;const t=a.reduce((n,c)=>(n[c.name]=c,n),{});h.options={showLegend:((e=t.showLegend)==null?void 0:e.value)??m.showLegend,ticks:((r=t.ticks)==null?void 0:r.value)??m.ticks,max:((s=t.max)==null?void 0:s.value)??m.max,min:((o=t.min)==null?void 0:o.value)??m.min,graticule:((i=t.graticule)==null?void 0:i.value)??m.graticule}},"setOptions"),Z=l(()=>{G(),h=structuredClone(w)},"clear"),$={getAxes:b,getCurves:q,getOptions:K,setAxes:N,setCurves:U,setOptions:Y,getConfig:j,clear:Z,setAccTitle:_,getAccTitle:I,setDiagramTitle:F,getDiagramTitle:E,getAccDescription:R,setAccDescription:k},J=l(a=>{V(a,$);const{axes:t,curves:e,options:r}=a;$.setAxes(t),$.setCurves(e),$.setOptions(r)},"populate"),Q={parse:l(async a=>{const t=await W("radar",a);z.debug(t),J(t)},"parse")},tt=l((a,t,e,r)=>{const s=r.db,o=s.getAxes(),i=s.getCurves(),n=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),u=D(t),p=et(u,c),g=n.max??Math.max(...i.map(y=>Math.max(...y.entries))),x=n.min,v=Math.min(c.width,c.height)/2;at(p,o,v,n.ticks,n.graticule),rt(p,o,v,c),M(p,o,i,x,g,n.graticule,c),T(p,i,n.showLegend,c),p.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),et=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return a.attr("viewbox",`0 0 ${e} ${r}`).attr("width",e).attr("height",r),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),at=l((a,t,e,r,s)=>{if(s==="circle")for(let o=0;o{const p=2*u*Math.PI/o-Math.PI/2,g=n*Math.cos(p),x=n*Math.sin(p);return`${g},${x}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),rt=l((a,t,e,r)=>{const s=t.length;for(let o=0;o{if(d.entries.length!==n)return;const p=d.entries.map((g,x)=>{const v=2*Math.PI*x/n-Math.PI/2,y=A(g,r,s,c),O=y*Math.cos(v),S=y*Math.sin(v);return{x:O,y:S}});o==="circle"?a.append("path").attr("d",L(p,i.curveTension)).attr("class",`radarCurve-${u}`):o==="polygon"&&a.append("polygon").attr("points",p.map(g=>`${g.x},${g.y}`).join(" ")).attr("class",`radarCurve-${u}`)})}l(M,"drawCurves");function A(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(A,"relativeRadius");function L(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s{const d=a.append("g").attr("transform",`translate(${s}, ${o+c*i})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(n.label)})}l(T,"drawLegend");var st={draw:tt},nt=l((a,t)=>{let e="";for(let r=0;r {\n const config = cleanAndMerge({\n ...DEFAULT_RADAR_CONFIG,\n ...getConfig().radar\n });\n return config;\n}, \"getConfig\");\nvar getAxes = /* @__PURE__ */ __name(() => data.axes, \"getAxes\");\nvar getCurves = /* @__PURE__ */ __name(() => data.curves, \"getCurves\");\nvar getOptions = /* @__PURE__ */ __name(() => data.options, \"getOptions\");\nvar setAxes = /* @__PURE__ */ __name((axes) => {\n data.axes = axes.map((axis) => {\n return {\n name: axis.name,\n label: axis.label ?? axis.name\n };\n });\n}, \"setAxes\");\nvar setCurves = /* @__PURE__ */ __name((curves) => {\n data.curves = curves.map((curve) => {\n return {\n name: curve.name,\n label: curve.label ?? curve.name,\n entries: computeCurveEntries(curve.entries)\n };\n });\n}, \"setCurves\");\nvar computeCurveEntries = /* @__PURE__ */ __name((entries) => {\n if (entries[0].axis == void 0) {\n return entries.map((entry) => entry.value);\n }\n const axes = getAxes();\n if (axes.length === 0) {\n throw new Error(\"Axes must be populated before curves for reference entries\");\n }\n return axes.map((axis) => {\n const entry = entries.find((entry2) => entry2.axis?.$refText === axis.name);\n if (entry === void 0) {\n throw new Error(\"Missing entry for axis \" + axis.label);\n }\n return entry.value;\n });\n}, \"computeCurveEntries\");\nvar setOptions = /* @__PURE__ */ __name((options) => {\n const optionMap = options.reduce(\n (acc, option) => {\n acc[option.name] = option;\n return acc;\n },\n {}\n );\n data.options = {\n showLegend: optionMap.showLegend?.value ?? defaultOptions.showLegend,\n ticks: optionMap.ticks?.value ?? defaultOptions.ticks,\n max: optionMap.max?.value ?? defaultOptions.max,\n min: optionMap.min?.value ?? defaultOptions.min,\n graticule: optionMap.graticule?.value ?? defaultOptions.graticule\n };\n}, \"setOptions\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n clear();\n data = structuredClone(defaultRadarData);\n}, \"clear\");\nvar db = {\n getAxes,\n getCurves,\n getOptions,\n setAxes,\n setCurves,\n setOptions,\n getConfig: getConfig2,\n clear: clear2,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription\n};\n\n// src/diagrams/radar/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\nvar populate = /* @__PURE__ */ __name((ast) => {\n populateCommonDb(ast, db);\n const { axes, curves, options } = ast;\n db.setAxes(axes);\n db.setCurves(curves);\n db.setOptions(options);\n}, \"populate\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"radar\", input);\n log.debug(ast);\n populate(ast);\n }, \"parse\")\n};\n\n// src/diagrams/radar/renderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const db2 = diagram2.db;\n const axes = db2.getAxes();\n const curves = db2.getCurves();\n const options = db2.getOptions();\n const config = db2.getConfig();\n const title = db2.getDiagramTitle();\n const svg = selectSvgElement(id);\n const g = drawFrame(svg, config);\n const maxValue = options.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));\n const minValue = options.min;\n const radius = Math.min(config.width, config.height) / 2;\n drawGraticule(g, axes, radius, options.ticks, options.graticule);\n drawAxes(g, axes, radius, config);\n drawCurves(g, axes, curves, minValue, maxValue, options.graticule, config);\n drawLegend(g, curves, options.showLegend, config);\n g.append(\"text\").attr(\"class\", \"radarTitle\").text(title).attr(\"x\", 0).attr(\"y\", -config.height / 2 - config.marginTop);\n}, \"draw\");\nvar drawFrame = /* @__PURE__ */ __name((svg, config) => {\n const totalWidth = config.width + config.marginLeft + config.marginRight;\n const totalHeight = config.height + config.marginTop + config.marginBottom;\n const center = {\n x: config.marginLeft + config.width / 2,\n y: config.marginTop + config.height / 2\n };\n svg.attr(\"viewbox\", `0 0 ${totalWidth} ${totalHeight}`).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n return svg.append(\"g\").attr(\"transform\", `translate(${center.x}, ${center.y})`);\n}, \"drawFrame\");\nvar drawGraticule = /* @__PURE__ */ __name((g, axes, radius, ticks, graticule) => {\n if (graticule === \"circle\") {\n for (let i = 0; i < ticks; i++) {\n const r = radius * (i + 1) / ticks;\n g.append(\"circle\").attr(\"r\", r).attr(\"class\", \"radarGraticule\");\n }\n } else if (graticule === \"polygon\") {\n const numAxes = axes.length;\n for (let i = 0; i < ticks; i++) {\n const r = radius * (i + 1) / ticks;\n const points = axes.map((_, j) => {\n const angle = 2 * j * Math.PI / numAxes - Math.PI / 2;\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return `${x},${y}`;\n }).join(\" \");\n g.append(\"polygon\").attr(\"points\", points).attr(\"class\", \"radarGraticule\");\n }\n }\n}, \"drawGraticule\");\nvar drawAxes = /* @__PURE__ */ __name((g, axes, radius, config) => {\n const numAxes = axes.length;\n for (let i = 0; i < numAxes; i++) {\n const label = axes[i].label;\n const angle = 2 * i * Math.PI / numAxes - Math.PI / 2;\n g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", 0).attr(\"x2\", radius * config.axisScaleFactor * Math.cos(angle)).attr(\"y2\", radius * config.axisScaleFactor * Math.sin(angle)).attr(\"class\", \"radarAxisLine\");\n g.append(\"text\").text(label).attr(\"x\", radius * config.axisLabelFactor * Math.cos(angle)).attr(\"y\", radius * config.axisLabelFactor * Math.sin(angle)).attr(\"class\", \"radarAxisLabel\");\n }\n}, \"drawAxes\");\nfunction drawCurves(g, axes, curves, minValue, maxValue, graticule, config) {\n const numAxes = axes.length;\n const radius = Math.min(config.width, config.height) / 2;\n curves.forEach((curve, index) => {\n if (curve.entries.length !== numAxes) {\n return;\n }\n const points = curve.entries.map((entry, i) => {\n const angle = 2 * Math.PI * i / numAxes - Math.PI / 2;\n const r = relativeRadius(entry, minValue, maxValue, radius);\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return { x, y };\n });\n if (graticule === \"circle\") {\n g.append(\"path\").attr(\"d\", closedRoundCurve(points, config.curveTension)).attr(\"class\", `radarCurve-${index}`);\n } else if (graticule === \"polygon\") {\n g.append(\"polygon\").attr(\"points\", points.map((p) => `${p.x},${p.y}`).join(\" \")).attr(\"class\", `radarCurve-${index}`);\n }\n });\n}\n__name(drawCurves, \"drawCurves\");\nfunction relativeRadius(value, minValue, maxValue, radius) {\n const clippedValue = Math.min(Math.max(value, minValue), maxValue);\n return radius * (clippedValue - minValue) / (maxValue - minValue);\n}\n__name(relativeRadius, \"relativeRadius\");\nfunction closedRoundCurve(points, tension) {\n const numPoints = points.length;\n let d = `M${points[0].x},${points[0].y}`;\n for (let i = 0; i < numPoints; i++) {\n const p0 = points[(i - 1 + numPoints) % numPoints];\n const p1 = points[i];\n const p2 = points[(i + 1) % numPoints];\n const p3 = points[(i + 2) % numPoints];\n const cp1 = {\n x: p1.x + (p2.x - p0.x) * tension,\n y: p1.y + (p2.y - p0.y) * tension\n };\n const cp2 = {\n x: p2.x - (p3.x - p1.x) * tension,\n y: p2.y - (p3.y - p1.y) * tension\n };\n d += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p2.x},${p2.y}`;\n }\n return `${d} Z`;\n}\n__name(closedRoundCurve, \"closedRoundCurve\");\nfunction drawLegend(g, curves, showLegend, config) {\n if (!showLegend) {\n return;\n }\n const legendX = (config.width / 2 + config.marginRight) * 3 / 4;\n const legendY = -(config.height / 2 + config.marginTop) * 3 / 4;\n const lineHeight = 20;\n curves.forEach((curve, index) => {\n const itemGroup = g.append(\"g\").attr(\"transform\", `translate(${legendX}, ${legendY + index * lineHeight})`);\n itemGroup.append(\"rect\").attr(\"width\", 12).attr(\"height\", 12).attr(\"class\", `radarLegendBox-${index}`);\n itemGroup.append(\"text\").attr(\"x\", 16).attr(\"y\", 0).attr(\"class\", \"radarLegendText\").text(curve.label);\n });\n}\n__name(drawLegend, \"drawLegend\");\nvar renderer = { draw };\n\n// src/diagrams/radar/styles.ts\nvar genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => {\n let sections = \"\";\n for (let i = 0; i < themeVariables.THEME_COLOR_LIMIT; i++) {\n const indexColor = themeVariables[`cScale${i}`];\n sections += `\n\t\t.radarCurve-${i} {\n\t\t\tcolor: ${indexColor};\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t\tstroke-width: ${radarOptions.curveStrokeWidth};\n\t\t}\n\t\t.radarLegendBox-${i} {\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t}\n\t\t`;\n }\n return sections;\n}, \"genIndexStyles\");\nvar buildRadarStyleOptions = /* @__PURE__ */ __name((radar) => {\n const defaultThemeVariables = getThemeVariables();\n const currentConfig = getConfig();\n const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);\n const radarOptions = cleanAndMerge(themeVariables.radar, radar);\n return { themeVariables, radarOptions };\n}, \"buildRadarStyleOptions\");\nvar styles = /* @__PURE__ */ __name(({ radar } = {}) => {\n const { themeVariables, radarOptions } = buildRadarStyleOptions(radar);\n return `\n\t.radarTitle {\n\t\tfont-size: ${themeVariables.fontSize};\n\t\tcolor: ${themeVariables.titleColor};\n\t\tdominant-baseline: hanging;\n\t\ttext-anchor: middle;\n\t}\n\t.radarAxisLine {\n\t\tstroke: ${radarOptions.axisColor};\n\t\tstroke-width: ${radarOptions.axisStrokeWidth};\n\t}\n\t.radarAxisLabel {\n\t\tdominant-baseline: middle;\n\t\ttext-anchor: middle;\n\t\tfont-size: ${radarOptions.axisLabelFontSize}px;\n\t\tcolor: ${radarOptions.axisColor};\n\t}\n\t.radarGraticule {\n\t\tfill: ${radarOptions.graticuleColor};\n\t\tfill-opacity: ${radarOptions.graticuleOpacity};\n\t\tstroke: ${radarOptions.graticuleColor};\n\t\tstroke-width: ${radarOptions.graticuleStrokeWidth};\n\t}\n\t.radarLegendText {\n\t\ttext-anchor: start;\n\t\tfont-size: ${radarOptions.legendFontSize}px;\n\t\tdominant-baseline: hanging;\n\t}\n\t${genIndexStyles(themeVariables, radarOptions)}\n\t`;\n}, \"styles\");\n\n// src/diagrams/radar/diagram.ts\nvar diagram = {\n parser,\n db,\n renderer,\n styles\n};\nexport {\n diagram\n};\n"],"names":["defaultOptions","defaultRadarData","data","DEFAULT_RADAR_CONFIG","defaultConfig_default","getConfig2","__name","cleanAndMerge","getConfig","getAxes","getCurves","getOptions","setAxes","axes","axis","setCurves","curves","curve","computeCurveEntries","entries","entry","entry2","_a","setOptions","options","optionMap","acc","option","_b","_c","_d","_e","clear2","clear","db","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","populate","ast","populateCommonDb","parser","input","parse","log","draw","_text","id","_version","diagram2","db2","config","title","svg","selectSvgElement","g","drawFrame","maxValue","minValue","radius","drawGraticule","drawAxes","drawCurves","drawLegend","totalWidth","totalHeight","center","ticks","graticule","i","r","numAxes","points","_","j","angle","x","y","label","index","relativeRadius","closedRoundCurve","p","value","clippedValue","tension","numPoints","d","p0","p1","p2","p3","cp1","cp2","showLegend","legendX","legendY","lineHeight","itemGroup","renderer","genIndexStyles","themeVariables","radarOptions","sections","indexColor","buildRadarStyleOptions","radar","defaultThemeVariables","getThemeVariables","currentConfig","styles","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"diagram-QEK2KX5R-CTDcm0Uh.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/diagram-QEK2KX5R.mjs"],"sourcesContent":["import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getDiagramTitle,\n getThemeVariables,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/radar/db.ts\nvar defaultOptions = {\n showLegend: true,\n ticks: 5,\n max: null,\n min: 0,\n graticule: \"circle\"\n};\nvar defaultRadarData = {\n axes: [],\n curves: [],\n options: defaultOptions\n};\nvar data = structuredClone(defaultRadarData);\nvar DEFAULT_RADAR_CONFIG = defaultConfig_default.radar;\nvar getConfig2 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_RADAR_CONFIG,\n ...getConfig().radar\n });\n return config;\n}, \"getConfig\");\nvar getAxes = /* @__PURE__ */ __name(() => data.axes, \"getAxes\");\nvar getCurves = /* @__PURE__ */ __name(() => data.curves, \"getCurves\");\nvar getOptions = /* @__PURE__ */ __name(() => data.options, \"getOptions\");\nvar setAxes = /* @__PURE__ */ __name((axes) => {\n data.axes = axes.map((axis) => {\n return {\n name: axis.name,\n label: axis.label ?? axis.name\n };\n });\n}, \"setAxes\");\nvar setCurves = /* @__PURE__ */ __name((curves) => {\n data.curves = curves.map((curve) => {\n return {\n name: curve.name,\n label: curve.label ?? curve.name,\n entries: computeCurveEntries(curve.entries)\n };\n });\n}, \"setCurves\");\nvar computeCurveEntries = /* @__PURE__ */ __name((entries) => {\n if (entries[0].axis == void 0) {\n return entries.map((entry) => entry.value);\n }\n const axes = getAxes();\n if (axes.length === 0) {\n throw new Error(\"Axes must be populated before curves for reference entries\");\n }\n return axes.map((axis) => {\n const entry = entries.find((entry2) => entry2.axis?.$refText === axis.name);\n if (entry === void 0) {\n throw new Error(\"Missing entry for axis \" + axis.label);\n }\n return entry.value;\n });\n}, \"computeCurveEntries\");\nvar setOptions = /* @__PURE__ */ __name((options) => {\n const optionMap = options.reduce(\n (acc, option) => {\n acc[option.name] = option;\n return acc;\n },\n {}\n );\n data.options = {\n showLegend: optionMap.showLegend?.value ?? defaultOptions.showLegend,\n ticks: optionMap.ticks?.value ?? defaultOptions.ticks,\n max: optionMap.max?.value ?? defaultOptions.max,\n min: optionMap.min?.value ?? defaultOptions.min,\n graticule: optionMap.graticule?.value ?? defaultOptions.graticule\n };\n}, \"setOptions\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n clear();\n data = structuredClone(defaultRadarData);\n}, \"clear\");\nvar db = {\n getAxes,\n getCurves,\n getOptions,\n setAxes,\n setCurves,\n setOptions,\n getConfig: getConfig2,\n clear: clear2,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription\n};\n\n// src/diagrams/radar/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\nvar populate = /* @__PURE__ */ __name((ast) => {\n populateCommonDb(ast, db);\n const { axes, curves, options } = ast;\n db.setAxes(axes);\n db.setCurves(curves);\n db.setOptions(options);\n}, \"populate\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"radar\", input);\n log.debug(ast);\n populate(ast);\n }, \"parse\")\n};\n\n// src/diagrams/radar/renderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const db2 = diagram2.db;\n const axes = db2.getAxes();\n const curves = db2.getCurves();\n const options = db2.getOptions();\n const config = db2.getConfig();\n const title = db2.getDiagramTitle();\n const svg = selectSvgElement(id);\n const g = drawFrame(svg, config);\n const maxValue = options.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));\n const minValue = options.min;\n const radius = Math.min(config.width, config.height) / 2;\n drawGraticule(g, axes, radius, options.ticks, options.graticule);\n drawAxes(g, axes, radius, config);\n drawCurves(g, axes, curves, minValue, maxValue, options.graticule, config);\n drawLegend(g, curves, options.showLegend, config);\n g.append(\"text\").attr(\"class\", \"radarTitle\").text(title).attr(\"x\", 0).attr(\"y\", -config.height / 2 - config.marginTop);\n}, \"draw\");\nvar drawFrame = /* @__PURE__ */ __name((svg, config) => {\n const totalWidth = config.width + config.marginLeft + config.marginRight;\n const totalHeight = config.height + config.marginTop + config.marginBottom;\n const center = {\n x: config.marginLeft + config.width / 2,\n y: config.marginTop + config.height / 2\n };\n svg.attr(\"viewbox\", `0 0 ${totalWidth} ${totalHeight}`).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n return svg.append(\"g\").attr(\"transform\", `translate(${center.x}, ${center.y})`);\n}, \"drawFrame\");\nvar drawGraticule = /* @__PURE__ */ __name((g, axes, radius, ticks, graticule) => {\n if (graticule === \"circle\") {\n for (let i = 0; i < ticks; i++) {\n const r = radius * (i + 1) / ticks;\n g.append(\"circle\").attr(\"r\", r).attr(\"class\", \"radarGraticule\");\n }\n } else if (graticule === \"polygon\") {\n const numAxes = axes.length;\n for (let i = 0; i < ticks; i++) {\n const r = radius * (i + 1) / ticks;\n const points = axes.map((_, j) => {\n const angle = 2 * j * Math.PI / numAxes - Math.PI / 2;\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return `${x},${y}`;\n }).join(\" \");\n g.append(\"polygon\").attr(\"points\", points).attr(\"class\", \"radarGraticule\");\n }\n }\n}, \"drawGraticule\");\nvar drawAxes = /* @__PURE__ */ __name((g, axes, radius, config) => {\n const numAxes = axes.length;\n for (let i = 0; i < numAxes; i++) {\n const label = axes[i].label;\n const angle = 2 * i * Math.PI / numAxes - Math.PI / 2;\n g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", 0).attr(\"x2\", radius * config.axisScaleFactor * Math.cos(angle)).attr(\"y2\", radius * config.axisScaleFactor * Math.sin(angle)).attr(\"class\", \"radarAxisLine\");\n g.append(\"text\").text(label).attr(\"x\", radius * config.axisLabelFactor * Math.cos(angle)).attr(\"y\", radius * config.axisLabelFactor * Math.sin(angle)).attr(\"class\", \"radarAxisLabel\");\n }\n}, \"drawAxes\");\nfunction drawCurves(g, axes, curves, minValue, maxValue, graticule, config) {\n const numAxes = axes.length;\n const radius = Math.min(config.width, config.height) / 2;\n curves.forEach((curve, index) => {\n if (curve.entries.length !== numAxes) {\n return;\n }\n const points = curve.entries.map((entry, i) => {\n const angle = 2 * Math.PI * i / numAxes - Math.PI / 2;\n const r = relativeRadius(entry, minValue, maxValue, radius);\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return { x, y };\n });\n if (graticule === \"circle\") {\n g.append(\"path\").attr(\"d\", closedRoundCurve(points, config.curveTension)).attr(\"class\", `radarCurve-${index}`);\n } else if (graticule === \"polygon\") {\n g.append(\"polygon\").attr(\"points\", points.map((p) => `${p.x},${p.y}`).join(\" \")).attr(\"class\", `radarCurve-${index}`);\n }\n });\n}\n__name(drawCurves, \"drawCurves\");\nfunction relativeRadius(value, minValue, maxValue, radius) {\n const clippedValue = Math.min(Math.max(value, minValue), maxValue);\n return radius * (clippedValue - minValue) / (maxValue - minValue);\n}\n__name(relativeRadius, \"relativeRadius\");\nfunction closedRoundCurve(points, tension) {\n const numPoints = points.length;\n let d = `M${points[0].x},${points[0].y}`;\n for (let i = 0; i < numPoints; i++) {\n const p0 = points[(i - 1 + numPoints) % numPoints];\n const p1 = points[i];\n const p2 = points[(i + 1) % numPoints];\n const p3 = points[(i + 2) % numPoints];\n const cp1 = {\n x: p1.x + (p2.x - p0.x) * tension,\n y: p1.y + (p2.y - p0.y) * tension\n };\n const cp2 = {\n x: p2.x - (p3.x - p1.x) * tension,\n y: p2.y - (p3.y - p1.y) * tension\n };\n d += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p2.x},${p2.y}`;\n }\n return `${d} Z`;\n}\n__name(closedRoundCurve, \"closedRoundCurve\");\nfunction drawLegend(g, curves, showLegend, config) {\n if (!showLegend) {\n return;\n }\n const legendX = (config.width / 2 + config.marginRight) * 3 / 4;\n const legendY = -(config.height / 2 + config.marginTop) * 3 / 4;\n const lineHeight = 20;\n curves.forEach((curve, index) => {\n const itemGroup = g.append(\"g\").attr(\"transform\", `translate(${legendX}, ${legendY + index * lineHeight})`);\n itemGroup.append(\"rect\").attr(\"width\", 12).attr(\"height\", 12).attr(\"class\", `radarLegendBox-${index}`);\n itemGroup.append(\"text\").attr(\"x\", 16).attr(\"y\", 0).attr(\"class\", \"radarLegendText\").text(curve.label);\n });\n}\n__name(drawLegend, \"drawLegend\");\nvar renderer = { draw };\n\n// src/diagrams/radar/styles.ts\nvar genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => {\n let sections = \"\";\n for (let i = 0; i < themeVariables.THEME_COLOR_LIMIT; i++) {\n const indexColor = themeVariables[`cScale${i}`];\n sections += `\n\t\t.radarCurve-${i} {\n\t\t\tcolor: ${indexColor};\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t\tstroke-width: ${radarOptions.curveStrokeWidth};\n\t\t}\n\t\t.radarLegendBox-${i} {\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t}\n\t\t`;\n }\n return sections;\n}, \"genIndexStyles\");\nvar buildRadarStyleOptions = /* @__PURE__ */ __name((radar) => {\n const defaultThemeVariables = getThemeVariables();\n const currentConfig = getConfig();\n const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);\n const radarOptions = cleanAndMerge(themeVariables.radar, radar);\n return { themeVariables, radarOptions };\n}, \"buildRadarStyleOptions\");\nvar styles = /* @__PURE__ */ __name(({ radar } = {}) => {\n const { themeVariables, radarOptions } = buildRadarStyleOptions(radar);\n return `\n\t.radarTitle {\n\t\tfont-size: ${themeVariables.fontSize};\n\t\tcolor: ${themeVariables.titleColor};\n\t\tdominant-baseline: hanging;\n\t\ttext-anchor: middle;\n\t}\n\t.radarAxisLine {\n\t\tstroke: ${radarOptions.axisColor};\n\t\tstroke-width: ${radarOptions.axisStrokeWidth};\n\t}\n\t.radarAxisLabel {\n\t\tdominant-baseline: middle;\n\t\ttext-anchor: middle;\n\t\tfont-size: ${radarOptions.axisLabelFontSize}px;\n\t\tcolor: ${radarOptions.axisColor};\n\t}\n\t.radarGraticule {\n\t\tfill: ${radarOptions.graticuleColor};\n\t\tfill-opacity: ${radarOptions.graticuleOpacity};\n\t\tstroke: ${radarOptions.graticuleColor};\n\t\tstroke-width: ${radarOptions.graticuleStrokeWidth};\n\t}\n\t.radarLegendText {\n\t\ttext-anchor: start;\n\t\tfont-size: ${radarOptions.legendFontSize}px;\n\t\tdominant-baseline: hanging;\n\t}\n\t${genIndexStyles(themeVariables, radarOptions)}\n\t`;\n}, \"styles\");\n\n// src/diagrams/radar/diagram.ts\nvar diagram = {\n parser,\n db,\n renderer,\n styles\n};\nexport {\n diagram\n};\n"],"names":["defaultOptions","defaultRadarData","data","DEFAULT_RADAR_CONFIG","defaultConfig_default","getConfig2","__name","cleanAndMerge","getConfig","getAxes","getCurves","getOptions","setAxes","axes","axis","setCurves","curves","curve","computeCurveEntries","entries","entry","entry2","_a","setOptions","options","optionMap","acc","option","_b","_c","_d","_e","clear2","clear","db","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","populate","ast","populateCommonDb","parser","input","parse","log","draw","_text","id","_version","diagram2","db2","config","title","svg","selectSvgElement","g","drawFrame","maxValue","minValue","radius","drawGraticule","drawAxes","drawCurves","drawLegend","totalWidth","totalHeight","center","ticks","graticule","i","r","numAxes","points","_","j","angle","x","y","label","index","relativeRadius","closedRoundCurve","p","value","clippedValue","tension","numPoints","d","p0","p1","p2","p3","cp1","cp2","showLegend","legendX","legendY","lineHeight","itemGroup","renderer","genIndexStyles","themeVariables","radarOptions","sections","indexColor","buildRadarStyleOptions","radar","defaultThemeVariables","getThemeVariables","currentConfig","styles","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js b/massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js similarity index 92% rename from massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js rename to massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js index 56d20cfbb..23d879203 100644 --- a/massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js +++ b/massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js @@ -1,4 +1,4 @@ -import{_ as b,D as m,H as B,e as C,l as w,b as S,a as D,p as T,q as E,g as F,s as P,E as z,F as A,y as W}from"./index-yx4Z55Qu.js";import{p as _}from"./chunk-4BX2VUAB-zPP-xzOW.js";import{p as N}from"./treemap-KMMF4GRG-DeY5gSJ9.js";import"./min-DVxmWhZZ.js";import"./_baseUniq-LXHsPSjj.js";var L=A.packet,u,v=(u=class{constructor(){this.packet=[],this.setAccTitle=S,this.getAccTitle=D,this.setDiagramTitle=T,this.getDiagramTitle=E,this.getAccDescription=F,this.setAccDescription=P}getConfig(){const t=m({...L,...z().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){W(),this.packet=[]}},b(u,"PacketDB"),u),M=1e4,Y=b((e,t)=>{_(e,t);let s=-1,r=[],n=1;const{bitsPerRow:l}=t.getConfig();for(let{start:a,end:i,bits:d,label:c}of e.blocks){if(a!==void 0&&i!==void 0&&i{if(e.start===void 0)throw new Error("start should have been set during first phase");if(e.end===void 0)throw new Error("end should have been set during first phase");if(e.start>e.end)throw new Error(`Block start ${e.start} is greater than block end ${e.end}.`);if(e.end+1<=t*s)return[e,void 0];const r=t*s-1,n=t*s;return[{start:e.start,end:r,label:e.label,bits:r-e.start},{start:n,end:e.end,label:e.label,bits:e.end-n}]},"getNextFittingBlock"),x={parser:{yy:void 0},parse:b(async e=>{var r;const t=await N("packet",e),s=(r=x.parser)==null?void 0:r.yy;if(!(s instanceof v))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");w.debug(t),Y(t,s)},"parse")},I=b((e,t,s,r)=>{const n=r.db,l=n.getConfig(),{rowHeight:a,paddingY:i,bitWidth:d,bitsPerRow:c}=l,p=n.getPacket(),o=n.getDiagramTitle(),h=a+i,g=h*(p.length+1)-(o?0:a),k=d*c+2,f=B(t);f.attr("viewbox",`0 0 ${k} ${g}`),C(f,g,k,l.useMaxWidth);for(const[y,$]of p.entries())O(f,$,y,l);f.append("text").text(o).attr("x",k/2).attr("y",g-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),O=b((e,t,s,{rowHeight:r,paddingX:n,paddingY:l,bitWidth:a,bitsPerRow:i,showBits:d})=>{const c=e.append("g"),p=s*(r+l)+l;for(const o of t){const h=o.start%i*a+1,g=(o.end-o.start+1)*a-n;if(c.append("rect").attr("x",h).attr("y",p).attr("width",g).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",h+g/2).attr("y",p+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(o.label),!d)continue;const k=o.end===o.start,f=p-2;c.append("text").attr("x",h+(k?g/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(o.start),k||c.append("text").attr("x",h+g).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(o.end)}},"drawWord"),j={draw:I},q={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},G=b(({packet:e}={})=>{const t=m(q,e);return` +import{_ as b,D as m,H as B,e as C,l as w,b as S,a as D,p as T,q as E,g as F,s as P,E as z,F as A,y as W}from"./index-DbSnkTMx.js";import{p as _}from"./chunk-4BX2VUAB-PBVZf6Qi.js";import{p as N}from"./treemap-KMMF4GRG-DVJsp5UK.js";import"./min-jMRXb9Wh.js";import"./_baseUniq-CR-Qd8A8.js";var L=A.packet,u,v=(u=class{constructor(){this.packet=[],this.setAccTitle=S,this.getAccTitle=D,this.setDiagramTitle=T,this.getDiagramTitle=E,this.getAccDescription=F,this.setAccDescription=P}getConfig(){const t=m({...L,...z().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){W(),this.packet=[]}},b(u,"PacketDB"),u),M=1e4,Y=b((e,t)=>{_(e,t);let s=-1,r=[],n=1;const{bitsPerRow:l}=t.getConfig();for(let{start:a,end:i,bits:d,label:c}of e.blocks){if(a!==void 0&&i!==void 0&&i{if(e.start===void 0)throw new Error("start should have been set during first phase");if(e.end===void 0)throw new Error("end should have been set during first phase");if(e.start>e.end)throw new Error(`Block start ${e.start} is greater than block end ${e.end}.`);if(e.end+1<=t*s)return[e,void 0];const r=t*s-1,n=t*s;return[{start:e.start,end:r,label:e.label,bits:r-e.start},{start:n,end:e.end,label:e.label,bits:e.end-n}]},"getNextFittingBlock"),x={parser:{yy:void 0},parse:b(async e=>{var r;const t=await N("packet",e),s=(r=x.parser)==null?void 0:r.yy;if(!(s instanceof v))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");w.debug(t),Y(t,s)},"parse")},I=b((e,t,s,r)=>{const n=r.db,l=n.getConfig(),{rowHeight:a,paddingY:i,bitWidth:d,bitsPerRow:c}=l,p=n.getPacket(),o=n.getDiagramTitle(),h=a+i,g=h*(p.length+1)-(o?0:a),k=d*c+2,f=B(t);f.attr("viewbox",`0 0 ${k} ${g}`),C(f,g,k,l.useMaxWidth);for(const[y,$]of p.entries())O(f,$,y,l);f.append("text").text(o).attr("x",k/2).attr("y",g-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),O=b((e,t,s,{rowHeight:r,paddingX:n,paddingY:l,bitWidth:a,bitsPerRow:i,showBits:d})=>{const c=e.append("g"),p=s*(r+l)+l;for(const o of t){const h=o.start%i*a+1,g=(o.end-o.start+1)*a-n;if(c.append("rect").attr("x",h).attr("y",p).attr("width",g).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",h+g/2).attr("y",p+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(o.label),!d)continue;const k=o.end===o.start,f=p-2;c.append("text").attr("x",h+(k?g/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(o.start),k||c.append("text").attr("x",h+g).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(o.end)}},"drawWord"),j={draw:I},q={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},G=b(({packet:e}={})=>{const t=m(q,e);return` .packetByte { font-size: ${t.byteFontSize}; } @@ -22,4 +22,4 @@ import{_ as b,D as m,H as B,e as C,l as w,b as S,a as D,p as T,q as E,g as F,s a fill: ${t.blockFillColor}; } `},"styles"),Q={parser:x,get db(){return new v},renderer:j,styles:G};export{Q as diagram}; -//# sourceMappingURL=diagram-S2PKOQOG-BC61eUIc.js.map +//# sourceMappingURL=diagram-S2PKOQOG-Cv1vwD4q.js.map diff --git a/massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js.map b/massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js.map similarity index 99% rename from massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js.map rename to massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js.map index dcf9b06cf..5479de160 100644 --- a/massgen/frontend/web/static/assets/diagram-S2PKOQOG-BC61eUIc.js.map +++ b/massgen/frontend/web/static/assets/diagram-S2PKOQOG-Cv1vwD4q.js.map @@ -1 +1 @@ -{"version":3,"file":"diagram-S2PKOQOG-BC61eUIc.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/diagram-S2PKOQOG.mjs"],"sourcesContent":["import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n configureSvgSize,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/packet/db.ts\nvar DEFAULT_PACKET_CONFIG = defaultConfig_default.packet;\nvar PacketDB = class {\n constructor() {\n this.packet = [];\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n }\n static {\n __name(this, \"PacketDB\");\n }\n getConfig() {\n const config = cleanAndMerge({\n ...DEFAULT_PACKET_CONFIG,\n ...getConfig().packet\n });\n if (config.showBits) {\n config.paddingY += 10;\n }\n return config;\n }\n getPacket() {\n return this.packet;\n }\n pushWord(word) {\n if (word.length > 0) {\n this.packet.push(word);\n }\n }\n clear() {\n clear();\n this.packet = [];\n }\n};\n\n// src/diagrams/packet/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\nvar maxPacketSize = 1e4;\nvar populate = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n let lastBit = -1;\n let word = [];\n let row = 1;\n const { bitsPerRow } = db.getConfig();\n for (let { start, end, bits, label } of ast.blocks) {\n if (start !== void 0 && end !== void 0 && end < start) {\n throw new Error(`Packet block ${start} - ${end} is invalid. End must be greater than start.`);\n }\n start ??= lastBit + 1;\n if (start !== lastBit + 1) {\n throw new Error(\n `Packet block ${start} - ${end ?? start} is not contiguous. It should start from ${lastBit + 1}.`\n );\n }\n if (bits === 0) {\n throw new Error(`Packet block ${start} is invalid. Cannot have a zero bit field.`);\n }\n end ??= start + (bits ?? 1) - 1;\n bits ??= end - start + 1;\n lastBit = end;\n log.debug(`Packet block ${start} - ${lastBit} with label ${label}`);\n while (word.length <= bitsPerRow + 1 && db.getPacket().length < maxPacketSize) {\n const [block, nextBlock] = getNextFittingBlock({ start, end, bits, label }, row, bitsPerRow);\n word.push(block);\n if (block.end + 1 === row * bitsPerRow) {\n db.pushWord(word);\n word = [];\n row++;\n }\n if (!nextBlock) {\n break;\n }\n ({ start, end, bits, label } = nextBlock);\n }\n }\n db.pushWord(word);\n}, \"populate\");\nvar getNextFittingBlock = /* @__PURE__ */ __name((block, row, bitsPerRow) => {\n if (block.start === void 0) {\n throw new Error(\"start should have been set during first phase\");\n }\n if (block.end === void 0) {\n throw new Error(\"end should have been set during first phase\");\n }\n if (block.start > block.end) {\n throw new Error(`Block start ${block.start} is greater than block end ${block.end}.`);\n }\n if (block.end + 1 <= row * bitsPerRow) {\n return [block, void 0];\n }\n const rowEnd = row * bitsPerRow - 1;\n const rowStart = row * bitsPerRow;\n return [\n {\n start: block.start,\n end: rowEnd,\n label: block.label,\n bits: rowEnd - block.start\n },\n {\n start: rowStart,\n end: block.end,\n label: block.label,\n bits: block.end - rowStart\n }\n ];\n}, \"getNextFittingBlock\");\nvar parser = {\n // @ts-expect-error - PacketDB is not assignable to DiagramDB\n parser: { yy: void 0 },\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"packet\", input);\n const db = parser.parser?.yy;\n if (!(db instanceof PacketDB)) {\n throw new Error(\n \"parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\n\n// src/diagrams/packet/renderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const db = diagram2.db;\n const config = db.getConfig();\n const { rowHeight, paddingY, bitWidth, bitsPerRow } = config;\n const words = db.getPacket();\n const title = db.getDiagramTitle();\n const totalRowHeight = rowHeight + paddingY;\n const svgHeight = totalRowHeight * (words.length + 1) - (title ? 0 : rowHeight);\n const svgWidth = bitWidth * bitsPerRow + 2;\n const svg = selectSvgElement(id);\n svg.attr(\"viewbox\", `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n for (const [word, packet] of words.entries()) {\n drawWord(svg, packet, word, config);\n }\n svg.append(\"text\").text(title).attr(\"x\", svgWidth / 2).attr(\"y\", svgHeight - totalRowHeight / 2).attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").attr(\"class\", \"packetTitle\");\n}, \"draw\");\nvar drawWord = /* @__PURE__ */ __name((svg, word, rowNumber, { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }) => {\n const group = svg.append(\"g\");\n const wordY = rowNumber * (rowHeight + paddingY) + paddingY;\n for (const block of word) {\n const blockX = block.start % bitsPerRow * bitWidth + 1;\n const width = (block.end - block.start + 1) * bitWidth - paddingX;\n group.append(\"rect\").attr(\"x\", blockX).attr(\"y\", wordY).attr(\"width\", width).attr(\"height\", rowHeight).attr(\"class\", \"packetBlock\");\n group.append(\"text\").attr(\"x\", blockX + width / 2).attr(\"y\", wordY + rowHeight / 2).attr(\"class\", \"packetLabel\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").text(block.label);\n if (!showBits) {\n continue;\n }\n const isSingleBlock = block.end === block.start;\n const bitNumberY = wordY - 2;\n group.append(\"text\").attr(\"x\", blockX + (isSingleBlock ? width / 2 : 0)).attr(\"y\", bitNumberY).attr(\"class\", \"packetByte start\").attr(\"dominant-baseline\", \"auto\").attr(\"text-anchor\", isSingleBlock ? \"middle\" : \"start\").text(block.start);\n if (!isSingleBlock) {\n group.append(\"text\").attr(\"x\", blockX + width).attr(\"y\", bitNumberY).attr(\"class\", \"packetByte end\").attr(\"dominant-baseline\", \"auto\").attr(\"text-anchor\", \"end\").text(block.end);\n }\n }\n}, \"drawWord\");\nvar renderer = { draw };\n\n// src/diagrams/packet/styles.ts\nvar defaultPacketStyleOptions = {\n byteFontSize: \"10px\",\n startByteColor: \"black\",\n endByteColor: \"black\",\n labelColor: \"black\",\n labelFontSize: \"12px\",\n titleColor: \"black\",\n titleFontSize: \"14px\",\n blockStrokeColor: \"black\",\n blockStrokeWidth: \"1\",\n blockFillColor: \"#efefef\"\n};\nvar styles = /* @__PURE__ */ __name(({ packet } = {}) => {\n const options = cleanAndMerge(defaultPacketStyleOptions, packet);\n return `\n\t.packetByte {\n\t\tfont-size: ${options.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${options.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${options.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${options.labelColor};\n\t\tfont-size: ${options.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${options.titleColor};\n\t\tfont-size: ${options.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${options.blockStrokeColor};\n\t\tstroke-width: ${options.blockStrokeWidth};\n\t\tfill: ${options.blockFillColor};\n\t}\n\t`;\n}, \"styles\");\n\n// src/diagrams/packet/diagram.ts\nvar diagram = {\n parser,\n get db() {\n return new PacketDB();\n },\n renderer,\n styles\n};\nexport {\n diagram\n};\n"],"names":["DEFAULT_PACKET_CONFIG","defaultConfig_default","PacketDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","config","cleanAndMerge","getConfig","word","clear","__name","maxPacketSize","populate","ast","db","populateCommonDb","lastBit","row","bitsPerRow","start","end","bits","label","log","block","nextBlock","getNextFittingBlock","rowEnd","rowStart","parser","input","parse","draw","_text","id","_version","diagram2","rowHeight","paddingY","bitWidth","words","title","totalRowHeight","svgHeight","svgWidth","svg","selectSvgElement","configureSvgSize","packet","drawWord","rowNumber","paddingX","showBits","group","wordY","blockX","width","isSingleBlock","bitNumberY","renderer","defaultPacketStyleOptions","styles","options","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"diagram-S2PKOQOG-Cv1vwD4q.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/diagram-S2PKOQOG.mjs"],"sourcesContent":["import {\n selectSvgElement\n} from \"./chunk-EXTU4WIE.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n cleanAndMerge\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n configureSvgSize,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/packet/db.ts\nvar DEFAULT_PACKET_CONFIG = defaultConfig_default.packet;\nvar PacketDB = class {\n constructor() {\n this.packet = [];\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getAccDescription = getAccDescription;\n this.setAccDescription = setAccDescription;\n }\n static {\n __name(this, \"PacketDB\");\n }\n getConfig() {\n const config = cleanAndMerge({\n ...DEFAULT_PACKET_CONFIG,\n ...getConfig().packet\n });\n if (config.showBits) {\n config.paddingY += 10;\n }\n return config;\n }\n getPacket() {\n return this.packet;\n }\n pushWord(word) {\n if (word.length > 0) {\n this.packet.push(word);\n }\n }\n clear() {\n clear();\n this.packet = [];\n }\n};\n\n// src/diagrams/packet/parser.ts\nimport { parse } from \"@mermaid-js/parser\";\nvar maxPacketSize = 1e4;\nvar populate = /* @__PURE__ */ __name((ast, db) => {\n populateCommonDb(ast, db);\n let lastBit = -1;\n let word = [];\n let row = 1;\n const { bitsPerRow } = db.getConfig();\n for (let { start, end, bits, label } of ast.blocks) {\n if (start !== void 0 && end !== void 0 && end < start) {\n throw new Error(`Packet block ${start} - ${end} is invalid. End must be greater than start.`);\n }\n start ??= lastBit + 1;\n if (start !== lastBit + 1) {\n throw new Error(\n `Packet block ${start} - ${end ?? start} is not contiguous. It should start from ${lastBit + 1}.`\n );\n }\n if (bits === 0) {\n throw new Error(`Packet block ${start} is invalid. Cannot have a zero bit field.`);\n }\n end ??= start + (bits ?? 1) - 1;\n bits ??= end - start + 1;\n lastBit = end;\n log.debug(`Packet block ${start} - ${lastBit} with label ${label}`);\n while (word.length <= bitsPerRow + 1 && db.getPacket().length < maxPacketSize) {\n const [block, nextBlock] = getNextFittingBlock({ start, end, bits, label }, row, bitsPerRow);\n word.push(block);\n if (block.end + 1 === row * bitsPerRow) {\n db.pushWord(word);\n word = [];\n row++;\n }\n if (!nextBlock) {\n break;\n }\n ({ start, end, bits, label } = nextBlock);\n }\n }\n db.pushWord(word);\n}, \"populate\");\nvar getNextFittingBlock = /* @__PURE__ */ __name((block, row, bitsPerRow) => {\n if (block.start === void 0) {\n throw new Error(\"start should have been set during first phase\");\n }\n if (block.end === void 0) {\n throw new Error(\"end should have been set during first phase\");\n }\n if (block.start > block.end) {\n throw new Error(`Block start ${block.start} is greater than block end ${block.end}.`);\n }\n if (block.end + 1 <= row * bitsPerRow) {\n return [block, void 0];\n }\n const rowEnd = row * bitsPerRow - 1;\n const rowStart = row * bitsPerRow;\n return [\n {\n start: block.start,\n end: rowEnd,\n label: block.label,\n bits: rowEnd - block.start\n },\n {\n start: rowStart,\n end: block.end,\n label: block.label,\n bits: block.end - rowStart\n }\n ];\n}, \"getNextFittingBlock\");\nvar parser = {\n // @ts-expect-error - PacketDB is not assignable to DiagramDB\n parser: { yy: void 0 },\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"packet\", input);\n const db = parser.parser?.yy;\n if (!(db instanceof PacketDB)) {\n throw new Error(\n \"parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.\"\n );\n }\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\n\n// src/diagrams/packet/renderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {\n const db = diagram2.db;\n const config = db.getConfig();\n const { rowHeight, paddingY, bitWidth, bitsPerRow } = config;\n const words = db.getPacket();\n const title = db.getDiagramTitle();\n const totalRowHeight = rowHeight + paddingY;\n const svgHeight = totalRowHeight * (words.length + 1) - (title ? 0 : rowHeight);\n const svgWidth = bitWidth * bitsPerRow + 2;\n const svg = selectSvgElement(id);\n svg.attr(\"viewbox\", `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n for (const [word, packet] of words.entries()) {\n drawWord(svg, packet, word, config);\n }\n svg.append(\"text\").text(title).attr(\"x\", svgWidth / 2).attr(\"y\", svgHeight - totalRowHeight / 2).attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").attr(\"class\", \"packetTitle\");\n}, \"draw\");\nvar drawWord = /* @__PURE__ */ __name((svg, word, rowNumber, { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }) => {\n const group = svg.append(\"g\");\n const wordY = rowNumber * (rowHeight + paddingY) + paddingY;\n for (const block of word) {\n const blockX = block.start % bitsPerRow * bitWidth + 1;\n const width = (block.end - block.start + 1) * bitWidth - paddingX;\n group.append(\"rect\").attr(\"x\", blockX).attr(\"y\", wordY).attr(\"width\", width).attr(\"height\", rowHeight).attr(\"class\", \"packetBlock\");\n group.append(\"text\").attr(\"x\", blockX + width / 2).attr(\"y\", wordY + rowHeight / 2).attr(\"class\", \"packetLabel\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").text(block.label);\n if (!showBits) {\n continue;\n }\n const isSingleBlock = block.end === block.start;\n const bitNumberY = wordY - 2;\n group.append(\"text\").attr(\"x\", blockX + (isSingleBlock ? width / 2 : 0)).attr(\"y\", bitNumberY).attr(\"class\", \"packetByte start\").attr(\"dominant-baseline\", \"auto\").attr(\"text-anchor\", isSingleBlock ? \"middle\" : \"start\").text(block.start);\n if (!isSingleBlock) {\n group.append(\"text\").attr(\"x\", blockX + width).attr(\"y\", bitNumberY).attr(\"class\", \"packetByte end\").attr(\"dominant-baseline\", \"auto\").attr(\"text-anchor\", \"end\").text(block.end);\n }\n }\n}, \"drawWord\");\nvar renderer = { draw };\n\n// src/diagrams/packet/styles.ts\nvar defaultPacketStyleOptions = {\n byteFontSize: \"10px\",\n startByteColor: \"black\",\n endByteColor: \"black\",\n labelColor: \"black\",\n labelFontSize: \"12px\",\n titleColor: \"black\",\n titleFontSize: \"14px\",\n blockStrokeColor: \"black\",\n blockStrokeWidth: \"1\",\n blockFillColor: \"#efefef\"\n};\nvar styles = /* @__PURE__ */ __name(({ packet } = {}) => {\n const options = cleanAndMerge(defaultPacketStyleOptions, packet);\n return `\n\t.packetByte {\n\t\tfont-size: ${options.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${options.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${options.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${options.labelColor};\n\t\tfont-size: ${options.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${options.titleColor};\n\t\tfont-size: ${options.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${options.blockStrokeColor};\n\t\tstroke-width: ${options.blockStrokeWidth};\n\t\tfill: ${options.blockFillColor};\n\t}\n\t`;\n}, \"styles\");\n\n// src/diagrams/packet/diagram.ts\nvar diagram = {\n parser,\n get db() {\n return new PacketDB();\n },\n renderer,\n styles\n};\nexport {\n diagram\n};\n"],"names":["DEFAULT_PACKET_CONFIG","defaultConfig_default","PacketDB","_a","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","getAccDescription","setAccDescription","config","cleanAndMerge","getConfig","word","clear","__name","maxPacketSize","populate","ast","db","populateCommonDb","lastBit","row","bitsPerRow","start","end","bits","label","log","block","nextBlock","getNextFittingBlock","rowEnd","rowStart","parser","input","parse","draw","_text","id","_version","diagram2","rowHeight","paddingY","bitWidth","words","title","totalRowHeight","svgHeight","svgWidth","svg","selectSvgElement","configureSvgSize","packet","drawWord","rowNumber","paddingX","showBits","group","wordY","blockX","width","isSingleBlock","bitNumberY","renderer","defaultPacketStyleOptions","styles","options","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js b/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js similarity index 98% rename from massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js rename to massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js index 9cada262f..4dfc953fe 100644 --- a/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js +++ b/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js @@ -1,4 +1,4 @@ -import{g as Dt}from"./chunk-55IACEB6-BCQD3dNT.js";import{s as wt}from"./chunk-QN33PNHL-BF8yyMHO.js";import{_ as u,b as Vt,a as Lt,s as Mt,g as Bt,p as Ft,q as Yt,c as tt,l as D,y as Pt,x as zt,A as Gt,B as Kt,o as Zt,r as Ut,d as jt,u as Wt}from"./index-yx4Z55Qu.js";import{c as Qt}from"./channel-5fWG1b_w.js";var dt=(function(){var s=u(function(R,n,a,c){for(a=a||{},c=R.length;c--;a[R[c]]=n);return a},"o"),i=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],h=[1,10],d=[1,11],o=[1,12],l=[1,13],f=[1,20],_=[1,21],E=[1,22],V=[1,23],Z=[1,24],S=[1,19],et=[1,25],U=[1,26],T=[1,18],L=[1,33],st=[1,34],it=[1,35],rt=[1,36],nt=[1,37],pt=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],O=[1,42],A=[1,43],M=[1,52],B=[40,50,68,69],F=[1,63],Y=[1,61],N=[1,58],P=[1,62],z=[1,64],j=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],yt=[63,64,65,66,67],ft=[1,81],_t=[1,80],gt=[1,78],bt=[1,79],mt=[6,10,42,47],v=[6,10,13,41,42,47,48,49],W=[1,89],Q=[1,88],X=[1,87],G=[19,56],Et=[1,98],kt=[1,97],at=[19,56,58,60],ct={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:u(function(n,a,c,r,p,t,K){var e=t.length-1;switch(p){case 1:break;case 2:this.$=[];break;case 3:t[e-1].push(t[e]),this.$=t[e-1];break;case 4:case 5:this.$=t[e];break;case 6:case 7:this.$=[];break;case 8:r.addEntity(t[e-4]),r.addEntity(t[e-2]),r.addRelationship(t[e-4],t[e],t[e-2],t[e-3]);break;case 9:r.addEntity(t[e-8]),r.addEntity(t[e-4]),r.addRelationship(t[e-8],t[e],t[e-4],t[e-5]),r.setClass([t[e-8]],t[e-6]),r.setClass([t[e-4]],t[e-2]);break;case 10:r.addEntity(t[e-6]),r.addEntity(t[e-2]),r.addRelationship(t[e-6],t[e],t[e-2],t[e-3]),r.setClass([t[e-6]],t[e-4]);break;case 11:r.addEntity(t[e-6]),r.addEntity(t[e-4]),r.addRelationship(t[e-6],t[e],t[e-4],t[e-5]),r.setClass([t[e-4]],t[e-2]);break;case 12:r.addEntity(t[e-3]),r.addAttributes(t[e-3],t[e-1]);break;case 13:r.addEntity(t[e-5]),r.addAttributes(t[e-5],t[e-1]),r.setClass([t[e-5]],t[e-3]);break;case 14:r.addEntity(t[e-2]);break;case 15:r.addEntity(t[e-4]),r.setClass([t[e-4]],t[e-2]);break;case 16:r.addEntity(t[e]);break;case 17:r.addEntity(t[e-2]),r.setClass([t[e-2]],t[e]);break;case 18:r.addEntity(t[e-6],t[e-4]),r.addAttributes(t[e-6],t[e-1]);break;case 19:r.addEntity(t[e-8],t[e-6]),r.addAttributes(t[e-8],t[e-1]),r.setClass([t[e-8]],t[e-3]);break;case 20:r.addEntity(t[e-5],t[e-3]);break;case 21:r.addEntity(t[e-7],t[e-5]),r.setClass([t[e-7]],t[e-2]);break;case 22:r.addEntity(t[e-3],t[e-1]);break;case 23:r.addEntity(t[e-5],t[e-3]),r.setClass([t[e-5]],t[e]);break;case 24:case 25:this.$=t[e].trim(),r.setAccTitle(this.$);break;case 26:case 27:this.$=t[e].trim(),r.setAccDescription(this.$);break;case 32:r.setDirection("TB");break;case 33:r.setDirection("BT");break;case 34:r.setDirection("RL");break;case 35:r.setDirection("LR");break;case 36:this.$=t[e-3],r.addClass(t[e-2],t[e-1]);break;case 37:case 38:case 56:case 64:this.$=[t[e]];break;case 39:case 40:this.$=t[e-2].concat([t[e]]);break;case 41:this.$=t[e-2],r.setClass(t[e-1],t[e]);break;case 42:this.$=t[e-3],r.addCssStyles(t[e-2],t[e-1]);break;case 43:this.$=[t[e]];break;case 44:t[e-2].push(t[e]),this.$=t[e-2];break;case 46:this.$=t[e-1]+t[e];break;case 54:case 76:case 77:this.$=t[e].replace(/"/g,"");break;case 55:case 78:this.$=t[e];break;case 57:t[e].push(t[e-1]),this.$=t[e];break;case 58:this.$={type:t[e-1],name:t[e]};break;case 59:this.$={type:t[e-2],name:t[e-1],keys:t[e]};break;case 60:this.$={type:t[e-2],name:t[e-1],comment:t[e]};break;case 61:this.$={type:t[e-3],name:t[e-2],keys:t[e-1],comment:t[e]};break;case 62:case 63:case 66:this.$=t[e];break;case 65:t[e-2].push(t[e]),this.$=t[e-2];break;case 67:this.$=t[e].replace(/"/g,"");break;case 68:this.$={cardA:t[e],relType:t[e-1],cardB:t[e-2]};break;case 69:this.$=r.Cardinality.ZERO_OR_ONE;break;case 70:this.$=r.Cardinality.ZERO_OR_MORE;break;case 71:this.$=r.Cardinality.ONE_OR_MORE;break;case 72:this.$=r.Cardinality.ONLY_ONE;break;case 73:this.$=r.Cardinality.MD_PARENT;break;case 74:this.$=r.Identification.NON_IDENTIFYING;break;case 75:this.$=r.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},s(i,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:h,24:d,26:o,28:l,29:14,30:15,31:16,32:17,33:f,34:_,35:E,36:V,37:Z,40:S,43:et,44:U,50:T},s(i,[2,7],{1:[2,1]}),s(i,[2,3]),{9:27,11:9,22:h,24:d,26:o,28:l,29:14,30:15,31:16,32:17,33:f,34:_,35:E,36:V,37:Z,40:S,43:et,44:U,50:T},s(i,[2,5]),s(i,[2,6]),s(i,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:L,64:st,65:it,66:rt,67:nt}),{23:[1,38]},{25:[1,39]},{27:[1,40]},s(i,[2,27]),s(i,[2,28]),s(i,[2,29]),s(i,[2,30]),s(i,[2,31]),s(pt,[2,54]),s(pt,[2,55]),s(i,[2,32]),s(i,[2,33]),s(i,[2,34]),s(i,[2,35]),{16:41,40:O,41:A},{16:44,40:O,41:A},{16:45,40:O,41:A},s(i,[2,4]),{11:46,40:S,50:T},{16:47,40:O,41:A},{18:48,19:[1,49],51:50,52:51,56:M},{11:53,40:S,50:T},{62:54,68:[1,55],69:[1,56]},s(B,[2,69]),s(B,[2,70]),s(B,[2,71]),s(B,[2,72]),s(B,[2,73]),s(i,[2,24]),s(i,[2,25]),s(i,[2,26]),{13:F,38:57,41:Y,42:N,45:59,46:60,48:P,49:z},s(j,[2,37]),s(j,[2,38]),{16:65,40:O,41:A,42:N},{13:F,38:66,41:Y,42:N,45:59,46:60,48:P,49:z},{13:[1,67],15:[1,68]},s(i,[2,17],{61:32,12:69,17:[1,70],42:N,63:L,64:st,65:it,66:rt,67:nt}),{19:[1,71]},s(i,[2,14]),{18:72,19:[2,56],51:50,52:51,56:M},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:L,64:st,65:it,66:rt,67:nt},s(yt,[2,74]),s(yt,[2,75]),{6:ft,10:_t,39:77,42:gt,47:bt},{40:[1,82],41:[1,83]},s(mt,[2,43],{46:84,13:F,41:Y,48:P,49:z}),s(v,[2,45]),s(v,[2,50]),s(v,[2,51]),s(v,[2,52]),s(v,[2,53]),s(i,[2,41],{42:N}),{6:ft,10:_t,39:85,42:gt,47:bt},{14:86,40:W,50:Q,70:X},{16:90,40:O,41:A},{11:91,40:S,50:T},{18:92,19:[1,93],51:50,52:51,56:M},s(i,[2,12]),{19:[2,57]},s(G,[2,58],{54:94,55:95,57:96,59:Et,60:kt}),s([19,56,59,60],[2,63]),s(i,[2,22],{15:[1,100],17:[1,99]}),s([40,50],[2,68]),s(i,[2,36]),{13:F,41:Y,45:101,46:60,48:P,49:z},s(i,[2,47]),s(i,[2,48]),s(i,[2,49]),s(j,[2,39]),s(j,[2,40]),s(v,[2,46]),s(i,[2,42]),s(i,[2,8]),s(i,[2,76]),s(i,[2,77]),s(i,[2,78]),{13:[1,102],42:N},{13:[1,104],15:[1,103]},{19:[1,105]},s(i,[2,15]),s(G,[2,59],{55:106,58:[1,107],60:kt}),s(G,[2,60]),s(at,[2,64]),s(G,[2,67]),s(at,[2,66]),{18:108,19:[1,109],51:50,52:51,56:M},{16:110,40:O,41:A},s(mt,[2,44],{46:84,13:F,41:Y,48:P,49:z}),{14:111,40:W,50:Q,70:X},{16:112,40:O,41:A},{14:113,40:W,50:Q,70:X},s(i,[2,13]),s(G,[2,61]),{57:114,59:Et},{19:[1,115]},s(i,[2,20]),s(i,[2,23],{17:[1,116],42:N}),s(i,[2,11]),{13:[1,117],42:N},s(i,[2,10]),s(at,[2,65]),s(i,[2,18]),{18:118,19:[1,119],51:50,52:51,56:M},{14:120,40:W,50:Q,70:X},{19:[1,121]},s(i,[2,21]),s(i,[2,9]),s(i,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:u(function(n,a){if(a.recoverable)this.trace(n);else{var c=new Error(n);throw c.hash=a,c}},"parseError"),parse:u(function(n){var a=this,c=[0],r=[],p=[null],t=[],K=this.table,e="",H=0,St=0,xt=2,Tt=1,It=t.slice.call(arguments,1),y=Object.create(this.lexer),x={yy:{}};for(var lt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,lt)&&(x.yy[lt]=this.yy[lt]);y.setInput(n,x.yy),x.yy.lexer=y,x.yy.parser=this,typeof y.yylloc>"u"&&(y.yylloc={});var ot=y.yylloc;t.push(ot);var vt=y.options&&y.options.ranges;typeof x.yy.parseError=="function"?this.parseError=x.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ct(b){c.length=c.length-2*b,p.length=p.length-b,t.length=t.length-b}u(Ct,"popStack");function Ot(){var b;return b=r.pop()||y.lex()||Tt,typeof b!="number"&&(b instanceof Array&&(r=b,b=r.pop()),b=a.symbols_[b]||b),b}u(Ot,"lex");for(var g,I,m,ht,C={},J,k,At,$;;){if(I=c[c.length-1],this.defaultActions[I]?m=this.defaultActions[I]:((g===null||typeof g>"u")&&(g=Ot()),m=K[I]&&K[I][g]),typeof m>"u"||!m.length||!m[0]){var ut="";$=[];for(J in K[I])this.terminals_[J]&&J>xt&&$.push("'"+this.terminals_[J]+"'");y.showPosition?ut="Parse error on line "+(H+1)+`: +import{g as Dt}from"./chunk-55IACEB6-Do1tLUXI.js";import{s as wt}from"./chunk-QN33PNHL-Bl50RaE-.js";import{_ as u,b as Vt,a as Lt,s as Mt,g as Bt,p as Ft,q as Yt,c as tt,l as D,y as Pt,x as zt,A as Gt,B as Kt,o as Zt,r as Ut,d as jt,u as Wt}from"./index-DbSnkTMx.js";import{c as Qt}from"./channel-B_f67D__.js";var dt=(function(){var s=u(function(R,n,a,c){for(a=a||{},c=R.length;c--;a[R[c]]=n);return a},"o"),i=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],h=[1,10],d=[1,11],o=[1,12],l=[1,13],f=[1,20],_=[1,21],E=[1,22],V=[1,23],Z=[1,24],S=[1,19],et=[1,25],U=[1,26],T=[1,18],L=[1,33],st=[1,34],it=[1,35],rt=[1,36],nt=[1,37],pt=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],O=[1,42],A=[1,43],M=[1,52],B=[40,50,68,69],F=[1,63],Y=[1,61],N=[1,58],P=[1,62],z=[1,64],j=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],yt=[63,64,65,66,67],ft=[1,81],_t=[1,80],gt=[1,78],bt=[1,79],mt=[6,10,42,47],v=[6,10,13,41,42,47,48,49],W=[1,89],Q=[1,88],X=[1,87],G=[19,56],Et=[1,98],kt=[1,97],at=[19,56,58,60],ct={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:u(function(n,a,c,r,p,t,K){var e=t.length-1;switch(p){case 1:break;case 2:this.$=[];break;case 3:t[e-1].push(t[e]),this.$=t[e-1];break;case 4:case 5:this.$=t[e];break;case 6:case 7:this.$=[];break;case 8:r.addEntity(t[e-4]),r.addEntity(t[e-2]),r.addRelationship(t[e-4],t[e],t[e-2],t[e-3]);break;case 9:r.addEntity(t[e-8]),r.addEntity(t[e-4]),r.addRelationship(t[e-8],t[e],t[e-4],t[e-5]),r.setClass([t[e-8]],t[e-6]),r.setClass([t[e-4]],t[e-2]);break;case 10:r.addEntity(t[e-6]),r.addEntity(t[e-2]),r.addRelationship(t[e-6],t[e],t[e-2],t[e-3]),r.setClass([t[e-6]],t[e-4]);break;case 11:r.addEntity(t[e-6]),r.addEntity(t[e-4]),r.addRelationship(t[e-6],t[e],t[e-4],t[e-5]),r.setClass([t[e-4]],t[e-2]);break;case 12:r.addEntity(t[e-3]),r.addAttributes(t[e-3],t[e-1]);break;case 13:r.addEntity(t[e-5]),r.addAttributes(t[e-5],t[e-1]),r.setClass([t[e-5]],t[e-3]);break;case 14:r.addEntity(t[e-2]);break;case 15:r.addEntity(t[e-4]),r.setClass([t[e-4]],t[e-2]);break;case 16:r.addEntity(t[e]);break;case 17:r.addEntity(t[e-2]),r.setClass([t[e-2]],t[e]);break;case 18:r.addEntity(t[e-6],t[e-4]),r.addAttributes(t[e-6],t[e-1]);break;case 19:r.addEntity(t[e-8],t[e-6]),r.addAttributes(t[e-8],t[e-1]),r.setClass([t[e-8]],t[e-3]);break;case 20:r.addEntity(t[e-5],t[e-3]);break;case 21:r.addEntity(t[e-7],t[e-5]),r.setClass([t[e-7]],t[e-2]);break;case 22:r.addEntity(t[e-3],t[e-1]);break;case 23:r.addEntity(t[e-5],t[e-3]),r.setClass([t[e-5]],t[e]);break;case 24:case 25:this.$=t[e].trim(),r.setAccTitle(this.$);break;case 26:case 27:this.$=t[e].trim(),r.setAccDescription(this.$);break;case 32:r.setDirection("TB");break;case 33:r.setDirection("BT");break;case 34:r.setDirection("RL");break;case 35:r.setDirection("LR");break;case 36:this.$=t[e-3],r.addClass(t[e-2],t[e-1]);break;case 37:case 38:case 56:case 64:this.$=[t[e]];break;case 39:case 40:this.$=t[e-2].concat([t[e]]);break;case 41:this.$=t[e-2],r.setClass(t[e-1],t[e]);break;case 42:this.$=t[e-3],r.addCssStyles(t[e-2],t[e-1]);break;case 43:this.$=[t[e]];break;case 44:t[e-2].push(t[e]),this.$=t[e-2];break;case 46:this.$=t[e-1]+t[e];break;case 54:case 76:case 77:this.$=t[e].replace(/"/g,"");break;case 55:case 78:this.$=t[e];break;case 57:t[e].push(t[e-1]),this.$=t[e];break;case 58:this.$={type:t[e-1],name:t[e]};break;case 59:this.$={type:t[e-2],name:t[e-1],keys:t[e]};break;case 60:this.$={type:t[e-2],name:t[e-1],comment:t[e]};break;case 61:this.$={type:t[e-3],name:t[e-2],keys:t[e-1],comment:t[e]};break;case 62:case 63:case 66:this.$=t[e];break;case 65:t[e-2].push(t[e]),this.$=t[e-2];break;case 67:this.$=t[e].replace(/"/g,"");break;case 68:this.$={cardA:t[e],relType:t[e-1],cardB:t[e-2]};break;case 69:this.$=r.Cardinality.ZERO_OR_ONE;break;case 70:this.$=r.Cardinality.ZERO_OR_MORE;break;case 71:this.$=r.Cardinality.ONE_OR_MORE;break;case 72:this.$=r.Cardinality.ONLY_ONE;break;case 73:this.$=r.Cardinality.MD_PARENT;break;case 74:this.$=r.Identification.NON_IDENTIFYING;break;case 75:this.$=r.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},s(i,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:h,24:d,26:o,28:l,29:14,30:15,31:16,32:17,33:f,34:_,35:E,36:V,37:Z,40:S,43:et,44:U,50:T},s(i,[2,7],{1:[2,1]}),s(i,[2,3]),{9:27,11:9,22:h,24:d,26:o,28:l,29:14,30:15,31:16,32:17,33:f,34:_,35:E,36:V,37:Z,40:S,43:et,44:U,50:T},s(i,[2,5]),s(i,[2,6]),s(i,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:L,64:st,65:it,66:rt,67:nt}),{23:[1,38]},{25:[1,39]},{27:[1,40]},s(i,[2,27]),s(i,[2,28]),s(i,[2,29]),s(i,[2,30]),s(i,[2,31]),s(pt,[2,54]),s(pt,[2,55]),s(i,[2,32]),s(i,[2,33]),s(i,[2,34]),s(i,[2,35]),{16:41,40:O,41:A},{16:44,40:O,41:A},{16:45,40:O,41:A},s(i,[2,4]),{11:46,40:S,50:T},{16:47,40:O,41:A},{18:48,19:[1,49],51:50,52:51,56:M},{11:53,40:S,50:T},{62:54,68:[1,55],69:[1,56]},s(B,[2,69]),s(B,[2,70]),s(B,[2,71]),s(B,[2,72]),s(B,[2,73]),s(i,[2,24]),s(i,[2,25]),s(i,[2,26]),{13:F,38:57,41:Y,42:N,45:59,46:60,48:P,49:z},s(j,[2,37]),s(j,[2,38]),{16:65,40:O,41:A,42:N},{13:F,38:66,41:Y,42:N,45:59,46:60,48:P,49:z},{13:[1,67],15:[1,68]},s(i,[2,17],{61:32,12:69,17:[1,70],42:N,63:L,64:st,65:it,66:rt,67:nt}),{19:[1,71]},s(i,[2,14]),{18:72,19:[2,56],51:50,52:51,56:M},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:L,64:st,65:it,66:rt,67:nt},s(yt,[2,74]),s(yt,[2,75]),{6:ft,10:_t,39:77,42:gt,47:bt},{40:[1,82],41:[1,83]},s(mt,[2,43],{46:84,13:F,41:Y,48:P,49:z}),s(v,[2,45]),s(v,[2,50]),s(v,[2,51]),s(v,[2,52]),s(v,[2,53]),s(i,[2,41],{42:N}),{6:ft,10:_t,39:85,42:gt,47:bt},{14:86,40:W,50:Q,70:X},{16:90,40:O,41:A},{11:91,40:S,50:T},{18:92,19:[1,93],51:50,52:51,56:M},s(i,[2,12]),{19:[2,57]},s(G,[2,58],{54:94,55:95,57:96,59:Et,60:kt}),s([19,56,59,60],[2,63]),s(i,[2,22],{15:[1,100],17:[1,99]}),s([40,50],[2,68]),s(i,[2,36]),{13:F,41:Y,45:101,46:60,48:P,49:z},s(i,[2,47]),s(i,[2,48]),s(i,[2,49]),s(j,[2,39]),s(j,[2,40]),s(v,[2,46]),s(i,[2,42]),s(i,[2,8]),s(i,[2,76]),s(i,[2,77]),s(i,[2,78]),{13:[1,102],42:N},{13:[1,104],15:[1,103]},{19:[1,105]},s(i,[2,15]),s(G,[2,59],{55:106,58:[1,107],60:kt}),s(G,[2,60]),s(at,[2,64]),s(G,[2,67]),s(at,[2,66]),{18:108,19:[1,109],51:50,52:51,56:M},{16:110,40:O,41:A},s(mt,[2,44],{46:84,13:F,41:Y,48:P,49:z}),{14:111,40:W,50:Q,70:X},{16:112,40:O,41:A},{14:113,40:W,50:Q,70:X},s(i,[2,13]),s(G,[2,61]),{57:114,59:Et},{19:[1,115]},s(i,[2,20]),s(i,[2,23],{17:[1,116],42:N}),s(i,[2,11]),{13:[1,117],42:N},s(i,[2,10]),s(at,[2,65]),s(i,[2,18]),{18:118,19:[1,119],51:50,52:51,56:M},{14:120,40:W,50:Q,70:X},{19:[1,121]},s(i,[2,21]),s(i,[2,9]),s(i,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:u(function(n,a){if(a.recoverable)this.trace(n);else{var c=new Error(n);throw c.hash=a,c}},"parseError"),parse:u(function(n){var a=this,c=[0],r=[],p=[null],t=[],K=this.table,e="",H=0,St=0,xt=2,Tt=1,It=t.slice.call(arguments,1),y=Object.create(this.lexer),x={yy:{}};for(var lt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,lt)&&(x.yy[lt]=this.yy[lt]);y.setInput(n,x.yy),x.yy.lexer=y,x.yy.parser=this,typeof y.yylloc>"u"&&(y.yylloc={});var ot=y.yylloc;t.push(ot);var vt=y.options&&y.options.ranges;typeof x.yy.parseError=="function"?this.parseError=x.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ct(b){c.length=c.length-2*b,p.length=p.length-b,t.length=t.length-b}u(Ct,"popStack");function Ot(){var b;return b=r.pop()||y.lex()||Tt,typeof b!="number"&&(b instanceof Array&&(r=b,b=r.pop()),b=a.symbols_[b]||b),b}u(Ot,"lex");for(var g,I,m,ht,C={},J,k,At,$;;){if(I=c[c.length-1],this.defaultActions[I]?m=this.defaultActions[I]:((g===null||typeof g>"u")&&(g=Ot()),m=K[I]&&K[I][g]),typeof m>"u"||!m.length||!m[0]){var ut="";$=[];for(J in K[I])this.terminals_[J]&&J>xt&&$.push("'"+this.terminals_[J]+"'");y.showPosition?ut="Parse error on line "+(H+1)+`: `+y.showPosition()+` Expecting `+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":ut="Parse error on line "+(H+1)+": Unexpected "+(g==Tt?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(ut,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:ot,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+I+", token: "+g);switch(m[0]){case 1:c.push(g),p.push(y.yytext),t.push(y.yylloc),c.push(m[1]),g=null,St=y.yyleng,e=y.yytext,H=y.yylineno,ot=y.yylloc;break;case 2:if(k=this.productions_[m[1]][1],C.$=p[p.length-k],C._$={first_line:t[t.length-(k||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(k||1)].first_column,last_column:t[t.length-1].last_column},vt&&(C._$.range=[t[t.length-(k||1)].range[0],t[t.length-1].range[1]]),ht=this.performAction.apply(C,[e,St,H,x.yy,m[1],p,t].concat(It)),typeof ht<"u")return ht;k&&(c=c.slice(0,-1*k*2),p=p.slice(0,-1*k),t=t.slice(0,-1*k)),c.push(this.productions_[m[1]][0]),p.push(C.$),t.push(C._$),At=K[c[c.length-2]][c[c.length-1]],c.push(At);break;case 3:return!0}}return!0},"parse")},Rt=(function(){var R={EOF:1,parseError:u(function(a,c){if(this.yy.parser)this.yy.parser.parseError(a,c);else throw new Error(a)},"parseError"),setInput:u(function(n,a){return this.yy=a||this.yy||{},this._input=n,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:u(function(){var n=this._input[0];this.yytext+=n,this.yyleng++,this.offset++,this.match+=n,this.matched+=n;var a=n.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),n},"input"),unput:u(function(n){var a=n.length,c=n.split(/(?:\r\n?|\n)/g);this._input=n+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===r.length?this.yylloc.first_column:0)+r[r.length-c.length].length-c[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:u(function(){return this._more=!0,this},"more"),reject:u(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:u(function(n){this.unput(this.match.slice(n))},"less"),pastInput:u(function(){var n=this.matched.substr(0,this.matched.length-this.match.length);return(n.length>20?"...":"")+n.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:u(function(){var n=this.match;return n.length<20&&(n+=this._input.substr(0,20-n.length)),(n.substr(0,20)+(n.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:u(function(){var n=this.pastInput(),a=new Array(n.length+1).join("-");return n+this.upcomingInput()+` @@ -58,4 +58,4 @@ Expecting `+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":ut="Parse error o stroke-width: 1; } `,"getStyles"),te=$t,ne={parser:Xt,get db(){return new qt},renderer:Nt,styles:te};export{ne as diagram}; -//# sourceMappingURL=erDiagram-Q2GNP2WA-CjHoERSg.js.map +//# sourceMappingURL=erDiagram-Q2GNP2WA-BhRn-28Q.js.map diff --git a/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js.map b/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js.map similarity index 99% rename from massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js.map rename to massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js.map index 32cdb0af8..beecbe5a5 100644 --- a/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-CjHoERSg.js.map +++ b/massgen/frontend/web/static/assets/erDiagram-Q2GNP2WA-BhRn-28Q.js.map @@ -1 +1 @@ -{"version":3,"file":"erDiagram-Q2GNP2WA-CjHoERSg.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs"],"sourcesContent":["import {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __export,\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/er/parser/erDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [6, 8, 10, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 20], $V6 = [1, 21], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 19], $Vb = [1, 25], $Vc = [1, 26], $Vd = [1, 18], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [6, 8, 10, 13, 15, 17, 20, 21, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50, 63, 64, 65, 66, 67], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 52], $Vn = [40, 50, 68, 69], $Vo = [1, 63], $Vp = [1, 61], $Vq = [1, 58], $Vr = [1, 62], $Vs = [1, 64], $Vt = [6, 8, 10, 13, 17, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 63, 64, 65, 66, 67], $Vu = [63, 64, 65, 66, 67], $Vv = [1, 81], $Vw = [1, 80], $Vx = [1, 78], $Vy = [1, 79], $Vz = [6, 10, 42, 47], $VA = [6, 10, 13, 41, 42, 47, 48, 49], $VB = [1, 89], $VC = [1, 88], $VD = [1, 87], $VE = [19, 56], $VF = [1, 98], $VG = [1, 97], $VH = [19, 56, 58, 60];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"ER_DIAGRAM\": 4, \"document\": 5, \"EOF\": 6, \"line\": 7, \"SPACE\": 8, \"statement\": 9, \"NEWLINE\": 10, \"entityName\": 11, \"relSpec\": 12, \"COLON\": 13, \"role\": 14, \"STYLE_SEPARATOR\": 15, \"idList\": 16, \"BLOCK_START\": 17, \"attributes\": 18, \"BLOCK_STOP\": 19, \"SQS\": 20, \"SQE\": 21, \"title\": 22, \"title_value\": 23, \"acc_title\": 24, \"acc_title_value\": 25, \"acc_descr\": 26, \"acc_descr_value\": 27, \"acc_descr_multiline_value\": 28, \"direction\": 29, \"classDefStatement\": 30, \"classStatement\": 31, \"styleStatement\": 32, \"direction_tb\": 33, \"direction_bt\": 34, \"direction_rl\": 35, \"direction_lr\": 36, \"CLASSDEF\": 37, \"stylesOpt\": 38, \"separator\": 39, \"UNICODE_TEXT\": 40, \"STYLE_TEXT\": 41, \"COMMA\": 42, \"CLASS\": 43, \"STYLE\": 44, \"style\": 45, \"styleComponent\": 46, \"SEMI\": 47, \"NUM\": 48, \"BRKT\": 49, \"ENTITY_NAME\": 50, \"attribute\": 51, \"attributeType\": 52, \"attributeName\": 53, \"attributeKeyTypeList\": 54, \"attributeComment\": 55, \"ATTRIBUTE_WORD\": 56, \"attributeKeyType\": 57, \",\": 58, \"ATTRIBUTE_KEY\": 59, \"COMMENT\": 60, \"cardinality\": 61, \"relType\": 62, \"ZERO_OR_ONE\": 63, \"ZERO_OR_MORE\": 64, \"ONE_OR_MORE\": 65, \"ONLY_ONE\": 66, \"MD_PARENT\": 67, \"NON_IDENTIFYING\": 68, \"IDENTIFYING\": 69, \"WORD\": 70, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"ER_DIAGRAM\", 6: \"EOF\", 8: \"SPACE\", 10: \"NEWLINE\", 13: \"COLON\", 15: \"STYLE_SEPARATOR\", 17: \"BLOCK_START\", 19: \"BLOCK_STOP\", 20: \"SQS\", 21: \"SQE\", 22: \"title\", 23: \"title_value\", 24: \"acc_title\", 25: \"acc_title_value\", 26: \"acc_descr\", 27: \"acc_descr_value\", 28: \"acc_descr_multiline_value\", 33: \"direction_tb\", 34: \"direction_bt\", 35: \"direction_rl\", 36: \"direction_lr\", 37: \"CLASSDEF\", 40: \"UNICODE_TEXT\", 41: \"STYLE_TEXT\", 42: \"COMMA\", 43: \"CLASS\", 44: \"STYLE\", 47: \"SEMI\", 48: \"NUM\", 49: \"BRKT\", 50: \"ENTITY_NAME\", 56: \"ATTRIBUTE_WORD\", 58: \",\", 59: \"ATTRIBUTE_KEY\", 60: \"COMMENT\", 63: \"ZERO_OR_ONE\", 64: \"ZERO_OR_MORE\", 65: \"ONE_OR_MORE\", 66: \"ONLY_ONE\", 67: \"MD_PARENT\", 68: \"NON_IDENTIFYING\", 69: \"IDENTIFYING\", 70: \"WORD\" },\n productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 9], [9, 7], [9, 7], [9, 4], [9, 6], [9, 3], [9, 5], [9, 1], [9, 3], [9, 7], [9, 9], [9, 6], [9, 8], [9, 4], [9, 6], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [29, 1], [29, 1], [29, 1], [29, 1], [30, 4], [16, 1], [16, 1], [16, 3], [16, 3], [31, 3], [32, 4], [38, 1], [38, 3], [45, 1], [45, 2], [39, 1], [39, 1], [39, 1], [46, 1], [46, 1], [46, 1], [46, 1], [11, 1], [11, 1], [18, 1], [18, 2], [51, 2], [51, 3], [51, 3], [51, 4], [52, 1], [53, 1], [54, 1], [54, 3], [57, 1], [55, 1], [12, 3], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [62, 1], [62, 1], [14, 1], [14, 1], [14, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n break;\n case 2:\n this.$ = [];\n break;\n case 3:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n case 7:\n this.$ = [];\n break;\n case 8:\n yy.addEntity($$[$0 - 4]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n break;\n case 9:\n yy.addEntity($$[$0 - 8]);\n yy.addEntity($$[$0 - 4]);\n yy.addRelationship($$[$0 - 8], $$[$0], $$[$0 - 4], $$[$0 - 5]);\n yy.setClass([$$[$0 - 8]], $$[$0 - 6]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 10:\n yy.addEntity($$[$0 - 6]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n yy.setClass([$$[$0 - 6]], $$[$0 - 4]);\n break;\n case 11:\n yy.addEntity($$[$0 - 6]);\n yy.addEntity($$[$0 - 4]);\n yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 5]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 12:\n yy.addEntity($$[$0 - 3]);\n yy.addAttributes($$[$0 - 3], $$[$0 - 1]);\n break;\n case 13:\n yy.addEntity($$[$0 - 5]);\n yy.addAttributes($$[$0 - 5], $$[$0 - 1]);\n yy.setClass([$$[$0 - 5]], $$[$0 - 3]);\n break;\n case 14:\n yy.addEntity($$[$0 - 2]);\n break;\n case 15:\n yy.addEntity($$[$0 - 4]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 16:\n yy.addEntity($$[$0]);\n break;\n case 17:\n yy.addEntity($$[$0 - 2]);\n yy.setClass([$$[$0 - 2]], $$[$0]);\n break;\n case 18:\n yy.addEntity($$[$0 - 6], $$[$0 - 4]);\n yy.addAttributes($$[$0 - 6], $$[$0 - 1]);\n break;\n case 19:\n yy.addEntity($$[$0 - 8], $$[$0 - 6]);\n yy.addAttributes($$[$0 - 8], $$[$0 - 1]);\n yy.setClass([$$[$0 - 8]], $$[$0 - 3]);\n break;\n case 20:\n yy.addEntity($$[$0 - 5], $$[$0 - 3]);\n break;\n case 21:\n yy.addEntity($$[$0 - 7], $$[$0 - 5]);\n yy.setClass([$$[$0 - 7]], $$[$0 - 2]);\n break;\n case 22:\n yy.addEntity($$[$0 - 3], $$[$0 - 1]);\n break;\n case 23:\n yy.addEntity($$[$0 - 5], $$[$0 - 3]);\n yy.setClass([$$[$0 - 5]], $$[$0]);\n break;\n case 24:\n case 25:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 26:\n case 27:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 32:\n yy.setDirection(\"TB\");\n break;\n case 33:\n yy.setDirection(\"BT\");\n break;\n case 34:\n yy.setDirection(\"RL\");\n break;\n case 35:\n yy.setDirection(\"LR\");\n break;\n case 36:\n this.$ = $$[$0 - 3];\n yy.addClass($$[$0 - 2], $$[$0 - 1]);\n break;\n case 37:\n case 38:\n case 56:\n case 64:\n this.$ = [$$[$0]];\n break;\n case 39:\n case 40:\n this.$ = $$[$0 - 2].concat([$$[$0]]);\n break;\n case 41:\n this.$ = $$[$0 - 2];\n yy.setClass($$[$0 - 1], $$[$0]);\n break;\n case 42:\n ;\n this.$ = $$[$0 - 3];\n yy.addCssStyles($$[$0 - 2], $$[$0 - 1]);\n break;\n case 43:\n this.$ = [$$[$0]];\n break;\n case 44:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 46:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 54:\n case 76:\n case 77:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 55:\n case 78:\n this.$ = $$[$0];\n break;\n case 57:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 58:\n this.$ = { type: $$[$0 - 1], name: $$[$0] };\n break;\n case 59:\n this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], keys: $$[$0] };\n break;\n case 60:\n this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], comment: $$[$0] };\n break;\n case 61:\n this.$ = { type: $$[$0 - 3], name: $$[$0 - 2], keys: $$[$0 - 1], comment: $$[$0] };\n break;\n case 62:\n case 63:\n case 66:\n this.$ = $$[$0];\n break;\n case 65:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 67:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 68:\n this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };\n break;\n case 69:\n this.$ = yy.Cardinality.ZERO_OR_ONE;\n break;\n case 70:\n this.$ = yy.Cardinality.ZERO_OR_MORE;\n break;\n case 71:\n this.$ = yy.Cardinality.ONE_OR_MORE;\n break;\n case 72:\n this.$ = yy.Cardinality.ONLY_ONE;\n break;\n case 73:\n this.$ = yy.Cardinality.MD_PARENT;\n break;\n case 74:\n this.$ = yy.Identification.NON_IDENTIFYING;\n break;\n case 75:\n this.$ = yy.Identification.IDENTIFYING;\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 27, 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 16], { 12: 28, 61: 32, 15: [1, 29], 17: [1, 30], 20: [1, 31], 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 23: [1, 38] }, { 25: [1, 39] }, { 27: [1, 40] }, o($V0, [2, 27]), o($V0, [2, 28]), o($V0, [2, 29]), o($V0, [2, 30]), o($V0, [2, 31]), o($Vj, [2, 54]), o($Vj, [2, 55]), o($V0, [2, 32]), o($V0, [2, 33]), o($V0, [2, 34]), o($V0, [2, 35]), { 16: 41, 40: $Vk, 41: $Vl }, { 16: 44, 40: $Vk, 41: $Vl }, { 16: 45, 40: $Vk, 41: $Vl }, o($V0, [2, 4]), { 11: 46, 40: $Va, 50: $Vd }, { 16: 47, 40: $Vk, 41: $Vl }, { 18: 48, 19: [1, 49], 51: 50, 52: 51, 56: $Vm }, { 11: 53, 40: $Va, 50: $Vd }, { 62: 54, 68: [1, 55], 69: [1, 56] }, o($Vn, [2, 69]), o($Vn, [2, 70]), o($Vn, [2, 71]), o($Vn, [2, 72]), o($Vn, [2, 73]), o($V0, [2, 24]), o($V0, [2, 25]), o($V0, [2, 26]), { 13: $Vo, 38: 57, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, o($Vt, [2, 37]), o($Vt, [2, 38]), { 16: 65, 40: $Vk, 41: $Vl, 42: $Vq }, { 13: $Vo, 38: 66, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, { 13: [1, 67], 15: [1, 68] }, o($V0, [2, 17], { 61: 32, 12: 69, 17: [1, 70], 42: $Vq, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 19: [1, 71] }, o($V0, [2, 14]), { 18: 72, 19: [2, 56], 51: 50, 52: 51, 56: $Vm }, { 53: 73, 56: [1, 74] }, { 56: [2, 62] }, { 21: [1, 75] }, { 61: 76, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }, o($Vu, [2, 74]), o($Vu, [2, 75]), { 6: $Vv, 10: $Vw, 39: 77, 42: $Vx, 47: $Vy }, { 40: [1, 82], 41: [1, 83] }, o($Vz, [2, 43], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), o($VA, [2, 45]), o($VA, [2, 50]), o($VA, [2, 51]), o($VA, [2, 52]), o($VA, [2, 53]), o($V0, [2, 41], { 42: $Vq }), { 6: $Vv, 10: $Vw, 39: 85, 42: $Vx, 47: $Vy }, { 14: 86, 40: $VB, 50: $VC, 70: $VD }, { 16: 90, 40: $Vk, 41: $Vl }, { 11: 91, 40: $Va, 50: $Vd }, { 18: 92, 19: [1, 93], 51: 50, 52: 51, 56: $Vm }, o($V0, [2, 12]), { 19: [2, 57] }, o($VE, [2, 58], { 54: 94, 55: 95, 57: 96, 59: $VF, 60: $VG }), o([19, 56, 59, 60], [2, 63]), o($V0, [2, 22], { 15: [1, 100], 17: [1, 99] }), o([40, 50], [2, 68]), o($V0, [2, 36]), { 13: $Vo, 41: $Vp, 45: 101, 46: 60, 48: $Vr, 49: $Vs }, o($V0, [2, 47]), o($V0, [2, 48]), o($V0, [2, 49]), o($Vt, [2, 39]), o($Vt, [2, 40]), o($VA, [2, 46]), o($V0, [2, 42]), o($V0, [2, 8]), o($V0, [2, 76]), o($V0, [2, 77]), o($V0, [2, 78]), { 13: [1, 102], 42: $Vq }, { 13: [1, 104], 15: [1, 103] }, { 19: [1, 105] }, o($V0, [2, 15]), o($VE, [2, 59], { 55: 106, 58: [1, 107], 60: $VG }), o($VE, [2, 60]), o($VH, [2, 64]), o($VE, [2, 67]), o($VH, [2, 66]), { 18: 108, 19: [1, 109], 51: 50, 52: 51, 56: $Vm }, { 16: 110, 40: $Vk, 41: $Vl }, o($Vz, [2, 44], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), { 14: 111, 40: $VB, 50: $VC, 70: $VD }, { 16: 112, 40: $Vk, 41: $Vl }, { 14: 113, 40: $VB, 50: $VC, 70: $VD }, o($V0, [2, 13]), o($VE, [2, 61]), { 57: 114, 59: $VF }, { 19: [1, 115] }, o($V0, [2, 20]), o($V0, [2, 23], { 17: [1, 116], 42: $Vq }), o($V0, [2, 11]), { 13: [1, 117], 42: $Vq }, o($V0, [2, 10]), o($VH, [2, 65]), o($V0, [2, 18]), { 18: 118, 19: [1, 119], 51: 50, 52: 51, 56: $Vm }, { 14: 120, 40: $VB, 50: $VC, 70: $VD }, { 19: [1, 121] }, o($V0, [2, 21]), o($V0, [2, 9]), o($V0, [2, 19])],\n defaultActions: { 52: [2, 62], 72: [2, 57] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 24;\n break;\n case 1:\n this.popState();\n return \"acc_title_value\";\n break;\n case 2:\n this.begin(\"acc_descr\");\n return 26;\n break;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n break;\n case 7:\n return 33;\n break;\n case 8:\n return 34;\n break;\n case 9:\n return 35;\n break;\n case 10:\n return 36;\n break;\n case 11:\n return 10;\n break;\n case 12:\n break;\n case 13:\n return 8;\n break;\n case 14:\n return 50;\n break;\n case 15:\n return 70;\n break;\n case 16:\n return 4;\n break;\n case 17:\n this.begin(\"block\");\n return 17;\n break;\n case 18:\n return 49;\n break;\n case 19:\n return 49;\n break;\n case 20:\n return 42;\n break;\n case 21:\n return 15;\n break;\n case 22:\n return 13;\n break;\n case 23:\n break;\n case 24:\n return 59;\n break;\n case 25:\n return 56;\n break;\n case 26:\n return 56;\n break;\n case 27:\n return 60;\n break;\n case 28:\n break;\n case 29:\n this.popState();\n return 19;\n break;\n case 30:\n return yy_.yytext[0];\n break;\n case 31:\n return 20;\n break;\n case 32:\n return 21;\n break;\n case 33:\n this.begin(\"style\");\n return 44;\n break;\n case 34:\n this.popState();\n return 10;\n break;\n case 35:\n break;\n case 36:\n return 13;\n break;\n case 37:\n return 42;\n break;\n case 38:\n return 49;\n break;\n case 39:\n this.begin(\"style\");\n return 37;\n break;\n case 40:\n return 43;\n break;\n case 41:\n return 63;\n break;\n case 42:\n return 65;\n break;\n case 43:\n return 65;\n break;\n case 44:\n return 65;\n break;\n case 45:\n return 63;\n break;\n case 46:\n return 63;\n break;\n case 47:\n return 64;\n break;\n case 48:\n return 64;\n break;\n case 49:\n return 64;\n break;\n case 50:\n return 64;\n break;\n case 51:\n return 64;\n break;\n case 52:\n return 65;\n break;\n case 53:\n return 64;\n break;\n case 54:\n return 65;\n break;\n case 55:\n return 66;\n break;\n case 56:\n return 66;\n break;\n case 57:\n return 66;\n break;\n case 58:\n return 66;\n break;\n case 59:\n return 63;\n break;\n case 60:\n return 64;\n break;\n case 61:\n return 65;\n break;\n case 62:\n return 67;\n break;\n case 63:\n return 68;\n break;\n case 64:\n return 69;\n break;\n case 65:\n return 69;\n break;\n case 66:\n return 68;\n break;\n case 67:\n return 68;\n break;\n case 68:\n return 68;\n break;\n case 69:\n return 41;\n break;\n case 70:\n return 47;\n break;\n case 71:\n return 40;\n break;\n case 72:\n return 48;\n break;\n case 73:\n return yy_.yytext[0];\n break;\n case 74:\n return 6;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:[\\s]+)/i, /^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i, /^(?:\"[^\"]*\")/i, /^(?:erDiagram\\b)/i, /^(?:\\{)/i, /^(?:#)/i, /^(?:#)/i, /^(?:,)/i, /^(?::::)/i, /^(?::)/i, /^(?:\\s+)/i, /^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i, /^(?:([^\\s]*)[~].*[~]([^\\s]*))/i, /^(?:([\\*A-Za-z_\\u00C0-\\uFFFF][A-Za-z0-9\\-\\_\\[\\]\\(\\)\\u00C0-\\uFFFF\\*]*))/i, /^(?:\"[^\"]*\")/i, /^(?:[\\n]+)/i, /^(?:\\})/i, /^(?:.)/i, /^(?:\\[)/i, /^(?:\\])/i, /^(?:style\\b)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?::)/i, /^(?:,)/i, /^(?:#)/i, /^(?:classDef\\b)/i, /^(?:class\\b)/i, /^(?:one or zero\\b)/i, /^(?:one or more\\b)/i, /^(?:one or many\\b)/i, /^(?:1\\+)/i, /^(?:\\|o\\b)/i, /^(?:zero or one\\b)/i, /^(?:zero or more\\b)/i, /^(?:zero or many\\b)/i, /^(?:0\\+)/i, /^(?:\\}o\\b)/i, /^(?:many\\(0\\))/i, /^(?:many\\(1\\))/i, /^(?:many\\b)/i, /^(?:\\}\\|)/i, /^(?:one\\b)/i, /^(?:only one\\b)/i, /^(?:1\\b)/i, /^(?:\\|\\|)/i, /^(?:o\\|)/i, /^(?:o\\{)/i, /^(?:\\|\\{)/i, /^(?:\\s*u\\b)/i, /^(?:\\.\\.)/i, /^(?:--)/i, /^(?:to\\b)/i, /^(?:optionally to\\b)/i, /^(?:\\.-)/i, /^(?:-\\.)/i, /^(?:([^\\x00-\\x7F]|\\w|-|\\*)+)/i, /^(?:;)/i, /^(?:([^\\x00-\\x7F]|\\w|-|\\*)+)/i, /^(?:[0-9])/i, /^(?:.)/i, /^(?:$)/i],\n conditions: { \"style\": { \"rules\": [34, 35, 36, 37, 38, 69, 70], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [5, 6], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3], \"inclusive\": false }, \"acc_title\": { \"rules\": [1], \"inclusive\": false }, \"block\": { \"rules\": [23, 24, 25, 26, 27, 28, 29, 30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 31, 32, 33, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 74], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar erDiagram_default = parser;\n\n// src/diagrams/er/erDb.ts\nvar ErDB = class {\n constructor() {\n this.entities = /* @__PURE__ */ new Map();\n this.relationships = [];\n this.classes = /* @__PURE__ */ new Map();\n this.direction = \"TB\";\n this.Cardinality = {\n ZERO_OR_ONE: \"ZERO_OR_ONE\",\n ZERO_OR_MORE: \"ZERO_OR_MORE\",\n ONE_OR_MORE: \"ONE_OR_MORE\",\n ONLY_ONE: \"ONLY_ONE\",\n MD_PARENT: \"MD_PARENT\"\n };\n this.Identification = {\n NON_IDENTIFYING: \"NON_IDENTIFYING\",\n IDENTIFYING: \"IDENTIFYING\"\n };\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setAccDescription = setAccDescription;\n this.getAccDescription = getAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getConfig = /* @__PURE__ */ __name(() => getConfig().er, \"getConfig\");\n this.clear();\n this.addEntity = this.addEntity.bind(this);\n this.addAttributes = this.addAttributes.bind(this);\n this.addRelationship = this.addRelationship.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.addCssStyles = this.addCssStyles.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClass = this.setClass.bind(this);\n this.setAccTitle = this.setAccTitle.bind(this);\n this.setAccDescription = this.setAccDescription.bind(this);\n }\n static {\n __name(this, \"ErDB\");\n }\n /**\n * Add entity\n * @param name - The name of the entity\n * @param alias - The alias of the entity\n */\n addEntity(name, alias = \"\") {\n if (!this.entities.has(name)) {\n this.entities.set(name, {\n id: `entity-${name}-${this.entities.size}`,\n label: name,\n attributes: [],\n alias,\n shape: \"erBox\",\n look: getConfig().look ?? \"default\",\n cssClasses: \"default\",\n cssStyles: []\n });\n log.info(\"Added new entity :\", name);\n } else if (!this.entities.get(name)?.alias && alias) {\n this.entities.get(name).alias = alias;\n log.info(`Add alias '${alias}' to entity '${name}'`);\n }\n return this.entities.get(name);\n }\n getEntity(name) {\n return this.entities.get(name);\n }\n getEntities() {\n return this.entities;\n }\n getClasses() {\n return this.classes;\n }\n addAttributes(entityName, attribs) {\n const entity = this.addEntity(entityName);\n let i;\n for (i = attribs.length - 1; i >= 0; i--) {\n if (!attribs[i].keys) {\n attribs[i].keys = [];\n }\n if (!attribs[i].comment) {\n attribs[i].comment = \"\";\n }\n entity.attributes.push(attribs[i]);\n log.debug(\"Added attribute \", attribs[i].name);\n }\n }\n /**\n * Add a relationship\n *\n * @param entA - The first entity in the relationship\n * @param rolA - The role played by the first entity in relation to the second\n * @param entB - The second entity in the relationship\n * @param rSpec - The details of the relationship between the two entities\n */\n addRelationship(entA, rolA, entB, rSpec) {\n const entityA = this.entities.get(entA);\n const entityB = this.entities.get(entB);\n if (!entityA || !entityB) {\n return;\n }\n const rel = {\n entityA: entityA.id,\n roleA: rolA,\n entityB: entityB.id,\n relSpec: rSpec\n };\n this.relationships.push(rel);\n log.debug(\"Added new relationship :\", rel);\n }\n getRelationships() {\n return this.relationships;\n }\n getDirection() {\n return this.direction;\n }\n setDirection(dir) {\n this.direction = dir;\n }\n getCompiledStyles(classDefs) {\n let compiledStyles = [];\n for (const customClass of classDefs) {\n const cssClass = this.classes.get(customClass);\n if (cssClass?.styles) {\n compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s) => s.trim());\n }\n if (cssClass?.textStyles) {\n compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s) => s.trim());\n }\n }\n return compiledStyles;\n }\n addCssStyles(ids, styles) {\n for (const id of ids) {\n const entity = this.entities.get(id);\n if (!styles || !entity) {\n return;\n }\n for (const style of styles) {\n entity.cssStyles.push(style);\n }\n }\n }\n addClass(ids, style) {\n ids.forEach((id) => {\n let classNode = this.classes.get(id);\n if (classNode === void 0) {\n classNode = { id, styles: [], textStyles: [] };\n this.classes.set(id, classNode);\n }\n if (style) {\n style.forEach(function(s) {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n classNode.textStyles.push(newStyle);\n }\n classNode.styles.push(s);\n });\n }\n });\n }\n setClass(ids, classNames) {\n for (const id of ids) {\n const entity = this.entities.get(id);\n if (entity) {\n for (const className of classNames) {\n entity.cssClasses += \" \" + className;\n }\n }\n }\n }\n clear() {\n this.entities = /* @__PURE__ */ new Map();\n this.classes = /* @__PURE__ */ new Map();\n this.relationships = [];\n clear();\n }\n getData() {\n const nodes = [];\n const edges = [];\n const config = getConfig();\n for (const entityKey of this.entities.keys()) {\n const entityNode = this.entities.get(entityKey);\n if (entityNode) {\n entityNode.cssCompiledStyles = this.getCompiledStyles(entityNode.cssClasses.split(\" \"));\n nodes.push(entityNode);\n }\n }\n let count = 0;\n for (const relationship of this.relationships) {\n const edge = {\n id: getEdgeId(relationship.entityA, relationship.entityB, {\n prefix: \"id\",\n counter: count++\n }),\n type: \"normal\",\n curve: \"basis\",\n start: relationship.entityA,\n end: relationship.entityB,\n label: relationship.roleA,\n labelpos: \"c\",\n thickness: \"normal\",\n classes: \"relationshipLine\",\n arrowTypeStart: relationship.relSpec.cardB.toLowerCase(),\n arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(),\n pattern: relationship.relSpec.relType == \"IDENTIFYING\" ? \"solid\" : \"dashed\",\n look: config.look\n };\n edges.push(edge);\n }\n return { nodes, edges, other: {}, config, direction: \"TB\" };\n }\n};\n\n// src/diagrams/er/erRenderer-unified.ts\nvar erRenderer_unified_exports = {};\n__export(erRenderer_unified_exports, {\n draw: () => draw\n});\nimport { select } from \"d3\";\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing er diagram (unified)\", id);\n const { securityLevel, er: conf, layout } = getConfig();\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n data4Layout.config.flowchart.nodeSpacing = conf?.nodeSpacing || 140;\n data4Layout.config.flowchart.rankSpacing = conf?.rankSpacing || 80;\n data4Layout.direction = diag.db.getDirection();\n data4Layout.markers = [\"only_one\", \"zero_or_one\", \"one_or_more\", \"zero_or_more\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n if (data4Layout.layoutAlgorithm === \"elk\") {\n svg.select(\".edges\").lower();\n }\n const backgroundNodes = svg.selectAll('[id*=\"-background\"]');\n if (Array.from(backgroundNodes).length > 0) {\n backgroundNodes.each(function() {\n const backgroundNode = select(this);\n const backgroundId = backgroundNode.attr(\"id\");\n const nonBackgroundId = backgroundId.replace(\"-background\", \"\");\n const nonBackgroundNode = svg.select(`#${CSS.escape(nonBackgroundId)}`);\n if (!nonBackgroundNode.empty()) {\n const transform = nonBackgroundNode.attr(\"transform\");\n backgroundNode.attr(\"transform\", transform);\n }\n });\n }\n const padding = 8;\n utils_default.insertTitle(\n svg,\n \"erDiagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"erDiagram\", conf?.useMaxWidth ?? true);\n}, \"draw\");\n\n// src/diagrams/er/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .labelBkg {\n background-color: ${fade(options.tertiaryColor, 0.5)};\n }\n\n .edgeLabel .label {\n fill: ${options.nodeBorder};\n font-size: 14px;\n }\n\n .label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .edge-pattern-dashed {\n stroke-dasharray: 8,8;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon\n {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n }\n\n .marker {\n fill: none !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/er/erDiagram.ts\nvar diagram = {\n parser: erDiagram_default,\n get db() {\n return new ErDB();\n },\n renderer: erRenderer_unified_exports,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","erDiagram_default","ErDB","_a","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","getConfig","name","alias","log","entityName","attribs","entity","entA","rolA","entB","rSpec","entityA","entityB","rel","dir","classDefs","compiledStyles","customClass","cssClass","s","ids","styles","id","style","classNode","newStyle","classNames","className","clear","nodes","edges","config","entityKey","entityNode","count","relationship","edge","getEdgeId","erRenderer_unified_exports","__export","draw","text","_version","diag","securityLevel","conf","layout","data4Layout","svg","getDiagramElement","getRegisteredLayoutAlgorithm","render","backgroundNodes","backgroundNode","select","nonBackgroundId","nonBackgroundNode","transform","padding","utils_default","setupViewPortForSVG","fade","color","opacity","channel2","khroma.channel","g","b","khroma.rgba","getStyles","options","styles_default","diagram"],"mappings":"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,IAAK,GACH,YAAK,MAAM,WAAW,EACf,GAET,IAAK,GACH,YAAK,SAAQ,EACN,kBAET,IAAK,GACH,KAAK,MAAM,qBAAqB,EAChC,MACF,IAAK,GACH,KAAK,SAAQ,EACb,MACF,IAAK,GACH,MAAO,4BAET,IAAK,GACH,MAAO,IAET,IAAK,GACH,MAAO,IAET,IAAK,GACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,GAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,YAAK,SAAQ,EACN,GAET,IAAK,IACH,OAAOD,EAAI,OAAO,CAAC,EAErB,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,YAAK,SAAQ,EACN,GAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IA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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"erDiagram-Q2GNP2WA-BhRn-28Q.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs"],"sourcesContent":["import {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __export,\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/er/parser/erDiagram.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [6, 8, 10, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 20], $V6 = [1, 21], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 19], $Vb = [1, 25], $Vc = [1, 26], $Vd = [1, 18], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [6, 8, 10, 13, 15, 17, 20, 21, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50, 63, 64, 65, 66, 67], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 52], $Vn = [40, 50, 68, 69], $Vo = [1, 63], $Vp = [1, 61], $Vq = [1, 58], $Vr = [1, 62], $Vs = [1, 64], $Vt = [6, 8, 10, 13, 17, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 63, 64, 65, 66, 67], $Vu = [63, 64, 65, 66, 67], $Vv = [1, 81], $Vw = [1, 80], $Vx = [1, 78], $Vy = [1, 79], $Vz = [6, 10, 42, 47], $VA = [6, 10, 13, 41, 42, 47, 48, 49], $VB = [1, 89], $VC = [1, 88], $VD = [1, 87], $VE = [19, 56], $VF = [1, 98], $VG = [1, 97], $VH = [19, 56, 58, 60];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"ER_DIAGRAM\": 4, \"document\": 5, \"EOF\": 6, \"line\": 7, \"SPACE\": 8, \"statement\": 9, \"NEWLINE\": 10, \"entityName\": 11, \"relSpec\": 12, \"COLON\": 13, \"role\": 14, \"STYLE_SEPARATOR\": 15, \"idList\": 16, \"BLOCK_START\": 17, \"attributes\": 18, \"BLOCK_STOP\": 19, \"SQS\": 20, \"SQE\": 21, \"title\": 22, \"title_value\": 23, \"acc_title\": 24, \"acc_title_value\": 25, \"acc_descr\": 26, \"acc_descr_value\": 27, \"acc_descr_multiline_value\": 28, \"direction\": 29, \"classDefStatement\": 30, \"classStatement\": 31, \"styleStatement\": 32, \"direction_tb\": 33, \"direction_bt\": 34, \"direction_rl\": 35, \"direction_lr\": 36, \"CLASSDEF\": 37, \"stylesOpt\": 38, \"separator\": 39, \"UNICODE_TEXT\": 40, \"STYLE_TEXT\": 41, \"COMMA\": 42, \"CLASS\": 43, \"STYLE\": 44, \"style\": 45, \"styleComponent\": 46, \"SEMI\": 47, \"NUM\": 48, \"BRKT\": 49, \"ENTITY_NAME\": 50, \"attribute\": 51, \"attributeType\": 52, \"attributeName\": 53, \"attributeKeyTypeList\": 54, \"attributeComment\": 55, \"ATTRIBUTE_WORD\": 56, \"attributeKeyType\": 57, \",\": 58, \"ATTRIBUTE_KEY\": 59, \"COMMENT\": 60, \"cardinality\": 61, \"relType\": 62, \"ZERO_OR_ONE\": 63, \"ZERO_OR_MORE\": 64, \"ONE_OR_MORE\": 65, \"ONLY_ONE\": 66, \"MD_PARENT\": 67, \"NON_IDENTIFYING\": 68, \"IDENTIFYING\": 69, \"WORD\": 70, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"ER_DIAGRAM\", 6: \"EOF\", 8: \"SPACE\", 10: \"NEWLINE\", 13: \"COLON\", 15: \"STYLE_SEPARATOR\", 17: \"BLOCK_START\", 19: \"BLOCK_STOP\", 20: \"SQS\", 21: \"SQE\", 22: \"title\", 23: \"title_value\", 24: \"acc_title\", 25: \"acc_title_value\", 26: \"acc_descr\", 27: \"acc_descr_value\", 28: \"acc_descr_multiline_value\", 33: \"direction_tb\", 34: \"direction_bt\", 35: \"direction_rl\", 36: \"direction_lr\", 37: \"CLASSDEF\", 40: \"UNICODE_TEXT\", 41: \"STYLE_TEXT\", 42: \"COMMA\", 43: \"CLASS\", 44: \"STYLE\", 47: \"SEMI\", 48: \"NUM\", 49: \"BRKT\", 50: \"ENTITY_NAME\", 56: \"ATTRIBUTE_WORD\", 58: \",\", 59: \"ATTRIBUTE_KEY\", 60: \"COMMENT\", 63: \"ZERO_OR_ONE\", 64: \"ZERO_OR_MORE\", 65: \"ONE_OR_MORE\", 66: \"ONLY_ONE\", 67: \"MD_PARENT\", 68: \"NON_IDENTIFYING\", 69: \"IDENTIFYING\", 70: \"WORD\" },\n productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 9], [9, 7], [9, 7], [9, 4], [9, 6], [9, 3], [9, 5], [9, 1], [9, 3], [9, 7], [9, 9], [9, 6], [9, 8], [9, 4], [9, 6], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [29, 1], [29, 1], [29, 1], [29, 1], [30, 4], [16, 1], [16, 1], [16, 3], [16, 3], [31, 3], [32, 4], [38, 1], [38, 3], [45, 1], [45, 2], [39, 1], [39, 1], [39, 1], [46, 1], [46, 1], [46, 1], [46, 1], [11, 1], [11, 1], [18, 1], [18, 2], [51, 2], [51, 3], [51, 3], [51, 4], [52, 1], [53, 1], [54, 1], [54, 3], [57, 1], [55, 1], [12, 3], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [62, 1], [62, 1], [14, 1], [14, 1], [14, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n break;\n case 2:\n this.$ = [];\n break;\n case 3:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n case 7:\n this.$ = [];\n break;\n case 8:\n yy.addEntity($$[$0 - 4]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n break;\n case 9:\n yy.addEntity($$[$0 - 8]);\n yy.addEntity($$[$0 - 4]);\n yy.addRelationship($$[$0 - 8], $$[$0], $$[$0 - 4], $$[$0 - 5]);\n yy.setClass([$$[$0 - 8]], $$[$0 - 6]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 10:\n yy.addEntity($$[$0 - 6]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n yy.setClass([$$[$0 - 6]], $$[$0 - 4]);\n break;\n case 11:\n yy.addEntity($$[$0 - 6]);\n yy.addEntity($$[$0 - 4]);\n yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 5]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 12:\n yy.addEntity($$[$0 - 3]);\n yy.addAttributes($$[$0 - 3], $$[$0 - 1]);\n break;\n case 13:\n yy.addEntity($$[$0 - 5]);\n yy.addAttributes($$[$0 - 5], $$[$0 - 1]);\n yy.setClass([$$[$0 - 5]], $$[$0 - 3]);\n break;\n case 14:\n yy.addEntity($$[$0 - 2]);\n break;\n case 15:\n yy.addEntity($$[$0 - 4]);\n yy.setClass([$$[$0 - 4]], $$[$0 - 2]);\n break;\n case 16:\n yy.addEntity($$[$0]);\n break;\n case 17:\n yy.addEntity($$[$0 - 2]);\n yy.setClass([$$[$0 - 2]], $$[$0]);\n break;\n case 18:\n yy.addEntity($$[$0 - 6], $$[$0 - 4]);\n yy.addAttributes($$[$0 - 6], $$[$0 - 1]);\n break;\n case 19:\n yy.addEntity($$[$0 - 8], $$[$0 - 6]);\n yy.addAttributes($$[$0 - 8], $$[$0 - 1]);\n yy.setClass([$$[$0 - 8]], $$[$0 - 3]);\n break;\n case 20:\n yy.addEntity($$[$0 - 5], $$[$0 - 3]);\n break;\n case 21:\n yy.addEntity($$[$0 - 7], $$[$0 - 5]);\n yy.setClass([$$[$0 - 7]], $$[$0 - 2]);\n break;\n case 22:\n yy.addEntity($$[$0 - 3], $$[$0 - 1]);\n break;\n case 23:\n yy.addEntity($$[$0 - 5], $$[$0 - 3]);\n yy.setClass([$$[$0 - 5]], $$[$0]);\n break;\n case 24:\n case 25:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 26:\n case 27:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 32:\n yy.setDirection(\"TB\");\n break;\n case 33:\n yy.setDirection(\"BT\");\n break;\n case 34:\n yy.setDirection(\"RL\");\n break;\n case 35:\n yy.setDirection(\"LR\");\n break;\n case 36:\n this.$ = $$[$0 - 3];\n yy.addClass($$[$0 - 2], $$[$0 - 1]);\n break;\n case 37:\n case 38:\n case 56:\n case 64:\n this.$ = [$$[$0]];\n break;\n case 39:\n case 40:\n this.$ = $$[$0 - 2].concat([$$[$0]]);\n break;\n case 41:\n this.$ = $$[$0 - 2];\n yy.setClass($$[$0 - 1], $$[$0]);\n break;\n case 42:\n ;\n this.$ = $$[$0 - 3];\n yy.addCssStyles($$[$0 - 2], $$[$0 - 1]);\n break;\n case 43:\n this.$ = [$$[$0]];\n break;\n case 44:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 46:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 54:\n case 76:\n case 77:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 55:\n case 78:\n this.$ = $$[$0];\n break;\n case 57:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 58:\n this.$ = { type: $$[$0 - 1], name: $$[$0] };\n break;\n case 59:\n this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], keys: $$[$0] };\n break;\n case 60:\n this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], comment: $$[$0] };\n break;\n case 61:\n this.$ = { type: $$[$0 - 3], name: $$[$0 - 2], keys: $$[$0 - 1], comment: $$[$0] };\n break;\n case 62:\n case 63:\n case 66:\n this.$ = $$[$0];\n break;\n case 65:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 67:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 68:\n this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };\n break;\n case 69:\n this.$ = yy.Cardinality.ZERO_OR_ONE;\n break;\n case 70:\n this.$ = yy.Cardinality.ZERO_OR_MORE;\n break;\n case 71:\n this.$ = yy.Cardinality.ONE_OR_MORE;\n break;\n case 72:\n this.$ = yy.Cardinality.ONLY_ONE;\n break;\n case 73:\n this.$ = yy.Cardinality.MD_PARENT;\n break;\n case 74:\n this.$ = yy.Identification.NON_IDENTIFYING;\n break;\n case 75:\n this.$ = yy.Identification.IDENTIFYING;\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 27, 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 16], { 12: 28, 61: 32, 15: [1, 29], 17: [1, 30], 20: [1, 31], 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 23: [1, 38] }, { 25: [1, 39] }, { 27: [1, 40] }, o($V0, [2, 27]), o($V0, [2, 28]), o($V0, [2, 29]), o($V0, [2, 30]), o($V0, [2, 31]), o($Vj, [2, 54]), o($Vj, [2, 55]), o($V0, [2, 32]), o($V0, [2, 33]), o($V0, [2, 34]), o($V0, [2, 35]), { 16: 41, 40: $Vk, 41: $Vl }, { 16: 44, 40: $Vk, 41: $Vl }, { 16: 45, 40: $Vk, 41: $Vl }, o($V0, [2, 4]), { 11: 46, 40: $Va, 50: $Vd }, { 16: 47, 40: $Vk, 41: $Vl }, { 18: 48, 19: [1, 49], 51: 50, 52: 51, 56: $Vm }, { 11: 53, 40: $Va, 50: $Vd }, { 62: 54, 68: [1, 55], 69: [1, 56] }, o($Vn, [2, 69]), o($Vn, [2, 70]), o($Vn, [2, 71]), o($Vn, [2, 72]), o($Vn, [2, 73]), o($V0, [2, 24]), o($V0, [2, 25]), o($V0, [2, 26]), { 13: $Vo, 38: 57, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, o($Vt, [2, 37]), o($Vt, [2, 38]), { 16: 65, 40: $Vk, 41: $Vl, 42: $Vq }, { 13: $Vo, 38: 66, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, { 13: [1, 67], 15: [1, 68] }, o($V0, [2, 17], { 61: 32, 12: 69, 17: [1, 70], 42: $Vq, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 19: [1, 71] }, o($V0, [2, 14]), { 18: 72, 19: [2, 56], 51: 50, 52: 51, 56: $Vm }, { 53: 73, 56: [1, 74] }, { 56: [2, 62] }, { 21: [1, 75] }, { 61: 76, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }, o($Vu, [2, 74]), o($Vu, [2, 75]), { 6: $Vv, 10: $Vw, 39: 77, 42: $Vx, 47: $Vy }, { 40: [1, 82], 41: [1, 83] }, o($Vz, [2, 43], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), o($VA, [2, 45]), o($VA, [2, 50]), o($VA, [2, 51]), o($VA, [2, 52]), o($VA, [2, 53]), o($V0, [2, 41], { 42: $Vq }), { 6: $Vv, 10: $Vw, 39: 85, 42: $Vx, 47: $Vy }, { 14: 86, 40: $VB, 50: $VC, 70: $VD }, { 16: 90, 40: $Vk, 41: $Vl }, { 11: 91, 40: $Va, 50: $Vd }, { 18: 92, 19: [1, 93], 51: 50, 52: 51, 56: $Vm }, o($V0, [2, 12]), { 19: [2, 57] }, o($VE, [2, 58], { 54: 94, 55: 95, 57: 96, 59: $VF, 60: $VG }), o([19, 56, 59, 60], [2, 63]), o($V0, [2, 22], { 15: [1, 100], 17: [1, 99] }), o([40, 50], [2, 68]), o($V0, [2, 36]), { 13: $Vo, 41: $Vp, 45: 101, 46: 60, 48: $Vr, 49: $Vs }, o($V0, [2, 47]), o($V0, [2, 48]), o($V0, [2, 49]), o($Vt, [2, 39]), o($Vt, [2, 40]), o($VA, [2, 46]), o($V0, [2, 42]), o($V0, [2, 8]), o($V0, [2, 76]), o($V0, [2, 77]), o($V0, [2, 78]), { 13: [1, 102], 42: $Vq }, { 13: [1, 104], 15: [1, 103] }, { 19: [1, 105] }, o($V0, [2, 15]), o($VE, [2, 59], { 55: 106, 58: [1, 107], 60: $VG }), o($VE, [2, 60]), o($VH, [2, 64]), o($VE, [2, 67]), o($VH, [2, 66]), { 18: 108, 19: [1, 109], 51: 50, 52: 51, 56: $Vm }, { 16: 110, 40: $Vk, 41: $Vl }, o($Vz, [2, 44], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), { 14: 111, 40: $VB, 50: $VC, 70: $VD }, { 16: 112, 40: $Vk, 41: $Vl }, { 14: 113, 40: $VB, 50: $VC, 70: $VD }, o($V0, [2, 13]), o($VE, [2, 61]), { 57: 114, 59: $VF }, { 19: [1, 115] }, o($V0, [2, 20]), o($V0, [2, 23], { 17: [1, 116], 42: $Vq }), o($V0, [2, 11]), { 13: [1, 117], 42: $Vq }, o($V0, [2, 10]), o($VH, [2, 65]), o($V0, [2, 18]), { 18: 118, 19: [1, 119], 51: 50, 52: 51, 56: $Vm }, { 14: 120, 40: $VB, 50: $VC, 70: $VD }, { 19: [1, 121] }, o($V0, [2, 21]), o($V0, [2, 9]), o($V0, [2, 19])],\n defaultActions: { 52: [2, 62], 72: [2, 57] },\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 24;\n break;\n case 1:\n this.popState();\n return \"acc_title_value\";\n break;\n case 2:\n this.begin(\"acc_descr\");\n return 26;\n break;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n break;\n case 7:\n return 33;\n break;\n case 8:\n return 34;\n break;\n case 9:\n return 35;\n break;\n case 10:\n return 36;\n break;\n case 11:\n return 10;\n break;\n case 12:\n break;\n case 13:\n return 8;\n break;\n case 14:\n return 50;\n break;\n case 15:\n return 70;\n break;\n case 16:\n return 4;\n break;\n case 17:\n this.begin(\"block\");\n return 17;\n break;\n case 18:\n return 49;\n break;\n case 19:\n return 49;\n break;\n case 20:\n return 42;\n break;\n case 21:\n return 15;\n break;\n case 22:\n return 13;\n break;\n case 23:\n break;\n case 24:\n return 59;\n break;\n case 25:\n return 56;\n break;\n case 26:\n return 56;\n break;\n case 27:\n return 60;\n break;\n case 28:\n break;\n case 29:\n this.popState();\n return 19;\n break;\n case 30:\n return yy_.yytext[0];\n break;\n case 31:\n return 20;\n break;\n case 32:\n return 21;\n break;\n case 33:\n this.begin(\"style\");\n return 44;\n break;\n case 34:\n this.popState();\n return 10;\n break;\n case 35:\n break;\n case 36:\n return 13;\n break;\n case 37:\n return 42;\n break;\n case 38:\n return 49;\n break;\n case 39:\n this.begin(\"style\");\n return 37;\n break;\n case 40:\n return 43;\n break;\n case 41:\n return 63;\n break;\n case 42:\n return 65;\n break;\n case 43:\n return 65;\n break;\n case 44:\n return 65;\n break;\n case 45:\n return 63;\n break;\n case 46:\n return 63;\n break;\n case 47:\n return 64;\n break;\n case 48:\n return 64;\n break;\n case 49:\n return 64;\n break;\n case 50:\n return 64;\n break;\n case 51:\n return 64;\n break;\n case 52:\n return 65;\n break;\n case 53:\n return 64;\n break;\n case 54:\n return 65;\n break;\n case 55:\n return 66;\n break;\n case 56:\n return 66;\n break;\n case 57:\n return 66;\n break;\n case 58:\n return 66;\n break;\n case 59:\n return 63;\n break;\n case 60:\n return 64;\n break;\n case 61:\n return 65;\n break;\n case 62:\n return 67;\n break;\n case 63:\n return 68;\n break;\n case 64:\n return 69;\n break;\n case 65:\n return 69;\n break;\n case 66:\n return 68;\n break;\n case 67:\n return 68;\n break;\n case 68:\n return 68;\n break;\n case 69:\n return 41;\n break;\n case 70:\n return 47;\n break;\n case 71:\n return 40;\n break;\n case 72:\n return 48;\n break;\n case 73:\n return yy_.yytext[0];\n break;\n case 74:\n return 6;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:[\\s]+)/i, /^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i, /^(?:\"[^\"]*\")/i, /^(?:erDiagram\\b)/i, /^(?:\\{)/i, /^(?:#)/i, /^(?:#)/i, /^(?:,)/i, /^(?::::)/i, /^(?::)/i, /^(?:\\s+)/i, /^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i, /^(?:([^\\s]*)[~].*[~]([^\\s]*))/i, /^(?:([\\*A-Za-z_\\u00C0-\\uFFFF][A-Za-z0-9\\-\\_\\[\\]\\(\\)\\u00C0-\\uFFFF\\*]*))/i, /^(?:\"[^\"]*\")/i, /^(?:[\\n]+)/i, /^(?:\\})/i, /^(?:.)/i, /^(?:\\[)/i, /^(?:\\])/i, /^(?:style\\b)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?::)/i, /^(?:,)/i, /^(?:#)/i, /^(?:classDef\\b)/i, /^(?:class\\b)/i, /^(?:one or zero\\b)/i, /^(?:one or more\\b)/i, /^(?:one or many\\b)/i, /^(?:1\\+)/i, /^(?:\\|o\\b)/i, /^(?:zero or one\\b)/i, /^(?:zero or more\\b)/i, /^(?:zero or many\\b)/i, /^(?:0\\+)/i, /^(?:\\}o\\b)/i, /^(?:many\\(0\\))/i, /^(?:many\\(1\\))/i, /^(?:many\\b)/i, /^(?:\\}\\|)/i, /^(?:one\\b)/i, /^(?:only one\\b)/i, /^(?:1\\b)/i, /^(?:\\|\\|)/i, /^(?:o\\|)/i, /^(?:o\\{)/i, /^(?:\\|\\{)/i, /^(?:\\s*u\\b)/i, /^(?:\\.\\.)/i, /^(?:--)/i, /^(?:to\\b)/i, /^(?:optionally to\\b)/i, /^(?:\\.-)/i, /^(?:-\\.)/i, /^(?:([^\\x00-\\x7F]|\\w|-|\\*)+)/i, /^(?:;)/i, /^(?:([^\\x00-\\x7F]|\\w|-|\\*)+)/i, /^(?:[0-9])/i, /^(?:.)/i, /^(?:$)/i],\n conditions: { \"style\": { \"rules\": [34, 35, 36, 37, 38, 69, 70], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [5, 6], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3], \"inclusive\": false }, \"acc_title\": { \"rules\": [1], \"inclusive\": false }, \"block\": { \"rules\": [23, 24, 25, 26, 27, 28, 29, 30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 31, 32, 33, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 74], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar erDiagram_default = parser;\n\n// src/diagrams/er/erDb.ts\nvar ErDB = class {\n constructor() {\n this.entities = /* @__PURE__ */ new Map();\n this.relationships = [];\n this.classes = /* @__PURE__ */ new Map();\n this.direction = \"TB\";\n this.Cardinality = {\n ZERO_OR_ONE: \"ZERO_OR_ONE\",\n ZERO_OR_MORE: \"ZERO_OR_MORE\",\n ONE_OR_MORE: \"ONE_OR_MORE\",\n ONLY_ONE: \"ONLY_ONE\",\n MD_PARENT: \"MD_PARENT\"\n };\n this.Identification = {\n NON_IDENTIFYING: \"NON_IDENTIFYING\",\n IDENTIFYING: \"IDENTIFYING\"\n };\n this.setAccTitle = setAccTitle;\n this.getAccTitle = getAccTitle;\n this.setAccDescription = setAccDescription;\n this.getAccDescription = getAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getDiagramTitle = getDiagramTitle;\n this.getConfig = /* @__PURE__ */ __name(() => getConfig().er, \"getConfig\");\n this.clear();\n this.addEntity = this.addEntity.bind(this);\n this.addAttributes = this.addAttributes.bind(this);\n this.addRelationship = this.addRelationship.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.addCssStyles = this.addCssStyles.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClass = this.setClass.bind(this);\n this.setAccTitle = this.setAccTitle.bind(this);\n this.setAccDescription = this.setAccDescription.bind(this);\n }\n static {\n __name(this, \"ErDB\");\n }\n /**\n * Add entity\n * @param name - The name of the entity\n * @param alias - The alias of the entity\n */\n addEntity(name, alias = \"\") {\n if (!this.entities.has(name)) {\n this.entities.set(name, {\n id: `entity-${name}-${this.entities.size}`,\n label: name,\n attributes: [],\n alias,\n shape: \"erBox\",\n look: getConfig().look ?? \"default\",\n cssClasses: \"default\",\n cssStyles: []\n });\n log.info(\"Added new entity :\", name);\n } else if (!this.entities.get(name)?.alias && alias) {\n this.entities.get(name).alias = alias;\n log.info(`Add alias '${alias}' to entity '${name}'`);\n }\n return this.entities.get(name);\n }\n getEntity(name) {\n return this.entities.get(name);\n }\n getEntities() {\n return this.entities;\n }\n getClasses() {\n return this.classes;\n }\n addAttributes(entityName, attribs) {\n const entity = this.addEntity(entityName);\n let i;\n for (i = attribs.length - 1; i >= 0; i--) {\n if (!attribs[i].keys) {\n attribs[i].keys = [];\n }\n if (!attribs[i].comment) {\n attribs[i].comment = \"\";\n }\n entity.attributes.push(attribs[i]);\n log.debug(\"Added attribute \", attribs[i].name);\n }\n }\n /**\n * Add a relationship\n *\n * @param entA - The first entity in the relationship\n * @param rolA - The role played by the first entity in relation to the second\n * @param entB - The second entity in the relationship\n * @param rSpec - The details of the relationship between the two entities\n */\n addRelationship(entA, rolA, entB, rSpec) {\n const entityA = this.entities.get(entA);\n const entityB = this.entities.get(entB);\n if (!entityA || !entityB) {\n return;\n }\n const rel = {\n entityA: entityA.id,\n roleA: rolA,\n entityB: entityB.id,\n relSpec: rSpec\n };\n this.relationships.push(rel);\n log.debug(\"Added new relationship :\", rel);\n }\n getRelationships() {\n return this.relationships;\n }\n getDirection() {\n return this.direction;\n }\n setDirection(dir) {\n this.direction = dir;\n }\n getCompiledStyles(classDefs) {\n let compiledStyles = [];\n for (const customClass of classDefs) {\n const cssClass = this.classes.get(customClass);\n if (cssClass?.styles) {\n compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s) => s.trim());\n }\n if (cssClass?.textStyles) {\n compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s) => s.trim());\n }\n }\n return compiledStyles;\n }\n addCssStyles(ids, styles) {\n for (const id of ids) {\n const entity = this.entities.get(id);\n if (!styles || !entity) {\n return;\n }\n for (const style of styles) {\n entity.cssStyles.push(style);\n }\n }\n }\n addClass(ids, style) {\n ids.forEach((id) => {\n let classNode = this.classes.get(id);\n if (classNode === void 0) {\n classNode = { id, styles: [], textStyles: [] };\n this.classes.set(id, classNode);\n }\n if (style) {\n style.forEach(function(s) {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n classNode.textStyles.push(newStyle);\n }\n classNode.styles.push(s);\n });\n }\n });\n }\n setClass(ids, classNames) {\n for (const id of ids) {\n const entity = this.entities.get(id);\n if (entity) {\n for (const className of classNames) {\n entity.cssClasses += \" \" + className;\n }\n }\n }\n }\n clear() {\n this.entities = /* @__PURE__ */ new Map();\n this.classes = /* @__PURE__ */ new Map();\n this.relationships = [];\n clear();\n }\n getData() {\n const nodes = [];\n const edges = [];\n const config = getConfig();\n for (const entityKey of this.entities.keys()) {\n const entityNode = this.entities.get(entityKey);\n if (entityNode) {\n entityNode.cssCompiledStyles = this.getCompiledStyles(entityNode.cssClasses.split(\" \"));\n nodes.push(entityNode);\n }\n }\n let count = 0;\n for (const relationship of this.relationships) {\n const edge = {\n id: getEdgeId(relationship.entityA, relationship.entityB, {\n prefix: \"id\",\n counter: count++\n }),\n type: \"normal\",\n curve: \"basis\",\n start: relationship.entityA,\n end: relationship.entityB,\n label: relationship.roleA,\n labelpos: \"c\",\n thickness: \"normal\",\n classes: \"relationshipLine\",\n arrowTypeStart: relationship.relSpec.cardB.toLowerCase(),\n arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(),\n pattern: relationship.relSpec.relType == \"IDENTIFYING\" ? \"solid\" : \"dashed\",\n look: config.look\n };\n edges.push(edge);\n }\n return { nodes, edges, other: {}, config, direction: \"TB\" };\n }\n};\n\n// src/diagrams/er/erRenderer-unified.ts\nvar erRenderer_unified_exports = {};\n__export(erRenderer_unified_exports, {\n draw: () => draw\n});\nimport { select } from \"d3\";\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing er diagram (unified)\", id);\n const { securityLevel, er: conf, layout } = getConfig();\n const data4Layout = diag.db.getData();\n const svg = getDiagramElement(id, securityLevel);\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n data4Layout.config.flowchart.nodeSpacing = conf?.nodeSpacing || 140;\n data4Layout.config.flowchart.rankSpacing = conf?.rankSpacing || 80;\n data4Layout.direction = diag.db.getDirection();\n data4Layout.markers = [\"only_one\", \"zero_or_one\", \"one_or_more\", \"zero_or_more\"];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n if (data4Layout.layoutAlgorithm === \"elk\") {\n svg.select(\".edges\").lower();\n }\n const backgroundNodes = svg.selectAll('[id*=\"-background\"]');\n if (Array.from(backgroundNodes).length > 0) {\n backgroundNodes.each(function() {\n const backgroundNode = select(this);\n const backgroundId = backgroundNode.attr(\"id\");\n const nonBackgroundId = backgroundId.replace(\"-background\", \"\");\n const nonBackgroundNode = svg.select(`#${CSS.escape(nonBackgroundId)}`);\n if (!nonBackgroundNode.empty()) {\n const transform = nonBackgroundNode.attr(\"transform\");\n backgroundNode.attr(\"transform\", transform);\n }\n });\n }\n const padding = 8;\n utils_default.insertTitle(\n svg,\n \"erDiagramTitleText\",\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"erDiagram\", conf?.useMaxWidth ?? true);\n}, \"draw\");\n\n// src/diagrams/er/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .labelBkg {\n background-color: ${fade(options.tertiaryColor, 0.5)};\n }\n\n .edgeLabel .label {\n fill: ${options.nodeBorder};\n font-size: 14px;\n }\n\n .label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .edge-pattern-dashed {\n stroke-dasharray: 8,8;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon\n {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n }\n\n .marker {\n fill: none !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/er/erDiagram.ts\nvar diagram = {\n parser: erDiagram_default,\n get db() {\n return new ErDB();\n },\n renderer: erRenderer_unified_exports,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["parser","o","__name","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","erDiagram_default","ErDB","_a","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","getConfig","name","alias","log","entityName","attribs","entity","entA","rolA","entB","rSpec","entityA","entityB","rel","dir","classDefs","compiledStyles","customClass","cssClass","s","ids","styles","id","style","classNode","newStyle","classNames","className","clear","nodes","edges","config","entityKey","entityNode","count","relationship","edge","getEdgeId","erRenderer_unified_exports","__export","draw","text","_version","diag","securityLevel","conf","layout","data4Layout","svg","getDiagramElement","getRegisteredLayoutAlgorithm","render","backgroundNodes","backgroundNode","select","nonBackgroundId","nonBackgroundNode","transform","padding","utils_default","setupViewPortForSVG","fade","color","opacity","channel2","khroma.channel","g","b","khroma.rgba","getStyles","options","styles_default","diagram"],"mappings":"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,IAAK,GACH,YAAK,MAAM,WAAW,EACf,GAET,IAAK,GACH,YAAK,SAAQ,EACN,kBAET,IAAK,GACH,KAAK,MAAM,qBAAqB,EAChC,MACF,IAAK,GACH,KAAK,SAAQ,EACb,MACF,IAAK,GACH,MAAO,4BAET,IAAK,GACH,MAAO,IAET,IAAK,GACH,MAAO,IAET,IAAK,GACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,GAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MACF,IAAK,IACH,YAAK,SAAQ,EACN,GAET,IAAK,IACH,OAAOD,EAAI,OAAO,CAAC,EAErB,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,YAAK,SAAQ,EACN,GAET,IAAK,IACH,MACF,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IAAK,IACH,MAAO,IAET,IA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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js b/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js similarity index 99% rename from massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js rename to massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js index 910bf55f2..2efc86917 100644 --- a/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js +++ b/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js @@ -1,4 +1,4 @@ -import{g as qt}from"./chunk-FMBD7UC4-LU2vPcC6.js";import{_ as m,n as Ot,l as t1,c as b1,d as S1,o as Ht,r as Xt,u as it,b as Qt,s as Jt,p as Zt,a as $t,g as te,q as ee,k as se,t as ie,J as re,v as ae,x as st,y as ne,z as ue,A as oe}from"./index-yx4Z55Qu.js";import{g as le}from"./chunk-55IACEB6-BCQD3dNT.js";import{s as ce}from"./chunk-QN33PNHL-BF8yyMHO.js";import{c as he}from"./channel-5fWG1b_w.js";var de="flowchart-",P1,pe=(P1=class{constructor(){this.vertexCounter=0,this.config=b1(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=Qt,this.setAccDescription=Jt,this.setDiagramTitle=Zt,this.getAccTitle=$t,this.getAccDescription=te,this.getDiagramTitle=ee,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}sanitizeText(i){return se.sanitizeText(i,this.config)}lookUpDomId(i){for(const a of this.vertices.values())if(a.id===i)return a.domId;return i}addVertex(i,a,n,u,o,f,c={},A){var L,C;if(!i||i.trim().length===0)return;let r;if(A!==void 0){let d;A.includes(` +import{g as qt}from"./chunk-FMBD7UC4-DgHqX2i6.js";import{_ as m,n as Ot,l as t1,c as b1,d as S1,o as Ht,r as Xt,u as it,b as Qt,s as Jt,p as Zt,a as $t,g as te,q as ee,k as se,t as ie,J as re,v as ae,x as st,y as ne,z as ue,A as oe}from"./index-DbSnkTMx.js";import{g as le}from"./chunk-55IACEB6-Do1tLUXI.js";import{s as ce}from"./chunk-QN33PNHL-Bl50RaE-.js";import{c as he}from"./channel-B_f67D__.js";var de="flowchart-",P1,pe=(P1=class{constructor(){this.vertexCounter=0,this.config=b1(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=Qt,this.setAccDescription=Jt,this.setDiagramTitle=Zt,this.getAccTitle=$t,this.getAccDescription=te,this.getDiagramTitle=ee,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}sanitizeText(i){return se.sanitizeText(i,this.config)}lookUpDomId(i){for(const a of this.vertices.values())if(a.id===i)return a.domId;return i}addVertex(i,a,n,u,o,f,c={},A){var L,C;if(!i||i.trim().length===0)return;let r;if(A!==void 0){let d;A.includes(` `)?d=A+` `:d=`{ `+A+` @@ -160,4 +160,4 @@ Expecting `+X1.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":et="Parse error } ${qt()} `,"getStyles"),Ce=me,ye={parser:Ae,get db(){return new pe},renderer:be,styles:Ce,init:m(s=>{s.flowchart||(s.flowchart={}),s.layout&&Ot({layout:s.layout}),s.flowchart.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Ot({flowchart:{arrowMarkerAbsolute:s.arrowMarkerAbsolute}})},"init")};export{ye as diagram}; -//# sourceMappingURL=flowDiagram-NV44I4VS-Cp4s3Hyk.js.map +//# sourceMappingURL=flowDiagram-NV44I4VS-twM9GedW.js.map diff --git a/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js.map b/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js.map similarity index 99% rename from massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js.map rename to massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js.map index 7f88b872d..66e107d67 100644 --- a/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js.map +++ b/massgen/frontend/web/static/assets/flowDiagram-NV44I4VS-twM9GedW.js.map @@ -1 +1 @@ -{"version":3,"file":"flowDiagram-NV44I4VS-Cp4s3Hyk.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-NV44I4VS.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n JSON_SCHEMA,\n load\n} from \"./chunk-MI3HLSF2.mjs\";\nimport {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport {\n isValidShape\n} from \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig2 as defaultConfig,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setConfig2 as setConfig,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/flowchart/flowDb.ts\nimport { select } from \"d3\";\nvar MERMAID_DOM_ID_PREFIX = \"flowchart-\";\nvar FlowDB = class {\n // cspell:ignore funs\n constructor() {\n this.vertexCounter = 0;\n this.config = getConfig();\n this.vertices = /* @__PURE__ */ new Map();\n this.edges = [];\n this.classes = /* @__PURE__ */ new Map();\n this.subGraphs = [];\n this.subGraphLookup = /* @__PURE__ */ new Map();\n this.tooltips = /* @__PURE__ */ new Map();\n this.subCount = 0;\n this.firstGraphFlag = true;\n // As in graph\n this.secCount = -1;\n this.posCrossRef = [];\n // Functions to be run after graph rendering\n this.funs = [];\n this.setAccTitle = setAccTitle;\n this.setAccDescription = setAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getAccTitle = getAccTitle;\n this.getAccDescription = getAccDescription;\n this.getDiagramTitle = getDiagramTitle;\n this.funs.push(this.setupToolTips.bind(this));\n this.addVertex = this.addVertex.bind(this);\n this.firstGraph = this.firstGraph.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.addSubGraph = this.addSubGraph.bind(this);\n this.addLink = this.addLink.bind(this);\n this.setLink = this.setLink.bind(this);\n this.updateLink = this.updateLink.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClass = this.setClass.bind(this);\n this.destructLink = this.destructLink.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setTooltip = this.setTooltip.bind(this);\n this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this);\n this.setClickFun = this.setClickFun.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n this.lex = {\n firstGraph: this.firstGraph.bind(this)\n };\n this.clear();\n this.setGen(\"gen-2\");\n }\n static {\n __name(this, \"FlowDB\");\n }\n sanitizeText(txt) {\n return common_default.sanitizeText(txt, this.config);\n }\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - id of the node\n */\n lookUpDomId(id) {\n for (const vertex of this.vertices.values()) {\n if (vertex.id === id) {\n return vertex.domId;\n }\n }\n return id;\n }\n /**\n * Function called by parser when a node definition has been found\n */\n addVertex(id, textObj, type, style, classes, dir, props = {}, metadata) {\n if (!id || id.trim().length === 0) {\n return;\n }\n let doc;\n if (metadata !== void 0) {\n let yamlData;\n if (!metadata.includes(\"\\n\")) {\n yamlData = \"{\\n\" + metadata + \"\\n}\";\n } else {\n yamlData = metadata + \"\\n\";\n }\n doc = load(yamlData, { schema: JSON_SCHEMA });\n }\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n const edgeDoc = doc;\n if (edgeDoc?.animate !== void 0) {\n edge.animate = edgeDoc.animate;\n }\n if (edgeDoc?.animation !== void 0) {\n edge.animation = edgeDoc.animation;\n }\n if (edgeDoc?.curve !== void 0) {\n edge.interpolate = edgeDoc.curve;\n }\n return;\n }\n let txt;\n let vertex = this.vertices.get(id);\n if (vertex === void 0) {\n vertex = {\n id,\n labelType: \"text\",\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + this.vertexCounter,\n styles: [],\n classes: []\n };\n this.vertices.set(id, vertex);\n }\n this.vertexCounter++;\n if (textObj !== void 0) {\n this.config = getConfig();\n txt = this.sanitizeText(textObj.text.trim());\n vertex.labelType = textObj.type;\n if (txt.startsWith('\"') && txt.endsWith('\"')) {\n txt = txt.substring(1, txt.length - 1);\n }\n vertex.text = txt;\n } else {\n if (vertex.text === void 0) {\n vertex.text = id;\n }\n }\n if (type !== void 0) {\n vertex.type = type;\n }\n if (style !== void 0 && style !== null) {\n style.forEach((s) => {\n vertex.styles.push(s);\n });\n }\n if (classes !== void 0 && classes !== null) {\n classes.forEach((s) => {\n vertex.classes.push(s);\n });\n }\n if (dir !== void 0) {\n vertex.dir = dir;\n }\n if (vertex.props === void 0) {\n vertex.props = props;\n } else if (props !== void 0) {\n Object.assign(vertex.props, props);\n }\n if (doc !== void 0) {\n if (doc.shape) {\n if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes(\"_\")) {\n throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);\n } else if (!isValidShape(doc.shape)) {\n throw new Error(`No such shape: ${doc.shape}.`);\n }\n vertex.type = doc?.shape;\n }\n if (doc?.label) {\n vertex.text = doc?.label;\n }\n if (doc?.icon) {\n vertex.icon = doc?.icon;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = \"\";\n }\n }\n if (doc?.form) {\n vertex.form = doc?.form;\n }\n if (doc?.pos) {\n vertex.pos = doc?.pos;\n }\n if (doc?.img) {\n vertex.img = doc?.img;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = \"\";\n }\n }\n if (doc?.constraint) {\n vertex.constraint = doc.constraint;\n }\n if (doc.w) {\n vertex.assetWidth = Number(doc.w);\n }\n if (doc.h) {\n vertex.assetHeight = Number(doc.h);\n }\n }\n }\n /**\n * Function called by parser when a link/edge definition has been found\n *\n */\n addSingleLink(_start, _end, type, id) {\n const start = _start;\n const end = _end;\n const edge = {\n start,\n end,\n type: void 0,\n text: \"\",\n labelType: \"text\",\n classes: [],\n isUserDefinedId: false,\n interpolate: this.edges.defaultInterpolate\n };\n log.info(\"abc78 Got edge...\", edge);\n const linkTextObj = type.text;\n if (linkTextObj !== void 0) {\n edge.text = this.sanitizeText(linkTextObj.text.trim());\n if (edge.text.startsWith('\"') && edge.text.endsWith('\"')) {\n edge.text = edge.text.substring(1, edge.text.length - 1);\n }\n edge.labelType = linkTextObj.type;\n }\n if (type !== void 0) {\n edge.type = type.type;\n edge.stroke = type.stroke;\n edge.length = type.length > 10 ? 10 : type.length;\n }\n if (id && !this.edges.some((e) => e.id === id)) {\n edge.id = id;\n edge.isUserDefinedId = true;\n } else {\n const existingLinks = this.edges.filter((e) => e.start === edge.start && e.end === edge.end);\n if (existingLinks.length === 0) {\n edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: \"L\" });\n } else {\n edge.id = getEdgeId(edge.start, edge.end, {\n counter: existingLinks.length + 1,\n prefix: \"L\"\n });\n }\n }\n if (this.edges.length < (this.config.maxEdges ?? 500)) {\n log.info(\"Pushing edge...\");\n this.edges.push(edge);\n } else {\n throw new Error(\n `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`\n );\n }\n }\n isLinkData(value) {\n return value !== null && typeof value === \"object\" && \"id\" in value && typeof value.id === \"string\";\n }\n addLink(_start, _end, linkData) {\n const id = this.isLinkData(linkData) ? linkData.id.replace(\"@\", \"\") : void 0;\n log.info(\"addLink\", _start, _end, id);\n for (const start of _start) {\n for (const end of _end) {\n const isLastStart = start === _start[_start.length - 1];\n const isFirstEnd = end === _end[0];\n if (isLastStart && isFirstEnd) {\n this.addSingleLink(start, end, linkData, id);\n } else {\n this.addSingleLink(start, end, linkData, void 0);\n }\n }\n }\n }\n /**\n * Updates a link's line interpolation algorithm\n */\n updateLinkInterpolate(positions, interpolate) {\n positions.forEach((pos) => {\n if (pos === \"default\") {\n this.edges.defaultInterpolate = interpolate;\n } else {\n this.edges[pos].interpolate = interpolate;\n }\n });\n }\n /**\n * Updates a link with a style\n *\n */\n updateLink(positions, style) {\n positions.forEach((pos) => {\n if (typeof pos === \"number\" && pos >= this.edges.length) {\n throw new Error(\n `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)`\n );\n }\n if (pos === \"default\") {\n this.edges.defaultStyle = style;\n } else {\n this.edges[pos].style = style;\n if ((this.edges[pos]?.style?.length ?? 0) > 0 && !this.edges[pos]?.style?.some((s) => s?.startsWith(\"fill\"))) {\n this.edges[pos]?.style?.push(\"fill:none\");\n }\n }\n });\n }\n addClass(ids, _style) {\n const style = _style.join().replace(/\\\\,/g, \"\\xA7\\xA7\\xA7\").replace(/,/g, \";\").replace(/§§§/g, \",\").split(\";\");\n ids.split(\",\").forEach((id) => {\n let classNode = this.classes.get(id);\n if (classNode === void 0) {\n classNode = { id, styles: [], textStyles: [] };\n this.classes.set(id, classNode);\n }\n if (style !== void 0 && style !== null) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n classNode.textStyles.push(newStyle);\n }\n classNode.styles.push(s);\n });\n }\n });\n }\n /**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n *\n */\n setDirection(dir) {\n this.direction = dir.trim();\n if (/.*/.exec(this.direction)) {\n this.direction = \"LR\";\n }\n if (/.*v/.exec(this.direction)) {\n this.direction = \"TB\";\n }\n if (this.direction === \"TD\") {\n this.direction = \"TB\";\n }\n }\n /**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n setClass(ids, className) {\n for (const id of ids.split(\",\")) {\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.classes.push(className);\n }\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n edge.classes.push(className);\n }\n const subGraph = this.subGraphLookup.get(id);\n if (subGraph) {\n subGraph.classes.push(className);\n }\n }\n }\n setTooltip(ids, tooltip) {\n if (tooltip === void 0) {\n return;\n }\n tooltip = this.sanitizeText(tooltip);\n for (const id of ids.split(\",\")) {\n this.tooltips.set(this.version === \"gen-1\" ? this.lookUpDomId(id) : id, tooltip);\n }\n }\n setClickFun(id, functionName, functionArgs) {\n const domId = this.lookUpDomId(id);\n if (getConfig().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.haveCallback = true;\n this.funs.push(() => {\n const elem = document.querySelector(`[id=\"${domId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n () => {\n utils_default.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target attribute for the link\n */\n setLink(ids, linkStr, target) {\n ids.split(\",\").forEach((id) => {\n const vertex = this.vertices.get(id);\n if (vertex !== void 0) {\n vertex.link = utils_default.formatUrl(linkStr, this.config);\n vertex.linkTarget = target;\n }\n });\n this.setClass(ids, \"clickable\");\n }\n getTooltip(id) {\n return this.tooltips.get(id);\n }\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Arguments to be passed to the function\n */\n setClickEvent(ids, functionName, functionArgs) {\n ids.split(\",\").forEach((id) => {\n this.setClickFun(id, functionName, functionArgs);\n });\n this.setClass(ids, \"clickable\");\n }\n bindFunctions(element) {\n this.funs.forEach((fun) => {\n fun(element);\n });\n }\n getDirection() {\n return this.direction?.trim();\n }\n /**\n * Retrieval function for fetching the found nodes after parsing has completed.\n *\n */\n getVertices() {\n return this.vertices;\n }\n /**\n * Retrieval function for fetching the found links after parsing has completed.\n *\n */\n getEdges() {\n return this.edges;\n }\n /**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n *\n */\n getClasses() {\n return this.classes;\n }\n setupToolTips(element) {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", (e) => {\n const el = select(e.currentTarget);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = e.currentTarget?.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.bottom + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", (e) => {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(e.currentTarget);\n el.classed(\"hover\", false);\n });\n }\n /**\n * Clears the internal graph db so that a new graph can be parsed.\n *\n */\n clear(ver = \"gen-2\") {\n this.vertices = /* @__PURE__ */ new Map();\n this.classes = /* @__PURE__ */ new Map();\n this.edges = [];\n this.funs = [this.setupToolTips.bind(this)];\n this.subGraphs = [];\n this.subGraphLookup = /* @__PURE__ */ new Map();\n this.subCount = 0;\n this.tooltips = /* @__PURE__ */ new Map();\n this.firstGraphFlag = true;\n this.version = ver;\n this.config = getConfig();\n clear();\n }\n setGen(ver) {\n this.version = ver || \"gen-2\";\n }\n defaultStyle() {\n return \"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;\";\n }\n addSubGraph(_id, list, _title) {\n let id = _id.text.trim();\n let title = _title.text;\n if (_id === _title && /\\s/.exec(_title.text)) {\n id = void 0;\n }\n const uniq = /* @__PURE__ */ __name((a) => {\n const prims = { boolean: {}, number: {}, string: {} };\n const objs = [];\n let dir2;\n const nodeList2 = a.filter(function(item) {\n const type = typeof item;\n if (item.stmt && item.stmt === \"dir\") {\n dir2 = item.value;\n return false;\n }\n if (item.trim() === \"\") {\n return false;\n }\n if (type in prims) {\n return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true;\n } else {\n return objs.includes(item) ? false : objs.push(item);\n }\n });\n return { nodeList: nodeList2, dir: dir2 };\n }, \"uniq\");\n const result = uniq(list.flat());\n const nodeList = result.nodeList;\n let dir = result.dir;\n const flowchartConfig = getConfig().flowchart ?? {};\n dir = dir ?? (flowchartConfig.inheritDir ? this.getDirection() ?? getConfig().direction ?? void 0 : void 0);\n if (this.version === \"gen-1\") {\n for (let i = 0; i < nodeList.length; i++) {\n nodeList[i] = this.lookUpDomId(nodeList[i]);\n }\n }\n id = id ?? \"subGraph\" + this.subCount;\n title = title || \"\";\n title = this.sanitizeText(title);\n this.subCount = this.subCount + 1;\n const subGraph = {\n id,\n nodes: nodeList,\n title: title.trim(),\n classes: [],\n dir,\n labelType: _title.type\n };\n log.info(\"Adding\", subGraph.id, subGraph.nodes, subGraph.dir);\n subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes;\n this.subGraphs.push(subGraph);\n this.subGraphLookup.set(id, subGraph);\n return id;\n }\n getPosForId(id) {\n for (const [i, subGraph] of this.subGraphs.entries()) {\n if (subGraph.id === id) {\n return i;\n }\n }\n return -1;\n }\n indexNodes2(id, pos) {\n const nodes = this.subGraphs[pos].nodes;\n this.secCount = this.secCount + 1;\n if (this.secCount > 2e3) {\n return {\n result: false,\n count: 0\n };\n }\n this.posCrossRef[this.secCount] = pos;\n if (this.subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n };\n }\n let count = 0;\n let posCount = 1;\n while (count < nodes.length) {\n const childPos = this.getPosForId(nodes[count]);\n if (childPos >= 0) {\n const res = this.indexNodes2(id, childPos);\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n };\n } else {\n posCount = posCount + res.count;\n }\n }\n count = count + 1;\n }\n return {\n result: false,\n count: posCount\n };\n }\n getDepthFirstPos(pos) {\n return this.posCrossRef[pos];\n }\n indexNodes() {\n this.secCount = -1;\n if (this.subGraphs.length > 0) {\n this.indexNodes2(\"none\", this.subGraphs.length - 1);\n }\n }\n getSubGraphs() {\n return this.subGraphs;\n }\n firstGraph() {\n if (this.firstGraphFlag) {\n this.firstGraphFlag = false;\n return true;\n }\n return false;\n }\n destructStartLink(_str) {\n let str = _str.trim();\n let type = \"arrow_open\";\n switch (str[0]) {\n case \"<\":\n type = \"arrow_point\";\n str = str.slice(1);\n break;\n case \"x\":\n type = \"arrow_cross\";\n str = str.slice(1);\n break;\n case \"o\":\n type = \"arrow_circle\";\n str = str.slice(1);\n break;\n }\n let stroke = \"normal\";\n if (str.includes(\"=\")) {\n stroke = \"thick\";\n }\n if (str.includes(\".\")) {\n stroke = \"dotted\";\n }\n return { type, stroke };\n }\n countChar(char, str) {\n const length = str.length;\n let count = 0;\n for (let i = 0; i < length; ++i) {\n if (str[i] === char) {\n ++count;\n }\n }\n return count;\n }\n destructEndLink(_str) {\n const str = _str.trim();\n let line = str.slice(0, -1);\n let type = \"arrow_open\";\n switch (str.slice(-1)) {\n case \"x\":\n type = \"arrow_cross\";\n if (str.startsWith(\"x\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \">\":\n type = \"arrow_point\";\n if (str.startsWith(\"<\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \"o\":\n type = \"arrow_circle\";\n if (str.startsWith(\"o\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n }\n let stroke = \"normal\";\n let length = line.length - 1;\n if (line.startsWith(\"=\")) {\n stroke = \"thick\";\n }\n if (line.startsWith(\"~\")) {\n stroke = \"invisible\";\n }\n const dots = this.countChar(\".\", line);\n if (dots) {\n stroke = \"dotted\";\n length = dots;\n }\n return { type, stroke, length };\n }\n destructLink(_str, _startStr) {\n const info = this.destructEndLink(_str);\n let startInfo;\n if (_startStr) {\n startInfo = this.destructStartLink(_startStr);\n if (startInfo.stroke !== info.stroke) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n if (startInfo.type === \"arrow_open\") {\n startInfo.type = info.type;\n } else {\n if (startInfo.type !== info.type) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n startInfo.type = \"double_\" + startInfo.type;\n }\n if (startInfo.type === \"double_arrow\") {\n startInfo.type = \"double_arrow_point\";\n }\n startInfo.length = info.length;\n return startInfo;\n }\n return info;\n }\n // Todo optimizer this by caching existing nodes\n exists(allSgs, _id) {\n for (const sg of allSgs) {\n if (sg.nodes.includes(_id)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Deletes an id from all subgraphs\n *\n */\n makeUniq(sg, allSubgraphs) {\n const res = [];\n sg.nodes.forEach((_id, pos) => {\n if (!this.exists(allSubgraphs, _id)) {\n res.push(sg.nodes[pos]);\n }\n });\n return { nodes: res };\n }\n getTypeFromVertex(vertex) {\n if (vertex.img) {\n return \"imageSquare\";\n }\n if (vertex.icon) {\n if (vertex.form === \"circle\") {\n return \"iconCircle\";\n }\n if (vertex.form === \"square\") {\n return \"iconSquare\";\n }\n if (vertex.form === \"rounded\") {\n return \"iconRounded\";\n }\n return \"icon\";\n }\n switch (vertex.type) {\n case \"square\":\n case void 0:\n return \"squareRect\";\n case \"round\":\n return \"roundedRect\";\n case \"ellipse\":\n return \"ellipse\";\n default:\n return vertex.type;\n }\n }\n findNode(nodes, id) {\n return nodes.find((node) => node.id === id);\n }\n destructEdgeType(type) {\n let arrowTypeStart = \"none\";\n let arrowTypeEnd = \"arrow_point\";\n switch (type) {\n case \"arrow_point\":\n case \"arrow_circle\":\n case \"arrow_cross\":\n arrowTypeEnd = type;\n break;\n case \"double_arrow_point\":\n case \"double_arrow_circle\":\n case \"double_arrow_cross\":\n arrowTypeStart = type.replace(\"double_\", \"\");\n arrowTypeEnd = arrowTypeStart;\n break;\n }\n return { arrowTypeStart, arrowTypeEnd };\n }\n addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, look) {\n const parentId = parentDB.get(vertex.id);\n const isGroup = subGraphDB.get(vertex.id) ?? false;\n const node = this.findNode(nodes, vertex.id);\n if (node) {\n node.cssStyles = vertex.styles;\n node.cssCompiledStyles = this.getCompiledStyles(vertex.classes);\n node.cssClasses = vertex.classes.join(\" \");\n } else {\n const baseNode = {\n id: vertex.id,\n label: vertex.text,\n labelStyle: \"\",\n parentId,\n padding: config.flowchart?.padding || 8,\n cssStyles: vertex.styles,\n cssCompiledStyles: this.getCompiledStyles([\"default\", \"node\", ...vertex.classes]),\n cssClasses: \"default \" + vertex.classes.join(\" \"),\n dir: vertex.dir,\n domId: vertex.domId,\n look,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: this.getTooltip(vertex.id),\n icon: vertex.icon,\n pos: vertex.pos,\n img: vertex.img,\n assetWidth: vertex.assetWidth,\n assetHeight: vertex.assetHeight,\n constraint: vertex.constraint\n };\n if (isGroup) {\n nodes.push({\n ...baseNode,\n isGroup: true,\n shape: \"rect\"\n });\n } else {\n nodes.push({\n ...baseNode,\n isGroup: false,\n shape: this.getTypeFromVertex(vertex)\n });\n }\n }\n }\n getCompiledStyles(classDefs) {\n let compiledStyles = [];\n for (const customClass of classDefs) {\n const cssClass = this.classes.get(customClass);\n if (cssClass?.styles) {\n compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s) => s.trim());\n }\n if (cssClass?.textStyles) {\n compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s) => s.trim());\n }\n }\n return compiledStyles;\n }\n getData() {\n const config = getConfig();\n const nodes = [];\n const edges = [];\n const subGraphs = this.getSubGraphs();\n const parentDB = /* @__PURE__ */ new Map();\n const subGraphDB = /* @__PURE__ */ new Map();\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n if (subGraph.nodes.length > 0) {\n subGraphDB.set(subGraph.id, true);\n }\n for (const id of subGraph.nodes) {\n parentDB.set(id, subGraph.id);\n }\n }\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n nodes.push({\n id: subGraph.id,\n label: subGraph.title,\n labelStyle: \"\",\n parentId: parentDB.get(subGraph.id),\n padding: 8,\n cssCompiledStyles: this.getCompiledStyles(subGraph.classes),\n cssClasses: subGraph.classes.join(\" \"),\n shape: \"rect\",\n dir: subGraph.dir,\n isGroup: true,\n look: config.look\n });\n }\n const n = this.getVertices();\n n.forEach((vertex) => {\n this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || \"classic\");\n });\n const e = this.getEdges();\n e.forEach((rawEdge, index) => {\n const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type);\n const styles = [...e.defaultStyle ?? []];\n if (rawEdge.style) {\n styles.push(...rawEdge.style);\n }\n const edge = {\n id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: \"L\" }, rawEdge.id),\n isUserDefinedId: rawEdge.isUserDefinedId,\n start: rawEdge.start,\n end: rawEdge.end,\n type: rawEdge.type ?? \"normal\",\n label: rawEdge.text,\n labelpos: \"c\",\n thickness: rawEdge.stroke,\n minlen: rawEdge.length,\n classes: rawEdge?.stroke === \"invisible\" ? \"\" : \"edge-thickness-normal edge-pattern-solid flowchart-link\",\n arrowTypeStart: rawEdge?.stroke === \"invisible\" || rawEdge?.type === \"arrow_open\" ? \"none\" : arrowTypeStart,\n arrowTypeEnd: rawEdge?.stroke === \"invisible\" || rawEdge?.type === \"arrow_open\" ? \"none\" : arrowTypeEnd,\n arrowheadStyle: \"fill: #333\",\n cssCompiledStyles: this.getCompiledStyles(rawEdge.classes),\n labelStyle: styles,\n style: styles,\n pattern: rawEdge.stroke,\n look: config.look,\n animate: rawEdge.animate,\n animation: rawEdge.animation,\n curve: rawEdge.interpolate || this.edges.defaultInterpolate || config.flowchart?.curve\n };\n edges.push(edge);\n });\n return { nodes, edges, other: {}, config };\n }\n defaultConfig() {\n return defaultConfig.flowchart;\n }\n};\n\n// src/diagrams/flowchart/flowRenderer-v3-unified.ts\nimport { select as select2 } from \"d3\";\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing state diagram (v2)\", id);\n const { securityLevel, flowchart: conf, layout } = getConfig();\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select2(\"#i\" + id);\n }\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n log.debug(\"Before getData: \");\n const data4Layout = diag.db.getData();\n log.debug(\"Data: \", data4Layout);\n const svg = getDiagramElement(id, securityLevel);\n const direction = diag.db.getDirection();\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n if (data4Layout.layoutAlgorithm === \"dagre\" && layout === \"elk\") {\n log.warn(\n \"flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback.\"\n );\n }\n data4Layout.direction = direction;\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"point\", \"circle\", \"cross\"];\n data4Layout.diagramId = id;\n log.debug(\"REF1:\", data4Layout);\n await render(data4Layout, svg);\n const padding = data4Layout.config.flowchart?.diagramPadding ?? 8;\n utils_default.insertTitle(\n svg,\n \"flowchartTitleText\",\n conf?.titleTopMargin || 0,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"flowchart\", conf?.useMaxWidth || false);\n for (const vertex of data4Layout.nodes) {\n const node = select2(`#${id} [id=\"${vertex.id}\"]`);\n if (!node || !vertex.link) {\n continue;\n }\n const link = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"class\", vertex.cssClasses);\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"rel\", \"noopener\");\n if (securityLevel === \"sandbox\") {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", \"_top\");\n } else if (vertex.linkTarget) {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", vertex.linkTarget);\n }\n const linkNode = node.insert(function() {\n return link;\n }, \":first-child\");\n const shape = node.select(\".label-container\");\n if (shape) {\n linkNode.append(function() {\n return shape.node();\n });\n }\n const label = node.select(\".label\");\n if (label) {\n linkNode.append(function() {\n return label.node();\n });\n }\n }\n}, \"draw\");\nvar flowRenderer_v3_unified_default = {\n getClasses,\n draw\n};\n\n// src/diagrams/flowchart/parser/flow.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 75, 77, 78], $VD = [1, 78], $VE = [1, 91], $VF = [1, 96], $VG = [1, 95], $VH = [1, 92], $VI = [1, 88], $VJ = [1, 94], $VK = [1, 90], $VL = [1, 97], $VM = [1, 93], $VN = [1, 98], $VO = [1, 89], $VP = [8, 9, 10, 11, 40, 75, 77, 78], $VQ = [8, 9, 10, 11, 40, 46, 75, 77, 78], $VR = [8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VS = [8, 9, 11, 44, 60, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VT = [44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VU = [1, 121], $VV = [1, 122], $VW = [1, 124], $VX = [1, 123], $VY = [44, 60, 62, 74, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VZ = [1, 133], $V_ = [1, 147], $V$ = [1, 148], $V01 = [1, 149], $V11 = [1, 150], $V21 = [1, 135], $V31 = [1, 137], $V41 = [1, 141], $V51 = [1, 142], $V61 = [1, 143], $V71 = [1, 144], $V81 = [1, 145], $V91 = [1, 146], $Va1 = [1, 151], $Vb1 = [1, 152], $Vc1 = [1, 131], $Vd1 = [1, 132], $Ve1 = [1, 139], $Vf1 = [1, 134], $Vg1 = [1, 138], $Vh1 = [1, 136], $Vi1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vj1 = [1, 154], $Vk1 = [1, 156], $Vl1 = [8, 9, 11], $Vm1 = [8, 9, 10, 11, 14, 44, 60, 89, 105, 106, 109, 111, 114, 115, 116], $Vn1 = [1, 176], $Vo1 = [1, 172], $Vp1 = [1, 173], $Vq1 = [1, 177], $Vr1 = [1, 174], $Vs1 = [1, 175], $Vt1 = [77, 116, 119], $Vu1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 84, 85, 86, 87, 88, 89, 90, 105, 109, 111, 114, 115, 116], $Vv1 = [10, 106], $Vw1 = [31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 116, 117, 118], $Vx1 = [1, 247], $Vy1 = [1, 245], $Vz1 = [1, 249], $VA1 = [1, 243], $VB1 = [1, 244], $VC1 = [1, 246], $VD1 = [1, 248], $VE1 = [1, 250], $VF1 = [1, 268], $VG1 = [8, 9, 11, 106], $VH1 = [8, 9, 10, 11, 60, 84, 105, 106, 109, 110, 111, 112];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"graphConfig\": 4, \"document\": 5, \"line\": 6, \"statement\": 7, \"SEMI\": 8, \"NEWLINE\": 9, \"SPACE\": 10, \"EOF\": 11, \"GRAPH\": 12, \"NODIR\": 13, \"DIR\": 14, \"FirstStmtSeparator\": 15, \"ending\": 16, \"endToken\": 17, \"spaceList\": 18, \"spaceListNewline\": 19, \"vertexStatement\": 20, \"separator\": 21, \"styleStatement\": 22, \"linkStyleStatement\": 23, \"classDefStatement\": 24, \"classStatement\": 25, \"clickStatement\": 26, \"subgraph\": 27, \"textNoTags\": 28, \"SQS\": 29, \"text\": 30, \"SQE\": 31, \"end\": 32, \"direction\": 33, \"acc_title\": 34, \"acc_title_value\": 35, \"acc_descr\": 36, \"acc_descr_value\": 37, \"acc_descr_multiline_value\": 38, \"shapeData\": 39, \"SHAPE_DATA\": 40, \"link\": 41, \"node\": 42, \"styledVertex\": 43, \"AMP\": 44, \"vertex\": 45, \"STYLE_SEPARATOR\": 46, \"idString\": 47, \"DOUBLECIRCLESTART\": 48, \"DOUBLECIRCLEEND\": 49, \"PS\": 50, \"PE\": 51, \"(-\": 52, \"-)\": 53, \"STADIUMSTART\": 54, \"STADIUMEND\": 55, \"SUBROUTINESTART\": 56, \"SUBROUTINEEND\": 57, \"VERTEX_WITH_PROPS_START\": 58, \"NODE_STRING[field]\": 59, \"COLON\": 60, \"NODE_STRING[value]\": 61, \"PIPE\": 62, \"CYLINDERSTART\": 63, \"CYLINDEREND\": 64, \"DIAMOND_START\": 65, \"DIAMOND_STOP\": 66, \"TAGEND\": 67, \"TRAPSTART\": 68, \"TRAPEND\": 69, \"INVTRAPSTART\": 70, \"INVTRAPEND\": 71, \"linkStatement\": 72, \"arrowText\": 73, \"TESTSTR\": 74, \"START_LINK\": 75, \"edgeText\": 76, \"LINK\": 77, \"LINK_ID\": 78, \"edgeTextToken\": 79, \"STR\": 80, \"MD_STR\": 81, \"textToken\": 82, \"keywords\": 83, \"STYLE\": 84, \"LINKSTYLE\": 85, \"CLASSDEF\": 86, \"CLASS\": 87, \"CLICK\": 88, \"DOWN\": 89, \"UP\": 90, \"textNoTagsToken\": 91, \"stylesOpt\": 92, \"idString[vertex]\": 93, \"idString[class]\": 94, \"CALLBACKNAME\": 95, \"CALLBACKARGS\": 96, \"HREF\": 97, \"LINK_TARGET\": 98, \"STR[link]\": 99, \"STR[tooltip]\": 100, \"alphaNum\": 101, \"DEFAULT\": 102, \"numList\": 103, \"INTERPOLATE\": 104, \"NUM\": 105, \"COMMA\": 106, \"style\": 107, \"styleComponent\": 108, \"NODE_STRING\": 109, \"UNIT\": 110, \"BRKT\": 111, \"PCT\": 112, \"idStringToken\": 113, \"MINUS\": 114, \"MULT\": 115, \"UNICODE_TEXT\": 116, \"TEXT\": 117, \"TAGSTART\": 118, \"EDGE_TEXT\": 119, \"alphaNumToken\": 120, \"direction_tb\": 121, \"direction_bt\": 122, \"direction_rl\": 123, \"direction_lr\": 124, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 8: \"SEMI\", 9: \"NEWLINE\", 10: \"SPACE\", 11: \"EOF\", 12: \"GRAPH\", 13: \"NODIR\", 14: \"DIR\", 27: \"subgraph\", 29: \"SQS\", 31: \"SQE\", 32: \"end\", 34: \"acc_title\", 35: \"acc_title_value\", 36: \"acc_descr\", 37: \"acc_descr_value\", 38: \"acc_descr_multiline_value\", 40: \"SHAPE_DATA\", 44: \"AMP\", 46: \"STYLE_SEPARATOR\", 48: \"DOUBLECIRCLESTART\", 49: \"DOUBLECIRCLEEND\", 50: \"PS\", 51: \"PE\", 52: \"(-\", 53: \"-)\", 54: \"STADIUMSTART\", 55: \"STADIUMEND\", 56: \"SUBROUTINESTART\", 57: \"SUBROUTINEEND\", 58: \"VERTEX_WITH_PROPS_START\", 59: \"NODE_STRING[field]\", 60: \"COLON\", 61: \"NODE_STRING[value]\", 62: \"PIPE\", 63: \"CYLINDERSTART\", 64: \"CYLINDEREND\", 65: \"DIAMOND_START\", 66: \"DIAMOND_STOP\", 67: \"TAGEND\", 68: \"TRAPSTART\", 69: \"TRAPEND\", 70: \"INVTRAPSTART\", 71: \"INVTRAPEND\", 74: \"TESTSTR\", 75: \"START_LINK\", 77: \"LINK\", 78: \"LINK_ID\", 80: \"STR\", 81: \"MD_STR\", 84: \"STYLE\", 85: \"LINKSTYLE\", 86: \"CLASSDEF\", 87: \"CLASS\", 88: \"CLICK\", 89: \"DOWN\", 90: \"UP\", 93: \"idString[vertex]\", 94: \"idString[class]\", 95: \"CALLBACKNAME\", 96: \"CALLBACKARGS\", 97: \"HREF\", 98: \"LINK_TARGET\", 99: \"STR[link]\", 100: \"STR[tooltip]\", 102: \"DEFAULT\", 104: \"INTERPOLATE\", 105: \"NUM\", 106: \"COMMA\", 109: \"NODE_STRING\", 110: \"UNIT\", 111: \"BRKT\", 112: \"PCT\", 114: \"MINUS\", 115: \"MULT\", 116: \"UNICODE_TEXT\", 117: \"TEXT\", 118: \"TAGSTART\", 119: \"EDGE_TEXT\", 121: \"direction_tb\", 122: \"direction_bt\", 123: \"direction_rl\", 124: \"direction_lr\" },\n productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [39, 2], [39, 1], [20, 4], [20, 3], [20, 4], [20, 2], [20, 2], [20, 1], [42, 1], [42, 6], [42, 5], [43, 1], [43, 3], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 8], [45, 4], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 4], [45, 4], [45, 1], [41, 2], [41, 3], [41, 3], [41, 1], [41, 3], [41, 4], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [72, 2], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [103, 1], [103, 3], [92, 1], [92, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [82, 1], [82, 1], [82, 1], [82, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [79, 1], [79, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [47, 1], [47, 2], [101, 1], [101, 2], [33, 1], [33, 1], [33, 1], [33, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 2:\n this.$ = [];\n break;\n case 3:\n if (!Array.isArray($$[$0]) || $$[$0].length > 0) {\n $$[$0 - 1].push($$[$0]);\n }\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 183:\n this.$ = $$[$0];\n break;\n case 11:\n yy.setDirection(\"TB\");\n this.$ = \"TB\";\n break;\n case 12:\n yy.setDirection($$[$0 - 1]);\n this.$ = $$[$0 - 1];\n break;\n case 27:\n this.$ = $$[$0 - 1].nodes;\n break;\n case 28:\n case 29:\n case 30:\n case 31:\n case 32:\n this.$ = [];\n break;\n case 33:\n this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);\n break;\n case 34:\n this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);\n break;\n case 35:\n this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);\n break;\n case 37:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 38:\n case 39:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 43:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 44:\n this.$ = $$[$0];\n break;\n case 45:\n yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 46:\n yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);\n this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };\n break;\n case 47:\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 48:\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };\n break;\n case 49:\n yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1], shapeData: $$[$0] };\n break;\n case 50:\n this.$ = { stmt: $$[$0], nodes: $$[$0] };\n break;\n case 51:\n this.$ = [$$[$0]];\n break;\n case 52:\n yy.addVertex($$[$0 - 5][$$[$0 - 5].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0 - 4]);\n this.$ = $$[$0 - 5].concat($$[$0]);\n break;\n case 53:\n this.$ = $$[$0 - 4].concat($$[$0]);\n break;\n case 54:\n this.$ = $$[$0];\n break;\n case 55:\n this.$ = $$[$0 - 2];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 56:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"square\");\n break;\n case 57:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"doublecircle\");\n break;\n case 58:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"circle\");\n break;\n case 59:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"ellipse\");\n break;\n case 60:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"stadium\");\n break;\n case 61:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"subroutine\");\n break;\n case 62:\n this.$ = $$[$0 - 7];\n yy.addVertex($$[$0 - 7], $$[$0 - 1], \"rect\", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));\n break;\n case 63:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"cylinder\");\n break;\n case 64:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"round\");\n break;\n case 65:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"diamond\");\n break;\n case 66:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"hexagon\");\n break;\n case 67:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"odd\");\n break;\n case 68:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"trapezoid\");\n break;\n case 69:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"inv_trapezoid\");\n break;\n case 70:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_right\");\n break;\n case 71:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_left\");\n break;\n case 72:\n this.$ = $$[$0];\n yy.addVertex($$[$0]);\n break;\n case 73:\n $$[$0 - 1].text = $$[$0];\n this.$ = $$[$0 - 1];\n break;\n case 74:\n case 75:\n $$[$0 - 2].text = $$[$0 - 1];\n this.$ = $$[$0 - 2];\n break;\n case 76:\n this.$ = $$[$0];\n break;\n case 77:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1] };\n break;\n case 78:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1], \"id\": $$[$0 - 3] };\n break;\n case 79:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 80:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 81:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 82:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 83:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length };\n break;\n case 84:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"id\": $$[$0 - 1] };\n break;\n case 85:\n this.$ = $$[$0 - 1];\n break;\n case 86:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 87:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 88:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 89:\n case 104:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 101:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 102:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 103:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 105:\n this.$ = $$[$0 - 4];\n yy.addClass($$[$0 - 2], $$[$0]);\n break;\n case 106:\n this.$ = $$[$0 - 4];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 107:\n case 115:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 108:\n case 116:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 109:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 110:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 111:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 112:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 113:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 114:\n this.$ = $$[$0 - 6];\n yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 6], $$[$0 - 2]);\n break;\n case 117:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 118:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 119:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n break;\n case 120:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 5], $$[$0 - 2]);\n break;\n case 121:\n this.$ = $$[$0 - 4];\n yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);\n break;\n case 122:\n this.$ = $$[$0 - 4];\n yy.updateLink([$$[$0 - 2]], $$[$0]);\n break;\n case 123:\n this.$ = $$[$0 - 4];\n yy.updateLink($$[$0 - 2], $$[$0]);\n break;\n case 124:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);\n yy.updateLink([$$[$0 - 6]], $$[$0]);\n break;\n case 125:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);\n yy.updateLink($$[$0 - 6], $$[$0]);\n break;\n case 126:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);\n break;\n case 127:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);\n break;\n case 128:\n case 130:\n this.$ = [$$[$0]];\n break;\n case 129:\n case 131:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 133:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 181:\n this.$ = $$[$0];\n break;\n case 182:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 184:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 185:\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 186:\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 187:\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 188:\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 41: 59, 72: 63, 75: [1, 64], 77: [1, 66], 78: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 71 }, { 8: $Vz, 9: $VA, 10: [1, 72], 11: $VB, 21: 73 }, o($Vy, [2, 36]), { 35: [1, 74] }, { 37: [1, 75] }, o($Vy, [2, 39]), o($VC, [2, 50], { 18: 76, 39: 77, 10: $Vx, 40: $VD }), { 10: [1, 79] }, { 10: [1, 80] }, { 10: [1, 81] }, { 10: [1, 82] }, { 14: $VE, 44: $VF, 60: $VG, 80: [1, 86], 89: $VH, 95: [1, 83], 97: [1, 84], 101: 85, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, o($Vy, [2, 185]), o($Vy, [2, 186]), o($Vy, [2, 187]), o($Vy, [2, 188]), o($VP, [2, 51]), o($VP, [2, 54], { 46: [1, 99] }), o($VQ, [2, 72], { 113: 112, 29: [1, 100], 44: $Vd, 48: [1, 101], 50: [1, 102], 52: [1, 103], 54: [1, 104], 56: [1, 105], 58: [1, 106], 60: $Ve, 63: [1, 107], 65: [1, 108], 67: [1, 109], 68: [1, 110], 70: [1, 111], 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o($VR, [2, 181]), o($VR, [2, 142]), o($VR, [2, 143]), o($VR, [2, 144]), o($VR, [2, 145]), o($VR, [2, 146]), o($VR, [2, 147]), o($VR, [2, 148]), o($VR, [2, 149]), o($VR, [2, 150]), o($VR, [2, 151]), o($VR, [2, 152]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 113] }, o($VS, [2, 26], { 18: 114, 10: $Vx }), o($Vy, [2, 27]), { 42: 115, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VT, [2, 76], { 73: 116, 62: [1, 118], 74: [1, 117] }), { 76: 119, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, { 75: [1, 125], 77: [1, 126] }, o($VY, [2, 83]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VZ, 12: $V_, 14: $V$, 27: $V01, 28: 127, 32: $V11, 44: $V21, 60: $V31, 75: $V41, 80: [1, 129], 81: [1, 130], 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 128, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o($Vi1, $V4, { 5: 153 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 48], { 44: $Vj1 }), o($VC, [2, 49], { 18: 155, 10: $Vx, 40: $Vk1 }), o($VP, [2, 44]), { 44: $Vd, 47: 157, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 102: [1, 158], 103: 159, 105: [1, 160] }, { 44: $Vd, 47: 161, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 44: $Vd, 47: 162, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 107], { 10: [1, 163], 96: [1, 164] }), { 80: [1, 165] }, o($Vl1, [2, 115], { 120: 167, 10: [1, 166], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 117], { 10: [1, 168] }), o($Vm1, [2, 183]), o($Vm1, [2, 170]), o($Vm1, [2, 171]), o($Vm1, [2, 172]), o($Vm1, [2, 173]), o($Vm1, [2, 174]), o($Vm1, [2, 175]), o($Vm1, [2, 176]), o($Vm1, [2, 177]), o($Vm1, [2, 178]), o($Vm1, [2, 179]), o($Vm1, [2, 180]), { 44: $Vd, 47: 169, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 30: 170, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 178, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 180, 50: [1, 179], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 181, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 182, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 183, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 109: [1, 184] }, { 30: 185, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 186, 65: [1, 187], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 188, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 189, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 190, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VR, [2, 182]), o($V3, [2, 20]), o($VS, [2, 25]), o($VC, [2, 46], { 39: 191, 18: 192, 10: $Vx, 40: $VD }), o($VT, [2, 73], { 10: [1, 193] }), { 10: [1, 194] }, { 30: 195, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 77: [1, 196], 79: 197, 116: $VW, 119: $VX }, o($Vt1, [2, 79]), o($Vt1, [2, 81]), o($Vt1, [2, 82]), o($Vt1, [2, 168]), o($Vt1, [2, 169]), { 76: 198, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, o($VY, [2, 84]), { 8: $Vz, 9: $VA, 10: $VZ, 11: $VB, 12: $V_, 14: $V$, 21: 200, 27: $V01, 29: [1, 199], 32: $V11, 44: $V21, 60: $V31, 75: $V41, 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 201, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o($Vu1, [2, 101]), o($Vu1, [2, 103]), o($Vu1, [2, 104]), o($Vu1, [2, 157]), o($Vu1, [2, 158]), o($Vu1, [2, 159]), o($Vu1, [2, 160]), o($Vu1, [2, 161]), o($Vu1, [2, 162]), o($Vu1, [2, 163]), o($Vu1, [2, 164]), o($Vu1, [2, 165]), o($Vu1, [2, 166]), o($Vu1, [2, 167]), o($Vu1, [2, 90]), o($Vu1, [2, 91]), o($Vu1, [2, 92]), o($Vu1, [2, 93]), o($Vu1, [2, 94]), o($Vu1, [2, 95]), o($Vu1, [2, 96]), o($Vu1, [2, 97]), o($Vu1, [2, 98]), o($Vu1, [2, 99]), o($Vu1, [2, 100]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 202], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx, 18: 203 }, { 44: [1, 204] }, o($VP, [2, 43]), { 10: [1, 205], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 206] }, { 10: [1, 207], 106: [1, 208] }, o($Vv1, [2, 128]), { 10: [1, 209], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 210], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 80: [1, 211] }, o($Vl1, [2, 109], { 10: [1, 212] }), o($Vl1, [2, 111], { 10: [1, 213] }), { 80: [1, 214] }, o($Vm1, [2, 184]), { 80: [1, 215], 98: [1, 216] }, o($VP, [2, 55], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), { 31: [1, 217], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($Vw1, [2, 86]), o($Vw1, [2, 88]), o($Vw1, [2, 89]), o($Vw1, [2, 153]), o($Vw1, [2, 154]), o($Vw1, [2, 155]), o($Vw1, [2, 156]), { 49: [1, 219], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 220, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 51: [1, 221], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 53: [1, 222], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 55: [1, 223], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 57: [1, 224], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 60: [1, 225] }, { 64: [1, 226], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 66: [1, 227], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 228, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 31: [1, 229], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 230], 71: [1, 231], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 233], 71: [1, 232], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VC, [2, 45], { 18: 155, 10: $Vx, 40: $Vk1 }), o($VC, [2, 47], { 44: $Vj1 }), o($VT, [2, 75]), o($VT, [2, 74]), { 62: [1, 234], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VT, [2, 77]), o($Vt1, [2, 80]), { 77: [1, 235], 79: 197, 116: $VW, 119: $VX }, { 30: 236, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($Vi1, $V4, { 5: 237 }), o($Vu1, [2, 102]), o($Vy, [2, 35]), { 43: 238, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: $Vx, 18: 239 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 240, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 251, 104: [1, 252], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 253, 104: [1, 254], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 105: [1, 255] }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 256, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 44: $Vd, 47: 257, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 108]), { 80: [1, 258] }, { 80: [1, 259], 98: [1, 260] }, o($Vl1, [2, 116]), o($Vl1, [2, 118], { 10: [1, 261] }), o($Vl1, [2, 119]), o($VQ, [2, 56]), o($Vw1, [2, 87]), o($VQ, [2, 57]), { 51: [1, 262], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 64]), o($VQ, [2, 59]), o($VQ, [2, 60]), o($VQ, [2, 61]), { 109: [1, 263] }, o($VQ, [2, 63]), o($VQ, [2, 65]), { 66: [1, 264], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 67]), o($VQ, [2, 68]), o($VQ, [2, 70]), o($VQ, [2, 69]), o($VQ, [2, 71]), o([10, 44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], [2, 85]), o($VT, [2, 78]), { 31: [1, 265], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 266], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o($VP, [2, 53]), { 43: 267, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 121], { 106: $VF1 }), o($VG1, [2, 130], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o($VH1, [2, 132]), o($VH1, [2, 134]), o($VH1, [2, 135]), o($VH1, [2, 136]), o($VH1, [2, 137]), o($VH1, [2, 138]), o($VH1, [2, 139]), o($VH1, [2, 140]), o($VH1, [2, 141]), o($Vl1, [2, 122], { 106: $VF1 }), { 10: [1, 270] }, o($Vl1, [2, 123], { 106: $VF1 }), { 10: [1, 271] }, o($Vv1, [2, 129]), o($Vl1, [2, 105], { 106: $VF1 }), o($Vl1, [2, 106], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o($Vl1, [2, 110]), o($Vl1, [2, 112], { 10: [1, 272] }), o($Vl1, [2, 113]), { 98: [1, 273] }, { 51: [1, 274] }, { 62: [1, 275] }, { 66: [1, 276] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 277 }, o($Vy, [2, 34]), o($VP, [2, 52]), { 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 107: 278, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o($VH1, [2, 133]), { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 279, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 280, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 98: [1, 281] }, o($Vl1, [2, 120]), o($VQ, [2, 58]), { 30: 282, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 66]), o($Vi1, $V4, { 5: 283 }), o($VG1, [2, 131], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o($Vl1, [2, 126], { 120: 167, 10: [1, 284], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 127], { 120: 167, 10: [1, 285], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 114]), { 31: [1, 286], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 287], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 288, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 289, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o($VQ, [2, 62]), o($Vy, [2, 33]), o($Vl1, [2, 124], { 106: $VF1 }), o($Vl1, [2, 125], { 106: $VF1 })],\n defaultActions: {},\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 34;\n break;\n case 1:\n this.popState();\n return \"acc_title_value\";\n break;\n case 2:\n this.begin(\"acc_descr\");\n return 36;\n break;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n break;\n case 7:\n this.pushState(\"shapeData\");\n yy_.yytext = \"\";\n return 40;\n break;\n case 8:\n this.pushState(\"shapeDataStr\");\n return 40;\n break;\n case 9:\n this.popState();\n return 40;\n break;\n case 10:\n const re = /\\n\\s*/g;\n yy_.yytext = yy_.yytext.replace(re, \"
\");\n return 40;\n break;\n case 11:\n return 40;\n break;\n case 12:\n this.popState();\n break;\n case 13:\n this.begin(\"callbackname\");\n break;\n case 14:\n this.popState();\n break;\n case 15:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 16:\n return 95;\n break;\n case 17:\n this.popState();\n break;\n case 18:\n return 96;\n break;\n case 19:\n return \"MD_STR\";\n break;\n case 20:\n this.popState();\n break;\n case 21:\n this.begin(\"md_string\");\n break;\n case 22:\n return \"STR\";\n break;\n case 23:\n this.popState();\n break;\n case 24:\n this.pushState(\"string\");\n break;\n case 25:\n return 84;\n break;\n case 26:\n return 102;\n break;\n case 27:\n return 85;\n break;\n case 28:\n return 104;\n break;\n case 29:\n return 86;\n break;\n case 30:\n return 87;\n break;\n case 31:\n return 97;\n break;\n case 32:\n this.begin(\"click\");\n break;\n case 33:\n this.popState();\n break;\n case 34:\n return 88;\n break;\n case 35:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 36:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 37:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 38:\n return 27;\n break;\n case 39:\n return 32;\n break;\n case 40:\n return 98;\n break;\n case 41:\n return 98;\n break;\n case 42:\n return 98;\n break;\n case 43:\n return 98;\n break;\n case 44:\n this.popState();\n return 13;\n break;\n case 45:\n this.popState();\n return 14;\n break;\n case 46:\n this.popState();\n return 14;\n break;\n case 47:\n this.popState();\n return 14;\n break;\n case 48:\n this.popState();\n return 14;\n break;\n case 49:\n this.popState();\n return 14;\n break;\n case 50:\n this.popState();\n return 14;\n break;\n case 51:\n this.popState();\n return 14;\n break;\n case 52:\n this.popState();\n return 14;\n break;\n case 53:\n this.popState();\n return 14;\n break;\n case 54:\n this.popState();\n return 14;\n break;\n case 55:\n return 121;\n break;\n case 56:\n return 122;\n break;\n case 57:\n return 123;\n break;\n case 58:\n return 124;\n break;\n case 59:\n return 78;\n break;\n case 60:\n return 105;\n break;\n case 61:\n return 111;\n break;\n case 62:\n return 46;\n break;\n case 63:\n return 60;\n break;\n case 64:\n return 44;\n break;\n case 65:\n return 8;\n break;\n case 66:\n return 106;\n break;\n case 67:\n return 115;\n break;\n case 68:\n this.popState();\n return 77;\n break;\n case 69:\n this.pushState(\"edgeText\");\n return 75;\n break;\n case 70:\n return 119;\n break;\n case 71:\n this.popState();\n return 77;\n break;\n case 72:\n this.pushState(\"thickEdgeText\");\n return 75;\n break;\n case 73:\n return 119;\n break;\n case 74:\n this.popState();\n return 77;\n break;\n case 75:\n this.pushState(\"dottedEdgeText\");\n return 75;\n break;\n case 76:\n return 119;\n break;\n case 77:\n return 77;\n break;\n case 78:\n this.popState();\n return 53;\n break;\n case 79:\n return \"TEXT\";\n break;\n case 80:\n this.pushState(\"ellipseText\");\n return 52;\n break;\n case 81:\n this.popState();\n return 55;\n break;\n case 82:\n this.pushState(\"text\");\n return 54;\n break;\n case 83:\n this.popState();\n return 57;\n break;\n case 84:\n this.pushState(\"text\");\n return 56;\n break;\n case 85:\n return 58;\n break;\n case 86:\n this.pushState(\"text\");\n return 67;\n break;\n case 87:\n this.popState();\n return 64;\n break;\n case 88:\n this.pushState(\"text\");\n return 63;\n break;\n case 89:\n this.popState();\n return 49;\n break;\n case 90:\n this.pushState(\"text\");\n return 48;\n break;\n case 91:\n this.popState();\n return 69;\n break;\n case 92:\n this.popState();\n return 71;\n break;\n case 93:\n return 117;\n break;\n case 94:\n this.pushState(\"trapText\");\n return 68;\n break;\n case 95:\n this.pushState(\"trapText\");\n return 70;\n break;\n case 96:\n return 118;\n break;\n case 97:\n return 67;\n break;\n case 98:\n return 90;\n break;\n case 99:\n return \"SEP\";\n break;\n case 100:\n return 89;\n break;\n case 101:\n return 115;\n break;\n case 102:\n return 111;\n break;\n case 103:\n return 44;\n break;\n case 104:\n return 109;\n break;\n case 105:\n return 114;\n break;\n case 106:\n return 116;\n break;\n case 107:\n this.popState();\n return 62;\n break;\n case 108:\n this.pushState(\"text\");\n return 62;\n break;\n case 109:\n this.popState();\n return 51;\n break;\n case 110:\n this.pushState(\"text\");\n return 50;\n break;\n case 111:\n this.popState();\n return 31;\n break;\n case 112:\n this.pushState(\"text\");\n return 29;\n break;\n case 113:\n this.popState();\n return 66;\n break;\n case 114:\n this.pushState(\"text\");\n return 65;\n break;\n case 115:\n return \"TEXT\";\n break;\n case 116:\n return \"QUOTE\";\n break;\n case 117:\n return 9;\n break;\n case 118:\n return 10;\n break;\n case 119:\n return 11;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:@\\{)/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\\\"]+)/, /^(?:[^}^\"]+)/, /^(?:\\})/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"][`])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\b)/, /^(?:class\\b)/, /^(?:href[\\s])/, /^(?:click[\\s]+)/, /^(?:[\\s\\n])/, /^(?:[^\\s\\n]*)/, /^(?:flowchart-elk\\b)/, /^(?:graph\\b)/, /^(?:flowchart\\b)/, /^(?:subgraph\\b)/, /^(?:end\\b\\s*)/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:(\\r?\\n)*\\s*\\n)/, /^(?:\\s*LR\\b)/, /^(?:\\s*RL\\b)/, /^(?:\\s*TB\\b)/, /^(?:\\s*BT\\b)/, /^(?:\\s*TD\\b)/, /^(?:\\s*BR\\b)/, /^(?:\\s*<)/, /^(?:\\s*>)/, /^(?:\\s*\\^)/, /^(?:\\s*v\\b)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:[^\\s\\\"]+@(?=[^\\{\\\"]))/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\\*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:[^=]|=(?!))/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[^\\.]|\\.(?!))/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:[-/\\)][\\)])/, /^(?:[^\\(\\)\\[\\]\\{\\}]|!\\)+)/, /^(?:\\(-)/, /^(?:\\]\\))/, /^(?:\\(\\[)/, /^(?:\\]\\])/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:>)/, /^(?:\\)\\])/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\(\\(\\()/, /^(?:[\\\\(?=\\])][\\]])/, /^(?:\\/(?=\\])\\])/, /^(?:\\/(?!\\])|\\\\(?!\\])|[^\\\\\\[\\]\\(\\)\\{\\}\\/]+)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:<)/, /^(?:>)/, /^(?:\\^)/, /^(?:\\\\\\|)/, /^(?:v\\b)/, /^(?:\\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!\"\\#$%&'*+\\.`?\\\\_\\/]|-(?=[^\\>\\-\\.])|(?!))+)/, /^(?:-)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\|)/, /^(?:\\|)/, /^(?:\\))/, /^(?:\\()/, /^(?:\\])/, /^(?:\\[)/, /^(?:(\\}))/, /^(?:\\{)/, /^(?:[^\\[\\]\\(\\)\\{\\}\\|\\\"]+)/, /^(?:\")/, /^(?:(\\r?\\n)+)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"shapeDataEndBracket\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"shapeDataStr\": { \"rules\": [9, 10, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"shapeData\": { \"rules\": [8, 11, 12, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"callbackargs\": { \"rules\": [17, 18, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"callbackname\": { \"rules\": [14, 15, 16, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"href\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"click\": { \"rules\": [21, 24, 33, 34, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"dottedEdgeText\": { \"rules\": [21, 24, 74, 76, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"thickEdgeText\": { \"rules\": [21, 24, 71, 73, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"edgeText\": { \"rules\": [21, 24, 68, 70, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"trapText\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 91, 92, 93, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"ellipseText\": { \"rules\": [21, 24, 77, 78, 79, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"text\": { \"rules\": [21, 24, 77, 80, 81, 82, 83, 84, 87, 88, 89, 90, 94, 95, 107, 108, 109, 110, 111, 112, 113, 114, 115], \"inclusive\": false }, \"vertex\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"dir\": { \"rules\": [21, 24, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [5, 6, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_title\": { \"rules\": [1, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"md_string\": { \"rules\": [19, 20, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"string\": { \"rules\": [21, 22, 23, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 13, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 74, 75, 77, 80, 82, 84, 85, 86, 88, 90, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 110, 112, 114, 116, 117, 118, 119], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar flow_default = parser;\n\n// src/diagrams/flowchart/parser/flowParser.ts\nvar newParser = Object.assign({}, flow_default);\nnewParser.parse = (src) => {\n const newSrc = src.replace(/}\\s*\\n/g, \"}\\n\");\n return flow_default.parse(newSrc);\n};\nvar flowParser_default = newParser;\n\n// src/diagrams/flowchart/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span {\n color: ${options.titleColor};\n }\n .cluster-label span p {\n background-color: transparent;\n }\n\n .label text,span {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n\n .root .anchor path {\n fill: ${options.lineColor} !important;\n stroke-width: 0;\n stroke: ${options.lineColor};\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .cluster rect {\n fill: ${options.clusterBkg};\n stroke: ${options.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n\n rect.text {\n fill: none;\n stroke-width: 0;\n }\n\n .icon-shape, .image-shape {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n padding: 2px;\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/flowchart/flowDiagram.ts\nvar diagram = {\n parser: flowParser_default,\n get db() {\n return new FlowDB();\n },\n renderer: flowRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.flowchart) {\n cnf.flowchart = {};\n }\n if (cnf.layout) {\n setConfig({ layout: cnf.layout });\n }\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["MERMAID_DOM_ID_PREFIX","FlowDB","_a","getConfig","setAccTitle","setAccDescription","setDiagramTitle","getAccTitle","getAccDescription","getDiagramTitle","txt","common_default","id","vertex","textObj","type","style","classes","dir","props","metadata","doc","yamlData","load","JSON_SCHEMA","edge","e","edgeDoc","s","isValidShape","_b","_start","_end","log","linkTextObj","existingLinks","getEdgeId","value","linkData","start","end","isLastStart","isFirstEnd","positions","interpolate","pos","_d","_c","_f","_e","ids","_style","classNode","newStyle","className","subGraph","tooltip","functionName","functionArgs","domId","argList","i","item","elem","utils_default","linkStr","target","element","fun","tooltipElem","select","el","rect","ver","clear","_id","list","_title","title","result","__name","a","prims","objs","dir2","nodeList","flowchartConfig","nodes","count","posCount","childPos","res","_str","str","stroke","char","length","line","dots","_startStr","info","startInfo","allSgs","sg","allSubgraphs","node","arrowTypeStart","arrowTypeEnd","parentDB","subGraphDB","config","look","parentId","isGroup","baseNode","classDefs","compiledStyles","customClass","cssClass","edges","subGraphs","rawEdge","index","styles","defaultConfig","getClasses","text","diagramObj","draw","_version","diag","securityLevel","conf","layout","sandboxElement","select2","data4Layout","svg","getDiagramElement","direction","getRegisteredLayoutAlgorithm","render","padding","setupViewPortForSVG","link","linkNode","shape","label","flowRenderer_v3_unified_default","parser","o","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","$Vf1","$Vg1","$Vh1","$Vi1","$Vj1","$Vk1","$Vl1","$Vm1","$Vn1","$Vo1","$Vp1","$Vq1","$Vr1","$Vs1","$Vt1","$Vu1","$Vv1","$Vw1","$Vx1","$Vy1","$Vz1","$VA1","$VB1","$VC1","$VD1","$VE1","$VF1","$VG1","$VH1","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","inf","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","re","Parser","flow_default","newParser","src","newSrc","flowParser_default","fade","color","opacity","channel2","khroma.channel","g","b","khroma.rgba","getStyles","options","getIconStyles","styles_default","diagram","cnf","setConfig"],"mappings":"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,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,EAAE,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,GAAI,IAAK,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,GAAI,GAAG,EAAGC,GAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,EAAG,GAAI,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK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G,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAA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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"flowDiagram-NV44I4VS-twM9GedW.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-NV44I4VS.mjs"],"sourcesContent":["import {\n getIconStyles\n} from \"./chunk-FMBD7UC4.mjs\";\nimport {\n JSON_SCHEMA,\n load\n} from \"./chunk-MI3HLSF2.mjs\";\nimport {\n getDiagramElement\n} from \"./chunk-55IACEB6.mjs\";\nimport {\n setupViewPortForSVG\n} from \"./chunk-QN33PNHL.mjs\";\nimport {\n getRegisteredLayoutAlgorithm,\n render\n} from \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport {\n isValidShape\n} from \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n getEdgeId,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig2 as defaultConfig,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setConfig2 as setConfig,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/flowchart/flowDb.ts\nimport { select } from \"d3\";\nvar MERMAID_DOM_ID_PREFIX = \"flowchart-\";\nvar FlowDB = class {\n // cspell:ignore funs\n constructor() {\n this.vertexCounter = 0;\n this.config = getConfig();\n this.vertices = /* @__PURE__ */ new Map();\n this.edges = [];\n this.classes = /* @__PURE__ */ new Map();\n this.subGraphs = [];\n this.subGraphLookup = /* @__PURE__ */ new Map();\n this.tooltips = /* @__PURE__ */ new Map();\n this.subCount = 0;\n this.firstGraphFlag = true;\n // As in graph\n this.secCount = -1;\n this.posCrossRef = [];\n // Functions to be run after graph rendering\n this.funs = [];\n this.setAccTitle = setAccTitle;\n this.setAccDescription = setAccDescription;\n this.setDiagramTitle = setDiagramTitle;\n this.getAccTitle = getAccTitle;\n this.getAccDescription = getAccDescription;\n this.getDiagramTitle = getDiagramTitle;\n this.funs.push(this.setupToolTips.bind(this));\n this.addVertex = this.addVertex.bind(this);\n this.firstGraph = this.firstGraph.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.addSubGraph = this.addSubGraph.bind(this);\n this.addLink = this.addLink.bind(this);\n this.setLink = this.setLink.bind(this);\n this.updateLink = this.updateLink.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClass = this.setClass.bind(this);\n this.destructLink = this.destructLink.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setTooltip = this.setTooltip.bind(this);\n this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this);\n this.setClickFun = this.setClickFun.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n this.lex = {\n firstGraph: this.firstGraph.bind(this)\n };\n this.clear();\n this.setGen(\"gen-2\");\n }\n static {\n __name(this, \"FlowDB\");\n }\n sanitizeText(txt) {\n return common_default.sanitizeText(txt, this.config);\n }\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - id of the node\n */\n lookUpDomId(id) {\n for (const vertex of this.vertices.values()) {\n if (vertex.id === id) {\n return vertex.domId;\n }\n }\n return id;\n }\n /**\n * Function called by parser when a node definition has been found\n */\n addVertex(id, textObj, type, style, classes, dir, props = {}, metadata) {\n if (!id || id.trim().length === 0) {\n return;\n }\n let doc;\n if (metadata !== void 0) {\n let yamlData;\n if (!metadata.includes(\"\\n\")) {\n yamlData = \"{\\n\" + metadata + \"\\n}\";\n } else {\n yamlData = metadata + \"\\n\";\n }\n doc = load(yamlData, { schema: JSON_SCHEMA });\n }\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n const edgeDoc = doc;\n if (edgeDoc?.animate !== void 0) {\n edge.animate = edgeDoc.animate;\n }\n if (edgeDoc?.animation !== void 0) {\n edge.animation = edgeDoc.animation;\n }\n if (edgeDoc?.curve !== void 0) {\n edge.interpolate = edgeDoc.curve;\n }\n return;\n }\n let txt;\n let vertex = this.vertices.get(id);\n if (vertex === void 0) {\n vertex = {\n id,\n labelType: \"text\",\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + this.vertexCounter,\n styles: [],\n classes: []\n };\n this.vertices.set(id, vertex);\n }\n this.vertexCounter++;\n if (textObj !== void 0) {\n this.config = getConfig();\n txt = this.sanitizeText(textObj.text.trim());\n vertex.labelType = textObj.type;\n if (txt.startsWith('\"') && txt.endsWith('\"')) {\n txt = txt.substring(1, txt.length - 1);\n }\n vertex.text = txt;\n } else {\n if (vertex.text === void 0) {\n vertex.text = id;\n }\n }\n if (type !== void 0) {\n vertex.type = type;\n }\n if (style !== void 0 && style !== null) {\n style.forEach((s) => {\n vertex.styles.push(s);\n });\n }\n if (classes !== void 0 && classes !== null) {\n classes.forEach((s) => {\n vertex.classes.push(s);\n });\n }\n if (dir !== void 0) {\n vertex.dir = dir;\n }\n if (vertex.props === void 0) {\n vertex.props = props;\n } else if (props !== void 0) {\n Object.assign(vertex.props, props);\n }\n if (doc !== void 0) {\n if (doc.shape) {\n if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes(\"_\")) {\n throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);\n } else if (!isValidShape(doc.shape)) {\n throw new Error(`No such shape: ${doc.shape}.`);\n }\n vertex.type = doc?.shape;\n }\n if (doc?.label) {\n vertex.text = doc?.label;\n }\n if (doc?.icon) {\n vertex.icon = doc?.icon;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = \"\";\n }\n }\n if (doc?.form) {\n vertex.form = doc?.form;\n }\n if (doc?.pos) {\n vertex.pos = doc?.pos;\n }\n if (doc?.img) {\n vertex.img = doc?.img;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = \"\";\n }\n }\n if (doc?.constraint) {\n vertex.constraint = doc.constraint;\n }\n if (doc.w) {\n vertex.assetWidth = Number(doc.w);\n }\n if (doc.h) {\n vertex.assetHeight = Number(doc.h);\n }\n }\n }\n /**\n * Function called by parser when a link/edge definition has been found\n *\n */\n addSingleLink(_start, _end, type, id) {\n const start = _start;\n const end = _end;\n const edge = {\n start,\n end,\n type: void 0,\n text: \"\",\n labelType: \"text\",\n classes: [],\n isUserDefinedId: false,\n interpolate: this.edges.defaultInterpolate\n };\n log.info(\"abc78 Got edge...\", edge);\n const linkTextObj = type.text;\n if (linkTextObj !== void 0) {\n edge.text = this.sanitizeText(linkTextObj.text.trim());\n if (edge.text.startsWith('\"') && edge.text.endsWith('\"')) {\n edge.text = edge.text.substring(1, edge.text.length - 1);\n }\n edge.labelType = linkTextObj.type;\n }\n if (type !== void 0) {\n edge.type = type.type;\n edge.stroke = type.stroke;\n edge.length = type.length > 10 ? 10 : type.length;\n }\n if (id && !this.edges.some((e) => e.id === id)) {\n edge.id = id;\n edge.isUserDefinedId = true;\n } else {\n const existingLinks = this.edges.filter((e) => e.start === edge.start && e.end === edge.end);\n if (existingLinks.length === 0) {\n edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: \"L\" });\n } else {\n edge.id = getEdgeId(edge.start, edge.end, {\n counter: existingLinks.length + 1,\n prefix: \"L\"\n });\n }\n }\n if (this.edges.length < (this.config.maxEdges ?? 500)) {\n log.info(\"Pushing edge...\");\n this.edges.push(edge);\n } else {\n throw new Error(\n `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`\n );\n }\n }\n isLinkData(value) {\n return value !== null && typeof value === \"object\" && \"id\" in value && typeof value.id === \"string\";\n }\n addLink(_start, _end, linkData) {\n const id = this.isLinkData(linkData) ? linkData.id.replace(\"@\", \"\") : void 0;\n log.info(\"addLink\", _start, _end, id);\n for (const start of _start) {\n for (const end of _end) {\n const isLastStart = start === _start[_start.length - 1];\n const isFirstEnd = end === _end[0];\n if (isLastStart && isFirstEnd) {\n this.addSingleLink(start, end, linkData, id);\n } else {\n this.addSingleLink(start, end, linkData, void 0);\n }\n }\n }\n }\n /**\n * Updates a link's line interpolation algorithm\n */\n updateLinkInterpolate(positions, interpolate) {\n positions.forEach((pos) => {\n if (pos === \"default\") {\n this.edges.defaultInterpolate = interpolate;\n } else {\n this.edges[pos].interpolate = interpolate;\n }\n });\n }\n /**\n * Updates a link with a style\n *\n */\n updateLink(positions, style) {\n positions.forEach((pos) => {\n if (typeof pos === \"number\" && pos >= this.edges.length) {\n throw new Error(\n `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)`\n );\n }\n if (pos === \"default\") {\n this.edges.defaultStyle = style;\n } else {\n this.edges[pos].style = style;\n if ((this.edges[pos]?.style?.length ?? 0) > 0 && !this.edges[pos]?.style?.some((s) => s?.startsWith(\"fill\"))) {\n this.edges[pos]?.style?.push(\"fill:none\");\n }\n }\n });\n }\n addClass(ids, _style) {\n const style = _style.join().replace(/\\\\,/g, \"\\xA7\\xA7\\xA7\").replace(/,/g, \";\").replace(/§§§/g, \",\").split(\";\");\n ids.split(\",\").forEach((id) => {\n let classNode = this.classes.get(id);\n if (classNode === void 0) {\n classNode = { id, styles: [], textStyles: [] };\n this.classes.set(id, classNode);\n }\n if (style !== void 0 && style !== null) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace(\"fill\", \"bgFill\");\n classNode.textStyles.push(newStyle);\n }\n classNode.styles.push(s);\n });\n }\n });\n }\n /**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n *\n */\n setDirection(dir) {\n this.direction = dir.trim();\n if (/.*/.exec(this.direction)) {\n this.direction = \"LR\";\n }\n if (/.*v/.exec(this.direction)) {\n this.direction = \"TB\";\n }\n if (this.direction === \"TD\") {\n this.direction = \"TB\";\n }\n }\n /**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n setClass(ids, className) {\n for (const id of ids.split(\",\")) {\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.classes.push(className);\n }\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n edge.classes.push(className);\n }\n const subGraph = this.subGraphLookup.get(id);\n if (subGraph) {\n subGraph.classes.push(className);\n }\n }\n }\n setTooltip(ids, tooltip) {\n if (tooltip === void 0) {\n return;\n }\n tooltip = this.sanitizeText(tooltip);\n for (const id of ids.split(\",\")) {\n this.tooltips.set(this.version === \"gen-1\" ? this.lookUpDomId(id) : id, tooltip);\n }\n }\n setClickFun(id, functionName, functionArgs) {\n const domId = this.lookUpDomId(id);\n if (getConfig().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.haveCallback = true;\n this.funs.push(() => {\n const elem = document.querySelector(`[id=\"${domId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n () => {\n utils_default.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target attribute for the link\n */\n setLink(ids, linkStr, target) {\n ids.split(\",\").forEach((id) => {\n const vertex = this.vertices.get(id);\n if (vertex !== void 0) {\n vertex.link = utils_default.formatUrl(linkStr, this.config);\n vertex.linkTarget = target;\n }\n });\n this.setClass(ids, \"clickable\");\n }\n getTooltip(id) {\n return this.tooltips.get(id);\n }\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Arguments to be passed to the function\n */\n setClickEvent(ids, functionName, functionArgs) {\n ids.split(\",\").forEach((id) => {\n this.setClickFun(id, functionName, functionArgs);\n });\n this.setClass(ids, \"clickable\");\n }\n bindFunctions(element) {\n this.funs.forEach((fun) => {\n fun(element);\n });\n }\n getDirection() {\n return this.direction?.trim();\n }\n /**\n * Retrieval function for fetching the found nodes after parsing has completed.\n *\n */\n getVertices() {\n return this.vertices;\n }\n /**\n * Retrieval function for fetching the found links after parsing has completed.\n *\n */\n getEdges() {\n return this.edges;\n }\n /**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n *\n */\n getClasses() {\n return this.classes;\n }\n setupToolTips(element) {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", (e) => {\n const el = select(e.currentTarget);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = e.currentTarget?.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.bottom + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", (e) => {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(e.currentTarget);\n el.classed(\"hover\", false);\n });\n }\n /**\n * Clears the internal graph db so that a new graph can be parsed.\n *\n */\n clear(ver = \"gen-2\") {\n this.vertices = /* @__PURE__ */ new Map();\n this.classes = /* @__PURE__ */ new Map();\n this.edges = [];\n this.funs = [this.setupToolTips.bind(this)];\n this.subGraphs = [];\n this.subGraphLookup = /* @__PURE__ */ new Map();\n this.subCount = 0;\n this.tooltips = /* @__PURE__ */ new Map();\n this.firstGraphFlag = true;\n this.version = ver;\n this.config = getConfig();\n clear();\n }\n setGen(ver) {\n this.version = ver || \"gen-2\";\n }\n defaultStyle() {\n return \"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;\";\n }\n addSubGraph(_id, list, _title) {\n let id = _id.text.trim();\n let title = _title.text;\n if (_id === _title && /\\s/.exec(_title.text)) {\n id = void 0;\n }\n const uniq = /* @__PURE__ */ __name((a) => {\n const prims = { boolean: {}, number: {}, string: {} };\n const objs = [];\n let dir2;\n const nodeList2 = a.filter(function(item) {\n const type = typeof item;\n if (item.stmt && item.stmt === \"dir\") {\n dir2 = item.value;\n return false;\n }\n if (item.trim() === \"\") {\n return false;\n }\n if (type in prims) {\n return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true;\n } else {\n return objs.includes(item) ? false : objs.push(item);\n }\n });\n return { nodeList: nodeList2, dir: dir2 };\n }, \"uniq\");\n const result = uniq(list.flat());\n const nodeList = result.nodeList;\n let dir = result.dir;\n const flowchartConfig = getConfig().flowchart ?? {};\n dir = dir ?? (flowchartConfig.inheritDir ? this.getDirection() ?? getConfig().direction ?? void 0 : void 0);\n if (this.version === \"gen-1\") {\n for (let i = 0; i < nodeList.length; i++) {\n nodeList[i] = this.lookUpDomId(nodeList[i]);\n }\n }\n id = id ?? \"subGraph\" + this.subCount;\n title = title || \"\";\n title = this.sanitizeText(title);\n this.subCount = this.subCount + 1;\n const subGraph = {\n id,\n nodes: nodeList,\n title: title.trim(),\n classes: [],\n dir,\n labelType: _title.type\n };\n log.info(\"Adding\", subGraph.id, subGraph.nodes, subGraph.dir);\n subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes;\n this.subGraphs.push(subGraph);\n this.subGraphLookup.set(id, subGraph);\n return id;\n }\n getPosForId(id) {\n for (const [i, subGraph] of this.subGraphs.entries()) {\n if (subGraph.id === id) {\n return i;\n }\n }\n return -1;\n }\n indexNodes2(id, pos) {\n const nodes = this.subGraphs[pos].nodes;\n this.secCount = this.secCount + 1;\n if (this.secCount > 2e3) {\n return {\n result: false,\n count: 0\n };\n }\n this.posCrossRef[this.secCount] = pos;\n if (this.subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n };\n }\n let count = 0;\n let posCount = 1;\n while (count < nodes.length) {\n const childPos = this.getPosForId(nodes[count]);\n if (childPos >= 0) {\n const res = this.indexNodes2(id, childPos);\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n };\n } else {\n posCount = posCount + res.count;\n }\n }\n count = count + 1;\n }\n return {\n result: false,\n count: posCount\n };\n }\n getDepthFirstPos(pos) {\n return this.posCrossRef[pos];\n }\n indexNodes() {\n this.secCount = -1;\n if (this.subGraphs.length > 0) {\n this.indexNodes2(\"none\", this.subGraphs.length - 1);\n }\n }\n getSubGraphs() {\n return this.subGraphs;\n }\n firstGraph() {\n if (this.firstGraphFlag) {\n this.firstGraphFlag = false;\n return true;\n }\n return false;\n }\n destructStartLink(_str) {\n let str = _str.trim();\n let type = \"arrow_open\";\n switch (str[0]) {\n case \"<\":\n type = \"arrow_point\";\n str = str.slice(1);\n break;\n case \"x\":\n type = \"arrow_cross\";\n str = str.slice(1);\n break;\n case \"o\":\n type = \"arrow_circle\";\n str = str.slice(1);\n break;\n }\n let stroke = \"normal\";\n if (str.includes(\"=\")) {\n stroke = \"thick\";\n }\n if (str.includes(\".\")) {\n stroke = \"dotted\";\n }\n return { type, stroke };\n }\n countChar(char, str) {\n const length = str.length;\n let count = 0;\n for (let i = 0; i < length; ++i) {\n if (str[i] === char) {\n ++count;\n }\n }\n return count;\n }\n destructEndLink(_str) {\n const str = _str.trim();\n let line = str.slice(0, -1);\n let type = \"arrow_open\";\n switch (str.slice(-1)) {\n case \"x\":\n type = \"arrow_cross\";\n if (str.startsWith(\"x\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \">\":\n type = \"arrow_point\";\n if (str.startsWith(\"<\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \"o\":\n type = \"arrow_circle\";\n if (str.startsWith(\"o\")) {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n }\n let stroke = \"normal\";\n let length = line.length - 1;\n if (line.startsWith(\"=\")) {\n stroke = \"thick\";\n }\n if (line.startsWith(\"~\")) {\n stroke = \"invisible\";\n }\n const dots = this.countChar(\".\", line);\n if (dots) {\n stroke = \"dotted\";\n length = dots;\n }\n return { type, stroke, length };\n }\n destructLink(_str, _startStr) {\n const info = this.destructEndLink(_str);\n let startInfo;\n if (_startStr) {\n startInfo = this.destructStartLink(_startStr);\n if (startInfo.stroke !== info.stroke) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n if (startInfo.type === \"arrow_open\") {\n startInfo.type = info.type;\n } else {\n if (startInfo.type !== info.type) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n startInfo.type = \"double_\" + startInfo.type;\n }\n if (startInfo.type === \"double_arrow\") {\n startInfo.type = \"double_arrow_point\";\n }\n startInfo.length = info.length;\n return startInfo;\n }\n return info;\n }\n // Todo optimizer this by caching existing nodes\n exists(allSgs, _id) {\n for (const sg of allSgs) {\n if (sg.nodes.includes(_id)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Deletes an id from all subgraphs\n *\n */\n makeUniq(sg, allSubgraphs) {\n const res = [];\n sg.nodes.forEach((_id, pos) => {\n if (!this.exists(allSubgraphs, _id)) {\n res.push(sg.nodes[pos]);\n }\n });\n return { nodes: res };\n }\n getTypeFromVertex(vertex) {\n if (vertex.img) {\n return \"imageSquare\";\n }\n if (vertex.icon) {\n if (vertex.form === \"circle\") {\n return \"iconCircle\";\n }\n if (vertex.form === \"square\") {\n return \"iconSquare\";\n }\n if (vertex.form === \"rounded\") {\n return \"iconRounded\";\n }\n return \"icon\";\n }\n switch (vertex.type) {\n case \"square\":\n case void 0:\n return \"squareRect\";\n case \"round\":\n return \"roundedRect\";\n case \"ellipse\":\n return \"ellipse\";\n default:\n return vertex.type;\n }\n }\n findNode(nodes, id) {\n return nodes.find((node) => node.id === id);\n }\n destructEdgeType(type) {\n let arrowTypeStart = \"none\";\n let arrowTypeEnd = \"arrow_point\";\n switch (type) {\n case \"arrow_point\":\n case \"arrow_circle\":\n case \"arrow_cross\":\n arrowTypeEnd = type;\n break;\n case \"double_arrow_point\":\n case \"double_arrow_circle\":\n case \"double_arrow_cross\":\n arrowTypeStart = type.replace(\"double_\", \"\");\n arrowTypeEnd = arrowTypeStart;\n break;\n }\n return { arrowTypeStart, arrowTypeEnd };\n }\n addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, look) {\n const parentId = parentDB.get(vertex.id);\n const isGroup = subGraphDB.get(vertex.id) ?? false;\n const node = this.findNode(nodes, vertex.id);\n if (node) {\n node.cssStyles = vertex.styles;\n node.cssCompiledStyles = this.getCompiledStyles(vertex.classes);\n node.cssClasses = vertex.classes.join(\" \");\n } else {\n const baseNode = {\n id: vertex.id,\n label: vertex.text,\n labelStyle: \"\",\n parentId,\n padding: config.flowchart?.padding || 8,\n cssStyles: vertex.styles,\n cssCompiledStyles: this.getCompiledStyles([\"default\", \"node\", ...vertex.classes]),\n cssClasses: \"default \" + vertex.classes.join(\" \"),\n dir: vertex.dir,\n domId: vertex.domId,\n look,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: this.getTooltip(vertex.id),\n icon: vertex.icon,\n pos: vertex.pos,\n img: vertex.img,\n assetWidth: vertex.assetWidth,\n assetHeight: vertex.assetHeight,\n constraint: vertex.constraint\n };\n if (isGroup) {\n nodes.push({\n ...baseNode,\n isGroup: true,\n shape: \"rect\"\n });\n } else {\n nodes.push({\n ...baseNode,\n isGroup: false,\n shape: this.getTypeFromVertex(vertex)\n });\n }\n }\n }\n getCompiledStyles(classDefs) {\n let compiledStyles = [];\n for (const customClass of classDefs) {\n const cssClass = this.classes.get(customClass);\n if (cssClass?.styles) {\n compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s) => s.trim());\n }\n if (cssClass?.textStyles) {\n compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s) => s.trim());\n }\n }\n return compiledStyles;\n }\n getData() {\n const config = getConfig();\n const nodes = [];\n const edges = [];\n const subGraphs = this.getSubGraphs();\n const parentDB = /* @__PURE__ */ new Map();\n const subGraphDB = /* @__PURE__ */ new Map();\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n if (subGraph.nodes.length > 0) {\n subGraphDB.set(subGraph.id, true);\n }\n for (const id of subGraph.nodes) {\n parentDB.set(id, subGraph.id);\n }\n }\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n nodes.push({\n id: subGraph.id,\n label: subGraph.title,\n labelStyle: \"\",\n parentId: parentDB.get(subGraph.id),\n padding: 8,\n cssCompiledStyles: this.getCompiledStyles(subGraph.classes),\n cssClasses: subGraph.classes.join(\" \"),\n shape: \"rect\",\n dir: subGraph.dir,\n isGroup: true,\n look: config.look\n });\n }\n const n = this.getVertices();\n n.forEach((vertex) => {\n this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || \"classic\");\n });\n const e = this.getEdges();\n e.forEach((rawEdge, index) => {\n const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type);\n const styles = [...e.defaultStyle ?? []];\n if (rawEdge.style) {\n styles.push(...rawEdge.style);\n }\n const edge = {\n id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: \"L\" }, rawEdge.id),\n isUserDefinedId: rawEdge.isUserDefinedId,\n start: rawEdge.start,\n end: rawEdge.end,\n type: rawEdge.type ?? \"normal\",\n label: rawEdge.text,\n labelpos: \"c\",\n thickness: rawEdge.stroke,\n minlen: rawEdge.length,\n classes: rawEdge?.stroke === \"invisible\" ? \"\" : \"edge-thickness-normal edge-pattern-solid flowchart-link\",\n arrowTypeStart: rawEdge?.stroke === \"invisible\" || rawEdge?.type === \"arrow_open\" ? \"none\" : arrowTypeStart,\n arrowTypeEnd: rawEdge?.stroke === \"invisible\" || rawEdge?.type === \"arrow_open\" ? \"none\" : arrowTypeEnd,\n arrowheadStyle: \"fill: #333\",\n cssCompiledStyles: this.getCompiledStyles(rawEdge.classes),\n labelStyle: styles,\n style: styles,\n pattern: rawEdge.stroke,\n look: config.look,\n animate: rawEdge.animate,\n animation: rawEdge.animation,\n curve: rawEdge.interpolate || this.edges.defaultInterpolate || config.flowchart?.curve\n };\n edges.push(edge);\n });\n return { nodes, edges, other: {}, config };\n }\n defaultConfig() {\n return defaultConfig.flowchart;\n }\n};\n\n// src/diagrams/flowchart/flowRenderer-v3-unified.ts\nimport { select as select2 } from \"d3\";\nvar getClasses = /* @__PURE__ */ __name(function(text, diagramObj) {\n return diagramObj.db.getClasses();\n}, \"getClasses\");\nvar draw = /* @__PURE__ */ __name(async function(text, id, _version, diag) {\n log.info(\"REF0:\");\n log.info(\"Drawing state diagram (v2)\", id);\n const { securityLevel, flowchart: conf, layout } = getConfig();\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select2(\"#i\" + id);\n }\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n log.debug(\"Before getData: \");\n const data4Layout = diag.db.getData();\n log.debug(\"Data: \", data4Layout);\n const svg = getDiagramElement(id, securityLevel);\n const direction = diag.db.getDirection();\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n if (data4Layout.layoutAlgorithm === \"dagre\" && layout === \"elk\") {\n log.warn(\n \"flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback.\"\n );\n }\n data4Layout.direction = direction;\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = [\"point\", \"circle\", \"cross\"];\n data4Layout.diagramId = id;\n log.debug(\"REF1:\", data4Layout);\n await render(data4Layout, svg);\n const padding = data4Layout.config.flowchart?.diagramPadding ?? 8;\n utils_default.insertTitle(\n svg,\n \"flowchartTitleText\",\n conf?.titleTopMargin || 0,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, \"flowchart\", conf?.useMaxWidth || false);\n for (const vertex of data4Layout.nodes) {\n const node = select2(`#${id} [id=\"${vertex.id}\"]`);\n if (!node || !vertex.link) {\n continue;\n }\n const link = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"class\", vertex.cssClasses);\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"rel\", \"noopener\");\n if (securityLevel === \"sandbox\") {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", \"_top\");\n } else if (vertex.linkTarget) {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", vertex.linkTarget);\n }\n const linkNode = node.insert(function() {\n return link;\n }, \":first-child\");\n const shape = node.select(\".label-container\");\n if (shape) {\n linkNode.append(function() {\n return shape.node();\n });\n }\n const label = node.select(\".label\");\n if (label) {\n linkNode.append(function() {\n return label.node();\n });\n }\n }\n}, \"draw\");\nvar flowRenderer_v3_unified_default = {\n getClasses,\n draw\n};\n\n// src/diagrams/flowchart/parser/flow.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 75, 77, 78], $VD = [1, 78], $VE = [1, 91], $VF = [1, 96], $VG = [1, 95], $VH = [1, 92], $VI = [1, 88], $VJ = [1, 94], $VK = [1, 90], $VL = [1, 97], $VM = [1, 93], $VN = [1, 98], $VO = [1, 89], $VP = [8, 9, 10, 11, 40, 75, 77, 78], $VQ = [8, 9, 10, 11, 40, 46, 75, 77, 78], $VR = [8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VS = [8, 9, 11, 44, 60, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VT = [44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VU = [1, 121], $VV = [1, 122], $VW = [1, 124], $VX = [1, 123], $VY = [44, 60, 62, 74, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VZ = [1, 133], $V_ = [1, 147], $V$ = [1, 148], $V01 = [1, 149], $V11 = [1, 150], $V21 = [1, 135], $V31 = [1, 137], $V41 = [1, 141], $V51 = [1, 142], $V61 = [1, 143], $V71 = [1, 144], $V81 = [1, 145], $V91 = [1, 146], $Va1 = [1, 151], $Vb1 = [1, 152], $Vc1 = [1, 131], $Vd1 = [1, 132], $Ve1 = [1, 139], $Vf1 = [1, 134], $Vg1 = [1, 138], $Vh1 = [1, 136], $Vi1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vj1 = [1, 154], $Vk1 = [1, 156], $Vl1 = [8, 9, 11], $Vm1 = [8, 9, 10, 11, 14, 44, 60, 89, 105, 106, 109, 111, 114, 115, 116], $Vn1 = [1, 176], $Vo1 = [1, 172], $Vp1 = [1, 173], $Vq1 = [1, 177], $Vr1 = [1, 174], $Vs1 = [1, 175], $Vt1 = [77, 116, 119], $Vu1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 84, 85, 86, 87, 88, 89, 90, 105, 109, 111, 114, 115, 116], $Vv1 = [10, 106], $Vw1 = [31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 116, 117, 118], $Vx1 = [1, 247], $Vy1 = [1, 245], $Vz1 = [1, 249], $VA1 = [1, 243], $VB1 = [1, 244], $VC1 = [1, 246], $VD1 = [1, 248], $VE1 = [1, 250], $VF1 = [1, 268], $VG1 = [8, 9, 11, 106], $VH1 = [8, 9, 10, 11, 60, 84, 105, 106, 109, 110, 111, 112];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"graphConfig\": 4, \"document\": 5, \"line\": 6, \"statement\": 7, \"SEMI\": 8, \"NEWLINE\": 9, \"SPACE\": 10, \"EOF\": 11, \"GRAPH\": 12, \"NODIR\": 13, \"DIR\": 14, \"FirstStmtSeparator\": 15, \"ending\": 16, \"endToken\": 17, \"spaceList\": 18, \"spaceListNewline\": 19, \"vertexStatement\": 20, \"separator\": 21, \"styleStatement\": 22, \"linkStyleStatement\": 23, \"classDefStatement\": 24, \"classStatement\": 25, \"clickStatement\": 26, \"subgraph\": 27, \"textNoTags\": 28, \"SQS\": 29, \"text\": 30, \"SQE\": 31, \"end\": 32, \"direction\": 33, \"acc_title\": 34, \"acc_title_value\": 35, \"acc_descr\": 36, \"acc_descr_value\": 37, \"acc_descr_multiline_value\": 38, \"shapeData\": 39, \"SHAPE_DATA\": 40, \"link\": 41, \"node\": 42, \"styledVertex\": 43, \"AMP\": 44, \"vertex\": 45, \"STYLE_SEPARATOR\": 46, \"idString\": 47, \"DOUBLECIRCLESTART\": 48, \"DOUBLECIRCLEEND\": 49, \"PS\": 50, \"PE\": 51, \"(-\": 52, \"-)\": 53, \"STADIUMSTART\": 54, \"STADIUMEND\": 55, \"SUBROUTINESTART\": 56, \"SUBROUTINEEND\": 57, \"VERTEX_WITH_PROPS_START\": 58, \"NODE_STRING[field]\": 59, \"COLON\": 60, \"NODE_STRING[value]\": 61, \"PIPE\": 62, \"CYLINDERSTART\": 63, \"CYLINDEREND\": 64, \"DIAMOND_START\": 65, \"DIAMOND_STOP\": 66, \"TAGEND\": 67, \"TRAPSTART\": 68, \"TRAPEND\": 69, \"INVTRAPSTART\": 70, \"INVTRAPEND\": 71, \"linkStatement\": 72, \"arrowText\": 73, \"TESTSTR\": 74, \"START_LINK\": 75, \"edgeText\": 76, \"LINK\": 77, \"LINK_ID\": 78, \"edgeTextToken\": 79, \"STR\": 80, \"MD_STR\": 81, \"textToken\": 82, \"keywords\": 83, \"STYLE\": 84, \"LINKSTYLE\": 85, \"CLASSDEF\": 86, \"CLASS\": 87, \"CLICK\": 88, \"DOWN\": 89, \"UP\": 90, \"textNoTagsToken\": 91, \"stylesOpt\": 92, \"idString[vertex]\": 93, \"idString[class]\": 94, \"CALLBACKNAME\": 95, \"CALLBACKARGS\": 96, \"HREF\": 97, \"LINK_TARGET\": 98, \"STR[link]\": 99, \"STR[tooltip]\": 100, \"alphaNum\": 101, \"DEFAULT\": 102, \"numList\": 103, \"INTERPOLATE\": 104, \"NUM\": 105, \"COMMA\": 106, \"style\": 107, \"styleComponent\": 108, \"NODE_STRING\": 109, \"UNIT\": 110, \"BRKT\": 111, \"PCT\": 112, \"idStringToken\": 113, \"MINUS\": 114, \"MULT\": 115, \"UNICODE_TEXT\": 116, \"TEXT\": 117, \"TAGSTART\": 118, \"EDGE_TEXT\": 119, \"alphaNumToken\": 120, \"direction_tb\": 121, \"direction_bt\": 122, \"direction_rl\": 123, \"direction_lr\": 124, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 8: \"SEMI\", 9: \"NEWLINE\", 10: \"SPACE\", 11: \"EOF\", 12: \"GRAPH\", 13: \"NODIR\", 14: \"DIR\", 27: \"subgraph\", 29: \"SQS\", 31: \"SQE\", 32: \"end\", 34: \"acc_title\", 35: \"acc_title_value\", 36: \"acc_descr\", 37: \"acc_descr_value\", 38: \"acc_descr_multiline_value\", 40: \"SHAPE_DATA\", 44: \"AMP\", 46: \"STYLE_SEPARATOR\", 48: \"DOUBLECIRCLESTART\", 49: \"DOUBLECIRCLEEND\", 50: \"PS\", 51: \"PE\", 52: \"(-\", 53: \"-)\", 54: \"STADIUMSTART\", 55: \"STADIUMEND\", 56: \"SUBROUTINESTART\", 57: \"SUBROUTINEEND\", 58: \"VERTEX_WITH_PROPS_START\", 59: \"NODE_STRING[field]\", 60: \"COLON\", 61: \"NODE_STRING[value]\", 62: \"PIPE\", 63: \"CYLINDERSTART\", 64: \"CYLINDEREND\", 65: \"DIAMOND_START\", 66: \"DIAMOND_STOP\", 67: \"TAGEND\", 68: \"TRAPSTART\", 69: \"TRAPEND\", 70: \"INVTRAPSTART\", 71: \"INVTRAPEND\", 74: \"TESTSTR\", 75: \"START_LINK\", 77: \"LINK\", 78: \"LINK_ID\", 80: \"STR\", 81: \"MD_STR\", 84: \"STYLE\", 85: \"LINKSTYLE\", 86: \"CLASSDEF\", 87: \"CLASS\", 88: \"CLICK\", 89: \"DOWN\", 90: \"UP\", 93: \"idString[vertex]\", 94: \"idString[class]\", 95: \"CALLBACKNAME\", 96: \"CALLBACKARGS\", 97: \"HREF\", 98: \"LINK_TARGET\", 99: \"STR[link]\", 100: \"STR[tooltip]\", 102: \"DEFAULT\", 104: \"INTERPOLATE\", 105: \"NUM\", 106: \"COMMA\", 109: \"NODE_STRING\", 110: \"UNIT\", 111: \"BRKT\", 112: \"PCT\", 114: \"MINUS\", 115: \"MULT\", 116: \"UNICODE_TEXT\", 117: \"TEXT\", 118: \"TAGSTART\", 119: \"EDGE_TEXT\", 121: \"direction_tb\", 122: \"direction_bt\", 123: \"direction_rl\", 124: \"direction_lr\" },\n productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [39, 2], [39, 1], [20, 4], [20, 3], [20, 4], [20, 2], [20, 2], [20, 1], [42, 1], [42, 6], [42, 5], [43, 1], [43, 3], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 8], [45, 4], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 4], [45, 4], [45, 1], [41, 2], [41, 3], [41, 3], [41, 1], [41, 3], [41, 4], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [72, 2], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [103, 1], [103, 3], [92, 1], [92, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [82, 1], [82, 1], [82, 1], [82, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [79, 1], [79, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [47, 1], [47, 2], [101, 1], [101, 2], [33, 1], [33, 1], [33, 1], [33, 1]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 2:\n this.$ = [];\n break;\n case 3:\n if (!Array.isArray($$[$0]) || $$[$0].length > 0) {\n $$[$0 - 1].push($$[$0]);\n }\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 183:\n this.$ = $$[$0];\n break;\n case 11:\n yy.setDirection(\"TB\");\n this.$ = \"TB\";\n break;\n case 12:\n yy.setDirection($$[$0 - 1]);\n this.$ = $$[$0 - 1];\n break;\n case 27:\n this.$ = $$[$0 - 1].nodes;\n break;\n case 28:\n case 29:\n case 30:\n case 31:\n case 32:\n this.$ = [];\n break;\n case 33:\n this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);\n break;\n case 34:\n this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);\n break;\n case 35:\n this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);\n break;\n case 37:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 38:\n case 39:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 43:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 44:\n this.$ = $$[$0];\n break;\n case 45:\n yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 46:\n yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);\n this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };\n break;\n case 47:\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 48:\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };\n break;\n case 49:\n yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1], shapeData: $$[$0] };\n break;\n case 50:\n this.$ = { stmt: $$[$0], nodes: $$[$0] };\n break;\n case 51:\n this.$ = [$$[$0]];\n break;\n case 52:\n yy.addVertex($$[$0 - 5][$$[$0 - 5].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0 - 4]);\n this.$ = $$[$0 - 5].concat($$[$0]);\n break;\n case 53:\n this.$ = $$[$0 - 4].concat($$[$0]);\n break;\n case 54:\n this.$ = $$[$0];\n break;\n case 55:\n this.$ = $$[$0 - 2];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 56:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"square\");\n break;\n case 57:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"doublecircle\");\n break;\n case 58:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"circle\");\n break;\n case 59:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"ellipse\");\n break;\n case 60:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"stadium\");\n break;\n case 61:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"subroutine\");\n break;\n case 62:\n this.$ = $$[$0 - 7];\n yy.addVertex($$[$0 - 7], $$[$0 - 1], \"rect\", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));\n break;\n case 63:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"cylinder\");\n break;\n case 64:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"round\");\n break;\n case 65:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"diamond\");\n break;\n case 66:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"hexagon\");\n break;\n case 67:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"odd\");\n break;\n case 68:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"trapezoid\");\n break;\n case 69:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"inv_trapezoid\");\n break;\n case 70:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_right\");\n break;\n case 71:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_left\");\n break;\n case 72:\n this.$ = $$[$0];\n yy.addVertex($$[$0]);\n break;\n case 73:\n $$[$0 - 1].text = $$[$0];\n this.$ = $$[$0 - 1];\n break;\n case 74:\n case 75:\n $$[$0 - 2].text = $$[$0 - 1];\n this.$ = $$[$0 - 2];\n break;\n case 76:\n this.$ = $$[$0];\n break;\n case 77:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1] };\n break;\n case 78:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1], \"id\": $$[$0 - 3] };\n break;\n case 79:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 80:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 81:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 82:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 83:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length };\n break;\n case 84:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"id\": $$[$0 - 1] };\n break;\n case 85:\n this.$ = $$[$0 - 1];\n break;\n case 86:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 87:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 88:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 89:\n case 104:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 101:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 102:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 103:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 105:\n this.$ = $$[$0 - 4];\n yy.addClass($$[$0 - 2], $$[$0]);\n break;\n case 106:\n this.$ = $$[$0 - 4];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 107:\n case 115:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 108:\n case 116:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 109:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 110:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 111:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 112:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 113:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 114:\n this.$ = $$[$0 - 6];\n yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 6], $$[$0 - 2]);\n break;\n case 117:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 118:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 119:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n break;\n case 120:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 5], $$[$0 - 2]);\n break;\n case 121:\n this.$ = $$[$0 - 4];\n yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);\n break;\n case 122:\n this.$ = $$[$0 - 4];\n yy.updateLink([$$[$0 - 2]], $$[$0]);\n break;\n case 123:\n this.$ = $$[$0 - 4];\n yy.updateLink($$[$0 - 2], $$[$0]);\n break;\n case 124:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);\n yy.updateLink([$$[$0 - 6]], $$[$0]);\n break;\n case 125:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);\n yy.updateLink($$[$0 - 6], $$[$0]);\n break;\n case 126:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);\n break;\n case 127:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);\n break;\n case 128:\n case 130:\n this.$ = [$$[$0]];\n break;\n case 129:\n case 131:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 133:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 181:\n this.$ = $$[$0];\n break;\n case 182:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 184:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 185:\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 186:\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 187:\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 188:\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 41: 59, 72: 63, 75: [1, 64], 77: [1, 66], 78: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 71 }, { 8: $Vz, 9: $VA, 10: [1, 72], 11: $VB, 21: 73 }, o($Vy, [2, 36]), { 35: [1, 74] }, { 37: [1, 75] }, o($Vy, [2, 39]), o($VC, [2, 50], { 18: 76, 39: 77, 10: $Vx, 40: $VD }), { 10: [1, 79] }, { 10: [1, 80] }, { 10: [1, 81] }, { 10: [1, 82] }, { 14: $VE, 44: $VF, 60: $VG, 80: [1, 86], 89: $VH, 95: [1, 83], 97: [1, 84], 101: 85, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, o($Vy, [2, 185]), o($Vy, [2, 186]), o($Vy, [2, 187]), o($Vy, [2, 188]), o($VP, [2, 51]), o($VP, [2, 54], { 46: [1, 99] }), o($VQ, [2, 72], { 113: 112, 29: [1, 100], 44: $Vd, 48: [1, 101], 50: [1, 102], 52: [1, 103], 54: [1, 104], 56: [1, 105], 58: [1, 106], 60: $Ve, 63: [1, 107], 65: [1, 108], 67: [1, 109], 68: [1, 110], 70: [1, 111], 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o($VR, [2, 181]), o($VR, [2, 142]), o($VR, [2, 143]), o($VR, [2, 144]), o($VR, [2, 145]), o($VR, [2, 146]), o($VR, [2, 147]), o($VR, [2, 148]), o($VR, [2, 149]), o($VR, [2, 150]), o($VR, [2, 151]), o($VR, [2, 152]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 113] }, o($VS, [2, 26], { 18: 114, 10: $Vx }), o($Vy, [2, 27]), { 42: 115, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VT, [2, 76], { 73: 116, 62: [1, 118], 74: [1, 117] }), { 76: 119, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, { 75: [1, 125], 77: [1, 126] }, o($VY, [2, 83]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VZ, 12: $V_, 14: $V$, 27: $V01, 28: 127, 32: $V11, 44: $V21, 60: $V31, 75: $V41, 80: [1, 129], 81: [1, 130], 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 128, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o($Vi1, $V4, { 5: 153 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 48], { 44: $Vj1 }), o($VC, [2, 49], { 18: 155, 10: $Vx, 40: $Vk1 }), o($VP, [2, 44]), { 44: $Vd, 47: 157, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 102: [1, 158], 103: 159, 105: [1, 160] }, { 44: $Vd, 47: 161, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 44: $Vd, 47: 162, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 107], { 10: [1, 163], 96: [1, 164] }), { 80: [1, 165] }, o($Vl1, [2, 115], { 120: 167, 10: [1, 166], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 117], { 10: [1, 168] }), o($Vm1, [2, 183]), o($Vm1, [2, 170]), o($Vm1, [2, 171]), o($Vm1, [2, 172]), o($Vm1, [2, 173]), o($Vm1, [2, 174]), o($Vm1, [2, 175]), o($Vm1, [2, 176]), o($Vm1, [2, 177]), o($Vm1, [2, 178]), o($Vm1, [2, 179]), o($Vm1, [2, 180]), { 44: $Vd, 47: 169, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 30: 170, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 178, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 180, 50: [1, 179], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 181, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 182, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 183, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 109: [1, 184] }, { 30: 185, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 186, 65: [1, 187], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 188, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 189, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 190, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VR, [2, 182]), o($V3, [2, 20]), o($VS, [2, 25]), o($VC, [2, 46], { 39: 191, 18: 192, 10: $Vx, 40: $VD }), o($VT, [2, 73], { 10: [1, 193] }), { 10: [1, 194] }, { 30: 195, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 77: [1, 196], 79: 197, 116: $VW, 119: $VX }, o($Vt1, [2, 79]), o($Vt1, [2, 81]), o($Vt1, [2, 82]), o($Vt1, [2, 168]), o($Vt1, [2, 169]), { 76: 198, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, o($VY, [2, 84]), { 8: $Vz, 9: $VA, 10: $VZ, 11: $VB, 12: $V_, 14: $V$, 21: 200, 27: $V01, 29: [1, 199], 32: $V11, 44: $V21, 60: $V31, 75: $V41, 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 201, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o($Vu1, [2, 101]), o($Vu1, [2, 103]), o($Vu1, [2, 104]), o($Vu1, [2, 157]), o($Vu1, [2, 158]), o($Vu1, [2, 159]), o($Vu1, [2, 160]), o($Vu1, [2, 161]), o($Vu1, [2, 162]), o($Vu1, [2, 163]), o($Vu1, [2, 164]), o($Vu1, [2, 165]), o($Vu1, [2, 166]), o($Vu1, [2, 167]), o($Vu1, [2, 90]), o($Vu1, [2, 91]), o($Vu1, [2, 92]), o($Vu1, [2, 93]), o($Vu1, [2, 94]), o($Vu1, [2, 95]), o($Vu1, [2, 96]), o($Vu1, [2, 97]), o($Vu1, [2, 98]), o($Vu1, [2, 99]), o($Vu1, [2, 100]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 202], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx, 18: 203 }, { 44: [1, 204] }, o($VP, [2, 43]), { 10: [1, 205], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 206] }, { 10: [1, 207], 106: [1, 208] }, o($Vv1, [2, 128]), { 10: [1, 209], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 210], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 80: [1, 211] }, o($Vl1, [2, 109], { 10: [1, 212] }), o($Vl1, [2, 111], { 10: [1, 213] }), { 80: [1, 214] }, o($Vm1, [2, 184]), { 80: [1, 215], 98: [1, 216] }, o($VP, [2, 55], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), { 31: [1, 217], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($Vw1, [2, 86]), o($Vw1, [2, 88]), o($Vw1, [2, 89]), o($Vw1, [2, 153]), o($Vw1, [2, 154]), o($Vw1, [2, 155]), o($Vw1, [2, 156]), { 49: [1, 219], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 220, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 51: [1, 221], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 53: [1, 222], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 55: [1, 223], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 57: [1, 224], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 60: [1, 225] }, { 64: [1, 226], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 66: [1, 227], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 228, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 31: [1, 229], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 230], 71: [1, 231], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 233], 71: [1, 232], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VC, [2, 45], { 18: 155, 10: $Vx, 40: $Vk1 }), o($VC, [2, 47], { 44: $Vj1 }), o($VT, [2, 75]), o($VT, [2, 74]), { 62: [1, 234], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VT, [2, 77]), o($Vt1, [2, 80]), { 77: [1, 235], 79: 197, 116: $VW, 119: $VX }, { 30: 236, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($Vi1, $V4, { 5: 237 }), o($Vu1, [2, 102]), o($Vy, [2, 35]), { 43: 238, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: $Vx, 18: 239 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 240, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 251, 104: [1, 252], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 253, 104: [1, 254], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 105: [1, 255] }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 256, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 44: $Vd, 47: 257, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 108]), { 80: [1, 258] }, { 80: [1, 259], 98: [1, 260] }, o($Vl1, [2, 116]), o($Vl1, [2, 118], { 10: [1, 261] }), o($Vl1, [2, 119]), o($VQ, [2, 56]), o($Vw1, [2, 87]), o($VQ, [2, 57]), { 51: [1, 262], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 64]), o($VQ, [2, 59]), o($VQ, [2, 60]), o($VQ, [2, 61]), { 109: [1, 263] }, o($VQ, [2, 63]), o($VQ, [2, 65]), { 66: [1, 264], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 67]), o($VQ, [2, 68]), o($VQ, [2, 70]), o($VQ, [2, 69]), o($VQ, [2, 71]), o([10, 44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], [2, 85]), o($VT, [2, 78]), { 31: [1, 265], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 266], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o($VP, [2, 53]), { 43: 267, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o($Vl1, [2, 121], { 106: $VF1 }), o($VG1, [2, 130], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o($VH1, [2, 132]), o($VH1, [2, 134]), o($VH1, [2, 135]), o($VH1, [2, 136]), o($VH1, [2, 137]), o($VH1, [2, 138]), o($VH1, [2, 139]), o($VH1, [2, 140]), o($VH1, [2, 141]), o($Vl1, [2, 122], { 106: $VF1 }), { 10: [1, 270] }, o($Vl1, [2, 123], { 106: $VF1 }), { 10: [1, 271] }, o($Vv1, [2, 129]), o($Vl1, [2, 105], { 106: $VF1 }), o($Vl1, [2, 106], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o($Vl1, [2, 110]), o($Vl1, [2, 112], { 10: [1, 272] }), o($Vl1, [2, 113]), { 98: [1, 273] }, { 51: [1, 274] }, { 62: [1, 275] }, { 66: [1, 276] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 277 }, o($Vy, [2, 34]), o($VP, [2, 52]), { 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 107: 278, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o($VH1, [2, 133]), { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 279, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 280, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 98: [1, 281] }, o($Vl1, [2, 120]), o($VQ, [2, 58]), { 30: 282, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o($VQ, [2, 66]), o($Vi1, $V4, { 5: 283 }), o($VG1, [2, 131], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o($Vl1, [2, 126], { 120: 167, 10: [1, 284], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 127], { 120: 167, 10: [1, 285], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o($Vl1, [2, 114]), { 31: [1, 286], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 287], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 288, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 289, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o($VQ, [2, 62]), o($Vy, [2, 33]), o($Vl1, [2, 124], { 106: $VF1 }), o($Vl1, [2, 125], { 106: $VF1 })],\n defaultActions: {},\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: {},\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 34;\n break;\n case 1:\n this.popState();\n return \"acc_title_value\";\n break;\n case 2:\n this.begin(\"acc_descr\");\n return 36;\n break;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n break;\n case 7:\n this.pushState(\"shapeData\");\n yy_.yytext = \"\";\n return 40;\n break;\n case 8:\n this.pushState(\"shapeDataStr\");\n return 40;\n break;\n case 9:\n this.popState();\n return 40;\n break;\n case 10:\n const re = /\\n\\s*/g;\n yy_.yytext = yy_.yytext.replace(re, \"
\");\n return 40;\n break;\n case 11:\n return 40;\n break;\n case 12:\n this.popState();\n break;\n case 13:\n this.begin(\"callbackname\");\n break;\n case 14:\n this.popState();\n break;\n case 15:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 16:\n return 95;\n break;\n case 17:\n this.popState();\n break;\n case 18:\n return 96;\n break;\n case 19:\n return \"MD_STR\";\n break;\n case 20:\n this.popState();\n break;\n case 21:\n this.begin(\"md_string\");\n break;\n case 22:\n return \"STR\";\n break;\n case 23:\n this.popState();\n break;\n case 24:\n this.pushState(\"string\");\n break;\n case 25:\n return 84;\n break;\n case 26:\n return 102;\n break;\n case 27:\n return 85;\n break;\n case 28:\n return 104;\n break;\n case 29:\n return 86;\n break;\n case 30:\n return 87;\n break;\n case 31:\n return 97;\n break;\n case 32:\n this.begin(\"click\");\n break;\n case 33:\n this.popState();\n break;\n case 34:\n return 88;\n break;\n case 35:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 36:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 37:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n break;\n case 38:\n return 27;\n break;\n case 39:\n return 32;\n break;\n case 40:\n return 98;\n break;\n case 41:\n return 98;\n break;\n case 42:\n return 98;\n break;\n case 43:\n return 98;\n break;\n case 44:\n this.popState();\n return 13;\n break;\n case 45:\n this.popState();\n return 14;\n break;\n case 46:\n this.popState();\n return 14;\n break;\n case 47:\n this.popState();\n return 14;\n break;\n case 48:\n this.popState();\n return 14;\n break;\n case 49:\n this.popState();\n return 14;\n break;\n case 50:\n this.popState();\n return 14;\n break;\n case 51:\n this.popState();\n return 14;\n break;\n case 52:\n this.popState();\n return 14;\n break;\n case 53:\n this.popState();\n return 14;\n break;\n case 54:\n this.popState();\n return 14;\n break;\n case 55:\n return 121;\n break;\n case 56:\n return 122;\n break;\n case 57:\n return 123;\n break;\n case 58:\n return 124;\n break;\n case 59:\n return 78;\n break;\n case 60:\n return 105;\n break;\n case 61:\n return 111;\n break;\n case 62:\n return 46;\n break;\n case 63:\n return 60;\n break;\n case 64:\n return 44;\n break;\n case 65:\n return 8;\n break;\n case 66:\n return 106;\n break;\n case 67:\n return 115;\n break;\n case 68:\n this.popState();\n return 77;\n break;\n case 69:\n this.pushState(\"edgeText\");\n return 75;\n break;\n case 70:\n return 119;\n break;\n case 71:\n this.popState();\n return 77;\n break;\n case 72:\n this.pushState(\"thickEdgeText\");\n return 75;\n break;\n case 73:\n return 119;\n break;\n case 74:\n this.popState();\n return 77;\n break;\n case 75:\n this.pushState(\"dottedEdgeText\");\n return 75;\n break;\n case 76:\n return 119;\n break;\n case 77:\n return 77;\n break;\n case 78:\n this.popState();\n return 53;\n break;\n case 79:\n return \"TEXT\";\n break;\n case 80:\n this.pushState(\"ellipseText\");\n return 52;\n break;\n case 81:\n this.popState();\n return 55;\n break;\n case 82:\n this.pushState(\"text\");\n return 54;\n break;\n case 83:\n this.popState();\n return 57;\n break;\n case 84:\n this.pushState(\"text\");\n return 56;\n break;\n case 85:\n return 58;\n break;\n case 86:\n this.pushState(\"text\");\n return 67;\n break;\n case 87:\n this.popState();\n return 64;\n break;\n case 88:\n this.pushState(\"text\");\n return 63;\n break;\n case 89:\n this.popState();\n return 49;\n break;\n case 90:\n this.pushState(\"text\");\n return 48;\n break;\n case 91:\n this.popState();\n return 69;\n break;\n case 92:\n this.popState();\n return 71;\n break;\n case 93:\n return 117;\n break;\n case 94:\n this.pushState(\"trapText\");\n return 68;\n break;\n case 95:\n this.pushState(\"trapText\");\n return 70;\n break;\n case 96:\n return 118;\n break;\n case 97:\n return 67;\n break;\n case 98:\n return 90;\n break;\n case 99:\n return \"SEP\";\n break;\n case 100:\n return 89;\n break;\n case 101:\n return 115;\n break;\n case 102:\n return 111;\n break;\n case 103:\n return 44;\n break;\n case 104:\n return 109;\n break;\n case 105:\n return 114;\n break;\n case 106:\n return 116;\n break;\n case 107:\n this.popState();\n return 62;\n break;\n case 108:\n this.pushState(\"text\");\n return 62;\n break;\n case 109:\n this.popState();\n return 51;\n break;\n case 110:\n this.pushState(\"text\");\n return 50;\n break;\n case 111:\n this.popState();\n return 31;\n break;\n case 112:\n this.pushState(\"text\");\n return 29;\n break;\n case 113:\n this.popState();\n return 66;\n break;\n case 114:\n this.pushState(\"text\");\n return 65;\n break;\n case 115:\n return \"TEXT\";\n break;\n case 116:\n return \"QUOTE\";\n break;\n case 117:\n return 9;\n break;\n case 118:\n return 10;\n break;\n case 119:\n return 11;\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:@\\{)/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\\\"]+)/, /^(?:[^}^\"]+)/, /^(?:\\})/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"][`])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\b)/, /^(?:class\\b)/, /^(?:href[\\s])/, /^(?:click[\\s]+)/, /^(?:[\\s\\n])/, /^(?:[^\\s\\n]*)/, /^(?:flowchart-elk\\b)/, /^(?:graph\\b)/, /^(?:flowchart\\b)/, /^(?:subgraph\\b)/, /^(?:end\\b\\s*)/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:(\\r?\\n)*\\s*\\n)/, /^(?:\\s*LR\\b)/, /^(?:\\s*RL\\b)/, /^(?:\\s*TB\\b)/, /^(?:\\s*BT\\b)/, /^(?:\\s*TD\\b)/, /^(?:\\s*BR\\b)/, /^(?:\\s*<)/, /^(?:\\s*>)/, /^(?:\\s*\\^)/, /^(?:\\s*v\\b)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:[^\\s\\\"]+@(?=[^\\{\\\"]))/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\\*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:[^=]|=(?!))/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[^\\.]|\\.(?!))/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:[-/\\)][\\)])/, /^(?:[^\\(\\)\\[\\]\\{\\}]|!\\)+)/, /^(?:\\(-)/, /^(?:\\]\\))/, /^(?:\\(\\[)/, /^(?:\\]\\])/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:>)/, /^(?:\\)\\])/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\(\\(\\()/, /^(?:[\\\\(?=\\])][\\]])/, /^(?:\\/(?=\\])\\])/, /^(?:\\/(?!\\])|\\\\(?!\\])|[^\\\\\\[\\]\\(\\)\\{\\}\\/]+)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:<)/, /^(?:>)/, /^(?:\\^)/, /^(?:\\\\\\|)/, /^(?:v\\b)/, /^(?:\\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!\"\\#$%&'*+\\.`?\\\\_\\/]|-(?=[^\\>\\-\\.])|(?!))+)/, /^(?:-)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\|)/, /^(?:\\|)/, /^(?:\\))/, /^(?:\\()/, /^(?:\\])/, /^(?:\\[)/, /^(?:(\\}))/, /^(?:\\{)/, /^(?:[^\\[\\]\\(\\)\\{\\}\\|\\\"]+)/, /^(?:\")/, /^(?:(\\r?\\n)+)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"shapeDataEndBracket\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"shapeDataStr\": { \"rules\": [9, 10, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"shapeData\": { \"rules\": [8, 11, 12, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"callbackargs\": { \"rules\": [17, 18, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"callbackname\": { \"rules\": [14, 15, 16, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"href\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"click\": { \"rules\": [21, 24, 33, 34, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"dottedEdgeText\": { \"rules\": [21, 24, 74, 76, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"thickEdgeText\": { \"rules\": [21, 24, 71, 73, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"edgeText\": { \"rules\": [21, 24, 68, 70, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"trapText\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 91, 92, 93, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"ellipseText\": { \"rules\": [21, 24, 77, 78, 79, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"text\": { \"rules\": [21, 24, 77, 80, 81, 82, 83, 84, 87, 88, 89, 90, 94, 95, 107, 108, 109, 110, 111, 112, 113, 114, 115], \"inclusive\": false }, \"vertex\": { \"rules\": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"dir\": { \"rules\": [21, 24, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [5, 6, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"acc_title\": { \"rules\": [1, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"md_string\": { \"rules\": [19, 20, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"string\": { \"rules\": [21, 22, 23, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 13, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 74, 75, 77, 80, 82, 84, 85, 86, 88, 90, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 110, 112, 114, 116, 117, 118, 119], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar flow_default = parser;\n\n// src/diagrams/flowchart/parser/flowParser.ts\nvar newParser = Object.assign({}, flow_default);\nnewParser.parse = (src) => {\n const newSrc = src.replace(/}\\s*\\n/g, \"}\\n\");\n return flow_default.parse(newSrc);\n};\nvar flowParser_default = newParser;\n\n// src/diagrams/flowchart/styles.ts\nimport * as khroma from \"khroma\";\nvar fade = /* @__PURE__ */ __name((color, opacity) => {\n const channel2 = khroma.channel;\n const r = channel2(color, \"r\");\n const g = channel2(color, \"g\");\n const b = channel2(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n}, \"fade\");\nvar getStyles = /* @__PURE__ */ __name((options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span {\n color: ${options.titleColor};\n }\n .cluster-label span p {\n background-color: transparent;\n }\n\n .label text,span {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n\n .root .anchor path {\n fill: ${options.lineColor} !important;\n stroke-width: 0;\n stroke: ${options.lineColor};\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .cluster rect {\n fill: ${options.clusterBkg};\n stroke: ${options.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n\n rect.text {\n fill: none;\n stroke-width: 0;\n }\n\n .icon-shape, .image-shape {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n padding: 2px;\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n ${getIconStyles()}\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/flowchart/flowDiagram.ts\nvar diagram = {\n parser: flowParser_default,\n get db() {\n return new FlowDB();\n },\n renderer: flowRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.flowchart) {\n cnf.flowchart = {};\n }\n if (cnf.layout) {\n setConfig({ layout: cnf.layout });\n }\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["MERMAID_DOM_ID_PREFIX","FlowDB","_a","getConfig","setAccTitle","setAccDescription","setDiagramTitle","getAccTitle","getAccDescription","getDiagramTitle","txt","common_default","id","vertex","textObj","type","style","classes","dir","props","metadata","doc","yamlData","load","JSON_SCHEMA","edge","e","edgeDoc","s","isValidShape","_b","_start","_end","log","linkTextObj","existingLinks","getEdgeId","value","linkData","start","end","isLastStart","isFirstEnd","positions","interpolate","pos","_d","_c","_f","_e","ids","_style","classNode","newStyle","className","subGraph","tooltip","functionName","functionArgs","domId","argList","i","item","elem","utils_default","linkStr","target","element","fun","tooltipElem","select","el","rect","ver","clear","_id","list","_title","title","result","__name","a","prims","objs","dir2","nodeList","flowchartConfig","nodes","count","posCount","childPos","res","_str","str","stroke","char","length","line","dots","_startStr","info","startInfo","allSgs","sg","allSubgraphs","node","arrowTypeStart","arrowTypeEnd","parentDB","subGraphDB","config","look","parentId","isGroup","baseNode","classDefs","compiledStyles","customClass","cssClass","edges","subGraphs","rawEdge","index","styles","defaultConfig","getClasses","text","diagramObj","draw","_version","diag","securityLevel","conf","layout","sandboxElement","select2","data4Layout","svg","getDiagramElement","direction","getRegisteredLayoutAlgorithm","render","padding","setupViewPortForSVG","link","linkNode","shape","label","flowRenderer_v3_unified_default","parser","o","k","v","o2","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","$Vf1","$Vg1","$Vh1","$Vi1","$Vj1","$Vk1","$Vl1","$Vm1","$Vn1","$Vo1","$Vp1","$Vq1","$Vr1","$Vs1","$Vt1","$Vu1","$Vv1","$Vw1","$Vx1","$Vy1","$Vz1","$VA1","$VB1","$VC1","$VD1","$VE1","$VF1","$VG1","$VH1","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","inf","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","n","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","re","Parser","flow_default","newParser","src","newSrc","flowParser_default","fade","color","opacity","channel2","khroma.channel","g","b","khroma.rgba","getStyles","options","getIconStyles","styles_default","diagram","cnf","setConfig"],"mappings":"iZAiDA,IAAIA,GAAwB,gBACxBC,IAASC,GAAA,KAAM,CAEjB,aAAc,CACZ,KAAK,cAAgB,EACrB,KAAK,OAASC,GAAS,EACvB,KAAK,SAA2B,IAAI,IACpC,KAAK,MAAQ,CAAA,EACb,KAAK,QAA0B,IAAI,IACnC,KAAK,UAAY,CAAA,EACjB,KAAK,eAAiC,IAAI,IAC1C,KAAK,SAA2B,IAAI,IACpC,KAAK,SAAW,EAChB,KAAK,eAAiB,GAEtB,KAAK,SAAW,GAChB,KAAK,YAAc,CAAA,EAEnB,KAAK,KAAO,CAAA,EACZ,KAAK,YAAcC,GACnB,KAAK,kBAAoBC,GACzB,KAAK,gBAAkBC,GACvB,KAAK,YAAcC,GACnB,KAAK,kBAAoBC,GACzB,KAAK,gBAAkBC,GACvB,KAAK,KAAK,KAAK,KAAK,cAAc,KAAK,IAAI,CAAC,EAC5C,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,IAAM,CACT,WAAY,KAAK,WAAW,KAAK,IAAI,CAC3C,EACI,KAAK,MAAK,EACV,KAAK,OAAO,OAAO,CACrB,CAIA,aAAaC,EAAK,CAChB,OAAOC,GAAe,aAAaD,EAAK,KAAK,MAAM,CACrD,CAMA,YAAYE,EAAI,CACd,UAAWC,KAAU,KAAK,SAAS,OAAM,EACvC,GAAIA,EAAO,KAAOD,EAChB,OAAOC,EAAO,MAGlB,OAAOD,CACT,CAIA,UAAUA,EAAIE,EAASC,EAAMC,EAAOC,EAASC,EAAKC,EAAQ,CAAA,EAAIC,EAAU,SACtE,GAAI,CAACR,GAAMA,EAAG,KAAI,EAAG,SAAW,EAC9B,OAEF,IAAIS,EACJ,GAAID,IAAa,OAAQ,CACvB,IAAIE,EACCF,EAAS,SAAS;AAAA,CAAI,EAGzBE,EAAWF,EAAW;AAAA,EAFtBE,EAAW;AAAA,EAAQF,EAAW;AAAA,GAIhCC,EAAME,GAAKD,EAAU,CAAE,OAAQE,EAAW,CAAE,CAC9C,CACA,MAAMC,EAAO,KAAK,MAAM,KAAMC,GAAMA,EAAE,KAAOd,CAAE,EAC/C,GAAIa,EAAM,CACR,MAAME,EAAUN,GACZM,GAAA,YAAAA,EAAS,WAAY,SACvBF,EAAK,QAAUE,EAAQ,UAErBA,GAAA,YAAAA,EAAS,aAAc,SACzBF,EAAK,UAAYE,EAAQ,YAEvBA,GAAA,YAAAA,EAAS,SAAU,SACrBF,EAAK,YAAcE,EAAQ,OAE7B,MACF,CACA,IAAIjB,EACAG,EAAS,KAAK,SAAS,IAAID,CAAE,EA8CjC,GA7CIC,IAAW,SACbA,EAAS,CACP,GAAAD,EACA,UAAW,OACX,MAAOZ,GAAwBY,EAAK,IAAM,KAAK,cAC/C,OAAQ,CAAA,EACR,QAAS,CAAA,CACjB,EACM,KAAK,SAAS,IAAIA,EAAIC,CAAM,GAE9B,KAAK,gBACDC,IAAY,QACd,KAAK,OAASX,GAAS,EACvBO,EAAM,KAAK,aAAaI,EAAQ,KAAK,KAAI,CAAE,EAC3CD,EAAO,UAAYC,EAAQ,KACvBJ,EAAI,WAAW,GAAG,GAAKA,EAAI,SAAS,GAAG,IACzCA,EAAMA,EAAI,UAAU,EAAGA,EAAI,OAAS,CAAC,GAEvCG,EAAO,KAAOH,GAEVG,EAAO,OAAS,SAClBA,EAAO,KAAOD,GAGdG,IAAS,SACXF,EAAO,KAAOE,GAEQC,GAAU,MAChCA,EAAM,QAASY,GAAM,CACnBf,EAAO,OAAO,KAAKe,CAAC,CACtB,CAAC,EAEuBX,GAAY,MACpCA,EAAQ,QAASW,GAAM,CACrBf,EAAO,QAAQ,KAAKe,CAAC,CACvB,CAAC,EAECV,IAAQ,SACVL,EAAO,IAAMK,GAEXL,EAAO,QAAU,OACnBA,EAAO,MAAQM,EACNA,IAAU,QACnB,OAAO,OAAON,EAAO,MAAOM,CAAK,EAE/BE,IAAQ,OAAQ,CAClB,GAAIA,EAAI,MAAO,CACb,GAAIA,EAAI,QAAUA,EAAI,MAAM,eAAiBA,EAAI,MAAM,SAAS,GAAG,EACjE,MAAM,IAAI,MAAM,kBAAkBA,EAAI,KAAK,oCAAoC,EAC1E,GAAI,CAACQ,GAAaR,EAAI,KAAK,EAChC,MAAM,IAAI,MAAM,kBAAkBA,EAAI,KAAK,GAAG,EAEhDR,EAAO,KAAOQ,GAAA,YAAAA,EAAK,KACrB,CACIA,GAAA,MAAAA,EAAK,QACPR,EAAO,KAAOQ,GAAA,YAAAA,EAAK,OAEjBA,GAAA,MAAAA,EAAK,OACPR,EAAO,KAAOQ,GAAA,YAAAA,EAAK,KACf,GAACnB,EAAAmB,EAAI,QAAJ,MAAAnB,EAAW,SAAUW,EAAO,OAASD,IACxCC,EAAO,KAAO,KAGdQ,GAAA,MAAAA,EAAK,OACPR,EAAO,KAAOQ,GAAA,YAAAA,EAAK,MAEjBA,GAAA,MAAAA,EAAK,MACPR,EAAO,IAAMQ,GAAA,YAAAA,EAAK,KAEhBA,GAAA,MAAAA,EAAK,MACPR,EAAO,IAAMQ,GAAA,YAAAA,EAAK,IACd,GAACS,EAAAT,EAAI,QAAJ,MAAAS,EAAW,SAAUjB,EAAO,OAASD,IACxCC,EAAO,KAAO,KAGdQ,GAAA,MAAAA,EAAK,aACPR,EAAO,WAAaQ,EAAI,YAEtBA,EAAI,IACNR,EAAO,WAAa,OAAOQ,EAAI,CAAC,GAE9BA,EAAI,IACNR,EAAO,YAAc,OAAOQ,EAAI,CAAC,EAErC,CACF,CAKA,cAAcU,EAAQC,EAAMjB,EAAMH,EAAI,CAGpC,MAAMa,EAAO,CACX,MAHYM,EAIZ,IAHUC,EAIV,KAAM,OACN,KAAM,GACN,UAAW,OACX,QAAS,CAAA,EACT,gBAAiB,GACjB,YAAa,KAAK,MAAM,kBAC9B,EACIC,GAAI,KAAK,oBAAqBR,CAAI,EAClC,MAAMS,EAAcnB,EAAK,KAazB,GAZImB,IAAgB,SAClBT,EAAK,KAAO,KAAK,aAAaS,EAAY,KAAK,MAAM,EACjDT,EAAK,KAAK,WAAW,GAAG,GAAKA,EAAK,KAAK,SAAS,GAAG,IACrDA,EAAK,KAAOA,EAAK,KAAK,UAAU,EAAGA,EAAK,KAAK,OAAS,CAAC,GAEzDA,EAAK,UAAYS,EAAY,MAE3BnB,IAAS,SACXU,EAAK,KAAOV,EAAK,KACjBU,EAAK,OAASV,EAAK,OACnBU,EAAK,OAASV,EAAK,OAAS,GAAK,GAAKA,EAAK,QAEzCH,GAAM,CAAC,KAAK,MAAM,KAAMc,GAAMA,EAAE,KAAOd,CAAE,EAC3Ca,EAAK,GAAKb,EACVa,EAAK,gBAAkB,OAClB,CACL,MAAMU,EAAgB,KAAK,MAAM,OAAQT,GAAMA,EAAE,QAAUD,EAAK,OAASC,EAAE,MAAQD,EAAK,GAAG,EACvFU,EAAc,SAAW,EAC3BV,EAAK,GAAKW,GAAUX,EAAK,MAAOA,EAAK,IAAK,CAAE,QAAS,EAAG,OAAQ,GAAG,CAAE,EAErEA,EAAK,GAAKW,GAAUX,EAAK,MAAOA,EAAK,IAAK,CACxC,QAASU,EAAc,OAAS,EAChC,OAAQ,GAClB,CAAS,CAEL,CACA,GAAI,KAAK,MAAM,QAAU,KAAK,OAAO,UAAY,KAC/CF,GAAI,KAAK,iBAAiB,EAC1B,KAAK,MAAM,KAAKR,CAAI,MAEpB,OAAM,IAAI,MACR,wBAAwB,KAAK,MAAM,MAAM,kCAAkC,KAAK,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA,qCAKvG,CAEE,CACA,WAAWY,EAAO,CAChB,OAAOA,IAAU,MAAQ,OAAOA,GAAU,UAAY,OAAQA,GAAS,OAAOA,EAAM,IAAO,QAC7F,CACA,QAAQN,EAAQC,EAAMM,EAAU,CAC9B,MAAM1B,EAAK,KAAK,WAAW0B,CAAQ,EAAIA,EAAS,GAAG,QAAQ,IAAK,EAAE,EAAI,OACtEL,GAAI,KAAK,UAAWF,EAAQC,EAAMpB,CAAE,EACpC,UAAW2B,KAASR,EAClB,UAAWS,KAAOR,EAAM,CACtB,MAAMS,EAAcF,IAAUR,EAAOA,EAAO,OAAS,CAAC,EAChDW,EAAaF,IAAQR,EAAK,CAAC,EAC7BS,GAAeC,EACjB,KAAK,cAAcH,EAAOC,EAAKF,EAAU1B,CAAE,EAE3C,KAAK,cAAc2B,EAAOC,EAAKF,EAAU,MAAM,CAEnD,CAEJ,CAIA,sBAAsBK,EAAWC,EAAa,CAC5CD,EAAU,QAASE,GAAQ,CACrBA,IAAQ,UACV,KAAK,MAAM,mBAAqBD,EAEhC,KAAK,MAAMC,CAAG,EAAE,YAAcD,CAElC,CAAC,CACH,CAKA,WAAWD,EAAW3B,EAAO,CAC3B2B,EAAU,QAASE,GAAQ,iBACzB,GAAI,OAAOA,GAAQ,UAAYA,GAAO,KAAK,MAAM,OAC/C,MAAM,IAAI,MACR,aAAaA,CAAG,kFAAkF,KAAK,MAAM,OAAS,CAAC,wEACjI,EAEUA,IAAQ,UACV,KAAK,MAAM,aAAe7B,GAE1B,KAAK,MAAM6B,CAAG,EAAE,MAAQ7B,KACnBc,GAAA5B,EAAA,KAAK,MAAM2C,CAAG,IAAd,YAAA3C,EAAiB,QAAjB,YAAA4B,EAAwB,SAAU,GAAK,GAAK,GAACgB,GAAAC,EAAA,KAAK,MAAMF,CAAG,IAAd,YAAAE,EAAiB,QAAjB,MAAAD,EAAwB,KAAMlB,GAAMA,GAAA,YAAAA,EAAG,WAAW,aAClGoB,GAAAC,EAAA,KAAK,MAAMJ,CAAG,IAAd,YAAAI,EAAiB,QAAjB,MAAAD,EAAwB,KAAK,cAGnC,CAAC,CACH,CACA,SAASE,EAAKC,EAAQ,CACpB,MAAMnC,EAAQmC,EAAO,KAAI,EAAG,QAAQ,OAAQ,KAAc,EAAE,QAAQ,KAAM,GAAG,EAAE,QAAQ,OAAQ,GAAG,EAAE,MAAM,GAAG,EAC7GD,EAAI,MAAM,GAAG,EAAE,QAAStC,GAAO,CAC7B,IAAIwC,EAAY,KAAK,QAAQ,IAAIxC,CAAE,EAC/BwC,IAAc,SAChBA,EAAY,CAAE,GAAAxC,EAAI,OAAQ,CAAA,EAAI,WAAY,CAAA,CAAE,EAC5C,KAAK,QAAQ,IAAIA,EAAIwC,CAAS,GAERpC,GAAU,MAChCA,EAAM,QAASY,GAAM,CACnB,GAAI,QAAQ,KAAKA,CAAC,EAAG,CACnB,MAAMyB,EAAWzB,EAAE,QAAQ,OAAQ,QAAQ,EAC3CwB,EAAU,WAAW,KAAKC,CAAQ,CACpC,CACAD,EAAU,OAAO,KAAKxB,CAAC,CACzB,CAAC,CAEL,CAAC,CACH,CAKA,aAAaV,EAAK,CAChB,KAAK,UAAYA,EAAI,KAAI,EACrB,MAAM,KAAK,KAAK,SAAS,IAC3B,KAAK,UAAY,MAEf,OAAO,KAAK,KAAK,SAAS,IAC5B,KAAK,UAAY,MAEf,MAAM,KAAK,KAAK,SAAS,IAC3B,KAAK,UAAY,MAEf,MAAM,KAAK,KAAK,SAAS,IAC3B,KAAK,UAAY,MAEf,KAAK,YAAc,OACrB,KAAK,UAAY,KAErB,CAOA,SAASgC,EAAKI,EAAW,CACvB,UAAW1C,KAAMsC,EAAI,MAAM,GAAG,EAAG,CAC/B,MAAMrC,EAAS,KAAK,SAAS,IAAID,CAAE,EAC/BC,GACFA,EAAO,QAAQ,KAAKyC,CAAS,EAE/B,MAAM7B,EAAO,KAAK,MAAM,KAAMC,GAAMA,EAAE,KAAOd,CAAE,EAC3Ca,GACFA,EAAK,QAAQ,KAAK6B,CAAS,EAE7B,MAAMC,EAAW,KAAK,eAAe,IAAI3C,CAAE,EACvC2C,GACFA,EAAS,QAAQ,KAAKD,CAAS,CAEnC,CACF,CACA,WAAWJ,EAAKM,EAAS,CACvB,GAAIA,IAAY,OAGhB,CAAAA,EAAU,KAAK,aAAaA,CAAO,EACnC,UAAW5C,KAAMsC,EAAI,MAAM,GAAG,EAC5B,KAAK,SAAS,IAAI,KAAK,UAAY,QAAU,KAAK,YAAYtC,CAAE,EAAIA,EAAI4C,CAAO,EAEnF,CACA,YAAY5C,EAAI6C,EAAcC,EAAc,CAC1C,MAAMC,EAAQ,KAAK,YAAY/C,CAAE,EAIjC,GAHIT,GAAS,EAAG,gBAAkB,SAG9BsD,IAAiB,OACnB,OAEF,IAAIG,EAAU,CAAA,EACd,GAAI,OAAOF,GAAiB,SAAU,CACpCE,EAAUF,EAAa,MAAM,+BAA+B,EAC5D,QAASG,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACvC,IAAIC,EAAOF,EAAQC,CAAC,EAAE,KAAI,EACtBC,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,GAAG,IAC3CA,EAAOA,EAAK,OAAO,EAAGA,EAAK,OAAS,CAAC,GAEvCF,EAAQC,CAAC,EAAIC,CACf,CACF,CACIF,EAAQ,SAAW,GACrBA,EAAQ,KAAKhD,CAAE,EAEjB,MAAMC,EAAS,KAAK,SAAS,IAAID,CAAE,EAC/BC,IACFA,EAAO,aAAe,GACtB,KAAK,KAAK,KAAK,IAAM,CACnB,MAAMkD,EAAO,SAAS,cAAc,QAAQJ,CAAK,IAAI,EACjDI,IAAS,MACXA,EAAK,iBACH,QACA,IAAM,CACJC,GAAc,QAAQP,EAAc,GAAGG,CAAO,CAChD,EACA,EACZ,CAEM,CAAC,EAEL,CAQA,QAAQV,EAAKe,EAASC,EAAQ,CAC5BhB,EAAI,MAAM,GAAG,EAAE,QAAStC,GAAO,CAC7B,MAAMC,EAAS,KAAK,SAAS,IAAID,CAAE,EAC/BC,IAAW,SACbA,EAAO,KAAOmD,GAAc,UAAUC,EAAS,KAAK,MAAM,EAC1DpD,EAAO,WAAaqD,EAExB,CAAC,EACD,KAAK,SAAShB,EAAK,WAAW,CAChC,CACA,WAAWtC,EAAI,CACb,OAAO,KAAK,SAAS,IAAIA,CAAE,CAC7B,CAQA,cAAcsC,EAAKO,EAAcC,EAAc,CAC7CR,EAAI,MAAM,GAAG,EAAE,QAAStC,GAAO,CAC7B,KAAK,YAAYA,EAAI6C,EAAcC,CAAY,CACjD,CAAC,EACD,KAAK,SAASR,EAAK,WAAW,CAChC,CACA,cAAciB,EAAS,CACrB,KAAK,KAAK,QAASC,GAAQ,CACzBA,EAAID,CAAO,CACb,CAAC,CACH,CACA,cAAe,OACb,OAAOjE,EAAA,KAAK,YAAL,YAAAA,EAAgB,MACzB,CAKA,aAAc,CACZ,OAAO,KAAK,QACd,CAKA,UAAW,CACT,OAAO,KAAK,KACd,CAKA,YAAa,CACX,OAAO,KAAK,OACd,CACA,cAAciE,EAAS,CACrB,IAAIE,EAAcC,GAAO,iBAAiB,GACrCD,EAAY,SAAWA,GAAa,CAAC,EAAE,CAAC,IAAM,OACjDA,EAAcC,GAAO,MAAM,EAAE,OAAO,KAAK,EAAE,KAAK,QAAS,gBAAgB,EAAE,MAAM,UAAW,CAAC,GAEnFA,GAAOH,CAAO,EAAE,OAAO,KAAK,EACtB,UAAU,QAAQ,EAC9B,GAAG,YAAczC,GAAM,OAC3B,MAAM6C,EAAKD,GAAO5C,EAAE,aAAa,EAEjC,GADc6C,EAAG,KAAK,OAAO,IACf,KACZ,OAEF,MAAMC,GAAOtE,EAAAwB,EAAE,gBAAF,YAAAxB,EAAiB,wBAC9BmE,EAAY,WAAU,EAAG,SAAS,GAAG,EAAE,MAAM,UAAW,IAAI,EAC5DA,EAAY,KAAKE,EAAG,KAAK,OAAO,CAAC,EAAE,MAAM,OAAQ,OAAO,QAAUC,EAAK,MAAQA,EAAK,MAAQA,EAAK,MAAQ,EAAI,IAAI,EAAE,MAAM,MAAO,OAAO,QAAUA,EAAK,OAAS,IAAI,EACnKH,EAAY,KAAKA,EAAY,KAAI,EAAG,QAAQ,gBAAiB,OAAO,CAAC,EACrEE,EAAG,QAAQ,QAAS,EAAI,CAC1B,CAAC,EAAE,GAAG,WAAa7C,GAAM,CACvB2C,EAAY,WAAU,EAAG,SAAS,GAAG,EAAE,MAAM,UAAW,CAAC,EAC9CC,GAAO5C,EAAE,aAAa,EAC9B,QAAQ,QAAS,EAAK,CAC3B,CAAC,CACH,CAKA,MAAM+C,EAAM,QAAS,CACnB,KAAK,SAA2B,IAAI,IACpC,KAAK,QAA0B,IAAI,IACnC,KAAK,MAAQ,CAAA,EACb,KAAK,KAAO,CAAC,KAAK,cAAc,KAAK,IAAI,CAAC,EAC1C,KAAK,UAAY,CAAA,EACjB,KAAK,eAAiC,IAAI,IAC1C,KAAK,SAAW,EAChB,KAAK,SAA2B,IAAI,IACpC,KAAK,eAAiB,GACtB,KAAK,QAAUA,EACf,KAAK,OAAStE,GAAS,EACvBuE,GAAK,CACP,CACA,OAAOD,EAAK,CACV,KAAK,QAAUA,GAAO,OACxB,CACA,cAAe,CACb,MAAO,2FACT,CACA,YAAYE,EAAKC,EAAMC,EAAQ,CAC7B,IAAIjE,EAAK+D,EAAI,KAAK,KAAI,EAClBG,EAAQD,EAAO,KACfF,IAAQE,GAAU,KAAK,KAAKA,EAAO,IAAI,IACzCjE,EAAK,QAuBP,MAAMmE,EArBuBC,EAAQC,GAAM,CACzC,MAAMC,EAAQ,CAAE,QAAS,CAAA,EAAI,OAAQ,CAAA,EAAI,OAAQ,EAAE,EAC7CC,EAAO,CAAA,EACb,IAAIC,EAgBJ,MAAO,CAAE,SAfSH,EAAE,OAAO,SAASnB,EAAM,CACxC,MAAM/C,EAAO,OAAO+C,EACpB,OAAIA,EAAK,MAAQA,EAAK,OAAS,OAC7BsB,EAAOtB,EAAK,MACL,IAELA,EAAK,KAAI,IAAO,GACX,GAEL/C,KAAQmE,EACHA,EAAMnE,CAAI,EAAE,eAAe+C,CAAI,EAAI,GAAQoB,EAAMnE,CAAI,EAAE+C,CAAI,EAAI,GAE/DqB,EAAK,SAASrB,CAAI,EAAI,GAAQqB,EAAK,KAAKrB,CAAI,CAEvD,CAAC,EAC6B,IAAKsB,CAAI,CACzC,EAAG,MAAM,EACWR,EAAK,KAAI,CAAE,EACzBS,EAAWN,EAAO,SACxB,IAAI7D,EAAM6D,EAAO,IACjB,MAAMO,EAAkBnF,KAAY,WAAa,CAAA,EAEjD,GADAe,EAAMA,IAAQoE,EAAgB,WAAa,KAAK,aAAY,GAAMnF,GAAS,EAAG,WAAa,OAAS,QAChG,KAAK,UAAY,QACnB,QAAS0D,EAAI,EAAGA,EAAIwB,EAAS,OAAQxB,IACnCwB,EAASxB,CAAC,EAAI,KAAK,YAAYwB,EAASxB,CAAC,CAAC,EAG9CjD,EAAKA,GAAM,WAAa,KAAK,SAC7BkE,EAAQA,GAAS,GACjBA,EAAQ,KAAK,aAAaA,CAAK,EAC/B,KAAK,SAAW,KAAK,SAAW,EAChC,MAAMvB,EAAW,CACf,GAAA3C,EACA,MAAOyE,EACP,MAAOP,EAAM,KAAI,EACjB,QAAS,CAAA,EACT,IAAA5D,EACA,UAAW2D,EAAO,IACxB,EACI,OAAA5C,GAAI,KAAK,SAAUsB,EAAS,GAAIA,EAAS,MAAOA,EAAS,GAAG,EAC5DA,EAAS,MAAQ,KAAK,SAASA,EAAU,KAAK,SAAS,EAAE,MACzD,KAAK,UAAU,KAAKA,CAAQ,EAC5B,KAAK,eAAe,IAAI3C,EAAI2C,CAAQ,EAC7B3C,CACT,CACA,YAAYA,EAAI,CACd,SAAW,CAACiD,EAAGN,CAAQ,IAAK,KAAK,UAAU,UACzC,GAAIA,EAAS,KAAO3C,EAClB,OAAOiD,EAGX,MAAO,EACT,CACA,YAAYjD,EAAIiC,EAAK,CACnB,MAAM0C,EAAQ,KAAK,UAAU1C,CAAG,EAAE,MAElC,GADA,KAAK,SAAW,KAAK,SAAW,EAC5B,KAAK,SAAW,IAClB,MAAO,CACL,OAAQ,GACR,MAAO,CACf,EAGI,GADA,KAAK,YAAY,KAAK,QAAQ,EAAIA,EAC9B,KAAK,UAAUA,CAAG,EAAE,KAAOjC,EAC7B,MAAO,CACL,OAAQ,GACR,MAAO,CACf,EAEI,IAAI4E,EAAQ,EACRC,EAAW,EACf,KAAOD,EAAQD,EAAM,QAAQ,CAC3B,MAAMG,EAAW,KAAK,YAAYH,EAAMC,CAAK,CAAC,EAC9C,GAAIE,GAAY,EAAG,CACjB,MAAMC,EAAM,KAAK,YAAY/E,EAAI8E,CAAQ,EACzC,GAAIC,EAAI,OACN,MAAO,CACL,OAAQ,GACR,MAAOF,EAAWE,EAAI,KAClC,EAEUF,EAAWA,EAAWE,EAAI,KAE9B,CACAH,EAAQA,EAAQ,CAClB,CACA,MAAO,CACL,OAAQ,GACR,MAAOC,CACb,CACE,CACA,iBAAiB5C,EAAK,CACpB,OAAO,KAAK,YAAYA,CAAG,CAC7B,CACA,YAAa,CACX,KAAK,SAAW,GACZ,KAAK,UAAU,OAAS,GAC1B,KAAK,YAAY,OAAQ,KAAK,UAAU,OAAS,CAAC,CAEtD,CACA,cAAe,CACb,OAAO,KAAK,SACd,CACA,YAAa,CACX,OAAI,KAAK,gBACP,KAAK,eAAiB,GACf,IAEF,EACT,CACA,kBAAkB+C,EAAM,CACtB,IAAIC,EAAMD,EAAK,KAAI,EACf7E,EAAO,aACX,OAAQ8E,EAAI,CAAC,EAAC,CACZ,IAAK,IACH9E,EAAO,cACP8E,EAAMA,EAAI,MAAM,CAAC,EACjB,MACF,IAAK,IACH9E,EAAO,cACP8E,EAAMA,EAAI,MAAM,CAAC,EACjB,MACF,IAAK,IACH9E,EAAO,eACP8E,EAAMA,EAAI,MAAM,CAAC,EACjB,KACR,CACI,IAAIC,EAAS,SACb,OAAID,EAAI,SAAS,GAAG,IAClBC,EAAS,SAEPD,EAAI,SAAS,GAAG,IAClBC,EAAS,UAEJ,CAAE,KAAA/E,EAAM,OAAA+E,CAAM,CACvB,CACA,UAAUC,EAAMF,EAAK,CACnB,MAAMG,EAASH,EAAI,OACnB,IAAIL,EAAQ,EACZ,QAAS3B,EAAI,EAAGA,EAAImC,EAAQ,EAAEnC,EACxBgC,EAAIhC,CAAC,IAAMkC,GACb,EAAEP,EAGN,OAAOA,CACT,CACA,gBAAgBI,EAAM,CACpB,MAAMC,EAAMD,EAAK,KAAI,EACrB,IAAIK,EAAOJ,EAAI,MAAM,EAAG,EAAE,EACtB9E,EAAO,aACX,OAAQ8E,EAAI,MAAM,EAAE,EAAC,CACnB,IAAK,IACH9E,EAAO,cACH8E,EAAI,WAAW,GAAG,IACpB9E,EAAO,UAAYA,EACnBkF,EAAOA,EAAK,MAAM,CAAC,GAErB,MACF,IAAK,IACHlF,EAAO,cACH8E,EAAI,WAAW,GAAG,IACpB9E,EAAO,UAAYA,EACnBkF,EAAOA,EAAK,MAAM,CAAC,GAErB,MACF,IAAK,IACHlF,EAAO,eACH8E,EAAI,WAAW,GAAG,IACpB9E,EAAO,UAAYA,EACnBkF,EAAOA,EAAK,MAAM,CAAC,GAErB,KACR,CACI,IAAIH,EAAS,SACTE,EAASC,EAAK,OAAS,EACvBA,EAAK,WAAW,GAAG,IACrBH,EAAS,SAEPG,EAAK,WAAW,GAAG,IACrBH,EAAS,aAEX,MAAMI,EAAO,KAAK,UAAU,IAAKD,CAAI,EACrC,OAAIC,IACFJ,EAAS,SACTE,EAASE,GAEJ,CAAE,KAAAnF,EAAM,OAAA+E,EAAQ,OAAAE,CAAM,CAC/B,CACA,aAAaJ,EAAMO,EAAW,CAC5B,MAAMC,EAAO,KAAK,gBAAgBR,CAAI,EACtC,IAAIS,EACJ,GAAIF,EAAW,CAEb,GADAE,EAAY,KAAK,kBAAkBF,CAAS,EACxCE,EAAU,SAAWD,EAAK,OAC5B,MAAO,CAAE,KAAM,UAAW,OAAQ,SAAS,EAE7C,GAAIC,EAAU,OAAS,aACrBA,EAAU,KAAOD,EAAK,SACjB,CACL,GAAIC,EAAU,OAASD,EAAK,KAC1B,MAAO,CAAE,KAAM,UAAW,OAAQ,SAAS,EAE7CC,EAAU,KAAO,UAAYA,EAAU,IACzC,CACA,OAAIA,EAAU,OAAS,iBACrBA,EAAU,KAAO,sBAEnBA,EAAU,OAASD,EAAK,OACjBC,CACT,CACA,OAAOD,CACT,CAEA,OAAOE,EAAQ3B,EAAK,CAClB,UAAW4B,KAAMD,EACf,GAAIC,EAAG,MAAM,SAAS5B,CAAG,EACvB,MAAO,GAGX,MAAO,EACT,CAKA,SAAS4B,EAAIC,EAAc,CACzB,MAAMb,EAAM,CAAA,EACZ,OAAAY,EAAG,MAAM,QAAQ,CAAC5B,EAAK9B,IAAQ,CACxB,KAAK,OAAO2D,EAAc7B,CAAG,GAChCgB,EAAI,KAAKY,EAAG,MAAM1D,CAAG,CAAC,CAE1B,CAAC,EACM,CAAE,MAAO8C,CAAG,CACrB,CACA,kBAAkB9E,EAAQ,CACxB,GAAIA,EAAO,IACT,MAAO,cAET,GAAIA,EAAO,KACT,OAAIA,EAAO,OAAS,SACX,aAELA,EAAO,OAAS,SACX,aAELA,EAAO,OAAS,UACX,cAEF,OAET,OAAQA,EAAO,KAAI,CACjB,IAAK,SACL,KAAK,OACH,MAAO,aACT,IAAK,QACH,MAAO,cACT,IAAK,UACH,MAAO,UACT,QACE,OAAOA,EAAO,IACtB,CACE,CACA,SAAS0E,EAAO3E,EAAI,CAClB,OAAO2E,EAAM,KAAMkB,GAASA,EAAK,KAAO7F,CAAE,CAC5C,CACA,iBAAiBG,EAAM,CACrB,IAAI2F,EAAiB,OACjBC,EAAe,cACnB,OAAQ5F,EAAI,CACV,IAAK,cACL,IAAK,eACL,IAAK,cACH4F,EAAe5F,EACf,MACF,IAAK,qBACL,IAAK,sBACL,IAAK,qBACH2F,EAAiB3F,EAAK,QAAQ,UAAW,EAAE,EAC3C4F,EAAeD,EACf,KACR,CACI,MAAO,CAAE,eAAAA,EAAgB,aAAAC,CAAY,CACvC,CACA,kBAAkB9F,EAAQ0E,EAAOqB,EAAUC,EAAYC,EAAQC,EAAM,OACnE,MAAMC,EAAWJ,EAAS,IAAI/F,EAAO,EAAE,EACjCoG,EAAUJ,EAAW,IAAIhG,EAAO,EAAE,GAAK,GACvC4F,EAAO,KAAK,SAASlB,EAAO1E,EAAO,EAAE,EAC3C,GAAI4F,EACFA,EAAK,UAAY5F,EAAO,OACxB4F,EAAK,kBAAoB,KAAK,kBAAkB5F,EAAO,OAAO,EAC9D4F,EAAK,WAAa5F,EAAO,QAAQ,KAAK,GAAG,MACpC,CACL,MAAMqG,EAAW,CACf,GAAIrG,EAAO,GACX,MAAOA,EAAO,KACd,WAAY,GACZ,SAAAmG,EACA,UAAS9G,EAAA4G,EAAO,YAAP,YAAA5G,EAAkB,UAAW,EACtC,UAAWW,EAAO,OAClB,kBAAmB,KAAK,kBAAkB,CAAC,UAAW,OAAQ,GAAGA,EAAO,OAAO,CAAC,EAChF,WAAY,WAAaA,EAAO,QAAQ,KAAK,GAAG,EAChD,IAAKA,EAAO,IACZ,MAAOA,EAAO,MACd,KAAAkG,EACA,KAAMlG,EAAO,KACb,WAAYA,EAAO,WACnB,QAAS,KAAK,WAAWA,EAAO,EAAE,EAClC,KAAMA,EAAO,KACb,IAAKA,EAAO,IACZ,IAAKA,EAAO,IACZ,WAAYA,EAAO,WACnB,YAAaA,EAAO,YACpB,WAAYA,EAAO,UAC3B,EACUoG,EACF1B,EAAM,KAAK,CACT,GAAG2B,EACH,QAAS,GACT,MAAO,MACjB,CAAS,EAED3B,EAAM,KAAK,CACT,GAAG2B,EACH,QAAS,GACT,MAAO,KAAK,kBAAkBrG,CAAM,CAC9C,CAAS,CAEL,CACF,CACA,kBAAkBsG,EAAW,CAC3B,IAAIC,EAAiB,CAAA,EACrB,UAAWC,KAAeF,EAAW,CACnC,MAAMG,EAAW,KAAK,QAAQ,IAAID,CAAW,EACzCC,GAAA,MAAAA,EAAU,SACZF,EAAiB,CAAC,GAAGA,EAAgB,GAAGE,EAAS,QAAU,EAAE,EAAE,IAAK1F,GAAMA,EAAE,KAAI,CAAE,GAEhF0F,GAAA,MAAAA,EAAU,aACZF,EAAiB,CAAC,GAAGA,EAAgB,GAAGE,EAAS,YAAc,EAAE,EAAE,IAAK1F,GAAMA,EAAE,KAAI,CAAE,EAE1F,CACA,OAAOwF,CACT,CACA,SAAU,CACR,MAAMN,EAAS3G,GAAS,EAClBoF,EAAQ,CAAA,EACRgC,EAAQ,CAAA,EACRC,EAAY,KAAK,aAAY,EAC7BZ,EAA2B,IAAI,IAC/BC,EAA6B,IAAI,IACvC,QAAShD,EAAI2D,EAAU,OAAS,EAAG3D,GAAK,EAAGA,IAAK,CAC9C,MAAMN,EAAWiE,EAAU3D,CAAC,EACxBN,EAAS,MAAM,OAAS,GAC1BsD,EAAW,IAAItD,EAAS,GAAI,EAAI,EAElC,UAAW3C,KAAM2C,EAAS,MACxBqD,EAAS,IAAIhG,EAAI2C,EAAS,EAAE,CAEhC,CACA,QAASM,EAAI2D,EAAU,OAAS,EAAG3D,GAAK,EAAGA,IAAK,CAC9C,MAAMN,EAAWiE,EAAU3D,CAAC,EAC5B0B,EAAM,KAAK,CACT,GAAIhC,EAAS,GACb,MAAOA,EAAS,MAChB,WAAY,GACZ,SAAUqD,EAAS,IAAIrD,EAAS,EAAE,EAClC,QAAS,EACT,kBAAmB,KAAK,kBAAkBA,EAAS,OAAO,EAC1D,WAAYA,EAAS,QAAQ,KAAK,GAAG,EACrC,MAAO,OACP,IAAKA,EAAS,IACd,QAAS,GACT,KAAMuD,EAAO,IACrB,CAAO,CACH,CACU,KAAK,YAAW,EACxB,QAASjG,GAAW,CACpB,KAAK,kBAAkBA,EAAQ0E,EAAOqB,EAAUC,EAAYC,EAAQA,EAAO,MAAQ,SAAS,CAC9F,CAAC,EACD,MAAMpF,EAAI,KAAK,SAAQ,EACvB,OAAAA,EAAE,QAAQ,CAAC+F,EAASC,IAAU,OAC5B,KAAM,CAAE,eAAAhB,EAAgB,aAAAC,CAAY,EAAK,KAAK,iBAAiBc,EAAQ,IAAI,EACrEE,EAAS,CAAC,GAAGjG,EAAE,cAAgB,CAAA,CAAE,EACnC+F,EAAQ,OACVE,EAAO,KAAK,GAAGF,EAAQ,KAAK,EAE9B,MAAMhG,EAAO,CACX,GAAIW,GAAUqF,EAAQ,MAAOA,EAAQ,IAAK,CAAE,QAASC,EAAO,OAAQ,GAAG,EAAID,EAAQ,EAAE,EACrF,gBAAiBA,EAAQ,gBACzB,MAAOA,EAAQ,MACf,IAAKA,EAAQ,IACb,KAAMA,EAAQ,MAAQ,SACtB,MAAOA,EAAQ,KACf,SAAU,IACV,UAAWA,EAAQ,OACnB,OAAQA,EAAQ,OAChB,SAASA,GAAA,YAAAA,EAAS,UAAW,YAAc,GAAK,0DAChD,gBAAgBA,GAAA,YAAAA,EAAS,UAAW,cAAeA,GAAA,YAAAA,EAAS,QAAS,aAAe,OAASf,EAC7F,cAAce,GAAA,YAAAA,EAAS,UAAW,cAAeA,GAAA,YAAAA,EAAS,QAAS,aAAe,OAASd,EAC3F,eAAgB,aAChB,kBAAmB,KAAK,kBAAkBc,EAAQ,OAAO,EACzD,WAAYE,EACZ,MAAOA,EACP,QAASF,EAAQ,OACjB,KAAMX,EAAO,KACb,QAASW,EAAQ,QACjB,UAAWA,EAAQ,UACnB,MAAOA,EAAQ,aAAe,KAAK,MAAM,sBAAsBvH,EAAA4G,EAAO,YAAP,YAAA5G,EAAkB,MACzF,EACMqH,EAAM,KAAK9F,CAAI,CACjB,CAAC,EACM,CAAE,MAAA8D,EAAO,MAAAgC,EAAO,MAAO,CAAA,EAAI,OAAAT,CAAM,CAC1C,CACA,eAAgB,CACd,OAAOc,GAAc,SACvB,CACF,EA53BI5C,EAAO9E,GAAM,QAAQ,EA/CZA,IA+6BT2H,GAA6B7C,EAAO,SAAS8C,EAAMC,EAAY,CACjE,OAAOA,EAAW,GAAG,WAAU,CACjC,EAAG,YAAY,EACXC,GAAuBhD,EAAO,eAAe8C,EAAMlH,EAAIqH,EAAUC,EAAM,OACzEjG,GAAI,KAAK,OAAO,EAChBA,GAAI,KAAK,6BAA8BrB,CAAE,EACzC,KAAM,CAAE,cAAAuH,EAAe,UAAWC,EAAM,OAAAC,CAAM,EAAKlI,GAAS,EAC5D,IAAImI,EACAH,IAAkB,YACpBG,EAAiBC,GAAQ,KAAO3H,CAAE,GAEpC,MAAMS,EAAM8G,IAAkB,UAAYG,EAAe,QAAQ,CAAC,EAAE,gBAAkB,SACtFrG,GAAI,MAAM,kBAAkB,EAC5B,MAAMuG,EAAcN,EAAK,GAAG,QAAO,EACnCjG,GAAI,MAAM,SAAUuG,CAAW,EAC/B,MAAMC,EAAMC,GAAkB9H,EAAIuH,CAAa,EACzCQ,EAAYT,EAAK,GAAG,aAAY,EACtCM,EAAY,KAAON,EAAK,KACxBM,EAAY,gBAAkBI,GAA6BP,CAAM,EAC7DG,EAAY,kBAAoB,SAAWH,IAAW,OACxDpG,GAAI,KACF,6OACN,EAEEuG,EAAY,UAAYG,EACxBH,EAAY,aAAcJ,GAAA,YAAAA,EAAM,cAAe,GAC/CI,EAAY,aAAcJ,GAAA,YAAAA,EAAM,cAAe,GAC/CI,EAAY,QAAU,CAAC,QAAS,SAAU,OAAO,EACjDA,EAAY,UAAY5H,EACxBqB,GAAI,MAAM,QAASuG,CAAW,EAC9B,MAAMK,GAAOL,EAAaC,CAAG,EAC7B,MAAMK,IAAU5I,EAAAsI,EAAY,OAAO,YAAnB,YAAAtI,EAA8B,iBAAkB,EAChE8D,GAAc,YACZyE,EACA,sBACAL,GAAA,YAAAA,EAAM,iBAAkB,EACxBF,EAAK,GAAG,gBAAe,CAC3B,EACEa,GAAoBN,EAAKK,EAAS,aAAaV,GAAA,YAAAA,EAAM,cAAe,EAAK,EACzE,UAAWvH,KAAU2H,EAAY,MAAO,CACtC,MAAM/B,EAAO8B,GAAQ,IAAI3H,CAAE,SAASC,EAAO,EAAE,IAAI,EACjD,GAAI,CAAC4F,GAAQ,CAAC5F,EAAO,KACnB,SAEF,MAAMmI,EAAO3H,EAAI,gBAAgB,6BAA8B,GAAG,EAClE2H,EAAK,eAAe,6BAA8B,QAASnI,EAAO,UAAU,EAC5EmI,EAAK,eAAe,6BAA8B,MAAO,UAAU,EAC/Db,IAAkB,UACpBa,EAAK,eAAe,6BAA8B,SAAU,MAAM,EACzDnI,EAAO,YAChBmI,EAAK,eAAe,6BAA8B,SAAUnI,EAAO,UAAU,EAE/E,MAAMoI,EAAWxC,EAAK,OAAO,UAAW,CACtC,OAAOuC,CACT,EAAG,cAAc,EACXE,EAAQzC,EAAK,OAAO,kBAAkB,EACxCyC,GACFD,EAAS,OAAO,UAAW,CACzB,OAAOC,EAAM,KAAI,CACnB,CAAC,EAEH,MAAMC,GAAQ1C,EAAK,OAAO,QAAQ,EAC9B0C,IACFF,EAAS,OAAO,UAAW,CACzB,OAAOE,GAAM,KAAI,CACnB,CAAC,CAEL,CACF,EAAG,MAAM,EACLC,GAAkC,CACpC,WAAAvB,GACA,KAAAG,EACF,EAGIqB,IAAU,UAAW,CACvB,IAAIC,EAAoBtE,EAAO,SAASuE,GAAGC,EAAGC,EAAIC,EAAG,CACnD,IAAKD,EAAKA,GAAM,GAAIC,EAAIH,GAAE,OAAQG,IAAKD,EAAGF,GAAEG,CAAC,CAAC,EAAIF,EAAG,CACrD,OAAOC,CACT,EAAG,GAAG,EAAGE,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,EAAE,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,EAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,GAAI,IAAK,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,GAAI,GAAG,EAAGC,GAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,GAAG,EAAGC,GAAO,CAAC,EAAG,EAAG,GAAI,GAAG,EAAGC,EAAO,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK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G,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAA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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js b/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js similarity index 99% rename from massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js rename to massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js index 7c0b8113c..e50c15bf0 100644 --- a/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js +++ b/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js @@ -1,4 +1,4 @@ -import{bo as an,bp as Wn,bq as on,br as cn,bs as un,bt as ce,bu as $n,aK as ae,_ as d,g as On,s as Hn,q as Nn,p as Pn,a as Vn,b as zn,c as _t,d as Zt,e as Rn,bv as rt,l as Tt,k as qn,j as Zn,y as Bn,u as Xn}from"./index-yx4Z55Qu.js";import{b as Gn,t as He,c as jn,a as Qn,l as Jn}from"./linear-gEIXbWvC.js";import{i as Kn}from"./init-Gi6I4Gst.js";import"./defaultLocale-C4B-KCzX.js";function tr(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function er(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function nr(t){return t}var Xt=1,ue=2,Te=3,Bt=4,Ne=1e-6;function rr(t){return"translate("+t+",0)"}function ir(t){return"translate(0,"+t+")"}function sr(t){return e=>+t(e)}function ar(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function or(){return!this.__axis}function ln(t,e){var n=[],r=null,i=null,a=6,c=6,m=3,Y=typeof window<"u"&&window.devicePixelRatio>1?0:.5,C=t===Xt||t===Bt?-1:1,k=t===Bt||t===ue?"x":"y",L=t===Xt||t===Te?rr:ir;function _(S){var Z=r??(e.ticks?e.ticks.apply(e,n):e.domain()),A=i??(e.tickFormat?e.tickFormat.apply(e,n):nr),U=Math.max(a,0)+m,I=e.range(),N=+I[0]+Y,W=+I[I.length-1]+Y,q=(e.bandwidth?ar:sr)(e.copy(),Y),j=S.selection?S.selection():S,p=j.selectAll(".domain").data([null]),g=j.selectAll(".tick").data(Z,e).order(),y=g.exit(),h=g.enter().append("g").attr("class","tick"),D=g.select("line"),w=g.select("text");p=p.merge(p.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),g=g.merge(h),D=D.merge(h.append("line").attr("stroke","currentColor").attr(k+"2",C*a)),w=w.merge(h.append("text").attr("fill","currentColor").attr(k,C*U).attr("dy",t===Xt?"0em":t===Te?"0.71em":"0.32em")),S!==j&&(p=p.transition(S),g=g.transition(S),D=D.transition(S),w=w.transition(S),y=y.transition(S).attr("opacity",Ne).attr("transform",function(T){return isFinite(T=q(T))?L(T+Y):this.getAttribute("transform")}),h.attr("opacity",Ne).attr("transform",function(T){var v=this.parentNode.__axis;return L((v&&isFinite(v=v(T))?v:q(T))+Y)})),y.remove(),p.attr("d",t===Bt||t===ue?c?"M"+C*c+","+N+"H"+Y+"V"+W+"H"+C*c:"M"+Y+","+N+"V"+W:c?"M"+N+","+C*c+"V"+Y+"H"+W+"V"+C*c:"M"+N+","+Y+"H"+W),g.attr("opacity",1).attr("transform",function(T){return L(q(T)+Y)}),D.attr(k+"2",C*a),w.attr(k,C*U).text(A),j.filter(or).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===ue?"start":t===Bt?"end":"middle"),j.each(function(){this.__axis=q})}return _.scale=function(S){return arguments.length?(e=S,_):e},_.ticks=function(){return n=Array.from(arguments),_},_.tickArguments=function(S){return arguments.length?(n=S==null?[]:Array.from(S),_):n.slice()},_.tickValues=function(S){return arguments.length?(r=S==null?null:Array.from(S),_):r&&r.slice()},_.tickFormat=function(S){return arguments.length?(i=S,_):i},_.tickSize=function(S){return arguments.length?(a=c=+S,_):a},_.tickSizeInner=function(S){return arguments.length?(a=+S,_):a},_.tickSizeOuter=function(S){return arguments.length?(c=+S,_):c},_.tickPadding=function(S){return arguments.length?(m=+S,_):m},_.offset=function(S){return arguments.length?(Y=+S,_):Y},_}function cr(t){return ln(Xt,t)}function ur(t){return ln(Te,t)}const lr=Math.PI/180,fr=180/Math.PI,ee=18,fn=.96422,dn=1,hn=.82521,mn=4/29,Ft=6/29,gn=3*Ft*Ft,dr=Ft*Ft*Ft;function yn(t){if(t instanceof ft)return new ft(t.l,t.a,t.b,t.opacity);if(t instanceof ht)return kn(t);t instanceof an||(t=Wn(t));var e=he(t.r),n=he(t.g),r=he(t.b),i=le((.2225045*e+.7168786*n+.0606169*r)/dn),a,c;return e===n&&n===r?a=c=i:(a=le((.4360747*e+.3850649*n+.1430804*r)/fn),c=le((.0139322*e+.0971045*n+.7141733*r)/hn)),new ft(116*i-16,500*(a-i),200*(i-c),t.opacity)}function hr(t,e,n,r){return arguments.length===1?yn(t):new ft(t,e,n,r??1)}function ft(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}on(ft,hr,cn(un,{brighter(t){return new ft(this.l+ee*(t??1),this.a,this.b,this.opacity)},darker(t){return new ft(this.l-ee*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=fn*fe(e),t=dn*fe(t),n=hn*fe(n),new an(de(3.1338561*e-1.6168667*t-.4906146*n),de(-.9787684*e+1.9161415*t+.033454*n),de(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function le(t){return t>dr?Math.pow(t,1/3):t/gn+mn}function fe(t){return t>Ft?t*t*t:gn*(t-mn)}function de(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function he(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function mr(t){if(t instanceof ht)return new ht(t.h,t.c,t.l,t.opacity);if(t instanceof ft||(t=yn(t)),t.a===0&&t.b===0)return new ht(NaN,0(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{const c=i(a),m=i.ceil(a);return a-c(e(a=new Date(+a),c==null?1:Math.floor(c)),a),i.range=(a,c,m)=>{const Y=[];if(a=i.ceil(a),m=m==null?1:Math.floor(m),!(a0))return Y;let C;do Y.push(C=new Date(+a)),e(a,m),t(a);while(Cet(c=>{if(c>=c)for(;t(c),!a(c);)c.setTime(c-1)},(c,m)=>{if(c>=c)if(m<0)for(;++m<=0;)for(;e(c,-1),!a(c););else for(;--m>=0;)for(;e(c,1),!a(c););}),n&&(i.count=(a,c)=>(me.setTime(+a),ge.setTime(+c),t(me),t(ge),Math.floor(n(me,ge))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(r?c=>r(c)%a===0:c=>i.count(0,c)%a===0):i)),i}const Ut=et(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Ut.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?et(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Ut);Ut.range;const mt=1e3,ct=mt*60,gt=ct*60,yt=gt*24,Ce=yt*7,Pe=yt*30,ye=yt*365,vt=et(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*mt)},(t,e)=>(e-t)/mt,t=>t.getUTCSeconds());vt.range;const $t=et(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mt)},(t,e)=>{t.setTime(+t+e*ct)},(t,e)=>(e-t)/ct,t=>t.getMinutes());$t.range;const pr=et(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*ct)},(t,e)=>(e-t)/ct,t=>t.getUTCMinutes());pr.range;const Ot=et(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mt-t.getMinutes()*ct)},(t,e)=>{t.setTime(+t+e*gt)},(t,e)=>(e-t)/gt,t=>t.getHours());Ot.range;const vr=et(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*gt)},(t,e)=>(e-t)/gt,t=>t.getUTCHours());vr.range;const bt=et(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ct)/yt,t=>t.getDate()-1);bt.range;const Se=et(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/yt,t=>t.getUTCDate()-1);Se.range;const Tr=et(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/yt,t=>Math.floor(t/yt));Tr.range;function Dt(t){return et(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*ct)/Ce)}const Pt=Dt(0),Ht=Dt(1),pn=Dt(2),vn=Dt(3),xt=Dt(4),Tn=Dt(5),bn=Dt(6);Pt.range;Ht.range;pn.range;vn.range;xt.range;Tn.range;bn.range;function Mt(t){return et(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/Ce)}const xn=Mt(0),ne=Mt(1),br=Mt(2),xr=Mt(3),Et=Mt(4),wr=Mt(5),Dr=Mt(6);xn.range;ne.range;br.range;xr.range;Et.range;wr.range;Dr.range;const Nt=et(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Nt.range;const Mr=et(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());Mr.range;const kt=et(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());kt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:et(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});kt.range;const wt=et(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());wt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:et(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});wt.range;function Cr(t,e,n,r,i,a){const c=[[vt,1,mt],[vt,5,5*mt],[vt,15,15*mt],[vt,30,30*mt],[a,1,ct],[a,5,5*ct],[a,15,15*ct],[a,30,30*ct],[i,1,gt],[i,3,3*gt],[i,6,6*gt],[i,12,12*gt],[r,1,yt],[r,2,2*yt],[n,1,Ce],[e,1,Pe],[e,3,3*Pe],[t,1,ye]];function m(C,k,L){const _=kU).right(c,_);if(S===c.length)return t.every(He(C/ye,k/ye,L));if(S===0)return Ut.every(Math.max(He(C,k,L),1));const[Z,A]=c[_/c[S-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?($=pe(Lt(l.y,0,1)),Q=$.getUTCDay(),$=Q>4||Q===0?ne.ceil($):ne($),$=Se.offset($,(l.V-1)*7),l.y=$.getUTCFullYear(),l.m=$.getUTCMonth(),l.d=$.getUTCDate()+(l.w+6)%7):($=ke(Lt(l.y,0,1)),Q=$.getDay(),$=Q>4||Q===0?Ht.ceil($):Ht($),$=bt.offset($,(l.V-1)*7),l.y=$.getFullYear(),l.m=$.getMonth(),l.d=$.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),Q="Z"in l?pe(Lt(l.y,0,1)).getUTCDay():ke(Lt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(Q+5)%7:l.w+l.U*7-(Q+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,pe(l)):ke(l)}}function y(M,H,V,l){for(var J=0,$=H.length,Q=V.length,G,it;J<$;){if(l>=Q)return-1;if(G=H.charCodeAt(J++),G===37){if(G=H.charAt(J++),it=j[G in Ve?H.charAt(J++):G],!it||(l=it(M,V,l))<0)return-1}else if(G!=V.charCodeAt(l++))return-1}return l}function h(M,H,V){var l=C.exec(H.slice(V));return l?(M.p=k.get(l[0].toLowerCase()),V+l[0].length):-1}function D(M,H,V){var l=S.exec(H.slice(V));return l?(M.w=Z.get(l[0].toLowerCase()),V+l[0].length):-1}function w(M,H,V){var l=L.exec(H.slice(V));return l?(M.w=_.get(l[0].toLowerCase()),V+l[0].length):-1}function T(M,H,V){var l=I.exec(H.slice(V));return l?(M.m=N.get(l[0].toLowerCase()),V+l[0].length):-1}function v(M,H,V){var l=A.exec(H.slice(V));return l?(M.m=U.get(l[0].toLowerCase()),V+l[0].length):-1}function u(M,H,V){return y(M,e,H,V)}function f(M,H,V){return y(M,n,H,V)}function b(M,H,V){return y(M,r,H,V)}function x(M){return c[M.getDay()]}function F(M){return a[M.getDay()]}function o(M){return Y[M.getMonth()]}function X(M){return m[M.getMonth()]}function s(M){return i[+(M.getHours()>=12)]}function E(M){return 1+~~(M.getMonth()/3)}function R(M){return c[M.getUTCDay()]}function z(M){return a[M.getUTCDay()]}function P(M){return Y[M.getUTCMonth()]}function K(M){return m[M.getUTCMonth()]}function O(M){return i[+(M.getUTCHours()>=12)]}function st(M){return 1+~~(M.getUTCMonth()/3)}return{format:function(M){var H=p(M+="",W);return H.toString=function(){return M},H},parse:function(M){var H=g(M+="",!1);return H.toString=function(){return M},H},utcFormat:function(M){var H=p(M+="",q);return H.toString=function(){return M},H},utcParse:function(M){var H=g(M+="",!0);return H.toString=function(){return M},H}}}var Ve={"-":"",_:" ",0:"0"},nt=/^\s*\d+/,Yr=/^%/,Ur=/[\\^$*+?|[\]().{}]/g;function B(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[e.toLowerCase(),n]))}function Ir(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Lr(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function $r(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function ze(t,e,n){var r=nt.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Re(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Or(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Hr(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Nr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function qe(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Pr(t,e,n){var r=nt.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ze(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Vr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function zr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Rr(t,e,n){var r=nt.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function qr(t,e,n){var r=nt.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Zr(t,e,n){var r=Yr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Br(t,e,n){var r=nt.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Xr(t,e,n){var r=nt.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Be(t,e){return B(t.getDate(),e,2)}function Gr(t,e){return B(t.getHours(),e,2)}function jr(t,e){return B(t.getHours()%12||12,e,2)}function Qr(t,e){return B(1+bt.count(kt(t),t),e,3)}function wn(t,e){return B(t.getMilliseconds(),e,3)}function Jr(t,e){return wn(t,e)+"000"}function Kr(t,e){return B(t.getMonth()+1,e,2)}function ti(t,e){return B(t.getMinutes(),e,2)}function ei(t,e){return B(t.getSeconds(),e,2)}function ni(t){var e=t.getDay();return e===0?7:e}function ri(t,e){return B(Pt.count(kt(t)-1,t),e,2)}function Dn(t){var e=t.getDay();return e>=4||e===0?xt(t):xt.ceil(t)}function ii(t,e){return t=Dn(t),B(xt.count(kt(t),t)+(kt(t).getDay()===4),e,2)}function si(t){return t.getDay()}function ai(t,e){return B(Ht.count(kt(t)-1,t),e,2)}function oi(t,e){return B(t.getFullYear()%100,e,2)}function ci(t,e){return t=Dn(t),B(t.getFullYear()%100,e,2)}function ui(t,e){return B(t.getFullYear()%1e4,e,4)}function li(t,e){var n=t.getDay();return t=n>=4||n===0?xt(t):xt.ceil(t),B(t.getFullYear()%1e4,e,4)}function fi(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+B(e/60|0,"0",2)+B(e%60,"0",2)}function Xe(t,e){return B(t.getUTCDate(),e,2)}function di(t,e){return B(t.getUTCHours(),e,2)}function hi(t,e){return B(t.getUTCHours()%12||12,e,2)}function mi(t,e){return B(1+Se.count(wt(t),t),e,3)}function Mn(t,e){return B(t.getUTCMilliseconds(),e,3)}function gi(t,e){return Mn(t,e)+"000"}function yi(t,e){return B(t.getUTCMonth()+1,e,2)}function ki(t,e){return B(t.getUTCMinutes(),e,2)}function pi(t,e){return B(t.getUTCSeconds(),e,2)}function vi(t){var e=t.getUTCDay();return e===0?7:e}function Ti(t,e){return B(xn.count(wt(t)-1,t),e,2)}function Cn(t){var e=t.getUTCDay();return e>=4||e===0?Et(t):Et.ceil(t)}function bi(t,e){return t=Cn(t),B(Et.count(wt(t),t)+(wt(t).getUTCDay()===4),e,2)}function xi(t){return t.getUTCDay()}function wi(t,e){return B(ne.count(wt(t)-1,t),e,2)}function Di(t,e){return B(t.getUTCFullYear()%100,e,2)}function Mi(t,e){return t=Cn(t),B(t.getUTCFullYear()%100,e,2)}function Ci(t,e){return B(t.getUTCFullYear()%1e4,e,4)}function Si(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Et(t):Et.ceil(t),B(t.getUTCFullYear()%1e4,e,4)}function _i(){return"+0000"}function Ge(){return"%"}function je(t){return+t}function Qe(t){return Math.floor(+t/1e3)}var St,re;Fi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Fi(t){return St=Fr(t),re=St.format,St.parse,St.utcFormat,St.utcParse,St}function Yi(t){return new Date(t)}function Ui(t){return t instanceof Date?+t:+new Date(+t)}function Sn(t,e,n,r,i,a,c,m,Y,C){var k=jn(),L=k.invert,_=k.domain,S=C(".%L"),Z=C(":%S"),A=C("%I:%M"),U=C("%I %p"),I=C("%a %d"),N=C("%b %d"),W=C("%B"),q=C("%Y");function j(p){return(Y(p)4&&(S+=7),_.add(S,n));return Z.diff(A,"week")+1},m.isoWeekday=function(C){return this.$utils().u(C)?this.day()||7:this.day(this.day()%7?C:C-7)};var Y=m.startOf;m.startOf=function(C,k){var L=this.$utils(),_=!!L.u(k)||k;return L.p(C)==="isoweek"?_?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):Y.bind(this)(C,k)}}}))})(Gt)),Gt.exports}var Ai=Li();const Wi=ae(Ai);var jt={exports:{}},$i=jt.exports,Ke;function Oi(){return Ke||(Ke=1,(function(t,e){(function(n,r){t.exports=r()})($i,(function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,i=/\d/,a=/\d\d/,c=/\d\d?/,m=/\d*[^-_:/,()\s\d]+/,Y={},C=function(U){return(U=+U)+(U>68?1900:2e3)},k=function(U){return function(I){this[U]=+I}},L=[/[+-]\d\d:?(\d\d)?|Z/,function(U){(this.zone||(this.zone={})).offset=(function(I){if(!I||I==="Z")return 0;var N=I.match(/([+-]|\d\d)/g),W=60*N[1]+(+N[2]||0);return W===0?0:N[0]==="+"?-W:W})(U)}],_=function(U){var I=Y[U];return I&&(I.indexOf?I:I.s.concat(I.f))},S=function(U,I){var N,W=Y.meridiem;if(W){for(var q=1;q<=24;q+=1)if(U.indexOf(W(q,0,I))>-1){N=q>12;break}}else N=U===(I?"pm":"PM");return N},Z={A:[m,function(U){this.afternoon=S(U,!1)}],a:[m,function(U){this.afternoon=S(U,!0)}],Q:[i,function(U){this.month=3*(U-1)+1}],S:[i,function(U){this.milliseconds=100*+U}],SS:[a,function(U){this.milliseconds=10*+U}],SSS:[/\d{3}/,function(U){this.milliseconds=+U}],s:[c,k("seconds")],ss:[c,k("seconds")],m:[c,k("minutes")],mm:[c,k("minutes")],H:[c,k("hours")],h:[c,k("hours")],HH:[c,k("hours")],hh:[c,k("hours")],D:[c,k("day")],DD:[a,k("day")],Do:[m,function(U){var I=Y.ordinal,N=U.match(/\d+/);if(this.day=N[0],I)for(var W=1;W<=31;W+=1)I(W).replace(/\[|\]/g,"")===U&&(this.day=W)}],w:[c,k("week")],ww:[a,k("week")],M:[c,k("month")],MM:[a,k("month")],MMM:[m,function(U){var I=_("months"),N=(_("monthsShort")||I.map((function(W){return W.slice(0,3)}))).indexOf(U)+1;if(N<1)throw new Error;this.month=N%12||N}],MMMM:[m,function(U){var I=_("months").indexOf(U)+1;if(I<1)throw new Error;this.month=I%12||I}],Y:[/[+-]?\d+/,k("year")],YY:[a,function(U){this.year=C(U)}],YYYY:[/\d{4}/,k("year")],Z:L,ZZ:L};function A(U){var I,N;I=U,N=Y&&Y.formats;for(var W=(U=I.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(D,w,T){var v=T&&T.toUpperCase();return w||N[T]||n[T]||N[v].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(u,f,b){return f||b.slice(1)}))}))).match(r),q=W.length,j=0;j-1)return new Date((F==="X"?1e3:1)*x);var s=A(F)(x),E=s.year,R=s.month,z=s.day,P=s.hours,K=s.minutes,O=s.seconds,st=s.milliseconds,M=s.zone,H=s.week,V=new Date,l=z||(E||R?1:V.getDate()),J=E||V.getFullYear(),$=0;E&&!R||($=R>0?R-1:V.getMonth());var Q,G=P||0,it=K||0,at=O||0,pt=st||0;return M?new Date(Date.UTC(J,$,l,G,it,at,pt+60*M.offset*1e3)):o?new Date(Date.UTC(J,$,l,G,it,at,pt)):(Q=new Date(J,$,l,G,it,at,pt),H&&(Q=X(Q).week(H).toDate()),Q)}catch{return new Date("")}})(p,h,g,N),this.init(),v&&v!==!0&&(this.$L=this.locale(v).$L),T&&p!=this.format(h)&&(this.$d=new Date("")),Y={}}else if(h instanceof Array)for(var u=h.length,f=1;f<=u;f+=1){y[1]=h[f-1];var b=N.apply(this,y);if(b.isValid()){this.$d=b.$d,this.$L=b.$L,this.init();break}f===u&&(this.$d=new Date(""))}else q.call(this,j)}}}))})(jt)),jt.exports}var Hi=Oi();const Ni=ae(Hi);var Qt={exports:{}},Pi=Qt.exports,tn;function Vi(){return tn||(tn=1,(function(t,e){(function(n,r){t.exports=r()})(Pi,(function(){return function(n,r){var i=r.prototype,a=i.format;i.format=function(c){var m=this,Y=this.$locale();if(!this.isValid())return a.bind(this)(c);var C=this.$utils(),k=(c||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(L){switch(L){case"Q":return Math.ceil((m.$M+1)/3);case"Do":return Y.ordinal(m.$D);case"gggg":return m.weekYear();case"GGGG":return m.isoWeekYear();case"wo":return Y.ordinal(m.week(),"W");case"w":case"ww":return C.s(m.week(),L==="w"?1:2,"0");case"W":case"WW":return C.s(m.isoWeek(),L==="W"?1:2,"0");case"k":case"kk":return C.s(String(m.$H===0?24:m.$H),L==="k"?1:2,"0");case"X":return Math.floor(m.$d.getTime()/1e3);case"x":return m.$d.getTime();case"z":return"["+m.offsetName()+"]";case"zzz":return"["+m.offsetName("long")+"]";default:return L}}));return a.bind(this)(k)}}}))})(Qt)),Qt.exports}var zi=Vi();const Ri=ae(zi);var Jt={exports:{}},qi=Jt.exports,en;function Zi(){return en||(en=1,(function(t,e){(function(n,r){t.exports=r()})(qi,(function(){var n,r,i=1e3,a=6e4,c=36e5,m=864e5,Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,C=31536e6,k=2628e6,L=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,_={years:C,months:k,days:m,hours:c,minutes:a,seconds:i,milliseconds:1,weeks:6048e5},S=function(p){return p instanceof q},Z=function(p,g,y){return new q(p,y,g.$l)},A=function(p){return r.p(p)+"s"},U=function(p){return p<0},I=function(p){return U(p)?Math.ceil(p):Math.floor(p)},N=function(p){return Math.abs(p)},W=function(p,g){return p?U(p)?{negative:!0,format:""+N(p)+g}:{negative:!1,format:""+p+g}:{negative:!1,format:""}},q=(function(){function p(y,h,D){var w=this;if(this.$d={},this.$l=D,y===void 0&&(this.$ms=0,this.parseFromMilliseconds()),h)return Z(y*_[A(h)],this);if(typeof y=="number")return this.$ms=y,this.parseFromMilliseconds(),this;if(typeof y=="object")return Object.keys(y).forEach((function(u){w.$d[A(u)]=y[u]})),this.calMilliseconds(),this;if(typeof y=="string"){var T=y.match(L);if(T){var v=T.slice(2).map((function(u){return u!=null?Number(u):0}));return this.$d.years=v[0],this.$d.months=v[1],this.$d.weeks=v[2],this.$d.days=v[3],this.$d.hours=v[4],this.$d.minutes=v[5],this.$d.seconds=v[6],this.calMilliseconds(),this}}return this}var g=p.prototype;return g.calMilliseconds=function(){var y=this;this.$ms=Object.keys(this.$d).reduce((function(h,D){return h+(y.$d[D]||0)*_[D]}),0)},g.parseFromMilliseconds=function(){var y=this.$ms;this.$d.years=I(y/C),y%=C,this.$d.months=I(y/k),y%=k,this.$d.days=I(y/m),y%=m,this.$d.hours=I(y/c),y%=c,this.$d.minutes=I(y/a),y%=a,this.$d.seconds=I(y/i),y%=i,this.$d.milliseconds=y},g.toISOString=function(){var y=W(this.$d.years,"Y"),h=W(this.$d.months,"M"),D=+this.$d.days||0;this.$d.weeks&&(D+=7*this.$d.weeks);var w=W(D,"D"),T=W(this.$d.hours,"H"),v=W(this.$d.minutes,"M"),u=this.$d.seconds||0;this.$d.milliseconds&&(u+=this.$d.milliseconds/1e3,u=Math.round(1e3*u)/1e3);var f=W(u,"S"),b=y.negative||h.negative||w.negative||T.negative||v.negative||f.negative,x=T.format||v.format||f.format?"T":"",F=(b?"-":"")+"P"+y.format+h.format+w.format+x+T.format+v.format+f.format;return F==="P"||F==="-P"?"P0D":F},g.toJSON=function(){return this.toISOString()},g.format=function(y){var h=y||"YYYY-MM-DDTHH:mm:ss",D={Y:this.$d.years,YY:r.s(this.$d.years,2,"0"),YYYY:r.s(this.$d.years,4,"0"),M:this.$d.months,MM:r.s(this.$d.months,2,"0"),D:this.$d.days,DD:r.s(this.$d.days,2,"0"),H:this.$d.hours,HH:r.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:r.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:r.s(this.$d.seconds,2,"0"),SSS:r.s(this.$d.milliseconds,3,"0")};return h.replace(Y,(function(w,T){return T||String(D[w])}))},g.as=function(y){return this.$ms/_[A(y)]},g.get=function(y){var h=this.$ms,D=A(y);return D==="milliseconds"?h%=1e3:h=D==="weeks"?I(h/_[D]):this.$d[D],h||0},g.add=function(y,h,D){var w;return w=h?y*_[A(h)]:S(y)?y.$ms:Z(y,this).$ms,Z(this.$ms+w*(D?-1:1),this)},g.subtract=function(y,h){return this.add(y,h,!0)},g.locale=function(y){var h=this.clone();return h.$l=y,h},g.clone=function(){return Z(this.$ms,this)},g.humanize=function(y){return n().add(this.$ms,"ms").locale(this.$l).fromNow(!y)},g.valueOf=function(){return this.asMilliseconds()},g.milliseconds=function(){return this.get("milliseconds")},g.asMilliseconds=function(){return this.as("milliseconds")},g.seconds=function(){return this.get("seconds")},g.asSeconds=function(){return this.as("seconds")},g.minutes=function(){return this.get("minutes")},g.asMinutes=function(){return this.as("minutes")},g.hours=function(){return this.get("hours")},g.asHours=function(){return this.as("hours")},g.days=function(){return this.get("days")},g.asDays=function(){return this.as("days")},g.weeks=function(){return this.get("weeks")},g.asWeeks=function(){return this.as("weeks")},g.months=function(){return this.get("months")},g.asMonths=function(){return this.as("months")},g.years=function(){return this.get("years")},g.asYears=function(){return this.as("years")},p})(),j=function(p,g,y){return p.add(g.years()*y,"y").add(g.months()*y,"M").add(g.days()*y,"d").add(g.hours()*y,"h").add(g.minutes()*y,"m").add(g.seconds()*y,"s").add(g.milliseconds()*y,"ms")};return function(p,g,y){n=y,r=y().$utils(),y.duration=function(w,T){var v=y.locale();return Z(w,{$l:v},T)},y.isDuration=S;var h=g.prototype.add,D=g.prototype.subtract;g.prototype.add=function(w,T){return S(w)?j(this,w,1):h.bind(this)(w,T)},g.prototype.subtract=function(w,T){return S(w)?j(this,w,-1):D.bind(this)(w,T)}}}))})(Jt)),Jt.exports}var Bi=Zi();const Xi=ae(Bi);var xe=(function(){var t=d(function(v,u,f,b){for(f=f||{},b=v.length;b--;f[v[b]]=u);return f},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],n=[1,26],r=[1,27],i=[1,28],a=[1,29],c=[1,30],m=[1,31],Y=[1,32],C=[1,33],k=[1,34],L=[1,9],_=[1,10],S=[1,11],Z=[1,12],A=[1,13],U=[1,14],I=[1,15],N=[1,16],W=[1,19],q=[1,20],j=[1,21],p=[1,22],g=[1,23],y=[1,25],h=[1,35],D={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:d(function(u,f,b,x,F,o,X){var s=o.length-1;switch(F){case 1:return o[s-1];case 2:this.$=[];break;case 3:o[s-1].push(o[s]),this.$=o[s-1];break;case 4:case 5:this.$=o[s];break;case 6:case 7:this.$=[];break;case 8:x.setWeekday("monday");break;case 9:x.setWeekday("tuesday");break;case 10:x.setWeekday("wednesday");break;case 11:x.setWeekday("thursday");break;case 12:x.setWeekday("friday");break;case 13:x.setWeekday("saturday");break;case 14:x.setWeekday("sunday");break;case 15:x.setWeekend("friday");break;case 16:x.setWeekend("saturday");break;case 17:x.setDateFormat(o[s].substr(11)),this.$=o[s].substr(11);break;case 18:x.enableInclusiveEndDates(),this.$=o[s].substr(18);break;case 19:x.TopAxis(),this.$=o[s].substr(8);break;case 20:x.setAxisFormat(o[s].substr(11)),this.$=o[s].substr(11);break;case 21:x.setTickInterval(o[s].substr(13)),this.$=o[s].substr(13);break;case 22:x.setExcludes(o[s].substr(9)),this.$=o[s].substr(9);break;case 23:x.setIncludes(o[s].substr(9)),this.$=o[s].substr(9);break;case 24:x.setTodayMarker(o[s].substr(12)),this.$=o[s].substr(12);break;case 27:x.setDiagramTitle(o[s].substr(6)),this.$=o[s].substr(6);break;case 28:this.$=o[s].trim(),x.setAccTitle(this.$);break;case 29:case 30:this.$=o[s].trim(),x.setAccDescription(this.$);break;case 31:x.addSection(o[s].substr(8)),this.$=o[s].substr(8);break;case 33:x.addTask(o[s-1],o[s]),this.$="task";break;case 34:this.$=o[s-1],x.setClickEvent(o[s-1],o[s],null);break;case 35:this.$=o[s-2],x.setClickEvent(o[s-2],o[s-1],o[s]);break;case 36:this.$=o[s-2],x.setClickEvent(o[s-2],o[s-1],null),x.setLink(o[s-2],o[s]);break;case 37:this.$=o[s-3],x.setClickEvent(o[s-3],o[s-2],o[s-1]),x.setLink(o[s-3],o[s]);break;case 38:this.$=o[s-2],x.setClickEvent(o[s-2],o[s],null),x.setLink(o[s-2],o[s-1]);break;case 39:this.$=o[s-3],x.setClickEvent(o[s-3],o[s-1],o[s]),x.setLink(o[s-3],o[s-2]);break;case 40:this.$=o[s-1],x.setLink(o[s-1],o[s]);break;case 41:case 47:this.$=o[s-1]+" "+o[s];break;case 42:case 43:case 45:this.$=o[s-2]+" "+o[s-1]+" "+o[s];break;case 44:case 46:this.$=o[s-3]+" "+o[s-2]+" "+o[s-1]+" "+o[s];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:a,16:c,17:m,18:Y,19:18,20:C,21:k,22:L,23:_,24:S,25:Z,26:A,27:U,28:I,29:N,30:W,31:q,33:j,35:p,36:g,37:24,38:y,40:h},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:n,13:r,14:i,15:a,16:c,17:m,18:Y,19:18,20:C,21:k,22:L,23:_,24:S,25:Z,26:A,27:U,28:I,29:N,30:W,31:q,33:j,35:p,36:g,37:24,38:y,40:h},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:d(function(u,f){if(f.recoverable)this.trace(u);else{var b=new Error(u);throw b.hash=f,b}},"parseError"),parse:d(function(u){var f=this,b=[0],x=[],F=[null],o=[],X=this.table,s="",E=0,R=0,z=2,P=1,K=o.slice.call(arguments,1),O=Object.create(this.lexer),st={yy:{}};for(var M in this.yy)Object.prototype.hasOwnProperty.call(this.yy,M)&&(st.yy[M]=this.yy[M]);O.setInput(u,st.yy),st.yy.lexer=O,st.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var H=O.yylloc;o.push(H);var V=O.options&&O.options.ranges;typeof st.yy.parseError=="function"?this.parseError=st.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function l(ot){b.length=b.length-2*ot,F.length=F.length-ot,o.length=o.length-ot}d(l,"popStack");function J(){var ot;return ot=x.pop()||O.lex()||P,typeof ot!="number"&&(ot instanceof Array&&(x=ot,ot=x.pop()),ot=f.symbols_[ot]||ot),ot}d(J,"lex");for(var $,Q,G,it,at={},pt,ut,Oe,qt;;){if(Q=b[b.length-1],this.defaultActions[Q]?G=this.defaultActions[Q]:(($===null||typeof $>"u")&&($=J()),G=X[Q]&&X[Q][$]),typeof G>"u"||!G.length||!G[0]){var oe="";qt=[];for(pt in X[Q])this.terminals_[pt]&&pt>z&&qt.push("'"+this.terminals_[pt]+"'");O.showPosition?oe="Parse error on line "+(E+1)+`: +import{bo as an,bp as Wn,bq as on,br as cn,bs as un,bt as ce,bu as $n,aK as ae,_ as d,g as On,s as Hn,q as Nn,p as Pn,a as Vn,b as zn,c as _t,d as Zt,e as Rn,bv as rt,l as Tt,k as qn,j as Zn,y as Bn,u as Xn}from"./index-DbSnkTMx.js";import{b as Gn,t as He,c as jn,a as Qn,l as Jn}from"./linear-vOg2Esoh.js";import{i as Kn}from"./init-Gi6I4Gst.js";import"./defaultLocale-C4B-KCzX.js";function tr(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function er(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function nr(t){return t}var Xt=1,ue=2,Te=3,Bt=4,Ne=1e-6;function rr(t){return"translate("+t+",0)"}function ir(t){return"translate(0,"+t+")"}function sr(t){return e=>+t(e)}function ar(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function or(){return!this.__axis}function ln(t,e){var n=[],r=null,i=null,a=6,c=6,m=3,Y=typeof window<"u"&&window.devicePixelRatio>1?0:.5,C=t===Xt||t===Bt?-1:1,k=t===Bt||t===ue?"x":"y",L=t===Xt||t===Te?rr:ir;function _(S){var Z=r??(e.ticks?e.ticks.apply(e,n):e.domain()),A=i??(e.tickFormat?e.tickFormat.apply(e,n):nr),U=Math.max(a,0)+m,I=e.range(),N=+I[0]+Y,W=+I[I.length-1]+Y,q=(e.bandwidth?ar:sr)(e.copy(),Y),j=S.selection?S.selection():S,p=j.selectAll(".domain").data([null]),g=j.selectAll(".tick").data(Z,e).order(),y=g.exit(),h=g.enter().append("g").attr("class","tick"),D=g.select("line"),w=g.select("text");p=p.merge(p.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),g=g.merge(h),D=D.merge(h.append("line").attr("stroke","currentColor").attr(k+"2",C*a)),w=w.merge(h.append("text").attr("fill","currentColor").attr(k,C*U).attr("dy",t===Xt?"0em":t===Te?"0.71em":"0.32em")),S!==j&&(p=p.transition(S),g=g.transition(S),D=D.transition(S),w=w.transition(S),y=y.transition(S).attr("opacity",Ne).attr("transform",function(T){return isFinite(T=q(T))?L(T+Y):this.getAttribute("transform")}),h.attr("opacity",Ne).attr("transform",function(T){var v=this.parentNode.__axis;return L((v&&isFinite(v=v(T))?v:q(T))+Y)})),y.remove(),p.attr("d",t===Bt||t===ue?c?"M"+C*c+","+N+"H"+Y+"V"+W+"H"+C*c:"M"+Y+","+N+"V"+W:c?"M"+N+","+C*c+"V"+Y+"H"+W+"V"+C*c:"M"+N+","+Y+"H"+W),g.attr("opacity",1).attr("transform",function(T){return L(q(T)+Y)}),D.attr(k+"2",C*a),w.attr(k,C*U).text(A),j.filter(or).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===ue?"start":t===Bt?"end":"middle"),j.each(function(){this.__axis=q})}return _.scale=function(S){return arguments.length?(e=S,_):e},_.ticks=function(){return n=Array.from(arguments),_},_.tickArguments=function(S){return arguments.length?(n=S==null?[]:Array.from(S),_):n.slice()},_.tickValues=function(S){return arguments.length?(r=S==null?null:Array.from(S),_):r&&r.slice()},_.tickFormat=function(S){return arguments.length?(i=S,_):i},_.tickSize=function(S){return arguments.length?(a=c=+S,_):a},_.tickSizeInner=function(S){return arguments.length?(a=+S,_):a},_.tickSizeOuter=function(S){return arguments.length?(c=+S,_):c},_.tickPadding=function(S){return arguments.length?(m=+S,_):m},_.offset=function(S){return arguments.length?(Y=+S,_):Y},_}function cr(t){return ln(Xt,t)}function ur(t){return ln(Te,t)}const lr=Math.PI/180,fr=180/Math.PI,ee=18,fn=.96422,dn=1,hn=.82521,mn=4/29,Ft=6/29,gn=3*Ft*Ft,dr=Ft*Ft*Ft;function yn(t){if(t instanceof ft)return new ft(t.l,t.a,t.b,t.opacity);if(t instanceof ht)return kn(t);t instanceof an||(t=Wn(t));var e=he(t.r),n=he(t.g),r=he(t.b),i=le((.2225045*e+.7168786*n+.0606169*r)/dn),a,c;return e===n&&n===r?a=c=i:(a=le((.4360747*e+.3850649*n+.1430804*r)/fn),c=le((.0139322*e+.0971045*n+.7141733*r)/hn)),new ft(116*i-16,500*(a-i),200*(i-c),t.opacity)}function hr(t,e,n,r){return arguments.length===1?yn(t):new ft(t,e,n,r??1)}function ft(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}on(ft,hr,cn(un,{brighter(t){return new ft(this.l+ee*(t??1),this.a,this.b,this.opacity)},darker(t){return new ft(this.l-ee*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=fn*fe(e),t=dn*fe(t),n=hn*fe(n),new an(de(3.1338561*e-1.6168667*t-.4906146*n),de(-.9787684*e+1.9161415*t+.033454*n),de(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function le(t){return t>dr?Math.pow(t,1/3):t/gn+mn}function fe(t){return t>Ft?t*t*t:gn*(t-mn)}function de(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function he(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function mr(t){if(t instanceof ht)return new ht(t.h,t.c,t.l,t.opacity);if(t instanceof ft||(t=yn(t)),t.a===0&&t.b===0)return new ht(NaN,0(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{const c=i(a),m=i.ceil(a);return a-c(e(a=new Date(+a),c==null?1:Math.floor(c)),a),i.range=(a,c,m)=>{const Y=[];if(a=i.ceil(a),m=m==null?1:Math.floor(m),!(a0))return Y;let C;do Y.push(C=new Date(+a)),e(a,m),t(a);while(Cet(c=>{if(c>=c)for(;t(c),!a(c);)c.setTime(c-1)},(c,m)=>{if(c>=c)if(m<0)for(;++m<=0;)for(;e(c,-1),!a(c););else for(;--m>=0;)for(;e(c,1),!a(c););}),n&&(i.count=(a,c)=>(me.setTime(+a),ge.setTime(+c),t(me),t(ge),Math.floor(n(me,ge))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(r?c=>r(c)%a===0:c=>i.count(0,c)%a===0):i)),i}const Ut=et(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Ut.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?et(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Ut);Ut.range;const mt=1e3,ct=mt*60,gt=ct*60,yt=gt*24,Ce=yt*7,Pe=yt*30,ye=yt*365,vt=et(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*mt)},(t,e)=>(e-t)/mt,t=>t.getUTCSeconds());vt.range;const $t=et(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mt)},(t,e)=>{t.setTime(+t+e*ct)},(t,e)=>(e-t)/ct,t=>t.getMinutes());$t.range;const pr=et(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*ct)},(t,e)=>(e-t)/ct,t=>t.getUTCMinutes());pr.range;const Ot=et(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mt-t.getMinutes()*ct)},(t,e)=>{t.setTime(+t+e*gt)},(t,e)=>(e-t)/gt,t=>t.getHours());Ot.range;const vr=et(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*gt)},(t,e)=>(e-t)/gt,t=>t.getUTCHours());vr.range;const bt=et(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ct)/yt,t=>t.getDate()-1);bt.range;const Se=et(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/yt,t=>t.getUTCDate()-1);Se.range;const Tr=et(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/yt,t=>Math.floor(t/yt));Tr.range;function Dt(t){return et(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*ct)/Ce)}const Pt=Dt(0),Ht=Dt(1),pn=Dt(2),vn=Dt(3),xt=Dt(4),Tn=Dt(5),bn=Dt(6);Pt.range;Ht.range;pn.range;vn.range;xt.range;Tn.range;bn.range;function Mt(t){return et(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/Ce)}const xn=Mt(0),ne=Mt(1),br=Mt(2),xr=Mt(3),Et=Mt(4),wr=Mt(5),Dr=Mt(6);xn.range;ne.range;br.range;xr.range;Et.range;wr.range;Dr.range;const Nt=et(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Nt.range;const Mr=et(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());Mr.range;const kt=et(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());kt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:et(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});kt.range;const wt=et(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());wt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:et(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});wt.range;function Cr(t,e,n,r,i,a){const c=[[vt,1,mt],[vt,5,5*mt],[vt,15,15*mt],[vt,30,30*mt],[a,1,ct],[a,5,5*ct],[a,15,15*ct],[a,30,30*ct],[i,1,gt],[i,3,3*gt],[i,6,6*gt],[i,12,12*gt],[r,1,yt],[r,2,2*yt],[n,1,Ce],[e,1,Pe],[e,3,3*Pe],[t,1,ye]];function m(C,k,L){const _=kU).right(c,_);if(S===c.length)return t.every(He(C/ye,k/ye,L));if(S===0)return Ut.every(Math.max(He(C,k,L),1));const[Z,A]=c[_/c[S-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?($=pe(Lt(l.y,0,1)),Q=$.getUTCDay(),$=Q>4||Q===0?ne.ceil($):ne($),$=Se.offset($,(l.V-1)*7),l.y=$.getUTCFullYear(),l.m=$.getUTCMonth(),l.d=$.getUTCDate()+(l.w+6)%7):($=ke(Lt(l.y,0,1)),Q=$.getDay(),$=Q>4||Q===0?Ht.ceil($):Ht($),$=bt.offset($,(l.V-1)*7),l.y=$.getFullYear(),l.m=$.getMonth(),l.d=$.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),Q="Z"in l?pe(Lt(l.y,0,1)).getUTCDay():ke(Lt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(Q+5)%7:l.w+l.U*7-(Q+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,pe(l)):ke(l)}}function y(M,H,V,l){for(var J=0,$=H.length,Q=V.length,G,it;J<$;){if(l>=Q)return-1;if(G=H.charCodeAt(J++),G===37){if(G=H.charAt(J++),it=j[G in Ve?H.charAt(J++):G],!it||(l=it(M,V,l))<0)return-1}else if(G!=V.charCodeAt(l++))return-1}return l}function h(M,H,V){var l=C.exec(H.slice(V));return l?(M.p=k.get(l[0].toLowerCase()),V+l[0].length):-1}function D(M,H,V){var l=S.exec(H.slice(V));return l?(M.w=Z.get(l[0].toLowerCase()),V+l[0].length):-1}function w(M,H,V){var l=L.exec(H.slice(V));return l?(M.w=_.get(l[0].toLowerCase()),V+l[0].length):-1}function T(M,H,V){var l=I.exec(H.slice(V));return l?(M.m=N.get(l[0].toLowerCase()),V+l[0].length):-1}function v(M,H,V){var l=A.exec(H.slice(V));return l?(M.m=U.get(l[0].toLowerCase()),V+l[0].length):-1}function u(M,H,V){return y(M,e,H,V)}function f(M,H,V){return y(M,n,H,V)}function b(M,H,V){return y(M,r,H,V)}function x(M){return c[M.getDay()]}function F(M){return a[M.getDay()]}function o(M){return Y[M.getMonth()]}function X(M){return m[M.getMonth()]}function s(M){return i[+(M.getHours()>=12)]}function E(M){return 1+~~(M.getMonth()/3)}function R(M){return c[M.getUTCDay()]}function z(M){return a[M.getUTCDay()]}function P(M){return Y[M.getUTCMonth()]}function K(M){return m[M.getUTCMonth()]}function O(M){return i[+(M.getUTCHours()>=12)]}function st(M){return 1+~~(M.getUTCMonth()/3)}return{format:function(M){var H=p(M+="",W);return H.toString=function(){return M},H},parse:function(M){var H=g(M+="",!1);return H.toString=function(){return M},H},utcFormat:function(M){var H=p(M+="",q);return H.toString=function(){return M},H},utcParse:function(M){var H=g(M+="",!0);return H.toString=function(){return M},H}}}var Ve={"-":"",_:" ",0:"0"},nt=/^\s*\d+/,Yr=/^%/,Ur=/[\\^$*+?|[\]().{}]/g;function B(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[e.toLowerCase(),n]))}function Ir(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Lr(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function $r(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function ze(t,e,n){var r=nt.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Re(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Or(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Hr(t,e,n){var r=nt.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Nr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function qe(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Pr(t,e,n){var r=nt.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ze(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Vr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function zr(t,e,n){var r=nt.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Rr(t,e,n){var r=nt.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function qr(t,e,n){var r=nt.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Zr(t,e,n){var r=Yr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Br(t,e,n){var r=nt.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Xr(t,e,n){var r=nt.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Be(t,e){return B(t.getDate(),e,2)}function Gr(t,e){return B(t.getHours(),e,2)}function jr(t,e){return B(t.getHours()%12||12,e,2)}function Qr(t,e){return B(1+bt.count(kt(t),t),e,3)}function wn(t,e){return B(t.getMilliseconds(),e,3)}function Jr(t,e){return wn(t,e)+"000"}function Kr(t,e){return B(t.getMonth()+1,e,2)}function ti(t,e){return B(t.getMinutes(),e,2)}function ei(t,e){return B(t.getSeconds(),e,2)}function ni(t){var e=t.getDay();return e===0?7:e}function ri(t,e){return B(Pt.count(kt(t)-1,t),e,2)}function Dn(t){var e=t.getDay();return e>=4||e===0?xt(t):xt.ceil(t)}function ii(t,e){return t=Dn(t),B(xt.count(kt(t),t)+(kt(t).getDay()===4),e,2)}function si(t){return t.getDay()}function ai(t,e){return B(Ht.count(kt(t)-1,t),e,2)}function oi(t,e){return B(t.getFullYear()%100,e,2)}function ci(t,e){return t=Dn(t),B(t.getFullYear()%100,e,2)}function ui(t,e){return B(t.getFullYear()%1e4,e,4)}function li(t,e){var n=t.getDay();return t=n>=4||n===0?xt(t):xt.ceil(t),B(t.getFullYear()%1e4,e,4)}function fi(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+B(e/60|0,"0",2)+B(e%60,"0",2)}function Xe(t,e){return B(t.getUTCDate(),e,2)}function di(t,e){return B(t.getUTCHours(),e,2)}function hi(t,e){return B(t.getUTCHours()%12||12,e,2)}function mi(t,e){return B(1+Se.count(wt(t),t),e,3)}function Mn(t,e){return B(t.getUTCMilliseconds(),e,3)}function gi(t,e){return Mn(t,e)+"000"}function yi(t,e){return B(t.getUTCMonth()+1,e,2)}function ki(t,e){return B(t.getUTCMinutes(),e,2)}function pi(t,e){return B(t.getUTCSeconds(),e,2)}function vi(t){var e=t.getUTCDay();return e===0?7:e}function Ti(t,e){return B(xn.count(wt(t)-1,t),e,2)}function Cn(t){var e=t.getUTCDay();return e>=4||e===0?Et(t):Et.ceil(t)}function bi(t,e){return t=Cn(t),B(Et.count(wt(t),t)+(wt(t).getUTCDay()===4),e,2)}function xi(t){return t.getUTCDay()}function wi(t,e){return B(ne.count(wt(t)-1,t),e,2)}function Di(t,e){return B(t.getUTCFullYear()%100,e,2)}function Mi(t,e){return t=Cn(t),B(t.getUTCFullYear()%100,e,2)}function Ci(t,e){return B(t.getUTCFullYear()%1e4,e,4)}function Si(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Et(t):Et.ceil(t),B(t.getUTCFullYear()%1e4,e,4)}function _i(){return"+0000"}function Ge(){return"%"}function je(t){return+t}function Qe(t){return Math.floor(+t/1e3)}var St,re;Fi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Fi(t){return St=Fr(t),re=St.format,St.parse,St.utcFormat,St.utcParse,St}function Yi(t){return new Date(t)}function Ui(t){return t instanceof Date?+t:+new Date(+t)}function Sn(t,e,n,r,i,a,c,m,Y,C){var k=jn(),L=k.invert,_=k.domain,S=C(".%L"),Z=C(":%S"),A=C("%I:%M"),U=C("%I %p"),I=C("%a %d"),N=C("%b %d"),W=C("%B"),q=C("%Y");function j(p){return(Y(p)4&&(S+=7),_.add(S,n));return Z.diff(A,"week")+1},m.isoWeekday=function(C){return this.$utils().u(C)?this.day()||7:this.day(this.day()%7?C:C-7)};var Y=m.startOf;m.startOf=function(C,k){var L=this.$utils(),_=!!L.u(k)||k;return L.p(C)==="isoweek"?_?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):Y.bind(this)(C,k)}}}))})(Gt)),Gt.exports}var Ai=Li();const Wi=ae(Ai);var jt={exports:{}},$i=jt.exports,Ke;function Oi(){return Ke||(Ke=1,(function(t,e){(function(n,r){t.exports=r()})($i,(function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,i=/\d/,a=/\d\d/,c=/\d\d?/,m=/\d*[^-_:/,()\s\d]+/,Y={},C=function(U){return(U=+U)+(U>68?1900:2e3)},k=function(U){return function(I){this[U]=+I}},L=[/[+-]\d\d:?(\d\d)?|Z/,function(U){(this.zone||(this.zone={})).offset=(function(I){if(!I||I==="Z")return 0;var N=I.match(/([+-]|\d\d)/g),W=60*N[1]+(+N[2]||0);return W===0?0:N[0]==="+"?-W:W})(U)}],_=function(U){var I=Y[U];return I&&(I.indexOf?I:I.s.concat(I.f))},S=function(U,I){var N,W=Y.meridiem;if(W){for(var q=1;q<=24;q+=1)if(U.indexOf(W(q,0,I))>-1){N=q>12;break}}else N=U===(I?"pm":"PM");return N},Z={A:[m,function(U){this.afternoon=S(U,!1)}],a:[m,function(U){this.afternoon=S(U,!0)}],Q:[i,function(U){this.month=3*(U-1)+1}],S:[i,function(U){this.milliseconds=100*+U}],SS:[a,function(U){this.milliseconds=10*+U}],SSS:[/\d{3}/,function(U){this.milliseconds=+U}],s:[c,k("seconds")],ss:[c,k("seconds")],m:[c,k("minutes")],mm:[c,k("minutes")],H:[c,k("hours")],h:[c,k("hours")],HH:[c,k("hours")],hh:[c,k("hours")],D:[c,k("day")],DD:[a,k("day")],Do:[m,function(U){var I=Y.ordinal,N=U.match(/\d+/);if(this.day=N[0],I)for(var W=1;W<=31;W+=1)I(W).replace(/\[|\]/g,"")===U&&(this.day=W)}],w:[c,k("week")],ww:[a,k("week")],M:[c,k("month")],MM:[a,k("month")],MMM:[m,function(U){var I=_("months"),N=(_("monthsShort")||I.map((function(W){return W.slice(0,3)}))).indexOf(U)+1;if(N<1)throw new Error;this.month=N%12||N}],MMMM:[m,function(U){var I=_("months").indexOf(U)+1;if(I<1)throw new Error;this.month=I%12||I}],Y:[/[+-]?\d+/,k("year")],YY:[a,function(U){this.year=C(U)}],YYYY:[/\d{4}/,k("year")],Z:L,ZZ:L};function A(U){var I,N;I=U,N=Y&&Y.formats;for(var W=(U=I.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(D,w,T){var v=T&&T.toUpperCase();return w||N[T]||n[T]||N[v].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(u,f,b){return f||b.slice(1)}))}))).match(r),q=W.length,j=0;j-1)return new Date((F==="X"?1e3:1)*x);var s=A(F)(x),E=s.year,R=s.month,z=s.day,P=s.hours,K=s.minutes,O=s.seconds,st=s.milliseconds,M=s.zone,H=s.week,V=new Date,l=z||(E||R?1:V.getDate()),J=E||V.getFullYear(),$=0;E&&!R||($=R>0?R-1:V.getMonth());var Q,G=P||0,it=K||0,at=O||0,pt=st||0;return M?new Date(Date.UTC(J,$,l,G,it,at,pt+60*M.offset*1e3)):o?new Date(Date.UTC(J,$,l,G,it,at,pt)):(Q=new Date(J,$,l,G,it,at,pt),H&&(Q=X(Q).week(H).toDate()),Q)}catch{return new Date("")}})(p,h,g,N),this.init(),v&&v!==!0&&(this.$L=this.locale(v).$L),T&&p!=this.format(h)&&(this.$d=new Date("")),Y={}}else if(h instanceof Array)for(var u=h.length,f=1;f<=u;f+=1){y[1]=h[f-1];var b=N.apply(this,y);if(b.isValid()){this.$d=b.$d,this.$L=b.$L,this.init();break}f===u&&(this.$d=new Date(""))}else q.call(this,j)}}}))})(jt)),jt.exports}var Hi=Oi();const Ni=ae(Hi);var Qt={exports:{}},Pi=Qt.exports,tn;function Vi(){return tn||(tn=1,(function(t,e){(function(n,r){t.exports=r()})(Pi,(function(){return function(n,r){var i=r.prototype,a=i.format;i.format=function(c){var m=this,Y=this.$locale();if(!this.isValid())return a.bind(this)(c);var C=this.$utils(),k=(c||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(L){switch(L){case"Q":return Math.ceil((m.$M+1)/3);case"Do":return Y.ordinal(m.$D);case"gggg":return m.weekYear();case"GGGG":return m.isoWeekYear();case"wo":return Y.ordinal(m.week(),"W");case"w":case"ww":return C.s(m.week(),L==="w"?1:2,"0");case"W":case"WW":return C.s(m.isoWeek(),L==="W"?1:2,"0");case"k":case"kk":return C.s(String(m.$H===0?24:m.$H),L==="k"?1:2,"0");case"X":return Math.floor(m.$d.getTime()/1e3);case"x":return m.$d.getTime();case"z":return"["+m.offsetName()+"]";case"zzz":return"["+m.offsetName("long")+"]";default:return L}}));return a.bind(this)(k)}}}))})(Qt)),Qt.exports}var zi=Vi();const Ri=ae(zi);var Jt={exports:{}},qi=Jt.exports,en;function Zi(){return en||(en=1,(function(t,e){(function(n,r){t.exports=r()})(qi,(function(){var n,r,i=1e3,a=6e4,c=36e5,m=864e5,Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,C=31536e6,k=2628e6,L=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,_={years:C,months:k,days:m,hours:c,minutes:a,seconds:i,milliseconds:1,weeks:6048e5},S=function(p){return p instanceof q},Z=function(p,g,y){return new q(p,y,g.$l)},A=function(p){return r.p(p)+"s"},U=function(p){return p<0},I=function(p){return U(p)?Math.ceil(p):Math.floor(p)},N=function(p){return Math.abs(p)},W=function(p,g){return p?U(p)?{negative:!0,format:""+N(p)+g}:{negative:!1,format:""+p+g}:{negative:!1,format:""}},q=(function(){function p(y,h,D){var w=this;if(this.$d={},this.$l=D,y===void 0&&(this.$ms=0,this.parseFromMilliseconds()),h)return Z(y*_[A(h)],this);if(typeof y=="number")return this.$ms=y,this.parseFromMilliseconds(),this;if(typeof y=="object")return Object.keys(y).forEach((function(u){w.$d[A(u)]=y[u]})),this.calMilliseconds(),this;if(typeof y=="string"){var T=y.match(L);if(T){var v=T.slice(2).map((function(u){return u!=null?Number(u):0}));return this.$d.years=v[0],this.$d.months=v[1],this.$d.weeks=v[2],this.$d.days=v[3],this.$d.hours=v[4],this.$d.minutes=v[5],this.$d.seconds=v[6],this.calMilliseconds(),this}}return this}var g=p.prototype;return g.calMilliseconds=function(){var y=this;this.$ms=Object.keys(this.$d).reduce((function(h,D){return h+(y.$d[D]||0)*_[D]}),0)},g.parseFromMilliseconds=function(){var y=this.$ms;this.$d.years=I(y/C),y%=C,this.$d.months=I(y/k),y%=k,this.$d.days=I(y/m),y%=m,this.$d.hours=I(y/c),y%=c,this.$d.minutes=I(y/a),y%=a,this.$d.seconds=I(y/i),y%=i,this.$d.milliseconds=y},g.toISOString=function(){var y=W(this.$d.years,"Y"),h=W(this.$d.months,"M"),D=+this.$d.days||0;this.$d.weeks&&(D+=7*this.$d.weeks);var w=W(D,"D"),T=W(this.$d.hours,"H"),v=W(this.$d.minutes,"M"),u=this.$d.seconds||0;this.$d.milliseconds&&(u+=this.$d.milliseconds/1e3,u=Math.round(1e3*u)/1e3);var f=W(u,"S"),b=y.negative||h.negative||w.negative||T.negative||v.negative||f.negative,x=T.format||v.format||f.format?"T":"",F=(b?"-":"")+"P"+y.format+h.format+w.format+x+T.format+v.format+f.format;return F==="P"||F==="-P"?"P0D":F},g.toJSON=function(){return this.toISOString()},g.format=function(y){var h=y||"YYYY-MM-DDTHH:mm:ss",D={Y:this.$d.years,YY:r.s(this.$d.years,2,"0"),YYYY:r.s(this.$d.years,4,"0"),M:this.$d.months,MM:r.s(this.$d.months,2,"0"),D:this.$d.days,DD:r.s(this.$d.days,2,"0"),H:this.$d.hours,HH:r.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:r.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:r.s(this.$d.seconds,2,"0"),SSS:r.s(this.$d.milliseconds,3,"0")};return h.replace(Y,(function(w,T){return T||String(D[w])}))},g.as=function(y){return this.$ms/_[A(y)]},g.get=function(y){var h=this.$ms,D=A(y);return D==="milliseconds"?h%=1e3:h=D==="weeks"?I(h/_[D]):this.$d[D],h||0},g.add=function(y,h,D){var w;return w=h?y*_[A(h)]:S(y)?y.$ms:Z(y,this).$ms,Z(this.$ms+w*(D?-1:1),this)},g.subtract=function(y,h){return this.add(y,h,!0)},g.locale=function(y){var h=this.clone();return h.$l=y,h},g.clone=function(){return Z(this.$ms,this)},g.humanize=function(y){return n().add(this.$ms,"ms").locale(this.$l).fromNow(!y)},g.valueOf=function(){return this.asMilliseconds()},g.milliseconds=function(){return this.get("milliseconds")},g.asMilliseconds=function(){return this.as("milliseconds")},g.seconds=function(){return this.get("seconds")},g.asSeconds=function(){return this.as("seconds")},g.minutes=function(){return this.get("minutes")},g.asMinutes=function(){return this.as("minutes")},g.hours=function(){return this.get("hours")},g.asHours=function(){return this.as("hours")},g.days=function(){return this.get("days")},g.asDays=function(){return this.as("days")},g.weeks=function(){return this.get("weeks")},g.asWeeks=function(){return this.as("weeks")},g.months=function(){return this.get("months")},g.asMonths=function(){return this.as("months")},g.years=function(){return this.get("years")},g.asYears=function(){return this.as("years")},p})(),j=function(p,g,y){return p.add(g.years()*y,"y").add(g.months()*y,"M").add(g.days()*y,"d").add(g.hours()*y,"h").add(g.minutes()*y,"m").add(g.seconds()*y,"s").add(g.milliseconds()*y,"ms")};return function(p,g,y){n=y,r=y().$utils(),y.duration=function(w,T){var v=y.locale();return Z(w,{$l:v},T)},y.isDuration=S;var h=g.prototype.add,D=g.prototype.subtract;g.prototype.add=function(w,T){return S(w)?j(this,w,1):h.bind(this)(w,T)},g.prototype.subtract=function(w,T){return S(w)?j(this,w,-1):D.bind(this)(w,T)}}}))})(Jt)),Jt.exports}var Bi=Zi();const Xi=ae(Bi);var xe=(function(){var t=d(function(v,u,f,b){for(f=f||{},b=v.length;b--;f[v[b]]=u);return f},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],n=[1,26],r=[1,27],i=[1,28],a=[1,29],c=[1,30],m=[1,31],Y=[1,32],C=[1,33],k=[1,34],L=[1,9],_=[1,10],S=[1,11],Z=[1,12],A=[1,13],U=[1,14],I=[1,15],N=[1,16],W=[1,19],q=[1,20],j=[1,21],p=[1,22],g=[1,23],y=[1,25],h=[1,35],D={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:d(function(u,f,b,x,F,o,X){var s=o.length-1;switch(F){case 1:return o[s-1];case 2:this.$=[];break;case 3:o[s-1].push(o[s]),this.$=o[s-1];break;case 4:case 5:this.$=o[s];break;case 6:case 7:this.$=[];break;case 8:x.setWeekday("monday");break;case 9:x.setWeekday("tuesday");break;case 10:x.setWeekday("wednesday");break;case 11:x.setWeekday("thursday");break;case 12:x.setWeekday("friday");break;case 13:x.setWeekday("saturday");break;case 14:x.setWeekday("sunday");break;case 15:x.setWeekend("friday");break;case 16:x.setWeekend("saturday");break;case 17:x.setDateFormat(o[s].substr(11)),this.$=o[s].substr(11);break;case 18:x.enableInclusiveEndDates(),this.$=o[s].substr(18);break;case 19:x.TopAxis(),this.$=o[s].substr(8);break;case 20:x.setAxisFormat(o[s].substr(11)),this.$=o[s].substr(11);break;case 21:x.setTickInterval(o[s].substr(13)),this.$=o[s].substr(13);break;case 22:x.setExcludes(o[s].substr(9)),this.$=o[s].substr(9);break;case 23:x.setIncludes(o[s].substr(9)),this.$=o[s].substr(9);break;case 24:x.setTodayMarker(o[s].substr(12)),this.$=o[s].substr(12);break;case 27:x.setDiagramTitle(o[s].substr(6)),this.$=o[s].substr(6);break;case 28:this.$=o[s].trim(),x.setAccTitle(this.$);break;case 29:case 30:this.$=o[s].trim(),x.setAccDescription(this.$);break;case 31:x.addSection(o[s].substr(8)),this.$=o[s].substr(8);break;case 33:x.addTask(o[s-1],o[s]),this.$="task";break;case 34:this.$=o[s-1],x.setClickEvent(o[s-1],o[s],null);break;case 35:this.$=o[s-2],x.setClickEvent(o[s-2],o[s-1],o[s]);break;case 36:this.$=o[s-2],x.setClickEvent(o[s-2],o[s-1],null),x.setLink(o[s-2],o[s]);break;case 37:this.$=o[s-3],x.setClickEvent(o[s-3],o[s-2],o[s-1]),x.setLink(o[s-3],o[s]);break;case 38:this.$=o[s-2],x.setClickEvent(o[s-2],o[s],null),x.setLink(o[s-2],o[s-1]);break;case 39:this.$=o[s-3],x.setClickEvent(o[s-3],o[s-1],o[s]),x.setLink(o[s-3],o[s-2]);break;case 40:this.$=o[s-1],x.setLink(o[s-1],o[s]);break;case 41:case 47:this.$=o[s-1]+" "+o[s];break;case 42:case 43:case 45:this.$=o[s-2]+" "+o[s-1]+" "+o[s];break;case 44:case 46:this.$=o[s-3]+" "+o[s-2]+" "+o[s-1]+" "+o[s];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:a,16:c,17:m,18:Y,19:18,20:C,21:k,22:L,23:_,24:S,25:Z,26:A,27:U,28:I,29:N,30:W,31:q,33:j,35:p,36:g,37:24,38:y,40:h},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:n,13:r,14:i,15:a,16:c,17:m,18:Y,19:18,20:C,21:k,22:L,23:_,24:S,25:Z,26:A,27:U,28:I,29:N,30:W,31:q,33:j,35:p,36:g,37:24,38:y,40:h},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:d(function(u,f){if(f.recoverable)this.trace(u);else{var b=new Error(u);throw b.hash=f,b}},"parseError"),parse:d(function(u){var f=this,b=[0],x=[],F=[null],o=[],X=this.table,s="",E=0,R=0,z=2,P=1,K=o.slice.call(arguments,1),O=Object.create(this.lexer),st={yy:{}};for(var M in this.yy)Object.prototype.hasOwnProperty.call(this.yy,M)&&(st.yy[M]=this.yy[M]);O.setInput(u,st.yy),st.yy.lexer=O,st.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var H=O.yylloc;o.push(H);var V=O.options&&O.options.ranges;typeof st.yy.parseError=="function"?this.parseError=st.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function l(ot){b.length=b.length-2*ot,F.length=F.length-ot,o.length=o.length-ot}d(l,"popStack");function J(){var ot;return ot=x.pop()||O.lex()||P,typeof ot!="number"&&(ot instanceof Array&&(x=ot,ot=x.pop()),ot=f.symbols_[ot]||ot),ot}d(J,"lex");for(var $,Q,G,it,at={},pt,ut,Oe,qt;;){if(Q=b[b.length-1],this.defaultActions[Q]?G=this.defaultActions[Q]:(($===null||typeof $>"u")&&($=J()),G=X[Q]&&X[Q][$]),typeof G>"u"||!G.length||!G[0]){var oe="";qt=[];for(pt in X[Q])this.terminals_[pt]&&pt>z&&qt.push("'"+this.terminals_[pt]+"'");O.showPosition?oe="Parse error on line "+(E+1)+`: `+O.showPosition()+` Expecting `+qt.join(", ")+", got '"+(this.terminals_[$]||$)+"'":oe="Parse error on line "+(E+1)+": Unexpected "+($==P?"end of input":"'"+(this.terminals_[$]||$)+"'"),this.parseError(oe,{text:O.match,token:this.terminals_[$]||$,line:O.yylineno,loc:H,expected:qt})}if(G[0]instanceof Array&&G.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+$);switch(G[0]){case 1:b.push($),F.push(O.yytext),o.push(O.yylloc),b.push(G[1]),$=null,R=O.yyleng,s=O.yytext,E=O.yylineno,H=O.yylloc;break;case 2:if(ut=this.productions_[G[1]][1],at.$=F[F.length-ut],at._$={first_line:o[o.length-(ut||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(ut||1)].first_column,last_column:o[o.length-1].last_column},V&&(at._$.range=[o[o.length-(ut||1)].range[0],o[o.length-1].range[1]]),it=this.performAction.apply(at,[s,R,E,st.yy,G[1],F,o].concat(K)),typeof it<"u")return it;ut&&(b=b.slice(0,-1*ut*2),F=F.slice(0,-1*ut),o=o.slice(0,-1*ut)),b.push(this.productions_[G[1]][0]),F.push(at.$),o.push(at._$),Oe=X[b[b.length-2]][b[b.length-1]],b.push(Oe);break;case 3:return!0}}return!0},"parse")},w=(function(){var v={EOF:1,parseError:d(function(f,b){if(this.yy.parser)this.yy.parser.parseError(f,b);else throw new Error(f)},"parseError"),setInput:d(function(u,f){return this.yy=f||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var f=u.match(/(?:\r\n?|\n).*/g);return f?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:d(function(u){var f=u.length,b=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-f),this.offset-=f;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),b.length-1&&(this.yylineno-=b.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:b?(b.length===x.length?this.yylloc.first_column:0)+x[x.length-b.length].length-b[0].length:this.yylloc.first_column-f},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-f]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(u){this.unput(this.match.slice(u))},"less"),pastInput:d(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var u=this.pastInput(),f=new Array(u.length+1).join("-");return u+this.upcomingInput()+` @@ -265,4 +265,4 @@ Expecting `+qt.join(", ")+", got '"+(this.terminals_[$]||$)+"'":oe="Parse error font-family: ${t.fontFamily}; } `,"getStyles"),$s=Ws,Vs={parser:Gi,db:Us,renderer:As,styles:$s};export{Vs as diagram}; -//# sourceMappingURL=ganttDiagram-JELNMOA3-Q89hSTWi.js.map +//# sourceMappingURL=ganttDiagram-JELNMOA3-OdbUz5AC.js.map diff --git a/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js.map b/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js.map similarity index 99% rename from massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js.map rename to massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js.map index 9992ba162..acb289027 100644 --- a/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-Q89hSTWi.js.map +++ b/massgen/frontend/web/static/assets/ganttDiagram-JELNMOA3-OdbUz5AC.js.map @@ -1 +1 @@ -{"version":3,"file":"ganttDiagram-JELNMOA3-Q89hSTWi.js","sources":["../../../../../webui/node_modules/d3-array/src/max.js","../../../../../webui/node_modules/d3-array/src/min.js","../../../../../webui/node_modules/d3-axis/src/identity.js","../../../../../webui/node_modules/d3-axis/src/axis.js","../../../../../webui/node_modules/d3-color/src/math.js","../../../../../webui/node_modules/d3-color/src/lab.js","../../../../../webui/node_modules/d3-interpolate/src/hcl.js","../../../../../webui/node_modules/d3-scale/src/nice.js","../../../../../webui/node_modules/d3-time/src/interval.js","../../../../../webui/node_modules/d3-time/src/millisecond.js","../../../../../webui/node_modules/d3-time/src/duration.js","../../../../../webui/node_modules/d3-time/src/second.js","../../../../../webui/node_modules/d3-time/src/minute.js","../../../../../webui/node_modules/d3-time/src/hour.js","../../../../../webui/node_modules/d3-time/src/day.js","../../../../../webui/node_modules/d3-time/src/week.js","../../../../../webui/node_modules/d3-time/src/month.js","../../../../../webui/node_modules/d3-time/src/year.js","../../../../../webui/node_modules/d3-time/src/ticks.js","../../../../../webui/node_modules/d3-time-format/src/locale.js","../../../../../webui/node_modules/d3-time-format/src/defaultLocale.js","../../../../../webui/node_modules/d3-scale/src/time.js","../../../../../webui/node_modules/dayjs/plugin/isoWeek.js","../../../../../webui/node_modules/dayjs/plugin/customParseFormat.js","../../../../../webui/node_modules/dayjs/plugin/advancedFormat.js","../../../../../webui/node_modules/dayjs/plugin/duration.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-JELNMOA3.mjs"],"sourcesContent":["export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","import {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n configureSvgSize,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/gantt/parser/gantt.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 36, 38, 40], $V1 = [1, 26], $V2 = [1, 27], $V3 = [1, 28], $V4 = [1, 29], $V5 = [1, 30], $V6 = [1, 31], $V7 = [1, 32], $V8 = [1, 33], $V9 = [1, 34], $Va = [1, 9], $Vb = [1, 10], $Vc = [1, 11], $Vd = [1, 12], $Ve = [1, 13], $Vf = [1, 14], $Vg = [1, 15], $Vh = [1, 16], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 23], $Vn = [1, 25], $Vo = [1, 35];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"gantt\": 4, \"document\": 5, \"EOF\": 6, \"line\": 7, \"SPACE\": 8, \"statement\": 9, \"NL\": 10, \"weekday\": 11, \"weekday_monday\": 12, \"weekday_tuesday\": 13, \"weekday_wednesday\": 14, \"weekday_thursday\": 15, \"weekday_friday\": 16, \"weekday_saturday\": 17, \"weekday_sunday\": 18, \"weekend\": 19, \"weekend_friday\": 20, \"weekend_saturday\": 21, \"dateFormat\": 22, \"inclusiveEndDates\": 23, \"topAxis\": 24, \"axisFormat\": 25, \"tickInterval\": 26, \"excludes\": 27, \"includes\": 28, \"todayMarker\": 29, \"title\": 30, \"acc_title\": 31, \"acc_title_value\": 32, \"acc_descr\": 33, \"acc_descr_value\": 34, \"acc_descr_multiline_value\": 35, \"section\": 36, \"clickStatement\": 37, \"taskTxt\": 38, \"taskData\": 39, \"click\": 40, \"callbackname\": 41, \"callbackargs\": 42, \"href\": 43, \"clickStatementDebug\": 44, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"gantt\", 6: \"EOF\", 8: \"SPACE\", 10: \"NL\", 12: \"weekday_monday\", 13: \"weekday_tuesday\", 14: \"weekday_wednesday\", 15: \"weekday_thursday\", 16: \"weekday_friday\", 17: \"weekday_saturday\", 18: \"weekday_sunday\", 20: \"weekend_friday\", 21: \"weekend_saturday\", 22: \"dateFormat\", 23: \"inclusiveEndDates\", 24: \"topAxis\", 25: \"axisFormat\", 26: \"tickInterval\", 27: \"excludes\", 28: \"includes\", 29: \"todayMarker\", 30: \"title\", 31: \"acc_title\", 32: \"acc_title_value\", 33: \"acc_descr\", 34: \"acc_descr_value\", 35: \"acc_descr_multiline_value\", 36: \"section\", 38: \"taskTxt\", 39: \"taskData\", 40: \"click\", 41: \"callbackname\", 42: \"callbackargs\", 43: \"href\" },\n productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [19, 1], [19, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [37, 2], [37, 3], [37, 3], [37, 4], [37, 3], [37, 4], [37, 2], [44, 2], [44, 3], [44, 3], [44, 4], [44, 3], [44, 4], [44, 2]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = [];\n break;\n case 3:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n case 7:\n this.$ = [];\n break;\n case 8:\n yy.setWeekday(\"monday\");\n break;\n case 9:\n yy.setWeekday(\"tuesday\");\n break;\n case 10:\n yy.setWeekday(\"wednesday\");\n break;\n case 11:\n yy.setWeekday(\"thursday\");\n break;\n case 12:\n yy.setWeekday(\"friday\");\n break;\n case 13:\n yy.setWeekday(\"saturday\");\n break;\n case 14:\n yy.setWeekday(\"sunday\");\n break;\n case 15:\n yy.setWeekend(\"friday\");\n break;\n case 16:\n yy.setWeekend(\"saturday\");\n break;\n case 17:\n yy.setDateFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 18:\n yy.enableInclusiveEndDates();\n this.$ = $$[$0].substr(18);\n break;\n case 19:\n yy.TopAxis();\n this.$ = $$[$0].substr(8);\n break;\n case 20:\n yy.setAxisFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 21:\n yy.setTickInterval($$[$0].substr(13));\n this.$ = $$[$0].substr(13);\n break;\n case 22:\n yy.setExcludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 23:\n yy.setIncludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 24:\n yy.setTodayMarker($$[$0].substr(12));\n this.$ = $$[$0].substr(12);\n break;\n case 27:\n yy.setDiagramTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n case 28:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 29:\n case 30:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 31:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 33:\n yy.addTask($$[$0 - 1], $$[$0]);\n this.$ = \"task\";\n break;\n case 34:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0], null);\n break;\n case 35:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 36:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null);\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 37:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setLink($$[$0 - 3], $$[$0]);\n break;\n case 38:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0], null);\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n break;\n case 39:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]);\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n break;\n case 40:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 41:\n case 47:\n this.$ = $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 42:\n case 43:\n case 45:\n this.$ = $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 44:\n case 46:\n this.$ = $$[$0 - 3] + \" \" + $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 36, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 17]), o($V0, [2, 18]), o($V0, [2, 19]), o($V0, [2, 20]), o($V0, [2, 21]), o($V0, [2, 22]), o($V0, [2, 23]), o($V0, [2, 24]), o($V0, [2, 25]), o($V0, [2, 26]), o($V0, [2, 27]), { 32: [1, 37] }, { 34: [1, 38] }, o($V0, [2, 30]), o($V0, [2, 31]), o($V0, [2, 32]), { 39: [1, 39] }, o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), o($V0, [2, 15]), o($V0, [2, 16]), { 41: [1, 40], 43: [1, 41] }, o($V0, [2, 4]), o($V0, [2, 28]), o($V0, [2, 29]), o($V0, [2, 33]), o($V0, [2, 34], { 42: [1, 42], 43: [1, 43] }), o($V0, [2, 40], { 41: [1, 44] }), o($V0, [2, 35], { 43: [1, 45] }), o($V0, [2, 36]), o($V0, [2, 38], { 42: [1, 46] }), o($V0, [2, 37]), o($V0, [2, 39])],\n defaultActions: {},\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return \"open_directive\";\n break;\n case 1:\n this.begin(\"acc_title\");\n return 31;\n break;\n case 2:\n this.popState();\n return \"acc_title_value\";\n break;\n case 3:\n this.begin(\"acc_descr\");\n return 33;\n break;\n case 4:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 5:\n this.begin(\"acc_descr_multiline\");\n break;\n case 6:\n this.popState();\n break;\n case 7:\n return \"acc_descr_multiline_value\";\n break;\n case 8:\n break;\n case 9:\n break;\n case 10:\n break;\n case 11:\n return 10;\n break;\n case 12:\n break;\n case 13:\n break;\n case 14:\n this.begin(\"href\");\n break;\n case 15:\n this.popState();\n break;\n case 16:\n return 43;\n break;\n case 17:\n this.begin(\"callbackname\");\n break;\n case 18:\n this.popState();\n break;\n case 19:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 20:\n return 41;\n break;\n case 21:\n this.popState();\n break;\n case 22:\n return 42;\n break;\n case 23:\n this.begin(\"click\");\n break;\n case 24:\n this.popState();\n break;\n case 25:\n return 40;\n break;\n case 26:\n return 4;\n break;\n case 27:\n return 22;\n break;\n case 28:\n return 23;\n break;\n case 29:\n return 24;\n break;\n case 30:\n return 25;\n break;\n case 31:\n return 26;\n break;\n case 32:\n return 28;\n break;\n case 33:\n return 27;\n break;\n case 34:\n return 29;\n break;\n case 35:\n return 12;\n break;\n case 36:\n return 13;\n break;\n case 37:\n return 14;\n break;\n case 38:\n return 15;\n break;\n case 39:\n return 16;\n break;\n case 40:\n return 17;\n break;\n case 41:\n return 18;\n break;\n case 42:\n return 20;\n break;\n case 43:\n return 21;\n break;\n case 44:\n return \"date\";\n break;\n case 45:\n return 30;\n break;\n case 46:\n return \"accDescription\";\n break;\n case 47:\n return 36;\n break;\n case 48:\n return 38;\n break;\n case 49:\n return 39;\n break;\n case 50:\n return \":\";\n break;\n case 51:\n return 6;\n break;\n case 52:\n return \"INVALID\";\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:%%\\{)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%(?!\\{)*[^\\n]*)/i, /^(?:[^\\}]%%*[^\\n]*)/i, /^(?:%%*[^\\n]*[\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:%[^\\n]*)/i, /^(?:href[\\s]+[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:call[\\s]+)/i, /^(?:\\([\\s]*\\))/i, /^(?:\\()/i, /^(?:[^(]*)/i, /^(?:\\))/i, /^(?:[^)]*)/i, /^(?:click[\\s]+)/i, /^(?:[\\s\\n])/i, /^(?:[^\\s\\n]*)/i, /^(?:gantt\\b)/i, /^(?:dateFormat\\s[^#\\n;]+)/i, /^(?:inclusiveEndDates\\b)/i, /^(?:topAxis\\b)/i, /^(?:axisFormat\\s[^#\\n;]+)/i, /^(?:tickInterval\\s[^#\\n;]+)/i, /^(?:includes\\s[^#\\n;]+)/i, /^(?:excludes\\s[^#\\n;]+)/i, /^(?:todayMarker\\s[^\\n;]+)/i, /^(?:weekday\\s+monday\\b)/i, /^(?:weekday\\s+tuesday\\b)/i, /^(?:weekday\\s+wednesday\\b)/i, /^(?:weekday\\s+thursday\\b)/i, /^(?:weekday\\s+friday\\b)/i, /^(?:weekday\\s+saturday\\b)/i, /^(?:weekday\\s+sunday\\b)/i, /^(?:weekend\\s+friday\\b)/i, /^(?:weekend\\s+saturday\\b)/i, /^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i, /^(?:title\\s[^\\n]+)/i, /^(?:accDescription\\s[^#\\n;]+)/i, /^(?:section\\s[^\\n]+)/i, /^(?:[^:\\n]+)/i, /^(?::[^#\\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [6, 7], \"inclusive\": false }, \"acc_descr\": { \"rules\": [4], \"inclusive\": false }, \"acc_title\": { \"rules\": [2], \"inclusive\": false }, \"callbackargs\": { \"rules\": [21, 22], \"inclusive\": false }, \"callbackname\": { \"rules\": [18, 19, 20], \"inclusive\": false }, \"href\": { \"rules\": [15, 16], \"inclusive\": false }, \"click\": { \"rules\": [24, 25], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar gantt_default = parser;\n\n// src/diagrams/gantt/ganttDb.js\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport dayjs from \"dayjs\";\nimport dayjsIsoWeek from \"dayjs/plugin/isoWeek.js\";\nimport dayjsCustomParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport dayjsAdvancedFormat from \"dayjs/plugin/advancedFormat.js\";\ndayjs.extend(dayjsIsoWeek);\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsAdvancedFormat);\nvar WEEKEND_START_DAY = { friday: 5, saturday: 6 };\nvar dateFormat = \"\";\nvar axisFormat = \"\";\nvar tickInterval = void 0;\nvar todayMarker = \"\";\nvar includes = [];\nvar excludes = [];\nvar links = /* @__PURE__ */ new Map();\nvar sections = [];\nvar tasks = [];\nvar currentSection = \"\";\nvar displayMode = \"\";\nvar tags = [\"active\", \"done\", \"crit\", \"milestone\", \"vert\"];\nvar funs = [];\nvar inclusiveEndDates = false;\nvar topAxis = false;\nvar weekday = \"sunday\";\nvar weekend = \"saturday\";\nvar lastOrder = 0;\nvar clear2 = /* @__PURE__ */ __name(function() {\n sections = [];\n tasks = [];\n currentSection = \"\";\n funs = [];\n taskCnt = 0;\n lastTask = void 0;\n lastTaskID = void 0;\n rawTasks = [];\n dateFormat = \"\";\n axisFormat = \"\";\n displayMode = \"\";\n tickInterval = void 0;\n todayMarker = \"\";\n includes = [];\n excludes = [];\n inclusiveEndDates = false;\n topAxis = false;\n lastOrder = 0;\n links = /* @__PURE__ */ new Map();\n clear();\n weekday = \"sunday\";\n weekend = \"saturday\";\n}, \"clear\");\nvar setAxisFormat = /* @__PURE__ */ __name(function(txt) {\n axisFormat = txt;\n}, \"setAxisFormat\");\nvar getAxisFormat = /* @__PURE__ */ __name(function() {\n return axisFormat;\n}, \"getAxisFormat\");\nvar setTickInterval = /* @__PURE__ */ __name(function(txt) {\n tickInterval = txt;\n}, \"setTickInterval\");\nvar getTickInterval = /* @__PURE__ */ __name(function() {\n return tickInterval;\n}, \"getTickInterval\");\nvar setTodayMarker = /* @__PURE__ */ __name(function(txt) {\n todayMarker = txt;\n}, \"setTodayMarker\");\nvar getTodayMarker = /* @__PURE__ */ __name(function() {\n return todayMarker;\n}, \"getTodayMarker\");\nvar setDateFormat = /* @__PURE__ */ __name(function(txt) {\n dateFormat = txt;\n}, \"setDateFormat\");\nvar enableInclusiveEndDates = /* @__PURE__ */ __name(function() {\n inclusiveEndDates = true;\n}, \"enableInclusiveEndDates\");\nvar endDatesAreInclusive = /* @__PURE__ */ __name(function() {\n return inclusiveEndDates;\n}, \"endDatesAreInclusive\");\nvar enableTopAxis = /* @__PURE__ */ __name(function() {\n topAxis = true;\n}, \"enableTopAxis\");\nvar topAxisEnabled = /* @__PURE__ */ __name(function() {\n return topAxis;\n}, \"topAxisEnabled\");\nvar setDisplayMode = /* @__PURE__ */ __name(function(txt) {\n displayMode = txt;\n}, \"setDisplayMode\");\nvar getDisplayMode = /* @__PURE__ */ __name(function() {\n return displayMode;\n}, \"getDisplayMode\");\nvar getDateFormat = /* @__PURE__ */ __name(function() {\n return dateFormat;\n}, \"getDateFormat\");\nvar setIncludes = /* @__PURE__ */ __name(function(txt) {\n includes = txt.toLowerCase().split(/[\\s,]+/);\n}, \"setIncludes\");\nvar getIncludes = /* @__PURE__ */ __name(function() {\n return includes;\n}, \"getIncludes\");\nvar setExcludes = /* @__PURE__ */ __name(function(txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/);\n}, \"setExcludes\");\nvar getExcludes = /* @__PURE__ */ __name(function() {\n return excludes;\n}, \"getExcludes\");\nvar getLinks = /* @__PURE__ */ __name(function() {\n return links;\n}, \"getLinks\");\nvar addSection = /* @__PURE__ */ __name(function(txt) {\n currentSection = txt;\n sections.push(txt);\n}, \"addSection\");\nvar getSections = /* @__PURE__ */ __name(function() {\n return sections;\n}, \"getSections\");\nvar getTasks = /* @__PURE__ */ __name(function() {\n let allItemsProcessed = compileTasks();\n const maxDepth = 10;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n tasks = rawTasks;\n return tasks;\n}, \"getTasks\");\nvar isInvalidDate = /* @__PURE__ */ __name(function(date, dateFormat2, excludes2, includes2) {\n const formattedDate = date.format(dateFormat2.trim());\n const dateOnly = date.format(\"YYYY-MM-DD\");\n if (includes2.includes(formattedDate) || includes2.includes(dateOnly)) {\n return false;\n }\n if (excludes2.includes(\"weekends\") && (date.isoWeekday() === WEEKEND_START_DAY[weekend] || date.isoWeekday() === WEEKEND_START_DAY[weekend] + 1)) {\n return true;\n }\n if (excludes2.includes(date.format(\"dddd\").toLowerCase())) {\n return true;\n }\n return excludes2.includes(formattedDate) || excludes2.includes(dateOnly);\n}, \"isInvalidDate\");\nvar setWeekday = /* @__PURE__ */ __name(function(txt) {\n weekday = txt;\n}, \"setWeekday\");\nvar getWeekday = /* @__PURE__ */ __name(function() {\n return weekday;\n}, \"getWeekday\");\nvar setWeekend = /* @__PURE__ */ __name(function(startDay) {\n weekend = startDay;\n}, \"setWeekend\");\nvar checkTaskDates = /* @__PURE__ */ __name(function(task, dateFormat2, excludes2, includes2) {\n if (!excludes2.length || task.manualEndTime) {\n return;\n }\n let startTime;\n if (task.startTime instanceof Date) {\n startTime = dayjs(task.startTime);\n } else {\n startTime = dayjs(task.startTime, dateFormat2, true);\n }\n startTime = startTime.add(1, \"d\");\n let originalEndTime;\n if (task.endTime instanceof Date) {\n originalEndTime = dayjs(task.endTime);\n } else {\n originalEndTime = dayjs(task.endTime, dateFormat2, true);\n }\n const [fixedEndTime, renderEndTime] = fixTaskDates(\n startTime,\n originalEndTime,\n dateFormat2,\n excludes2,\n includes2\n );\n task.endTime = fixedEndTime.toDate();\n task.renderEndTime = renderEndTime;\n}, \"checkTaskDates\");\nvar fixTaskDates = /* @__PURE__ */ __name(function(startTime, endTime, dateFormat2, excludes2, includes2) {\n let invalid = false;\n let renderEndTime = null;\n while (startTime <= endTime) {\n if (!invalid) {\n renderEndTime = endTime.toDate();\n }\n invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2);\n if (invalid) {\n endTime = endTime.add(1, \"d\");\n }\n startTime = startTime.add(1, \"d\");\n }\n return [endTime, renderEndTime];\n}, \"fixTaskDates\");\nvar getStartDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str) {\n str = str.trim();\n const isTimestampFormat = /* @__PURE__ */ __name((format) => {\n const trimmedFormat = format.trim();\n return trimmedFormat === \"x\" || trimmedFormat === \"X\";\n }, \"isTimestampFormat\");\n if (isTimestampFormat(dateFormat2) && /^\\d+$/.test(str)) {\n return new Date(Number(str));\n }\n const afterRePattern = /^after\\s+(?[\\d\\w- ]+)/;\n const afterStatement = afterRePattern.exec(str);\n if (afterStatement !== null) {\n let latestTask = null;\n for (const id of afterStatement.groups.ids.split(\" \")) {\n let task = findTaskById(id);\n if (task !== void 0 && (!latestTask || task.endTime > latestTask.endTime)) {\n latestTask = task;\n }\n }\n if (latestTask) {\n return latestTask.endTime;\n }\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n let mDate = dayjs(str, dateFormat2.trim(), true);\n if (mDate.isValid()) {\n return mDate.toDate();\n } else {\n log.debug(\"Invalid date:\" + str);\n log.debug(\"With date format:\" + dateFormat2.trim());\n const d = new Date(str);\n if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously\n // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304.\n // This can cause virtually infinite loops while rendering, so for the\n // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as\n // invalid.\n d.getFullYear() < -1e4 || d.getFullYear() > 1e4) {\n throw new Error(\"Invalid date:\" + str);\n }\n return d;\n }\n}, \"getStartDate\");\nvar parseDuration = /* @__PURE__ */ __name(function(str) {\n const statement = /^(\\d+(?:\\.\\d+)?)([Mdhmswy]|ms)$/.exec(str.trim());\n if (statement !== null) {\n return [Number.parseFloat(statement[1]), statement[2]];\n }\n return [NaN, \"ms\"];\n}, \"parseDuration\");\nvar getEndDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str, inclusive = false) {\n str = str.trim();\n const untilRePattern = /^until\\s+(?[\\d\\w- ]+)/;\n const untilStatement = untilRePattern.exec(str);\n if (untilStatement !== null) {\n let earliestTask = null;\n for (const id of untilStatement.groups.ids.split(\" \")) {\n let task = findTaskById(id);\n if (task !== void 0 && (!earliestTask || task.startTime < earliestTask.startTime)) {\n earliestTask = task;\n }\n }\n if (earliestTask) {\n return earliestTask.startTime;\n }\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n let parsedDate = dayjs(str, dateFormat2.trim(), true);\n if (parsedDate.isValid()) {\n if (inclusive) {\n parsedDate = parsedDate.add(1, \"d\");\n }\n return parsedDate.toDate();\n }\n let endTime = dayjs(prevTime);\n const [durationValue, durationUnit] = parseDuration(str);\n if (!Number.isNaN(durationValue)) {\n const newEndTime = endTime.add(durationValue, durationUnit);\n if (newEndTime.isValid()) {\n endTime = newEndTime;\n }\n }\n return endTime.toDate();\n}, \"getEndDate\");\nvar taskCnt = 0;\nvar parseId = /* @__PURE__ */ __name(function(idStr) {\n if (idStr === void 0) {\n taskCnt = taskCnt + 1;\n return \"task\" + taskCnt;\n }\n return idStr;\n}, \"parseId\");\nvar compileData = /* @__PURE__ */ __name(function(prevTask, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n let endTimeData = \"\";\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = prevTask.endTime;\n endTimeData = data[0];\n break;\n case 2:\n task.id = parseId();\n task.startTime = getStartDate(void 0, dateFormat, data[0]);\n endTimeData = data[1];\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = getStartDate(void 0, dateFormat, data[1]);\n endTimeData = data[2];\n break;\n default:\n }\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n task.manualEndTime = dayjs(endTimeData, \"YYYY-MM-DD\", true).isValid();\n checkTaskDates(task, dateFormat, excludes, includes);\n }\n return task;\n}, \"compileData\");\nvar parseData = /* @__PURE__ */ __name(function(prevTaskId, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = {\n type: \"prevTaskEnd\",\n id: prevTaskId\n };\n task.endTime = {\n data: data[0]\n };\n break;\n case 2:\n task.id = parseId();\n task.startTime = {\n type: \"getStartDate\",\n startData: data[0]\n };\n task.endTime = {\n data: data[1]\n };\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = {\n type: \"getStartDate\",\n startData: data[1]\n };\n task.endTime = {\n data: data[2]\n };\n break;\n default:\n }\n return task;\n}, \"parseData\");\nvar lastTask;\nvar lastTaskID;\nvar rawTasks = [];\nvar taskDb = {};\nvar addTask = /* @__PURE__ */ __name(function(descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data },\n task: descr,\n classes: []\n };\n const taskInfo = parseData(lastTaskID, data);\n rawTask.raw.startTime = taskInfo.startTime;\n rawTask.raw.endTime = taskInfo.endTime;\n rawTask.id = taskInfo.id;\n rawTask.prevTaskId = lastTaskID;\n rawTask.active = taskInfo.active;\n rawTask.done = taskInfo.done;\n rawTask.crit = taskInfo.crit;\n rawTask.milestone = taskInfo.milestone;\n rawTask.vert = taskInfo.vert;\n rawTask.order = lastOrder;\n lastOrder++;\n const pos = rawTasks.push(rawTask);\n lastTaskID = rawTask.id;\n taskDb[rawTask.id] = pos - 1;\n}, \"addTask\");\nvar findTaskById = /* @__PURE__ */ __name(function(id) {\n const pos = taskDb[id];\n return rawTasks[pos];\n}, \"findTaskById\");\nvar addTaskOrg = /* @__PURE__ */ __name(function(descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n const taskInfo = compileData(lastTask, data);\n newTask.startTime = taskInfo.startTime;\n newTask.endTime = taskInfo.endTime;\n newTask.id = taskInfo.id;\n newTask.active = taskInfo.active;\n newTask.done = taskInfo.done;\n newTask.crit = taskInfo.crit;\n newTask.milestone = taskInfo.milestone;\n newTask.vert = taskInfo.vert;\n lastTask = newTask;\n tasks.push(newTask);\n}, \"addTaskOrg\");\nvar compileTasks = /* @__PURE__ */ __name(function() {\n const compileTask = /* @__PURE__ */ __name(function(pos) {\n const task = rawTasks[pos];\n let startTime = \"\";\n switch (rawTasks[pos].raw.startTime.type) {\n case \"prevTaskEnd\": {\n const prevTask = findTaskById(task.prevTaskId);\n task.startTime = prevTask.endTime;\n break;\n }\n case \"getStartDate\":\n startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData);\n if (startTime) {\n rawTasks[pos].startTime = startTime;\n }\n break;\n }\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(\n rawTasks[pos].startTime,\n dateFormat,\n rawTasks[pos].raw.endTime.data,\n inclusiveEndDates\n );\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true;\n rawTasks[pos].manualEndTime = dayjs(\n rawTasks[pos].raw.endTime.data,\n \"YYYY-MM-DD\",\n true\n ).isValid();\n checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n }\n }\n return rawTasks[pos].processed;\n }, \"compileTask\");\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n}, \"compileTasks\");\nvar setLink = /* @__PURE__ */ __name(function(ids, _linkStr) {\n let linkStr = _linkStr;\n if (getConfig().securityLevel !== \"loose\") {\n linkStr = sanitizeUrl(_linkStr);\n }\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n window.open(linkStr, \"_self\");\n });\n links.set(id, linkStr);\n }\n });\n setClass(ids, \"clickable\");\n}, \"setLink\");\nvar setClass = /* @__PURE__ */ __name(function(ids, className) {\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n rawTask.classes.push(className);\n }\n });\n}, \"setClass\");\nvar setClickFun = /* @__PURE__ */ __name(function(id, functionName, functionArgs) {\n if (getConfig().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n utils_default.runFunc(functionName, ...argList);\n });\n }\n}, \"setClickFun\");\nvar pushFun = /* @__PURE__ */ __name(function(id, callbackFunction) {\n funs.push(\n function() {\n const elem = document.querySelector(`[id=\"${id}\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n },\n function() {\n const elem = document.querySelector(`[id=\"${id}-text\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n }\n );\n}, \"pushFun\");\nvar setClickEvent = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, \"clickable\");\n}, \"setClickEvent\");\nvar bindFunctions = /* @__PURE__ */ __name(function(element) {\n funs.forEach(function(fun) {\n fun(element);\n });\n}, \"bindFunctions\");\nvar ganttDb_default = {\n getConfig: /* @__PURE__ */ __name(() => getConfig().gantt, \"getConfig\"),\n clear: clear2,\n setDateFormat,\n getDateFormat,\n enableInclusiveEndDates,\n endDatesAreInclusive,\n enableTopAxis,\n topAxisEnabled,\n setAxisFormat,\n getAxisFormat,\n setTickInterval,\n getTickInterval,\n setTodayMarker,\n getTodayMarker,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n setDisplayMode,\n getDisplayMode,\n setAccDescription,\n getAccDescription,\n addSection,\n getSections,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setIncludes,\n getIncludes,\n setExcludes,\n getExcludes,\n setClickEvent,\n setLink,\n getLinks,\n bindFunctions,\n parseDuration,\n isInvalidDate,\n setWeekday,\n getWeekday,\n setWeekend\n};\nfunction getTaskTags(data, task, tags2) {\n let matchFound = true;\n while (matchFound) {\n matchFound = false;\n tags2.forEach(function(t) {\n const pattern = \"^\\\\s*\" + t + \"\\\\s*$\";\n const regex = new RegExp(pattern);\n if (data[0].match(regex)) {\n task[t] = true;\n data.shift(1);\n matchFound = true;\n }\n });\n }\n}\n__name(getTaskTags, \"getTaskTags\");\n\n// src/diagrams/gantt/ganttRenderer.js\nimport dayjs2 from \"dayjs\";\nimport dayjsDuration from \"dayjs/plugin/duration.js\";\nimport {\n select,\n scaleTime,\n min,\n max,\n scaleLinear,\n interpolateHcl,\n axisBottom,\n axisTop,\n timeFormat,\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeMonday,\n timeTuesday,\n timeWednesday,\n timeThursday,\n timeFriday,\n timeSaturday,\n timeSunday,\n timeMonth\n} from \"d3\";\ndayjs2.extend(dayjsDuration);\nvar setConf = /* @__PURE__ */ __name(function() {\n log.debug(\"Something is calling, setConf, remove the call\");\n}, \"setConf\");\nvar mapWeekdayToTimeFunction = {\n monday: timeMonday,\n tuesday: timeTuesday,\n wednesday: timeWednesday,\n thursday: timeThursday,\n friday: timeFriday,\n saturday: timeSaturday,\n sunday: timeSunday\n};\nvar getMaxIntersections = /* @__PURE__ */ __name((tasks2, orderOffset) => {\n let timeline = [...tasks2].map(() => -Infinity);\n let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order);\n let maxIntersections = 0;\n for (const element of sorted) {\n for (let j = 0; j < timeline.length; j++) {\n if (element.startTime >= timeline[j]) {\n timeline[j] = element.endTime;\n element.order = j + orderOffset;\n if (j > maxIntersections) {\n maxIntersections = j;\n }\n break;\n }\n }\n }\n return maxIntersections;\n}, \"getMaxIntersections\");\nvar w;\nvar MAX_TICK_COUNT = 1e4;\nvar draw = /* @__PURE__ */ __name(function(text, id, version, diagObj) {\n const conf = getConfig().gantt;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const elem = doc.getElementById(id);\n w = elem.parentElement.offsetWidth;\n if (w === void 0) {\n w = 1200;\n }\n if (conf.useWidth !== void 0) {\n w = conf.useWidth;\n }\n const taskArray = diagObj.db.getTasks();\n let categories = [];\n for (const element of taskArray) {\n categories.push(element.type);\n }\n categories = checkUnique(categories);\n const categoryHeights = {};\n let h = 2 * conf.topPadding;\n if (diagObj.db.getDisplayMode() === \"compact\" || conf.displayMode === \"compact\") {\n const categoryElements = {};\n for (const element of taskArray) {\n if (categoryElements[element.section] === void 0) {\n categoryElements[element.section] = [element];\n } else {\n categoryElements[element.section].push(element);\n }\n }\n let intersections = 0;\n for (const category of Object.keys(categoryElements)) {\n const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1;\n intersections += categoryHeight;\n h += categoryHeight * (conf.barHeight + conf.barGap);\n categoryHeights[category] = categoryHeight;\n }\n } else {\n h += taskArray.length * (conf.barHeight + conf.barGap);\n for (const category of categories) {\n categoryHeights[category] = taskArray.filter((task) => task.type === category).length;\n }\n }\n elem.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n const svg = root.select(`[id=\"${id}\"]`);\n const timeScale = scaleTime().domain([\n min(taskArray, function(d) {\n return d.startTime;\n }),\n max(taskArray, function(d) {\n return d.endTime;\n })\n ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n function taskCompare(a, b) {\n const taskA = a.startTime;\n const taskB = b.startTime;\n let result = 0;\n if (taskA > taskB) {\n result = 1;\n } else if (taskA < taskB) {\n result = -1;\n }\n return result;\n }\n __name(taskCompare, \"taskCompare\");\n taskArray.sort(taskCompare);\n makeGantt(taskArray, w, h);\n configureSvgSize(svg, h, w, conf.useMaxWidth);\n svg.append(\"text\").text(diagObj.db.getDiagramTitle()).attr(\"x\", w / 2).attr(\"y\", conf.titleTopMargin).attr(\"class\", \"titleText\");\n function makeGantt(tasks2, pageWidth, pageHeight) {\n const barHeight = conf.barHeight;\n const gap = barHeight + conf.barGap;\n const topPadding = conf.topPadding;\n const leftPadding = conf.leftPadding;\n const colorScale = scaleLinear().domain([0, categories.length]).range([\"#00B9FA\", \"#F95002\"]).interpolate(interpolateHcl);\n drawExcludeDays(\n gap,\n topPadding,\n leftPadding,\n pageWidth,\n pageHeight,\n tasks2,\n diagObj.db.getExcludes(),\n diagObj.db.getIncludes()\n );\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);\n drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n }\n __name(makeGantt, \"makeGantt\");\n function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) {\n theArray.sort((a, b) => a.vert === b.vert ? 0 : a.vert ? 1 : -1);\n const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))];\n const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2));\n svg.append(\"g\").selectAll(\"rect\").data(uniqueTasks).enter().append(\"rect\").attr(\"x\", 0).attr(\"y\", function(d, i) {\n i = d.order;\n return i * theGap + theTopPad - 2;\n }).attr(\"width\", function() {\n return w2 - conf.rightPadding / 2;\n }).attr(\"height\", theGap).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n return \"section section\" + i % conf.numberSectionStyles;\n }\n }\n return \"section section0\";\n }).enter();\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(theArray).enter();\n const links2 = diagObj.db.getLinks();\n rectangles.append(\"rect\").attr(\"id\", function(d) {\n return d.id;\n }).attr(\"rx\", 3).attr(\"ry\", 3).attr(\"x\", function(d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n }\n return timeScale(d.startTime) + theSidePad;\n }).attr(\"y\", function(d, i) {\n i = d.order;\n if (d.vert) {\n return conf.gridLineStartPadding;\n }\n return i * theGap + theTopPad;\n }).attr(\"width\", function(d) {\n if (d.milestone) {\n return theBarHeight;\n }\n if (d.vert) {\n return 0.08 * theBarHeight;\n }\n return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n }).attr(\"height\", function(d) {\n if (d.vert) {\n return taskArray.length * (conf.barHeight + conf.barGap) + conf.barHeight * 2;\n }\n return theBarHeight;\n }).attr(\"transform-origin\", function(d, i) {\n i = d.order;\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + \"px \" + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + \"px\";\n }).attr(\"class\", function(d) {\n const res = \"task\";\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskClass = \"\";\n if (d.active) {\n if (d.crit) {\n taskClass += \" activeCrit\";\n } else {\n taskClass = \" active\";\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = \" doneCrit\";\n } else {\n taskClass = \" done\";\n }\n } else {\n if (d.crit) {\n taskClass += \" crit\";\n }\n }\n if (taskClass.length === 0) {\n taskClass = \" task\";\n }\n if (d.milestone) {\n taskClass = \" milestone \" + taskClass;\n }\n if (d.vert) {\n taskClass = \" vert \" + taskClass;\n }\n taskClass += secNum;\n taskClass += \" \" + classStr;\n return res + taskClass;\n });\n rectangles.append(\"text\").attr(\"id\", function(d) {\n return d.id + \"-text\";\n }).text(function(d) {\n return d.task;\n }).attr(\"font-size\", conf.fontSize).attr(\"x\", function(d) {\n let startX = timeScale(d.startTime);\n let endX = timeScale(d.renderEndTime || d.endTime);\n if (d.milestone) {\n startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n endX = startX + theBarHeight;\n }\n if (d.vert) {\n return timeScale(d.startTime) + theSidePad;\n }\n const textWidth = this.getBBox().width;\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return startX + theSidePad - 5;\n } else {\n return endX + theSidePad + 5;\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad;\n }\n }).attr(\"y\", function(d, i) {\n if (d.vert) {\n return conf.gridLineStartPadding + taskArray.length * (conf.barHeight + conf.barGap) + 60;\n }\n i = d.order;\n return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n }).attr(\"text-height\", theBarHeight).attr(\"class\", function(d) {\n const startX = timeScale(d.startTime);\n let endX = timeScale(d.endTime);\n if (d.milestone) {\n endX = startX + theBarHeight;\n }\n const textWidth = this.getBBox().width;\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskType = \"\";\n if (d.active) {\n if (d.crit) {\n taskType = \"activeCritText\" + secNum;\n } else {\n taskType = \"activeText\" + secNum;\n }\n }\n if (d.done) {\n if (d.crit) {\n taskType = taskType + \" doneCritText\" + secNum;\n } else {\n taskType = taskType + \" doneText\" + secNum;\n }\n } else {\n if (d.crit) {\n taskType = taskType + \" critText\" + secNum;\n }\n }\n if (d.milestone) {\n taskType += \" milestoneText\";\n }\n if (d.vert) {\n taskType += \" vertText\";\n }\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return classStr + \" taskTextOutsideLeft taskTextOutside\" + secNum + \" \" + taskType;\n } else {\n return classStr + \" taskTextOutsideRight taskTextOutside\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n } else {\n return classStr + \" taskText taskText\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n });\n const securityLevel2 = getConfig().securityLevel;\n if (securityLevel2 === \"sandbox\") {\n let sandboxElement2;\n sandboxElement2 = select(\"#i\" + id);\n const doc2 = sandboxElement2.nodes()[0].contentDocument;\n rectangles.filter(function(d) {\n return links2.has(d.id);\n }).each(function(o) {\n var taskRect = doc2.querySelector(\"#\" + o.id);\n var taskText = doc2.querySelector(\"#\" + o.id + \"-text\");\n const oldParent = taskRect.parentNode;\n var Link = doc2.createElement(\"a\");\n Link.setAttribute(\"xlink:href\", links2.get(o.id));\n Link.setAttribute(\"target\", \"_top\");\n oldParent.appendChild(Link);\n Link.appendChild(taskRect);\n Link.appendChild(taskText);\n });\n }\n }\n __name(drawRects, \"drawRects\");\n function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) {\n if (excludes2.length === 0 && includes2.length === 0) {\n return;\n }\n let minTime;\n let maxTime;\n for (const { startTime, endTime } of tasks2) {\n if (minTime === void 0 || startTime < minTime) {\n minTime = startTime;\n }\n if (maxTime === void 0 || endTime > maxTime) {\n maxTime = endTime;\n }\n }\n if (!minTime || !maxTime) {\n return;\n }\n if (dayjs2(maxTime).diff(dayjs2(minTime), \"year\") > 5) {\n log.warn(\n \"The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.\"\n );\n return;\n }\n const dateFormat2 = diagObj.db.getDateFormat();\n const excludeRanges = [];\n let range = null;\n let d = dayjs2(minTime);\n while (d.valueOf() <= maxTime) {\n if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) {\n if (!range) {\n range = {\n start: d,\n end: d\n };\n } else {\n range.end = d;\n }\n } else {\n if (range) {\n excludeRanges.push(range);\n range = null;\n }\n }\n d = d.add(1, \"d\");\n }\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(excludeRanges).enter();\n rectangles.append(\"rect\").attr(\"id\", (d2) => \"exclude-\" + d2.start.format(\"YYYY-MM-DD\")).attr(\"x\", (d2) => timeScale(d2.start.startOf(\"day\")) + theSidePad).attr(\"y\", conf.gridLineStartPadding).attr(\"width\", (d2) => timeScale(d2.end.endOf(\"day\")) - timeScale(d2.start.startOf(\"day\"))).attr(\"height\", h2 - theTopPad - conf.gridLineStartPadding).attr(\"transform-origin\", function(d2, i) {\n return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + \"px \" + (i * theGap + 0.5 * h2).toString() + \"px\";\n }).attr(\"class\", \"exclude-range\");\n }\n __name(drawExcludeDays, \"drawExcludeDays\");\n function getEstimatedTickCount(minTime, maxTime, every, interval) {\n if (every <= 0 || minTime > maxTime) {\n return Infinity;\n }\n const timeDiffMs = maxTime - minTime;\n const intervalMs = dayjs2.duration({ [interval ?? \"day\"]: every }).asMilliseconds();\n if (intervalMs <= 0) {\n return Infinity;\n }\n return Math.ceil(timeDiffMs / intervalMs);\n }\n __name(getEstimatedTickCount, \"getEstimatedTickCount\");\n function makeGrid(theSidePad, theTopPad, w2, h2) {\n const dateFormat2 = diagObj.db.getDateFormat();\n const userAxisFormat = diagObj.db.getAxisFormat();\n let axisFormat2;\n if (userAxisFormat) {\n axisFormat2 = userAxisFormat;\n } else if (dateFormat2 === \"D\") {\n axisFormat2 = \"%d\";\n } else {\n axisFormat2 = conf.axisFormat ?? \"%Y-%m-%d\";\n }\n let bottomXAxis = axisBottom(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));\n const reTickInterval = /^([1-9]\\d*)(millisecond|second|minute|hour|day|week|month)$/;\n const resultTickInterval = reTickInterval.exec(\n diagObj.db.getTickInterval() || conf.tickInterval\n );\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n } else {\n const interval = resultTickInterval[2];\n const weekday2 = diagObj.db.getWeekday() || conf.weekday;\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n if (estimatedTicks > MAX_TICK_COUNT) {\n log.warn(\n `The tick interval \"${every}${interval}\" would generate ${estimatedTicks} ticks, which exceeds the maximum allowed (${MAX_TICK_COUNT}). This may indicate an invalid date or time range. Skipping custom tick interval.`\n );\n } else {\n switch (interval) {\n case \"millisecond\":\n bottomXAxis.ticks(timeMillisecond.every(every));\n break;\n case \"second\":\n bottomXAxis.ticks(timeSecond.every(every));\n break;\n case \"minute\":\n bottomXAxis.ticks(timeMinute.every(every));\n break;\n case \"hour\":\n bottomXAxis.ticks(timeHour.every(every));\n break;\n case \"day\":\n bottomXAxis.ticks(timeDay.every(every));\n break;\n case \"week\":\n bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every));\n break;\n case \"month\":\n bottomXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + (h2 - 50) + \")\").call(bottomXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10).attr(\"dy\", \"1em\");\n if (diagObj.db.topAxisEnabled() || conf.topAxis) {\n let topXAxis = axisTop(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n } else {\n const interval = resultTickInterval[2];\n const weekday2 = diagObj.db.getWeekday() || conf.weekday;\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n if (estimatedTicks <= MAX_TICK_COUNT) {\n switch (interval) {\n case \"millisecond\":\n topXAxis.ticks(timeMillisecond.every(every));\n break;\n case \"second\":\n topXAxis.ticks(timeSecond.every(every));\n break;\n case \"minute\":\n topXAxis.ticks(timeMinute.every(every));\n break;\n case \"hour\":\n topXAxis.ticks(timeHour.every(every));\n break;\n case \"day\":\n topXAxis.ticks(timeDay.every(every));\n break;\n case \"week\":\n topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every));\n break;\n case \"month\":\n topXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + theTopPad + \")\").call(topXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10);\n }\n }\n __name(makeGrid, \"makeGrid\");\n function vertLabels(theGap, theTopPad) {\n let prevGap = 0;\n const numOccurrences = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]);\n svg.append(\"g\").selectAll(\"text\").data(numOccurrences).enter().append(function(d) {\n const rows = d[0].split(common_default.lineBreakRegex);\n const dy = -(rows.length - 1) / 2;\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"dy\", dy + \"em\");\n for (const [j, row] of rows.entries()) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttribute(\"alignment-baseline\", \"central\");\n tspan.setAttribute(\"x\", \"10\");\n if (j > 0) {\n tspan.setAttribute(\"dy\", \"1em\");\n }\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }).attr(\"x\", 10).attr(\"y\", function(d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurrences[i - 1][1];\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad;\n }\n } else {\n return d[1] * theGap / 2 + theTopPad;\n }\n }).attr(\"font-size\", conf.sectionFontSize).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d[0] === category) {\n return \"sectionTitle sectionTitle\" + i % conf.numberSectionStyles;\n }\n }\n return \"sectionTitle\";\n });\n }\n __name(vertLabels, \"vertLabels\");\n function drawToday(theSidePad, theTopPad, w2, h2) {\n const todayMarker2 = diagObj.db.getTodayMarker();\n if (todayMarker2 === \"off\") {\n return;\n }\n const todayG = svg.append(\"g\").attr(\"class\", \"today\");\n const today = /* @__PURE__ */ new Date();\n const todayLine = todayG.append(\"line\");\n todayLine.attr(\"x1\", timeScale(today) + theSidePad).attr(\"x2\", timeScale(today) + theSidePad).attr(\"y1\", conf.titleTopMargin).attr(\"y2\", h2 - conf.titleTopMargin).attr(\"class\", \"today\");\n if (todayMarker2 !== \"\") {\n todayLine.attr(\"style\", todayMarker2.replace(/,/g, \";\"));\n }\n }\n __name(drawToday, \"drawToday\");\n function checkUnique(arr) {\n const hash = {};\n const result = [];\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n hash[arr[i]] = true;\n result.push(arr[i]);\n }\n }\n return result;\n }\n __name(checkUnique, \"checkUnique\");\n}, \"draw\");\nvar ganttRenderer_default = {\n setConf,\n draw\n};\n\n// src/diagrams/gantt/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .mermaid-main-font {\n font-family: ${options.fontFamily};\n }\n\n .exclude-range {\n fill: ${options.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${options.sectionBkgColor};\n }\n\n .section2 {\n fill: ${options.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${options.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${options.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${options.fontFamily};\n fill: ${options.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${options.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideRight {\n fill: ${options.taskTextDarkColor};\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideLeft {\n fill: ${options.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${options.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${options.taskBkgColor};\n stroke: ${options.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${options.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${options.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${options.activeTaskBkgColor};\n stroke: ${options.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${options.doneTaskBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .vert {\n stroke: ${options.vertLineColor};\n }\n\n .vertText {\n font-size: 15px;\n text-anchor: middle;\n fill: ${options.vertLineColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.titleColor || options.textColor};\n font-family: ${options.fontFamily};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/gantt/ganttDiagram.ts\nvar diagram = {\n parser: gantt_default,\n db: ganttDb_default,\n renderer: ganttRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["max","values","valueof","value","index","min","identity","x","top","right","bottom","left","epsilon","translateX","translateY","y","number","scale","d","center","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","format","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisTop","axisBottom","radians","degrees","K","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","o","Lab","Hcl","hcl2lab","Rgb","rgbConvert","r","rgb2lrgb","g","b","xyz2lab","z","lab","l","a","opacity","define","extend","Color","lab2xyz","lrgb2rgb","hclConvert","h","hcl","c","hue","start","end","colorHcl","color","t","interpolateHcl","nice","domain","interval","i0","i1","x0","x1","timeInterval","floori","offseti","count","field","date","d0","d1","step","stop","previous","test","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","timeMinute","utcMinute","timeHour","utcHour","timeDay","utcDay","unixDay","timeWeekday","i","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","utcMonth","timeYear","utcYear","ticker","year","month","week","day","hour","minute","tickIntervals","ticks","reverse","tickInterval","target","bisector","tickStep","timeTicks","timeTickInterval","localDate","utcDate","newDate","m","formatLocale","locale","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","newFormat","specifier","string","j","n","pad","pads","newParse","Z","parseSpecifier","parse","f","numberRe","percentRe","requoteRe","fill","width","sign","length","requote","s","names","name","dISO","dow","UTCdISO","timeFormat","defaultLocale","definition","calendar","continuous","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","copy","time","initRange","timeWeek","timeSecond","e","module","this","u","M","Y","v","D","w","L","$","parser","__name","o2","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","lex","token","symbol","state","action","yyval","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","match","indexed_rule","backup","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","Parser","gantt_default","dayjs","dayjsIsoWeek","dayjsCustomParseFormat","dayjsAdvancedFormat","WEEKEND_START_DAY","dateFormat","axisFormat","todayMarker","includes","excludes","links","sections","tasks","currentSection","displayMode","tags","funs","inclusiveEndDates","topAxis","weekday","weekend","lastOrder","clear2","taskCnt","lastTask","lastTaskID","rawTasks","clear","setAxisFormat","txt","getAxisFormat","setTickInterval","getTickInterval","setTodayMarker","getTodayMarker","setDateFormat","enableInclusiveEndDates","endDatesAreInclusive","enableTopAxis","topAxisEnabled","setDisplayMode","getDisplayMode","getDateFormat","setIncludes","getIncludes","setExcludes","getExcludes","getLinks","addSection","getSections","getTasks","allItemsProcessed","compileTasks","maxDepth","iterationCount","isInvalidDate","dateFormat2","excludes2","includes2","formattedDate","dateOnly","setWeekday","getWeekday","setWeekend","startDay","checkTaskDates","task","startTime","originalEndTime","fixedEndTime","renderEndTime","fixTaskDates","endTime","invalid","getStartDate","prevTime","trimmedFormat","afterStatement","latestTask","id","findTaskById","today","mDate","log","parseDuration","statement","getEndDate","inclusive","untilStatement","earliestTask","parsedDate","durationValue","durationUnit","newEndTime","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","taskDb","addTask","descr","rawTask","taskInfo","pos","addTaskOrg","newTask","compileTask","allProcessed","setLink","ids","_linkStr","linkStr","getConfig","sanitizeUrl","pushFun","setClass","className","setClickFun","functionName","functionArgs","argList","item","utils_default","callbackFunction","elem","setClickEvent","bindFunctions","element","fun","ganttDb_default","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","setAccDescription","getAccDescription","tags2","matchFound","pattern","regex","dayjs2","dayjsDuration","setConf","mapWeekdayToTimeFunction","getMaxIntersections","tasks2","orderOffset","timeline","sorted","maxIntersections","MAX_TICK_COUNT","draw","version","diagObj","conf","securityLevel","sandboxElement","select","root","doc","taskArray","categories","checkUnique","categoryHeights","categoryElements","intersections","category","categoryHeight","svg","timeScale","scaleTime","taskCompare","taskA","taskB","result","makeGantt","configureSvgSize","pageWidth","pageHeight","barHeight","gap","topPadding","leftPadding","colorScale","scaleLinear","drawExcludeDays","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","w2","uniqueTasks","id2","rectangles","links2","res","classStr","secNum","taskClass","startX","endX","textWidth","taskType","sandboxElement2","doc2","taskRect","taskText","oldParent","Link","h2","minTime","maxTime","excludeRanges","d2","getEstimatedTickCount","every","timeDiffMs","intervalMs","userAxisFormat","axisFormat2","bottomXAxis","resultTickInterval","weekday2","estimatedTicks","timeMillisecond","topXAxis","prevGap","numOccurrences","rows","common_default","dy","svgLabel","row","tspan","todayMarker2","todayG","todayLine","arr","ganttRenderer_default","getStyles","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]} \ No newline at end of file +{"version":3,"file":"ganttDiagram-JELNMOA3-OdbUz5AC.js","sources":["../../../../../webui/node_modules/d3-array/src/max.js","../../../../../webui/node_modules/d3-array/src/min.js","../../../../../webui/node_modules/d3-axis/src/identity.js","../../../../../webui/node_modules/d3-axis/src/axis.js","../../../../../webui/node_modules/d3-color/src/math.js","../../../../../webui/node_modules/d3-color/src/lab.js","../../../../../webui/node_modules/d3-interpolate/src/hcl.js","../../../../../webui/node_modules/d3-scale/src/nice.js","../../../../../webui/node_modules/d3-time/src/interval.js","../../../../../webui/node_modules/d3-time/src/millisecond.js","../../../../../webui/node_modules/d3-time/src/duration.js","../../../../../webui/node_modules/d3-time/src/second.js","../../../../../webui/node_modules/d3-time/src/minute.js","../../../../../webui/node_modules/d3-time/src/hour.js","../../../../../webui/node_modules/d3-time/src/day.js","../../../../../webui/node_modules/d3-time/src/week.js","../../../../../webui/node_modules/d3-time/src/month.js","../../../../../webui/node_modules/d3-time/src/year.js","../../../../../webui/node_modules/d3-time/src/ticks.js","../../../../../webui/node_modules/d3-time-format/src/locale.js","../../../../../webui/node_modules/d3-time-format/src/defaultLocale.js","../../../../../webui/node_modules/d3-scale/src/time.js","../../../../../webui/node_modules/dayjs/plugin/isoWeek.js","../../../../../webui/node_modules/dayjs/plugin/customParseFormat.js","../../../../../webui/node_modules/dayjs/plugin/advancedFormat.js","../../../../../webui/node_modules/dayjs/plugin/duration.js","../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-JELNMOA3.mjs"],"sourcesContent":["export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","import {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n configureSvgSize,\n getAccDescription,\n getAccTitle,\n getConfig2 as getConfig,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/gantt/parser/gantt.jison\nvar parser = (function() {\n var o = /* @__PURE__ */ __name(function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;\n return o2;\n }, \"o\"), $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 36, 38, 40], $V1 = [1, 26], $V2 = [1, 27], $V3 = [1, 28], $V4 = [1, 29], $V5 = [1, 30], $V6 = [1, 31], $V7 = [1, 32], $V8 = [1, 33], $V9 = [1, 34], $Va = [1, 9], $Vb = [1, 10], $Vc = [1, 11], $Vd = [1, 12], $Ve = [1, 13], $Vf = [1, 14], $Vg = [1, 15], $Vh = [1, 16], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 23], $Vn = [1, 25], $Vo = [1, 35];\n var parser2 = {\n trace: /* @__PURE__ */ __name(function trace() {\n }, \"trace\"),\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"gantt\": 4, \"document\": 5, \"EOF\": 6, \"line\": 7, \"SPACE\": 8, \"statement\": 9, \"NL\": 10, \"weekday\": 11, \"weekday_monday\": 12, \"weekday_tuesday\": 13, \"weekday_wednesday\": 14, \"weekday_thursday\": 15, \"weekday_friday\": 16, \"weekday_saturday\": 17, \"weekday_sunday\": 18, \"weekend\": 19, \"weekend_friday\": 20, \"weekend_saturday\": 21, \"dateFormat\": 22, \"inclusiveEndDates\": 23, \"topAxis\": 24, \"axisFormat\": 25, \"tickInterval\": 26, \"excludes\": 27, \"includes\": 28, \"todayMarker\": 29, \"title\": 30, \"acc_title\": 31, \"acc_title_value\": 32, \"acc_descr\": 33, \"acc_descr_value\": 34, \"acc_descr_multiline_value\": 35, \"section\": 36, \"clickStatement\": 37, \"taskTxt\": 38, \"taskData\": 39, \"click\": 40, \"callbackname\": 41, \"callbackargs\": 42, \"href\": 43, \"clickStatementDebug\": 44, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"gantt\", 6: \"EOF\", 8: \"SPACE\", 10: \"NL\", 12: \"weekday_monday\", 13: \"weekday_tuesday\", 14: \"weekday_wednesday\", 15: \"weekday_thursday\", 16: \"weekday_friday\", 17: \"weekday_saturday\", 18: \"weekday_sunday\", 20: \"weekend_friday\", 21: \"weekend_saturday\", 22: \"dateFormat\", 23: \"inclusiveEndDates\", 24: \"topAxis\", 25: \"axisFormat\", 26: \"tickInterval\", 27: \"excludes\", 28: \"includes\", 29: \"todayMarker\", 30: \"title\", 31: \"acc_title\", 32: \"acc_title_value\", 33: \"acc_descr\", 34: \"acc_descr_value\", 35: \"acc_descr_multiline_value\", 36: \"section\", 38: \"taskTxt\", 39: \"taskData\", 40: \"click\", 41: \"callbackname\", 42: \"callbackargs\", 43: \"href\" },\n productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [19, 1], [19, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [37, 2], [37, 3], [37, 3], [37, 4], [37, 3], [37, 4], [37, 2], [44, 2], [44, 3], [44, 3], [44, 4], [44, 3], [44, 4], [44, 2]],\n performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = [];\n break;\n case 3:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n case 7:\n this.$ = [];\n break;\n case 8:\n yy.setWeekday(\"monday\");\n break;\n case 9:\n yy.setWeekday(\"tuesday\");\n break;\n case 10:\n yy.setWeekday(\"wednesday\");\n break;\n case 11:\n yy.setWeekday(\"thursday\");\n break;\n case 12:\n yy.setWeekday(\"friday\");\n break;\n case 13:\n yy.setWeekday(\"saturday\");\n break;\n case 14:\n yy.setWeekday(\"sunday\");\n break;\n case 15:\n yy.setWeekend(\"friday\");\n break;\n case 16:\n yy.setWeekend(\"saturday\");\n break;\n case 17:\n yy.setDateFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 18:\n yy.enableInclusiveEndDates();\n this.$ = $$[$0].substr(18);\n break;\n case 19:\n yy.TopAxis();\n this.$ = $$[$0].substr(8);\n break;\n case 20:\n yy.setAxisFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 21:\n yy.setTickInterval($$[$0].substr(13));\n this.$ = $$[$0].substr(13);\n break;\n case 22:\n yy.setExcludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 23:\n yy.setIncludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 24:\n yy.setTodayMarker($$[$0].substr(12));\n this.$ = $$[$0].substr(12);\n break;\n case 27:\n yy.setDiagramTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n case 28:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 29:\n case 30:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 31:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 33:\n yy.addTask($$[$0 - 1], $$[$0]);\n this.$ = \"task\";\n break;\n case 34:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0], null);\n break;\n case 35:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 36:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null);\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 37:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setLink($$[$0 - 3], $$[$0]);\n break;\n case 38:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0], null);\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n break;\n case 39:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]);\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n break;\n case 40:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 41:\n case 47:\n this.$ = $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 42:\n case 43:\n case 45:\n this.$ = $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 44:\n case 46:\n this.$ = $$[$0 - 3] + \" \" + $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n }\n }, \"anonymous\"),\n table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 36, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 17]), o($V0, [2, 18]), o($V0, [2, 19]), o($V0, [2, 20]), o($V0, [2, 21]), o($V0, [2, 22]), o($V0, [2, 23]), o($V0, [2, 24]), o($V0, [2, 25]), o($V0, [2, 26]), o($V0, [2, 27]), { 32: [1, 37] }, { 34: [1, 38] }, o($V0, [2, 30]), o($V0, [2, 31]), o($V0, [2, 32]), { 39: [1, 39] }, o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), o($V0, [2, 15]), o($V0, [2, 16]), { 41: [1, 40], 43: [1, 41] }, o($V0, [2, 4]), o($V0, [2, 28]), o($V0, [2, 29]), o($V0, [2, 33]), o($V0, [2, 34], { 42: [1, 42], 43: [1, 43] }), o($V0, [2, 40], { 41: [1, 44] }), o($V0, [2, 35], { 43: [1, 45] }), o($V0, [2, 36]), o($V0, [2, 38], { 42: [1, 46] }), o($V0, [2, 37]), o($V0, [2, 39])],\n defaultActions: {},\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n }, \"parseError\"),\n parse: /* @__PURE__ */ __name(function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n __name(popStack, \"popStack\");\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n __name(lex, \"lex\");\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }, \"parse\")\n };\n var lexer = /* @__PURE__ */ (function() {\n var lexer2 = {\n EOF: 1,\n parseError: /* @__PURE__ */ __name(function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n }, \"parseError\"),\n // resets the lexer, sets new input\n setInput: /* @__PURE__ */ __name(function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n }, \"setInput\"),\n // consumes and returns one char from the input\n input: /* @__PURE__ */ __name(function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n }, \"input\"),\n // unshifts one char (or a string) into the input\n unput: /* @__PURE__ */ __name(function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n }, \"unput\"),\n // When called from action, caches matched text and appends it on next action\n more: /* @__PURE__ */ __name(function() {\n this._more = true;\n return this;\n }, \"more\"),\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: /* @__PURE__ */ __name(function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n }, \"reject\"),\n // retain first n characters of the match\n less: /* @__PURE__ */ __name(function(n) {\n this.unput(this.match.slice(n));\n }, \"less\"),\n // displays already matched input, i.e. for error messages\n pastInput: /* @__PURE__ */ __name(function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n }, \"pastInput\"),\n // displays upcoming input, i.e. for error messages\n upcomingInput: /* @__PURE__ */ __name(function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n }, \"upcomingInput\"),\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: /* @__PURE__ */ __name(function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n }, \"showPosition\"),\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: /* @__PURE__ */ __name(function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n }, \"test_match\"),\n // return next match in input\n next: /* @__PURE__ */ __name(function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n }, \"next\"),\n // return next match that has a token\n lex: /* @__PURE__ */ __name(function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n }, \"lex\"),\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: /* @__PURE__ */ __name(function begin(condition) {\n this.conditionStack.push(condition);\n }, \"begin\"),\n // pop the previously active lexer condition state off the condition stack\n popState: /* @__PURE__ */ __name(function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n }, \"popState\"),\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: /* @__PURE__ */ __name(function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n }, \"_currentRules\"),\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: /* @__PURE__ */ __name(function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n }, \"topState\"),\n // alias for begin(condition)\n pushState: /* @__PURE__ */ __name(function pushState(condition) {\n this.begin(condition);\n }, \"pushState\"),\n // return the number of states currently on the stack\n stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {\n return this.conditionStack.length;\n }, \"stateStackSize\"),\n options: { \"case-insensitive\": true },\n performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return \"open_directive\";\n break;\n case 1:\n this.begin(\"acc_title\");\n return 31;\n break;\n case 2:\n this.popState();\n return \"acc_title_value\";\n break;\n case 3:\n this.begin(\"acc_descr\");\n return 33;\n break;\n case 4:\n this.popState();\n return \"acc_descr_value\";\n break;\n case 5:\n this.begin(\"acc_descr_multiline\");\n break;\n case 6:\n this.popState();\n break;\n case 7:\n return \"acc_descr_multiline_value\";\n break;\n case 8:\n break;\n case 9:\n break;\n case 10:\n break;\n case 11:\n return 10;\n break;\n case 12:\n break;\n case 13:\n break;\n case 14:\n this.begin(\"href\");\n break;\n case 15:\n this.popState();\n break;\n case 16:\n return 43;\n break;\n case 17:\n this.begin(\"callbackname\");\n break;\n case 18:\n this.popState();\n break;\n case 19:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 20:\n return 41;\n break;\n case 21:\n this.popState();\n break;\n case 22:\n return 42;\n break;\n case 23:\n this.begin(\"click\");\n break;\n case 24:\n this.popState();\n break;\n case 25:\n return 40;\n break;\n case 26:\n return 4;\n break;\n case 27:\n return 22;\n break;\n case 28:\n return 23;\n break;\n case 29:\n return 24;\n break;\n case 30:\n return 25;\n break;\n case 31:\n return 26;\n break;\n case 32:\n return 28;\n break;\n case 33:\n return 27;\n break;\n case 34:\n return 29;\n break;\n case 35:\n return 12;\n break;\n case 36:\n return 13;\n break;\n case 37:\n return 14;\n break;\n case 38:\n return 15;\n break;\n case 39:\n return 16;\n break;\n case 40:\n return 17;\n break;\n case 41:\n return 18;\n break;\n case 42:\n return 20;\n break;\n case 43:\n return 21;\n break;\n case 44:\n return \"date\";\n break;\n case 45:\n return 30;\n break;\n case 46:\n return \"accDescription\";\n break;\n case 47:\n return 36;\n break;\n case 48:\n return 38;\n break;\n case 49:\n return 39;\n break;\n case 50:\n return \":\";\n break;\n case 51:\n return 6;\n break;\n case 52:\n return \"INVALID\";\n break;\n }\n }, \"anonymous\"),\n rules: [/^(?:%%\\{)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%(?!\\{)*[^\\n]*)/i, /^(?:[^\\}]%%*[^\\n]*)/i, /^(?:%%*[^\\n]*[\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:%[^\\n]*)/i, /^(?:href[\\s]+[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:call[\\s]+)/i, /^(?:\\([\\s]*\\))/i, /^(?:\\()/i, /^(?:[^(]*)/i, /^(?:\\))/i, /^(?:[^)]*)/i, /^(?:click[\\s]+)/i, /^(?:[\\s\\n])/i, /^(?:[^\\s\\n]*)/i, /^(?:gantt\\b)/i, /^(?:dateFormat\\s[^#\\n;]+)/i, /^(?:inclusiveEndDates\\b)/i, /^(?:topAxis\\b)/i, /^(?:axisFormat\\s[^#\\n;]+)/i, /^(?:tickInterval\\s[^#\\n;]+)/i, /^(?:includes\\s[^#\\n;]+)/i, /^(?:excludes\\s[^#\\n;]+)/i, /^(?:todayMarker\\s[^\\n;]+)/i, /^(?:weekday\\s+monday\\b)/i, /^(?:weekday\\s+tuesday\\b)/i, /^(?:weekday\\s+wednesday\\b)/i, /^(?:weekday\\s+thursday\\b)/i, /^(?:weekday\\s+friday\\b)/i, /^(?:weekday\\s+saturday\\b)/i, /^(?:weekday\\s+sunday\\b)/i, /^(?:weekend\\s+friday\\b)/i, /^(?:weekend\\s+saturday\\b)/i, /^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i, /^(?:title\\s[^\\n]+)/i, /^(?:accDescription\\s[^#\\n;]+)/i, /^(?:section\\s[^\\n]+)/i, /^(?:[^:\\n]+)/i, /^(?::[^#\\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [6, 7], \"inclusive\": false }, \"acc_descr\": { \"rules\": [4], \"inclusive\": false }, \"acc_title\": { \"rules\": [2], \"inclusive\": false }, \"callbackargs\": { \"rules\": [21, 22], \"inclusive\": false }, \"callbackname\": { \"rules\": [18, 19, 20], \"inclusive\": false }, \"href\": { \"rules\": [15, 16], \"inclusive\": false }, \"click\": { \"rules\": [24, 25], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], \"inclusive\": true } }\n };\n return lexer2;\n })();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n __name(Parser, \"Parser\");\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n})();\nparser.parser = parser;\nvar gantt_default = parser;\n\n// src/diagrams/gantt/ganttDb.js\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport dayjs from \"dayjs\";\nimport dayjsIsoWeek from \"dayjs/plugin/isoWeek.js\";\nimport dayjsCustomParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport dayjsAdvancedFormat from \"dayjs/plugin/advancedFormat.js\";\ndayjs.extend(dayjsIsoWeek);\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsAdvancedFormat);\nvar WEEKEND_START_DAY = { friday: 5, saturday: 6 };\nvar dateFormat = \"\";\nvar axisFormat = \"\";\nvar tickInterval = void 0;\nvar todayMarker = \"\";\nvar includes = [];\nvar excludes = [];\nvar links = /* @__PURE__ */ new Map();\nvar sections = [];\nvar tasks = [];\nvar currentSection = \"\";\nvar displayMode = \"\";\nvar tags = [\"active\", \"done\", \"crit\", \"milestone\", \"vert\"];\nvar funs = [];\nvar inclusiveEndDates = false;\nvar topAxis = false;\nvar weekday = \"sunday\";\nvar weekend = \"saturday\";\nvar lastOrder = 0;\nvar clear2 = /* @__PURE__ */ __name(function() {\n sections = [];\n tasks = [];\n currentSection = \"\";\n funs = [];\n taskCnt = 0;\n lastTask = void 0;\n lastTaskID = void 0;\n rawTasks = [];\n dateFormat = \"\";\n axisFormat = \"\";\n displayMode = \"\";\n tickInterval = void 0;\n todayMarker = \"\";\n includes = [];\n excludes = [];\n inclusiveEndDates = false;\n topAxis = false;\n lastOrder = 0;\n links = /* @__PURE__ */ new Map();\n clear();\n weekday = \"sunday\";\n weekend = \"saturday\";\n}, \"clear\");\nvar setAxisFormat = /* @__PURE__ */ __name(function(txt) {\n axisFormat = txt;\n}, \"setAxisFormat\");\nvar getAxisFormat = /* @__PURE__ */ __name(function() {\n return axisFormat;\n}, \"getAxisFormat\");\nvar setTickInterval = /* @__PURE__ */ __name(function(txt) {\n tickInterval = txt;\n}, \"setTickInterval\");\nvar getTickInterval = /* @__PURE__ */ __name(function() {\n return tickInterval;\n}, \"getTickInterval\");\nvar setTodayMarker = /* @__PURE__ */ __name(function(txt) {\n todayMarker = txt;\n}, \"setTodayMarker\");\nvar getTodayMarker = /* @__PURE__ */ __name(function() {\n return todayMarker;\n}, \"getTodayMarker\");\nvar setDateFormat = /* @__PURE__ */ __name(function(txt) {\n dateFormat = txt;\n}, \"setDateFormat\");\nvar enableInclusiveEndDates = /* @__PURE__ */ __name(function() {\n inclusiveEndDates = true;\n}, \"enableInclusiveEndDates\");\nvar endDatesAreInclusive = /* @__PURE__ */ __name(function() {\n return inclusiveEndDates;\n}, \"endDatesAreInclusive\");\nvar enableTopAxis = /* @__PURE__ */ __name(function() {\n topAxis = true;\n}, \"enableTopAxis\");\nvar topAxisEnabled = /* @__PURE__ */ __name(function() {\n return topAxis;\n}, \"topAxisEnabled\");\nvar setDisplayMode = /* @__PURE__ */ __name(function(txt) {\n displayMode = txt;\n}, \"setDisplayMode\");\nvar getDisplayMode = /* @__PURE__ */ __name(function() {\n return displayMode;\n}, \"getDisplayMode\");\nvar getDateFormat = /* @__PURE__ */ __name(function() {\n return dateFormat;\n}, \"getDateFormat\");\nvar setIncludes = /* @__PURE__ */ __name(function(txt) {\n includes = txt.toLowerCase().split(/[\\s,]+/);\n}, \"setIncludes\");\nvar getIncludes = /* @__PURE__ */ __name(function() {\n return includes;\n}, \"getIncludes\");\nvar setExcludes = /* @__PURE__ */ __name(function(txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/);\n}, \"setExcludes\");\nvar getExcludes = /* @__PURE__ */ __name(function() {\n return excludes;\n}, \"getExcludes\");\nvar getLinks = /* @__PURE__ */ __name(function() {\n return links;\n}, \"getLinks\");\nvar addSection = /* @__PURE__ */ __name(function(txt) {\n currentSection = txt;\n sections.push(txt);\n}, \"addSection\");\nvar getSections = /* @__PURE__ */ __name(function() {\n return sections;\n}, \"getSections\");\nvar getTasks = /* @__PURE__ */ __name(function() {\n let allItemsProcessed = compileTasks();\n const maxDepth = 10;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n tasks = rawTasks;\n return tasks;\n}, \"getTasks\");\nvar isInvalidDate = /* @__PURE__ */ __name(function(date, dateFormat2, excludes2, includes2) {\n const formattedDate = date.format(dateFormat2.trim());\n const dateOnly = date.format(\"YYYY-MM-DD\");\n if (includes2.includes(formattedDate) || includes2.includes(dateOnly)) {\n return false;\n }\n if (excludes2.includes(\"weekends\") && (date.isoWeekday() === WEEKEND_START_DAY[weekend] || date.isoWeekday() === WEEKEND_START_DAY[weekend] + 1)) {\n return true;\n }\n if (excludes2.includes(date.format(\"dddd\").toLowerCase())) {\n return true;\n }\n return excludes2.includes(formattedDate) || excludes2.includes(dateOnly);\n}, \"isInvalidDate\");\nvar setWeekday = /* @__PURE__ */ __name(function(txt) {\n weekday = txt;\n}, \"setWeekday\");\nvar getWeekday = /* @__PURE__ */ __name(function() {\n return weekday;\n}, \"getWeekday\");\nvar setWeekend = /* @__PURE__ */ __name(function(startDay) {\n weekend = startDay;\n}, \"setWeekend\");\nvar checkTaskDates = /* @__PURE__ */ __name(function(task, dateFormat2, excludes2, includes2) {\n if (!excludes2.length || task.manualEndTime) {\n return;\n }\n let startTime;\n if (task.startTime instanceof Date) {\n startTime = dayjs(task.startTime);\n } else {\n startTime = dayjs(task.startTime, dateFormat2, true);\n }\n startTime = startTime.add(1, \"d\");\n let originalEndTime;\n if (task.endTime instanceof Date) {\n originalEndTime = dayjs(task.endTime);\n } else {\n originalEndTime = dayjs(task.endTime, dateFormat2, true);\n }\n const [fixedEndTime, renderEndTime] = fixTaskDates(\n startTime,\n originalEndTime,\n dateFormat2,\n excludes2,\n includes2\n );\n task.endTime = fixedEndTime.toDate();\n task.renderEndTime = renderEndTime;\n}, \"checkTaskDates\");\nvar fixTaskDates = /* @__PURE__ */ __name(function(startTime, endTime, dateFormat2, excludes2, includes2) {\n let invalid = false;\n let renderEndTime = null;\n while (startTime <= endTime) {\n if (!invalid) {\n renderEndTime = endTime.toDate();\n }\n invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2);\n if (invalid) {\n endTime = endTime.add(1, \"d\");\n }\n startTime = startTime.add(1, \"d\");\n }\n return [endTime, renderEndTime];\n}, \"fixTaskDates\");\nvar getStartDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str) {\n str = str.trim();\n const isTimestampFormat = /* @__PURE__ */ __name((format) => {\n const trimmedFormat = format.trim();\n return trimmedFormat === \"x\" || trimmedFormat === \"X\";\n }, \"isTimestampFormat\");\n if (isTimestampFormat(dateFormat2) && /^\\d+$/.test(str)) {\n return new Date(Number(str));\n }\n const afterRePattern = /^after\\s+(?[\\d\\w- ]+)/;\n const afterStatement = afterRePattern.exec(str);\n if (afterStatement !== null) {\n let latestTask = null;\n for (const id of afterStatement.groups.ids.split(\" \")) {\n let task = findTaskById(id);\n if (task !== void 0 && (!latestTask || task.endTime > latestTask.endTime)) {\n latestTask = task;\n }\n }\n if (latestTask) {\n return latestTask.endTime;\n }\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n let mDate = dayjs(str, dateFormat2.trim(), true);\n if (mDate.isValid()) {\n return mDate.toDate();\n } else {\n log.debug(\"Invalid date:\" + str);\n log.debug(\"With date format:\" + dateFormat2.trim());\n const d = new Date(str);\n if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously\n // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304.\n // This can cause virtually infinite loops while rendering, so for the\n // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as\n // invalid.\n d.getFullYear() < -1e4 || d.getFullYear() > 1e4) {\n throw new Error(\"Invalid date:\" + str);\n }\n return d;\n }\n}, \"getStartDate\");\nvar parseDuration = /* @__PURE__ */ __name(function(str) {\n const statement = /^(\\d+(?:\\.\\d+)?)([Mdhmswy]|ms)$/.exec(str.trim());\n if (statement !== null) {\n return [Number.parseFloat(statement[1]), statement[2]];\n }\n return [NaN, \"ms\"];\n}, \"parseDuration\");\nvar getEndDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str, inclusive = false) {\n str = str.trim();\n const untilRePattern = /^until\\s+(?[\\d\\w- ]+)/;\n const untilStatement = untilRePattern.exec(str);\n if (untilStatement !== null) {\n let earliestTask = null;\n for (const id of untilStatement.groups.ids.split(\" \")) {\n let task = findTaskById(id);\n if (task !== void 0 && (!earliestTask || task.startTime < earliestTask.startTime)) {\n earliestTask = task;\n }\n }\n if (earliestTask) {\n return earliestTask.startTime;\n }\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n let parsedDate = dayjs(str, dateFormat2.trim(), true);\n if (parsedDate.isValid()) {\n if (inclusive) {\n parsedDate = parsedDate.add(1, \"d\");\n }\n return parsedDate.toDate();\n }\n let endTime = dayjs(prevTime);\n const [durationValue, durationUnit] = parseDuration(str);\n if (!Number.isNaN(durationValue)) {\n const newEndTime = endTime.add(durationValue, durationUnit);\n if (newEndTime.isValid()) {\n endTime = newEndTime;\n }\n }\n return endTime.toDate();\n}, \"getEndDate\");\nvar taskCnt = 0;\nvar parseId = /* @__PURE__ */ __name(function(idStr) {\n if (idStr === void 0) {\n taskCnt = taskCnt + 1;\n return \"task\" + taskCnt;\n }\n return idStr;\n}, \"parseId\");\nvar compileData = /* @__PURE__ */ __name(function(prevTask, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n let endTimeData = \"\";\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = prevTask.endTime;\n endTimeData = data[0];\n break;\n case 2:\n task.id = parseId();\n task.startTime = getStartDate(void 0, dateFormat, data[0]);\n endTimeData = data[1];\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = getStartDate(void 0, dateFormat, data[1]);\n endTimeData = data[2];\n break;\n default:\n }\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n task.manualEndTime = dayjs(endTimeData, \"YYYY-MM-DD\", true).isValid();\n checkTaskDates(task, dateFormat, excludes, includes);\n }\n return task;\n}, \"compileData\");\nvar parseData = /* @__PURE__ */ __name(function(prevTaskId, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = {\n type: \"prevTaskEnd\",\n id: prevTaskId\n };\n task.endTime = {\n data: data[0]\n };\n break;\n case 2:\n task.id = parseId();\n task.startTime = {\n type: \"getStartDate\",\n startData: data[0]\n };\n task.endTime = {\n data: data[1]\n };\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = {\n type: \"getStartDate\",\n startData: data[1]\n };\n task.endTime = {\n data: data[2]\n };\n break;\n default:\n }\n return task;\n}, \"parseData\");\nvar lastTask;\nvar lastTaskID;\nvar rawTasks = [];\nvar taskDb = {};\nvar addTask = /* @__PURE__ */ __name(function(descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data },\n task: descr,\n classes: []\n };\n const taskInfo = parseData(lastTaskID, data);\n rawTask.raw.startTime = taskInfo.startTime;\n rawTask.raw.endTime = taskInfo.endTime;\n rawTask.id = taskInfo.id;\n rawTask.prevTaskId = lastTaskID;\n rawTask.active = taskInfo.active;\n rawTask.done = taskInfo.done;\n rawTask.crit = taskInfo.crit;\n rawTask.milestone = taskInfo.milestone;\n rawTask.vert = taskInfo.vert;\n rawTask.order = lastOrder;\n lastOrder++;\n const pos = rawTasks.push(rawTask);\n lastTaskID = rawTask.id;\n taskDb[rawTask.id] = pos - 1;\n}, \"addTask\");\nvar findTaskById = /* @__PURE__ */ __name(function(id) {\n const pos = taskDb[id];\n return rawTasks[pos];\n}, \"findTaskById\");\nvar addTaskOrg = /* @__PURE__ */ __name(function(descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n const taskInfo = compileData(lastTask, data);\n newTask.startTime = taskInfo.startTime;\n newTask.endTime = taskInfo.endTime;\n newTask.id = taskInfo.id;\n newTask.active = taskInfo.active;\n newTask.done = taskInfo.done;\n newTask.crit = taskInfo.crit;\n newTask.milestone = taskInfo.milestone;\n newTask.vert = taskInfo.vert;\n lastTask = newTask;\n tasks.push(newTask);\n}, \"addTaskOrg\");\nvar compileTasks = /* @__PURE__ */ __name(function() {\n const compileTask = /* @__PURE__ */ __name(function(pos) {\n const task = rawTasks[pos];\n let startTime = \"\";\n switch (rawTasks[pos].raw.startTime.type) {\n case \"prevTaskEnd\": {\n const prevTask = findTaskById(task.prevTaskId);\n task.startTime = prevTask.endTime;\n break;\n }\n case \"getStartDate\":\n startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData);\n if (startTime) {\n rawTasks[pos].startTime = startTime;\n }\n break;\n }\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(\n rawTasks[pos].startTime,\n dateFormat,\n rawTasks[pos].raw.endTime.data,\n inclusiveEndDates\n );\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true;\n rawTasks[pos].manualEndTime = dayjs(\n rawTasks[pos].raw.endTime.data,\n \"YYYY-MM-DD\",\n true\n ).isValid();\n checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n }\n }\n return rawTasks[pos].processed;\n }, \"compileTask\");\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n}, \"compileTasks\");\nvar setLink = /* @__PURE__ */ __name(function(ids, _linkStr) {\n let linkStr = _linkStr;\n if (getConfig().securityLevel !== \"loose\") {\n linkStr = sanitizeUrl(_linkStr);\n }\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n window.open(linkStr, \"_self\");\n });\n links.set(id, linkStr);\n }\n });\n setClass(ids, \"clickable\");\n}, \"setLink\");\nvar setClass = /* @__PURE__ */ __name(function(ids, className) {\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n rawTask.classes.push(className);\n }\n });\n}, \"setClass\");\nvar setClickFun = /* @__PURE__ */ __name(function(id, functionName, functionArgs) {\n if (getConfig().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n utils_default.runFunc(functionName, ...argList);\n });\n }\n}, \"setClickFun\");\nvar pushFun = /* @__PURE__ */ __name(function(id, callbackFunction) {\n funs.push(\n function() {\n const elem = document.querySelector(`[id=\"${id}\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n },\n function() {\n const elem = document.querySelector(`[id=\"${id}-text\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n }\n );\n}, \"pushFun\");\nvar setClickEvent = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, \"clickable\");\n}, \"setClickEvent\");\nvar bindFunctions = /* @__PURE__ */ __name(function(element) {\n funs.forEach(function(fun) {\n fun(element);\n });\n}, \"bindFunctions\");\nvar ganttDb_default = {\n getConfig: /* @__PURE__ */ __name(() => getConfig().gantt, \"getConfig\"),\n clear: clear2,\n setDateFormat,\n getDateFormat,\n enableInclusiveEndDates,\n endDatesAreInclusive,\n enableTopAxis,\n topAxisEnabled,\n setAxisFormat,\n getAxisFormat,\n setTickInterval,\n getTickInterval,\n setTodayMarker,\n getTodayMarker,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n setDisplayMode,\n getDisplayMode,\n setAccDescription,\n getAccDescription,\n addSection,\n getSections,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setIncludes,\n getIncludes,\n setExcludes,\n getExcludes,\n setClickEvent,\n setLink,\n getLinks,\n bindFunctions,\n parseDuration,\n isInvalidDate,\n setWeekday,\n getWeekday,\n setWeekend\n};\nfunction getTaskTags(data, task, tags2) {\n let matchFound = true;\n while (matchFound) {\n matchFound = false;\n tags2.forEach(function(t) {\n const pattern = \"^\\\\s*\" + t + \"\\\\s*$\";\n const regex = new RegExp(pattern);\n if (data[0].match(regex)) {\n task[t] = true;\n data.shift(1);\n matchFound = true;\n }\n });\n }\n}\n__name(getTaskTags, \"getTaskTags\");\n\n// src/diagrams/gantt/ganttRenderer.js\nimport dayjs2 from \"dayjs\";\nimport dayjsDuration from \"dayjs/plugin/duration.js\";\nimport {\n select,\n scaleTime,\n min,\n max,\n scaleLinear,\n interpolateHcl,\n axisBottom,\n axisTop,\n timeFormat,\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeMonday,\n timeTuesday,\n timeWednesday,\n timeThursday,\n timeFriday,\n timeSaturday,\n timeSunday,\n timeMonth\n} from \"d3\";\ndayjs2.extend(dayjsDuration);\nvar setConf = /* @__PURE__ */ __name(function() {\n log.debug(\"Something is calling, setConf, remove the call\");\n}, \"setConf\");\nvar mapWeekdayToTimeFunction = {\n monday: timeMonday,\n tuesday: timeTuesday,\n wednesday: timeWednesday,\n thursday: timeThursday,\n friday: timeFriday,\n saturday: timeSaturday,\n sunday: timeSunday\n};\nvar getMaxIntersections = /* @__PURE__ */ __name((tasks2, orderOffset) => {\n let timeline = [...tasks2].map(() => -Infinity);\n let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order);\n let maxIntersections = 0;\n for (const element of sorted) {\n for (let j = 0; j < timeline.length; j++) {\n if (element.startTime >= timeline[j]) {\n timeline[j] = element.endTime;\n element.order = j + orderOffset;\n if (j > maxIntersections) {\n maxIntersections = j;\n }\n break;\n }\n }\n }\n return maxIntersections;\n}, \"getMaxIntersections\");\nvar w;\nvar MAX_TICK_COUNT = 1e4;\nvar draw = /* @__PURE__ */ __name(function(text, id, version, diagObj) {\n const conf = getConfig().gantt;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const elem = doc.getElementById(id);\n w = elem.parentElement.offsetWidth;\n if (w === void 0) {\n w = 1200;\n }\n if (conf.useWidth !== void 0) {\n w = conf.useWidth;\n }\n const taskArray = diagObj.db.getTasks();\n let categories = [];\n for (const element of taskArray) {\n categories.push(element.type);\n }\n categories = checkUnique(categories);\n const categoryHeights = {};\n let h = 2 * conf.topPadding;\n if (diagObj.db.getDisplayMode() === \"compact\" || conf.displayMode === \"compact\") {\n const categoryElements = {};\n for (const element of taskArray) {\n if (categoryElements[element.section] === void 0) {\n categoryElements[element.section] = [element];\n } else {\n categoryElements[element.section].push(element);\n }\n }\n let intersections = 0;\n for (const category of Object.keys(categoryElements)) {\n const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1;\n intersections += categoryHeight;\n h += categoryHeight * (conf.barHeight + conf.barGap);\n categoryHeights[category] = categoryHeight;\n }\n } else {\n h += taskArray.length * (conf.barHeight + conf.barGap);\n for (const category of categories) {\n categoryHeights[category] = taskArray.filter((task) => task.type === category).length;\n }\n }\n elem.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n const svg = root.select(`[id=\"${id}\"]`);\n const timeScale = scaleTime().domain([\n min(taskArray, function(d) {\n return d.startTime;\n }),\n max(taskArray, function(d) {\n return d.endTime;\n })\n ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n function taskCompare(a, b) {\n const taskA = a.startTime;\n const taskB = b.startTime;\n let result = 0;\n if (taskA > taskB) {\n result = 1;\n } else if (taskA < taskB) {\n result = -1;\n }\n return result;\n }\n __name(taskCompare, \"taskCompare\");\n taskArray.sort(taskCompare);\n makeGantt(taskArray, w, h);\n configureSvgSize(svg, h, w, conf.useMaxWidth);\n svg.append(\"text\").text(diagObj.db.getDiagramTitle()).attr(\"x\", w / 2).attr(\"y\", conf.titleTopMargin).attr(\"class\", \"titleText\");\n function makeGantt(tasks2, pageWidth, pageHeight) {\n const barHeight = conf.barHeight;\n const gap = barHeight + conf.barGap;\n const topPadding = conf.topPadding;\n const leftPadding = conf.leftPadding;\n const colorScale = scaleLinear().domain([0, categories.length]).range([\"#00B9FA\", \"#F95002\"]).interpolate(interpolateHcl);\n drawExcludeDays(\n gap,\n topPadding,\n leftPadding,\n pageWidth,\n pageHeight,\n tasks2,\n diagObj.db.getExcludes(),\n diagObj.db.getIncludes()\n );\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);\n drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n }\n __name(makeGantt, \"makeGantt\");\n function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) {\n theArray.sort((a, b) => a.vert === b.vert ? 0 : a.vert ? 1 : -1);\n const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))];\n const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2));\n svg.append(\"g\").selectAll(\"rect\").data(uniqueTasks).enter().append(\"rect\").attr(\"x\", 0).attr(\"y\", function(d, i) {\n i = d.order;\n return i * theGap + theTopPad - 2;\n }).attr(\"width\", function() {\n return w2 - conf.rightPadding / 2;\n }).attr(\"height\", theGap).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n return \"section section\" + i % conf.numberSectionStyles;\n }\n }\n return \"section section0\";\n }).enter();\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(theArray).enter();\n const links2 = diagObj.db.getLinks();\n rectangles.append(\"rect\").attr(\"id\", function(d) {\n return d.id;\n }).attr(\"rx\", 3).attr(\"ry\", 3).attr(\"x\", function(d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n }\n return timeScale(d.startTime) + theSidePad;\n }).attr(\"y\", function(d, i) {\n i = d.order;\n if (d.vert) {\n return conf.gridLineStartPadding;\n }\n return i * theGap + theTopPad;\n }).attr(\"width\", function(d) {\n if (d.milestone) {\n return theBarHeight;\n }\n if (d.vert) {\n return 0.08 * theBarHeight;\n }\n return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n }).attr(\"height\", function(d) {\n if (d.vert) {\n return taskArray.length * (conf.barHeight + conf.barGap) + conf.barHeight * 2;\n }\n return theBarHeight;\n }).attr(\"transform-origin\", function(d, i) {\n i = d.order;\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + \"px \" + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + \"px\";\n }).attr(\"class\", function(d) {\n const res = \"task\";\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskClass = \"\";\n if (d.active) {\n if (d.crit) {\n taskClass += \" activeCrit\";\n } else {\n taskClass = \" active\";\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = \" doneCrit\";\n } else {\n taskClass = \" done\";\n }\n } else {\n if (d.crit) {\n taskClass += \" crit\";\n }\n }\n if (taskClass.length === 0) {\n taskClass = \" task\";\n }\n if (d.milestone) {\n taskClass = \" milestone \" + taskClass;\n }\n if (d.vert) {\n taskClass = \" vert \" + taskClass;\n }\n taskClass += secNum;\n taskClass += \" \" + classStr;\n return res + taskClass;\n });\n rectangles.append(\"text\").attr(\"id\", function(d) {\n return d.id + \"-text\";\n }).text(function(d) {\n return d.task;\n }).attr(\"font-size\", conf.fontSize).attr(\"x\", function(d) {\n let startX = timeScale(d.startTime);\n let endX = timeScale(d.renderEndTime || d.endTime);\n if (d.milestone) {\n startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n endX = startX + theBarHeight;\n }\n if (d.vert) {\n return timeScale(d.startTime) + theSidePad;\n }\n const textWidth = this.getBBox().width;\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return startX + theSidePad - 5;\n } else {\n return endX + theSidePad + 5;\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad;\n }\n }).attr(\"y\", function(d, i) {\n if (d.vert) {\n return conf.gridLineStartPadding + taskArray.length * (conf.barHeight + conf.barGap) + 60;\n }\n i = d.order;\n return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n }).attr(\"text-height\", theBarHeight).attr(\"class\", function(d) {\n const startX = timeScale(d.startTime);\n let endX = timeScale(d.endTime);\n if (d.milestone) {\n endX = startX + theBarHeight;\n }\n const textWidth = this.getBBox().width;\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskType = \"\";\n if (d.active) {\n if (d.crit) {\n taskType = \"activeCritText\" + secNum;\n } else {\n taskType = \"activeText\" + secNum;\n }\n }\n if (d.done) {\n if (d.crit) {\n taskType = taskType + \" doneCritText\" + secNum;\n } else {\n taskType = taskType + \" doneText\" + secNum;\n }\n } else {\n if (d.crit) {\n taskType = taskType + \" critText\" + secNum;\n }\n }\n if (d.milestone) {\n taskType += \" milestoneText\";\n }\n if (d.vert) {\n taskType += \" vertText\";\n }\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return classStr + \" taskTextOutsideLeft taskTextOutside\" + secNum + \" \" + taskType;\n } else {\n return classStr + \" taskTextOutsideRight taskTextOutside\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n } else {\n return classStr + \" taskText taskText\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n });\n const securityLevel2 = getConfig().securityLevel;\n if (securityLevel2 === \"sandbox\") {\n let sandboxElement2;\n sandboxElement2 = select(\"#i\" + id);\n const doc2 = sandboxElement2.nodes()[0].contentDocument;\n rectangles.filter(function(d) {\n return links2.has(d.id);\n }).each(function(o) {\n var taskRect = doc2.querySelector(\"#\" + o.id);\n var taskText = doc2.querySelector(\"#\" + o.id + \"-text\");\n const oldParent = taskRect.parentNode;\n var Link = doc2.createElement(\"a\");\n Link.setAttribute(\"xlink:href\", links2.get(o.id));\n Link.setAttribute(\"target\", \"_top\");\n oldParent.appendChild(Link);\n Link.appendChild(taskRect);\n Link.appendChild(taskText);\n });\n }\n }\n __name(drawRects, \"drawRects\");\n function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) {\n if (excludes2.length === 0 && includes2.length === 0) {\n return;\n }\n let minTime;\n let maxTime;\n for (const { startTime, endTime } of tasks2) {\n if (minTime === void 0 || startTime < minTime) {\n minTime = startTime;\n }\n if (maxTime === void 0 || endTime > maxTime) {\n maxTime = endTime;\n }\n }\n if (!minTime || !maxTime) {\n return;\n }\n if (dayjs2(maxTime).diff(dayjs2(minTime), \"year\") > 5) {\n log.warn(\n \"The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.\"\n );\n return;\n }\n const dateFormat2 = diagObj.db.getDateFormat();\n const excludeRanges = [];\n let range = null;\n let d = dayjs2(minTime);\n while (d.valueOf() <= maxTime) {\n if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) {\n if (!range) {\n range = {\n start: d,\n end: d\n };\n } else {\n range.end = d;\n }\n } else {\n if (range) {\n excludeRanges.push(range);\n range = null;\n }\n }\n d = d.add(1, \"d\");\n }\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(excludeRanges).enter();\n rectangles.append(\"rect\").attr(\"id\", (d2) => \"exclude-\" + d2.start.format(\"YYYY-MM-DD\")).attr(\"x\", (d2) => timeScale(d2.start.startOf(\"day\")) + theSidePad).attr(\"y\", conf.gridLineStartPadding).attr(\"width\", (d2) => timeScale(d2.end.endOf(\"day\")) - timeScale(d2.start.startOf(\"day\"))).attr(\"height\", h2 - theTopPad - conf.gridLineStartPadding).attr(\"transform-origin\", function(d2, i) {\n return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + \"px \" + (i * theGap + 0.5 * h2).toString() + \"px\";\n }).attr(\"class\", \"exclude-range\");\n }\n __name(drawExcludeDays, \"drawExcludeDays\");\n function getEstimatedTickCount(minTime, maxTime, every, interval) {\n if (every <= 0 || minTime > maxTime) {\n return Infinity;\n }\n const timeDiffMs = maxTime - minTime;\n const intervalMs = dayjs2.duration({ [interval ?? \"day\"]: every }).asMilliseconds();\n if (intervalMs <= 0) {\n return Infinity;\n }\n return Math.ceil(timeDiffMs / intervalMs);\n }\n __name(getEstimatedTickCount, \"getEstimatedTickCount\");\n function makeGrid(theSidePad, theTopPad, w2, h2) {\n const dateFormat2 = diagObj.db.getDateFormat();\n const userAxisFormat = diagObj.db.getAxisFormat();\n let axisFormat2;\n if (userAxisFormat) {\n axisFormat2 = userAxisFormat;\n } else if (dateFormat2 === \"D\") {\n axisFormat2 = \"%d\";\n } else {\n axisFormat2 = conf.axisFormat ?? \"%Y-%m-%d\";\n }\n let bottomXAxis = axisBottom(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));\n const reTickInterval = /^([1-9]\\d*)(millisecond|second|minute|hour|day|week|month)$/;\n const resultTickInterval = reTickInterval.exec(\n diagObj.db.getTickInterval() || conf.tickInterval\n );\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n } else {\n const interval = resultTickInterval[2];\n const weekday2 = diagObj.db.getWeekday() || conf.weekday;\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n if (estimatedTicks > MAX_TICK_COUNT) {\n log.warn(\n `The tick interval \"${every}${interval}\" would generate ${estimatedTicks} ticks, which exceeds the maximum allowed (${MAX_TICK_COUNT}). This may indicate an invalid date or time range. Skipping custom tick interval.`\n );\n } else {\n switch (interval) {\n case \"millisecond\":\n bottomXAxis.ticks(timeMillisecond.every(every));\n break;\n case \"second\":\n bottomXAxis.ticks(timeSecond.every(every));\n break;\n case \"minute\":\n bottomXAxis.ticks(timeMinute.every(every));\n break;\n case \"hour\":\n bottomXAxis.ticks(timeHour.every(every));\n break;\n case \"day\":\n bottomXAxis.ticks(timeDay.every(every));\n break;\n case \"week\":\n bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every));\n break;\n case \"month\":\n bottomXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + (h2 - 50) + \")\").call(bottomXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10).attr(\"dy\", \"1em\");\n if (diagObj.db.topAxisEnabled() || conf.topAxis) {\n let topXAxis = axisTop(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n } else {\n const interval = resultTickInterval[2];\n const weekday2 = diagObj.db.getWeekday() || conf.weekday;\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n if (estimatedTicks <= MAX_TICK_COUNT) {\n switch (interval) {\n case \"millisecond\":\n topXAxis.ticks(timeMillisecond.every(every));\n break;\n case \"second\":\n topXAxis.ticks(timeSecond.every(every));\n break;\n case \"minute\":\n topXAxis.ticks(timeMinute.every(every));\n break;\n case \"hour\":\n topXAxis.ticks(timeHour.every(every));\n break;\n case \"day\":\n topXAxis.ticks(timeDay.every(every));\n break;\n case \"week\":\n topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every));\n break;\n case \"month\":\n topXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + theTopPad + \")\").call(topXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10);\n }\n }\n __name(makeGrid, \"makeGrid\");\n function vertLabels(theGap, theTopPad) {\n let prevGap = 0;\n const numOccurrences = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]);\n svg.append(\"g\").selectAll(\"text\").data(numOccurrences).enter().append(function(d) {\n const rows = d[0].split(common_default.lineBreakRegex);\n const dy = -(rows.length - 1) / 2;\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"dy\", dy + \"em\");\n for (const [j, row] of rows.entries()) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttribute(\"alignment-baseline\", \"central\");\n tspan.setAttribute(\"x\", \"10\");\n if (j > 0) {\n tspan.setAttribute(\"dy\", \"1em\");\n }\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }).attr(\"x\", 10).attr(\"y\", function(d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurrences[i - 1][1];\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad;\n }\n } else {\n return d[1] * theGap / 2 + theTopPad;\n }\n }).attr(\"font-size\", conf.sectionFontSize).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d[0] === category) {\n return \"sectionTitle sectionTitle\" + i % conf.numberSectionStyles;\n }\n }\n return \"sectionTitle\";\n });\n }\n __name(vertLabels, \"vertLabels\");\n function drawToday(theSidePad, theTopPad, w2, h2) {\n const todayMarker2 = diagObj.db.getTodayMarker();\n if (todayMarker2 === \"off\") {\n return;\n }\n const todayG = svg.append(\"g\").attr(\"class\", \"today\");\n const today = /* @__PURE__ */ new Date();\n const todayLine = todayG.append(\"line\");\n todayLine.attr(\"x1\", timeScale(today) + theSidePad).attr(\"x2\", timeScale(today) + theSidePad).attr(\"y1\", conf.titleTopMargin).attr(\"y2\", h2 - conf.titleTopMargin).attr(\"class\", \"today\");\n if (todayMarker2 !== \"\") {\n todayLine.attr(\"style\", todayMarker2.replace(/,/g, \";\"));\n }\n }\n __name(drawToday, \"drawToday\");\n function checkUnique(arr) {\n const hash = {};\n const result = [];\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n hash[arr[i]] = true;\n result.push(arr[i]);\n }\n }\n return result;\n }\n __name(checkUnique, \"checkUnique\");\n}, \"draw\");\nvar ganttRenderer_default = {\n setConf,\n draw\n};\n\n// src/diagrams/gantt/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .mermaid-main-font {\n font-family: ${options.fontFamily};\n }\n\n .exclude-range {\n fill: ${options.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${options.sectionBkgColor};\n }\n\n .section2 {\n fill: ${options.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${options.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${options.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${options.fontFamily};\n fill: ${options.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${options.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideRight {\n fill: ${options.taskTextDarkColor};\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideLeft {\n fill: ${options.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${options.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${options.taskBkgColor};\n stroke: ${options.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${options.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${options.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${options.activeTaskBkgColor};\n stroke: ${options.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${options.doneTaskBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .vert {\n stroke: ${options.vertLineColor};\n }\n\n .vertText {\n font-size: 15px;\n text-anchor: middle;\n fill: ${options.vertLineColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.titleColor || options.textColor};\n font-family: ${options.fontFamily};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/gantt/ganttDiagram.ts\nvar diagram = {\n parser: gantt_default,\n db: ganttDb_default,\n renderer: ganttRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["max","values","valueof","value","index","min","identity","x","top","right","bottom","left","epsilon","translateX","translateY","y","number","scale","d","center","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","format","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisTop","axisBottom","radians","degrees","K","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","o","Lab","Hcl","hcl2lab","Rgb","rgbConvert","r","rgb2lrgb","g","b","xyz2lab","z","lab","l","a","opacity","define","extend","Color","lab2xyz","lrgb2rgb","hclConvert","h","hcl","c","hue","start","end","colorHcl","color","t","interpolateHcl","nice","domain","interval","i0","i1","x0","x1","timeInterval","floori","offseti","count","field","date","d0","d1","step","stop","previous","test","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","timeMinute","utcMinute","timeHour","utcHour","timeDay","utcDay","unixDay","timeWeekday","i","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","utcMonth","timeYear","utcYear","ticker","year","month","week","day","hour","minute","tickIntervals","ticks","reverse","tickInterval","target","bisector","tickStep","timeTicks","timeTickInterval","localDate","utcDate","newDate","m","formatLocale","locale","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","newFormat","specifier","string","j","n","pad","pads","newParse","Z","parseSpecifier","parse","f","numberRe","percentRe","requoteRe","fill","width","sign","length","requote","s","names","name","dISO","dow","UTCdISO","timeFormat","defaultLocale","definition","calendar","continuous","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","copy","time","initRange","timeWeek","timeSecond","e","module","this","u","M","Y","v","D","w","L","$","parser","__name","o2","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","parser2","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer2","sharedState","yyloc","ranges","popStack","lex","token","symbol","state","action","yyval","len","newState","expected","errStr","lexer","ch","lines","oldLines","past","next","pre","match","indexed_rule","backup","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","Parser","gantt_default","dayjs","dayjsIsoWeek","dayjsCustomParseFormat","dayjsAdvancedFormat","WEEKEND_START_DAY","dateFormat","axisFormat","todayMarker","includes","excludes","links","sections","tasks","currentSection","displayMode","tags","funs","inclusiveEndDates","topAxis","weekday","weekend","lastOrder","clear2","taskCnt","lastTask","lastTaskID","rawTasks","clear","setAxisFormat","txt","getAxisFormat","setTickInterval","getTickInterval","setTodayMarker","getTodayMarker","setDateFormat","enableInclusiveEndDates","endDatesAreInclusive","enableTopAxis","topAxisEnabled","setDisplayMode","getDisplayMode","getDateFormat","setIncludes","getIncludes","setExcludes","getExcludes","getLinks","addSection","getSections","getTasks","allItemsProcessed","compileTasks","maxDepth","iterationCount","isInvalidDate","dateFormat2","excludes2","includes2","formattedDate","dateOnly","setWeekday","getWeekday","setWeekend","startDay","checkTaskDates","task","startTime","originalEndTime","fixedEndTime","renderEndTime","fixTaskDates","endTime","invalid","getStartDate","prevTime","trimmedFormat","afterStatement","latestTask","id","findTaskById","today","mDate","log","parseDuration","statement","getEndDate","inclusive","untilStatement","earliestTask","parsedDate","durationValue","durationUnit","newEndTime","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","taskDb","addTask","descr","rawTask","taskInfo","pos","addTaskOrg","newTask","compileTask","allProcessed","setLink","ids","_linkStr","linkStr","getConfig","sanitizeUrl","pushFun","setClass","className","setClickFun","functionName","functionArgs","argList","item","utils_default","callbackFunction","elem","setClickEvent","bindFunctions","element","fun","ganttDb_default","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","setAccDescription","getAccDescription","tags2","matchFound","pattern","regex","dayjs2","dayjsDuration","setConf","mapWeekdayToTimeFunction","getMaxIntersections","tasks2","orderOffset","timeline","sorted","maxIntersections","MAX_TICK_COUNT","draw","version","diagObj","conf","securityLevel","sandboxElement","select","root","doc","taskArray","categories","checkUnique","categoryHeights","categoryElements","intersections","category","categoryHeight","svg","timeScale","scaleTime","taskCompare","taskA","taskB","result","makeGantt","configureSvgSize","pageWidth","pageHeight","barHeight","gap","topPadding","leftPadding","colorScale","scaleLinear","drawExcludeDays","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","w2","uniqueTasks","id2","rectangles","links2","res","classStr","secNum","taskClass","startX","endX","textWidth","taskType","sandboxElement2","doc2","taskRect","taskText","oldParent","Link","h2","minTime","maxTime","excludeRanges","d2","getEstimatedTickCount","every","timeDiffMs","intervalMs","userAxisFormat","axisFormat2","bottomXAxis","resultTickInterval","weekday2","estimatedTicks","timeMillisecond","topXAxis","prevGap","numOccurrences","rows","common_default","dy","svgLabel","row","tspan","todayMarker2","todayG","todayLine","arr","ganttRenderer_default","getStyles","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js b/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js similarity index 98% rename from massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js rename to massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js index 36d79e954..4de728cd8 100644 --- a/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js +++ b/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js @@ -1,4 +1,4 @@ -import{p as Z}from"./chunk-4BX2VUAB-zPP-xzOW.js";import{I as F}from"./chunk-QZHKN3VN-unwNdMgy.js";import{_ as h,q as U,p as rr,s as er,g as tr,a as ar,b as nr,l as m,c as sr,d as or,u as cr,C as ir,y as dr,k as B,D as hr,E as lr,F as $r,G as fr}from"./index-yx4Z55Qu.js";import{p as gr}from"./treemap-KMMF4GRG-DeY5gSJ9.js";import"./min-DVxmWhZZ.js";import"./_baseUniq-LXHsPSjj.js";var u={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},yr=$r.gitGraph,z=h(()=>hr({...yr,...lr().gitGraph}),"getConfig"),i=new F(()=>{const t=z(),r=t.mainBranchName,a=t.mainBranchOrder;return{mainBranchName:r,commits:new Map,head:null,branchConfig:new Map([[r,{name:r,order:a}]]),branches:new Map([[r,null]]),currBranch:r,direction:"LR",seq:0,options:{}}});function S(){return fr({length:7})}h(S,"getID");function N(t,r){const a=Object.create(null);return t.reduce((s,e)=>{const n=r(e);return a[n]||(a[n]=!0,s.push(e)),s},[])}h(N,"uniqBy");var xr=h(function(t){i.records.direction=t},"setDirection"),ur=h(function(t){m.debug("options str",t),t=t==null?void 0:t.trim(),t=t||"{}";try{i.records.options=JSON.parse(t)}catch(r){m.error("error while parsing gitGraph options",r.message)}},"setOptions"),pr=h(function(){return i.records.options},"getOptions"),br=h(function(t){let r=t.msg,a=t.id;const s=t.type;let e=t.tags;m.info("commit",r,a,s,e),m.debug("Entering commit:",r,a,s,e);const n=z();a=B.sanitizeText(a,n),r=B.sanitizeText(r,n),e=e==null?void 0:e.map(o=>B.sanitizeText(o,n));const c={id:a||i.records.seq+"-"+S(),message:r,seq:i.records.seq++,type:s??u.NORMAL,tags:e??[],parents:i.records.head==null?[]:[i.records.head.id],branch:i.records.currBranch};i.records.head=c,m.info("main branch",n.mainBranchName),i.records.commits.has(c.id)&&m.warn(`Commit ID ${c.id} already exists`),i.records.commits.set(c.id,c),i.records.branches.set(i.records.currBranch,c.id),m.debug("in pushCommit "+c.id)},"commit"),mr=h(function(t){let r=t.name;const a=t.order;if(r=B.sanitizeText(r,z()),i.records.branches.has(r))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${r}")`);i.records.branches.set(r,i.records.head!=null?i.records.head.id:null),i.records.branchConfig.set(r,{name:r,order:a}),_(r),m.debug("in createBranch")},"branch"),wr=h(t=>{let r=t.branch,a=t.id;const s=t.type,e=t.tags,n=z();r=B.sanitizeText(r,n),a&&(a=B.sanitizeText(a,n));const c=i.records.branches.get(i.records.currBranch),o=i.records.branches.get(r),$=c?i.records.commits.get(c):void 0,l=o?i.records.commits.get(o):void 0;if($&&l&&$.branch===r)throw new Error(`Cannot merge branch '${r}' into itself.`);if(i.records.currBranch===r){const d=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if($===void 0||!$){const d=new Error(`Incorrect usage of "merge". Current branch (${i.records.currBranch})has no commits`);throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["commit"]},d}if(!i.records.branches.has(r)){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") does not exist");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:[`branch ${r}`]},d}if(l===void 0||!l){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") has no commits");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:['"commit"']},d}if($===l){const d=new Error('Incorrect usage of "merge". Both branches have same head');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if(a&&i.records.commits.has(a)){const d=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom id");throw d.hash={text:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,token:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,expected:[`merge ${r} ${a}_UNIQUE ${s} ${e==null?void 0:e.join(" ")}`]},d}const f=o||"",g={id:a||`${i.records.seq}-${S()}`,message:`merged branch ${r} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,f],branch:i.records.currBranch,type:u.MERGE,customType:s,customId:!!a,tags:e??[]};i.records.head=g,i.records.commits.set(g.id,g),i.records.branches.set(i.records.currBranch,g.id),m.debug(i.records.branches),m.debug("in mergeBranch")},"merge"),vr=h(function(t){let r=t.id,a=t.targetId,s=t.tags,e=t.parent;m.debug("Entering cherryPick:",r,a,s);const n=z();if(r=B.sanitizeText(r,n),a=B.sanitizeText(a,n),s=s==null?void 0:s.map($=>B.sanitizeText($,n)),e=B.sanitizeText(e,n),!r||!i.records.commits.has(r)){const $=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw $.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},$}const c=i.records.commits.get(r);if(c===void 0||!c)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(e&&!(Array.isArray(c.parents)&&c.parents.includes(e)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");const o=c.branch;if(c.type===u.MERGE&&!e)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!a||!i.records.commits.has(a)){if(o===i.records.currBranch){const g=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const $=i.records.branches.get(i.records.currBranch);if($===void 0||!$){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const l=i.records.commits.get($);if(l===void 0||!l){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const f={id:i.records.seq+"-"+S(),message:`cherry-picked ${c==null?void 0:c.message} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,c.id],branch:i.records.currBranch,type:u.CHERRY_PICK,tags:s?s.filter(Boolean):[`cherry-pick:${c.id}${c.type===u.MERGE?`|parent:${e}`:""}`]};i.records.head=f,i.records.commits.set(f.id,f),i.records.branches.set(i.records.currBranch,f.id),m.debug(i.records.branches),m.debug("in cherryPick")}},"cherryPick"),_=h(function(t){if(t=B.sanitizeText(t,z()),i.records.branches.has(t)){i.records.currBranch=t;const r=i.records.branches.get(i.records.currBranch);r===void 0||!r?i.records.head=null:i.records.head=i.records.commits.get(r)??null}else{const r=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw r.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},r}},"checkout");function D(t,r,a){const s=t.indexOf(r);s===-1?t.push(a):t.splice(s,1,a)}h(D,"upsert");function A(t){const r=t.reduce((e,n)=>e.seq>n.seq?e:n,t[0]);let a="";t.forEach(function(e){e===r?a+=" *":a+=" |"});const s=[a,r.id,r.seq];for(const e in i.records.branches)i.records.branches.get(e)===r.id&&s.push(e);if(m.debug(s.join(" ")),r.parents&&r.parents.length==2&&r.parents[0]&&r.parents[1]){const e=i.records.commits.get(r.parents[0]);D(t,r,e),r.parents[1]&&t.push(i.records.commits.get(r.parents[1]))}else{if(r.parents.length==0)return;if(r.parents[0]){const e=i.records.commits.get(r.parents[0]);D(t,r,e)}}t=N(t,e=>e.id),A(t)}h(A,"prettyPrintCommitHistory");var Cr=h(function(){m.debug(i.records.commits);const t=V()[0];A([t])},"prettyPrint"),Er=h(function(){i.reset(),dr()},"clear"),Br=h(function(){return[...i.records.branchConfig.values()].map((r,a)=>r.order!==null&&r.order!==void 0?r:{...r,order:parseFloat(`0.${a}`)}).sort((r,a)=>(r.order??0)-(a.order??0)).map(({name:r})=>({name:r}))},"getBranchesAsObjArray"),kr=h(function(){return i.records.branches},"getBranches"),Lr=h(function(){return i.records.commits},"getCommits"),V=h(function(){const t=[...i.records.commits.values()];return t.forEach(function(r){m.debug(r.id)}),t.sort((r,a)=>r.seq-a.seq),t},"getCommitsArray"),Tr=h(function(){return i.records.currBranch},"getCurrentBranch"),Mr=h(function(){return i.records.direction},"getDirection"),Rr=h(function(){return i.records.head},"getHead"),X={commitType:u,getConfig:z,setDirection:xr,setOptions:ur,getOptions:pr,commit:br,branch:mr,merge:wr,cherryPick:vr,checkout:_,prettyPrint:Cr,clear:Er,getBranchesAsObjArray:Br,getBranches:kr,getCommits:Lr,getCommitsArray:V,getCurrentBranch:Tr,getDirection:Mr,getHead:Rr,setAccTitle:nr,getAccTitle:ar,getAccDescription:tr,setAccDescription:er,setDiagramTitle:rr,getDiagramTitle:U},Ir=h((t,r)=>{Z(t,r),t.dir&&r.setDirection(t.dir);for(const a of t.statements)qr(a,r)},"populate"),qr=h((t,r)=>{const s={Commit:h(e=>r.commit(Or(e)),"Commit"),Branch:h(e=>r.branch(zr(e)),"Branch"),Merge:h(e=>r.merge(Gr(e)),"Merge"),Checkout:h(e=>r.checkout(Hr(e)),"Checkout"),CherryPicking:h(e=>r.cherryPick(Pr(e)),"CherryPicking")}[t.$type];s?s(t):m.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),Or=h(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?u[t.type]:u.NORMAL,tags:t.tags??void 0}),"parseCommit"),zr=h(t=>({name:t.name,order:t.order??0}),"parseBranch"),Gr=h(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?u[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),Hr=h(t=>t.branch,"parseCheckout"),Pr=h(t=>{var a;return{id:t.id,targetId:"",tags:((a=t.tags)==null?void 0:a.length)===0?void 0:t.tags,parent:t.parent}},"parseCherryPicking"),Wr={parse:h(async t=>{const r=await gr("gitGraph",t);m.debug(r),Ir(r,X)},"parse")},j=sr(),b=j==null?void 0:j.gitGraph,R=10,I=40,k=4,L=2,O=8,C=new Map,E=new Map,P=30,G=new Map,W=[],M=0,x="LR",Sr=h(()=>{C.clear(),E.clear(),G.clear(),M=0,W=[],x="LR"},"clear"),J=h(t=>{const r=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(s=>{const e=document.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","0"),e.setAttribute("class","row"),e.textContent=s.trim(),r.appendChild(e)}),r},"drawText"),Q=h(t=>{let r,a,s;return x==="BT"?(a=h((e,n)=>e<=n,"comparisonFunc"),s=1/0):(a=h((e,n)=>e>=n,"comparisonFunc"),s=0),t.forEach(e=>{var c,o;const n=x==="TB"||x=="BT"?(c=E.get(e))==null?void 0:c.y:(o=E.get(e))==null?void 0:o.x;n!==void 0&&a(n,s)&&(r=e,s=n)}),r},"findClosestParent"),jr=h(t=>{let r="",a=1/0;return t.forEach(s=>{const e=E.get(s).y;e<=a&&(r=s,a=e)}),r||void 0},"findClosestParentBT"),Dr=h((t,r,a)=>{let s=a,e=a;const n=[];t.forEach(c=>{const o=r.get(c);if(!o)throw new Error(`Commit not found for key ${c}`);o.parents.length?(s=Yr(o),e=Math.max(s,e)):n.push(o),Kr(o,s)}),s=e,n.forEach(c=>{Nr(c,s,a)}),t.forEach(c=>{const o=r.get(c);if(o!=null&&o.parents.length){const $=jr(o.parents);s=E.get($).y-I,s<=e&&(e=s);const l=C.get(o.branch).pos,f=s-R;E.set(o.id,{x:l,y:f})}})},"setParallelBTPos"),Ar=h(t=>{var s;const r=Q(t.parents.filter(e=>e!==null));if(!r)throw new Error(`Closest parent not found for commit ${t.id}`);const a=(s=E.get(r))==null?void 0:s.y;if(a===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return a},"findClosestParentPos"),Yr=h(t=>Ar(t)+I,"calculateCommitPosition"),Kr=h((t,r)=>{const a=C.get(t.branch);if(!a)throw new Error(`Branch not found for commit ${t.id}`);const s=a.pos,e=r+R;return E.set(t.id,{x:s,y:e}),{x:s,y:e}},"setCommitPosition"),Nr=h((t,r,a)=>{const s=C.get(t.branch);if(!s)throw new Error(`Branch not found for commit ${t.id}`);const e=r+a,n=s.pos;E.set(t.id,{x:n,y:e})},"setRootPosition"),_r=h((t,r,a,s,e,n)=>{if(n===u.HIGHLIGHT)t.append("rect").attr("x",a.x-10).attr("y",a.y-10).attr("width",20).attr("height",20).attr("class",`commit ${r.id} commit-highlight${e%O} ${s}-outer`),t.append("rect").attr("x",a.x-6).attr("y",a.y-6).attr("width",12).attr("height",12).attr("class",`commit ${r.id} commit${e%O} ${s}-inner`);else if(n===u.CHERRY_PICK)t.append("circle").attr("cx",a.x).attr("cy",a.y).attr("r",10).attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x-3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x+3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x+3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x-3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`);else{const c=t.append("circle");if(c.attr("cx",a.x),c.attr("cy",a.y),c.attr("r",r.type===u.MERGE?9:10),c.attr("class",`commit ${r.id} commit${e%O}`),n===u.MERGE){const o=t.append("circle");o.attr("cx",a.x),o.attr("cy",a.y),o.attr("r",6),o.attr("class",`commit ${s} ${r.id} commit${e%O}`)}n===u.REVERSE&&t.append("path").attr("d",`M ${a.x-5},${a.y-5}L${a.x+5},${a.y+5}M${a.x-5},${a.y+5}L${a.x+5},${a.y-5}`).attr("class",`commit ${s} ${r.id} commit${e%O}`)}},"drawCommitBullet"),Vr=h((t,r,a,s)=>{var e;if(r.type!==u.CHERRY_PICK&&(r.customId&&r.type===u.MERGE||r.type!==u.MERGE)&&(b!=null&&b.showCommitLabel)){const n=t.append("g"),c=n.insert("rect").attr("class","commit-label-bkg"),o=n.append("text").attr("x",s).attr("y",a.y+25).attr("class","commit-label").text(r.id),$=(e=o.node())==null?void 0:e.getBBox();if($&&(c.attr("x",a.posWithOffset-$.width/2-L).attr("y",a.y+13.5).attr("width",$.width+2*L).attr("height",$.height+2*L),x==="TB"||x==="BT"?(c.attr("x",a.x-($.width+4*k+5)).attr("y",a.y-12),o.attr("x",a.x-($.width+4*k)).attr("y",a.y+$.height-12)):o.attr("x",a.posWithOffset-$.width/2),b.rotateCommitLabel))if(x==="TB"||x==="BT")o.attr("transform","rotate(-45, "+a.x+", "+a.y+")"),c.attr("transform","rotate(-45, "+a.x+", "+a.y+")");else{const l=-7.5-($.width+10)/25*9.5,f=10+$.width/25*8.5;n.attr("transform","translate("+l+", "+f+") rotate(-45, "+s+", "+a.y+")")}}},"drawCommitLabel"),Xr=h((t,r,a,s)=>{var e;if(r.tags.length>0){let n=0,c=0,o=0;const $=[];for(const l of r.tags.reverse()){const f=t.insert("polygon"),g=t.append("circle"),d=t.append("text").attr("y",a.y-16-n).attr("class","tag-label").text(l),y=(e=d.node())==null?void 0:e.getBBox();if(!y)throw new Error("Tag bbox not found");c=Math.max(c,y.width),o=Math.max(o,y.height),d.attr("x",a.posWithOffset-y.width/2),$.push({tag:d,hole:g,rect:f,yOffset:n}),n+=20}for(const{tag:l,hole:f,rect:g,yOffset:d}of $){const y=o/2,p=a.y-19.2-d;if(g.attr("class","tag-label-bkg").attr("points",` +import{p as Z}from"./chunk-4BX2VUAB-PBVZf6Qi.js";import{I as F}from"./chunk-QZHKN3VN-C81fAOmv.js";import{_ as h,q as U,p as rr,s as er,g as tr,a as ar,b as nr,l as m,c as sr,d as or,u as cr,C as ir,y as dr,k as B,D as hr,E as lr,F as $r,G as fr}from"./index-DbSnkTMx.js";import{p as gr}from"./treemap-KMMF4GRG-DVJsp5UK.js";import"./min-jMRXb9Wh.js";import"./_baseUniq-CR-Qd8A8.js";var u={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},yr=$r.gitGraph,z=h(()=>hr({...yr,...lr().gitGraph}),"getConfig"),i=new F(()=>{const t=z(),r=t.mainBranchName,a=t.mainBranchOrder;return{mainBranchName:r,commits:new Map,head:null,branchConfig:new Map([[r,{name:r,order:a}]]),branches:new Map([[r,null]]),currBranch:r,direction:"LR",seq:0,options:{}}});function S(){return fr({length:7})}h(S,"getID");function N(t,r){const a=Object.create(null);return t.reduce((s,e)=>{const n=r(e);return a[n]||(a[n]=!0,s.push(e)),s},[])}h(N,"uniqBy");var xr=h(function(t){i.records.direction=t},"setDirection"),ur=h(function(t){m.debug("options str",t),t=t==null?void 0:t.trim(),t=t||"{}";try{i.records.options=JSON.parse(t)}catch(r){m.error("error while parsing gitGraph options",r.message)}},"setOptions"),pr=h(function(){return i.records.options},"getOptions"),br=h(function(t){let r=t.msg,a=t.id;const s=t.type;let e=t.tags;m.info("commit",r,a,s,e),m.debug("Entering commit:",r,a,s,e);const n=z();a=B.sanitizeText(a,n),r=B.sanitizeText(r,n),e=e==null?void 0:e.map(o=>B.sanitizeText(o,n));const c={id:a||i.records.seq+"-"+S(),message:r,seq:i.records.seq++,type:s??u.NORMAL,tags:e??[],parents:i.records.head==null?[]:[i.records.head.id],branch:i.records.currBranch};i.records.head=c,m.info("main branch",n.mainBranchName),i.records.commits.has(c.id)&&m.warn(`Commit ID ${c.id} already exists`),i.records.commits.set(c.id,c),i.records.branches.set(i.records.currBranch,c.id),m.debug("in pushCommit "+c.id)},"commit"),mr=h(function(t){let r=t.name;const a=t.order;if(r=B.sanitizeText(r,z()),i.records.branches.has(r))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${r}")`);i.records.branches.set(r,i.records.head!=null?i.records.head.id:null),i.records.branchConfig.set(r,{name:r,order:a}),_(r),m.debug("in createBranch")},"branch"),wr=h(t=>{let r=t.branch,a=t.id;const s=t.type,e=t.tags,n=z();r=B.sanitizeText(r,n),a&&(a=B.sanitizeText(a,n));const c=i.records.branches.get(i.records.currBranch),o=i.records.branches.get(r),$=c?i.records.commits.get(c):void 0,l=o?i.records.commits.get(o):void 0;if($&&l&&$.branch===r)throw new Error(`Cannot merge branch '${r}' into itself.`);if(i.records.currBranch===r){const d=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if($===void 0||!$){const d=new Error(`Incorrect usage of "merge". Current branch (${i.records.currBranch})has no commits`);throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["commit"]},d}if(!i.records.branches.has(r)){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") does not exist");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:[`branch ${r}`]},d}if(l===void 0||!l){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") has no commits");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:['"commit"']},d}if($===l){const d=new Error('Incorrect usage of "merge". Both branches have same head');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if(a&&i.records.commits.has(a)){const d=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom id");throw d.hash={text:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,token:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,expected:[`merge ${r} ${a}_UNIQUE ${s} ${e==null?void 0:e.join(" ")}`]},d}const f=o||"",g={id:a||`${i.records.seq}-${S()}`,message:`merged branch ${r} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,f],branch:i.records.currBranch,type:u.MERGE,customType:s,customId:!!a,tags:e??[]};i.records.head=g,i.records.commits.set(g.id,g),i.records.branches.set(i.records.currBranch,g.id),m.debug(i.records.branches),m.debug("in mergeBranch")},"merge"),vr=h(function(t){let r=t.id,a=t.targetId,s=t.tags,e=t.parent;m.debug("Entering cherryPick:",r,a,s);const n=z();if(r=B.sanitizeText(r,n),a=B.sanitizeText(a,n),s=s==null?void 0:s.map($=>B.sanitizeText($,n)),e=B.sanitizeText(e,n),!r||!i.records.commits.has(r)){const $=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw $.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},$}const c=i.records.commits.get(r);if(c===void 0||!c)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(e&&!(Array.isArray(c.parents)&&c.parents.includes(e)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");const o=c.branch;if(c.type===u.MERGE&&!e)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!a||!i.records.commits.has(a)){if(o===i.records.currBranch){const g=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const $=i.records.branches.get(i.records.currBranch);if($===void 0||!$){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const l=i.records.commits.get($);if(l===void 0||!l){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const f={id:i.records.seq+"-"+S(),message:`cherry-picked ${c==null?void 0:c.message} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,c.id],branch:i.records.currBranch,type:u.CHERRY_PICK,tags:s?s.filter(Boolean):[`cherry-pick:${c.id}${c.type===u.MERGE?`|parent:${e}`:""}`]};i.records.head=f,i.records.commits.set(f.id,f),i.records.branches.set(i.records.currBranch,f.id),m.debug(i.records.branches),m.debug("in cherryPick")}},"cherryPick"),_=h(function(t){if(t=B.sanitizeText(t,z()),i.records.branches.has(t)){i.records.currBranch=t;const r=i.records.branches.get(i.records.currBranch);r===void 0||!r?i.records.head=null:i.records.head=i.records.commits.get(r)??null}else{const r=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw r.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},r}},"checkout");function D(t,r,a){const s=t.indexOf(r);s===-1?t.push(a):t.splice(s,1,a)}h(D,"upsert");function A(t){const r=t.reduce((e,n)=>e.seq>n.seq?e:n,t[0]);let a="";t.forEach(function(e){e===r?a+=" *":a+=" |"});const s=[a,r.id,r.seq];for(const e in i.records.branches)i.records.branches.get(e)===r.id&&s.push(e);if(m.debug(s.join(" ")),r.parents&&r.parents.length==2&&r.parents[0]&&r.parents[1]){const e=i.records.commits.get(r.parents[0]);D(t,r,e),r.parents[1]&&t.push(i.records.commits.get(r.parents[1]))}else{if(r.parents.length==0)return;if(r.parents[0]){const e=i.records.commits.get(r.parents[0]);D(t,r,e)}}t=N(t,e=>e.id),A(t)}h(A,"prettyPrintCommitHistory");var Cr=h(function(){m.debug(i.records.commits);const t=V()[0];A([t])},"prettyPrint"),Er=h(function(){i.reset(),dr()},"clear"),Br=h(function(){return[...i.records.branchConfig.values()].map((r,a)=>r.order!==null&&r.order!==void 0?r:{...r,order:parseFloat(`0.${a}`)}).sort((r,a)=>(r.order??0)-(a.order??0)).map(({name:r})=>({name:r}))},"getBranchesAsObjArray"),kr=h(function(){return i.records.branches},"getBranches"),Lr=h(function(){return i.records.commits},"getCommits"),V=h(function(){const t=[...i.records.commits.values()];return t.forEach(function(r){m.debug(r.id)}),t.sort((r,a)=>r.seq-a.seq),t},"getCommitsArray"),Tr=h(function(){return i.records.currBranch},"getCurrentBranch"),Mr=h(function(){return i.records.direction},"getDirection"),Rr=h(function(){return i.records.head},"getHead"),X={commitType:u,getConfig:z,setDirection:xr,setOptions:ur,getOptions:pr,commit:br,branch:mr,merge:wr,cherryPick:vr,checkout:_,prettyPrint:Cr,clear:Er,getBranchesAsObjArray:Br,getBranches:kr,getCommits:Lr,getCommitsArray:V,getCurrentBranch:Tr,getDirection:Mr,getHead:Rr,setAccTitle:nr,getAccTitle:ar,getAccDescription:tr,setAccDescription:er,setDiagramTitle:rr,getDiagramTitle:U},Ir=h((t,r)=>{Z(t,r),t.dir&&r.setDirection(t.dir);for(const a of t.statements)qr(a,r)},"populate"),qr=h((t,r)=>{const s={Commit:h(e=>r.commit(Or(e)),"Commit"),Branch:h(e=>r.branch(zr(e)),"Branch"),Merge:h(e=>r.merge(Gr(e)),"Merge"),Checkout:h(e=>r.checkout(Hr(e)),"Checkout"),CherryPicking:h(e=>r.cherryPick(Pr(e)),"CherryPicking")}[t.$type];s?s(t):m.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),Or=h(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?u[t.type]:u.NORMAL,tags:t.tags??void 0}),"parseCommit"),zr=h(t=>({name:t.name,order:t.order??0}),"parseBranch"),Gr=h(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?u[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),Hr=h(t=>t.branch,"parseCheckout"),Pr=h(t=>{var a;return{id:t.id,targetId:"",tags:((a=t.tags)==null?void 0:a.length)===0?void 0:t.tags,parent:t.parent}},"parseCherryPicking"),Wr={parse:h(async t=>{const r=await gr("gitGraph",t);m.debug(r),Ir(r,X)},"parse")},j=sr(),b=j==null?void 0:j.gitGraph,R=10,I=40,k=4,L=2,O=8,C=new Map,E=new Map,P=30,G=new Map,W=[],M=0,x="LR",Sr=h(()=>{C.clear(),E.clear(),G.clear(),M=0,W=[],x="LR"},"clear"),J=h(t=>{const r=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(s=>{const e=document.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","0"),e.setAttribute("class","row"),e.textContent=s.trim(),r.appendChild(e)}),r},"drawText"),Q=h(t=>{let r,a,s;return x==="BT"?(a=h((e,n)=>e<=n,"comparisonFunc"),s=1/0):(a=h((e,n)=>e>=n,"comparisonFunc"),s=0),t.forEach(e=>{var c,o;const n=x==="TB"||x=="BT"?(c=E.get(e))==null?void 0:c.y:(o=E.get(e))==null?void 0:o.x;n!==void 0&&a(n,s)&&(r=e,s=n)}),r},"findClosestParent"),jr=h(t=>{let r="",a=1/0;return t.forEach(s=>{const e=E.get(s).y;e<=a&&(r=s,a=e)}),r||void 0},"findClosestParentBT"),Dr=h((t,r,a)=>{let s=a,e=a;const n=[];t.forEach(c=>{const o=r.get(c);if(!o)throw new Error(`Commit not found for key ${c}`);o.parents.length?(s=Yr(o),e=Math.max(s,e)):n.push(o),Kr(o,s)}),s=e,n.forEach(c=>{Nr(c,s,a)}),t.forEach(c=>{const o=r.get(c);if(o!=null&&o.parents.length){const $=jr(o.parents);s=E.get($).y-I,s<=e&&(e=s);const l=C.get(o.branch).pos,f=s-R;E.set(o.id,{x:l,y:f})}})},"setParallelBTPos"),Ar=h(t=>{var s;const r=Q(t.parents.filter(e=>e!==null));if(!r)throw new Error(`Closest parent not found for commit ${t.id}`);const a=(s=E.get(r))==null?void 0:s.y;if(a===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return a},"findClosestParentPos"),Yr=h(t=>Ar(t)+I,"calculateCommitPosition"),Kr=h((t,r)=>{const a=C.get(t.branch);if(!a)throw new Error(`Branch not found for commit ${t.id}`);const s=a.pos,e=r+R;return E.set(t.id,{x:s,y:e}),{x:s,y:e}},"setCommitPosition"),Nr=h((t,r,a)=>{const s=C.get(t.branch);if(!s)throw new Error(`Branch not found for commit ${t.id}`);const e=r+a,n=s.pos;E.set(t.id,{x:n,y:e})},"setRootPosition"),_r=h((t,r,a,s,e,n)=>{if(n===u.HIGHLIGHT)t.append("rect").attr("x",a.x-10).attr("y",a.y-10).attr("width",20).attr("height",20).attr("class",`commit ${r.id} commit-highlight${e%O} ${s}-outer`),t.append("rect").attr("x",a.x-6).attr("y",a.y-6).attr("width",12).attr("height",12).attr("class",`commit ${r.id} commit${e%O} ${s}-inner`);else if(n===u.CHERRY_PICK)t.append("circle").attr("cx",a.x).attr("cy",a.y).attr("r",10).attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x-3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x+3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x+3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x-3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`);else{const c=t.append("circle");if(c.attr("cx",a.x),c.attr("cy",a.y),c.attr("r",r.type===u.MERGE?9:10),c.attr("class",`commit ${r.id} commit${e%O}`),n===u.MERGE){const o=t.append("circle");o.attr("cx",a.x),o.attr("cy",a.y),o.attr("r",6),o.attr("class",`commit ${s} ${r.id} commit${e%O}`)}n===u.REVERSE&&t.append("path").attr("d",`M ${a.x-5},${a.y-5}L${a.x+5},${a.y+5}M${a.x-5},${a.y+5}L${a.x+5},${a.y-5}`).attr("class",`commit ${s} ${r.id} commit${e%O}`)}},"drawCommitBullet"),Vr=h((t,r,a,s)=>{var e;if(r.type!==u.CHERRY_PICK&&(r.customId&&r.type===u.MERGE||r.type!==u.MERGE)&&(b!=null&&b.showCommitLabel)){const n=t.append("g"),c=n.insert("rect").attr("class","commit-label-bkg"),o=n.append("text").attr("x",s).attr("y",a.y+25).attr("class","commit-label").text(r.id),$=(e=o.node())==null?void 0:e.getBBox();if($&&(c.attr("x",a.posWithOffset-$.width/2-L).attr("y",a.y+13.5).attr("width",$.width+2*L).attr("height",$.height+2*L),x==="TB"||x==="BT"?(c.attr("x",a.x-($.width+4*k+5)).attr("y",a.y-12),o.attr("x",a.x-($.width+4*k)).attr("y",a.y+$.height-12)):o.attr("x",a.posWithOffset-$.width/2),b.rotateCommitLabel))if(x==="TB"||x==="BT")o.attr("transform","rotate(-45, "+a.x+", "+a.y+")"),c.attr("transform","rotate(-45, "+a.x+", "+a.y+")");else{const l=-7.5-($.width+10)/25*9.5,f=10+$.width/25*8.5;n.attr("transform","translate("+l+", "+f+") rotate(-45, "+s+", "+a.y+")")}}},"drawCommitLabel"),Xr=h((t,r,a,s)=>{var e;if(r.tags.length>0){let n=0,c=0,o=0;const $=[];for(const l of r.tags.reverse()){const f=t.insert("polygon"),g=t.append("circle"),d=t.append("text").attr("y",a.y-16-n).attr("class","tag-label").text(l),y=(e=d.node())==null?void 0:e.getBBox();if(!y)throw new Error("Tag bbox not found");c=Math.max(c,y.width),o=Math.max(o,y.height),d.attr("x",a.posWithOffset-y.width/2),$.push({tag:d,hole:g,rect:f,yOffset:n}),n+=20}for(const{tag:l,hole:f,rect:g,yOffset:d}of $){const y=o/2,p=a.y-19.2-d;if(g.attr("class","tag-label-bkg").attr("points",` ${s-c/2-k/2},${p+L} ${s-c/2-k/2},${p-L} ${a.posWithOffset-c/2-k},${p-y-L} @@ -63,4 +63,4 @@ import{p as Z}from"./chunk-4BX2VUAB-zPP-xzOW.js";import{I as F}from"./chunk-QZHK fill: ${t.textColor}; } `,"getStyles"),oe=se,fe={parser:Wr,db:X,renderer:ne,styles:oe};export{fe as diagram}; -//# sourceMappingURL=gitGraphDiagram-NY62KEGX-BzSroKjP.js.map +//# sourceMappingURL=gitGraphDiagram-NY62KEGX-CkEH2745.js.map diff --git a/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js.map b/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js.map similarity index 99% rename from massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js.map rename to massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js.map index ce4e36a40..e44f9e250 100644 --- a/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js.map +++ b/massgen/frontend/web/static/assets/gitGraphDiagram-NY62KEGX-CkEH2745.js.map @@ -1 +1 @@ -{"version":3,"file":"gitGraphDiagram-NY62KEGX-BzSroKjP.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: []\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ]\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar DEFAULT_CONFIG = getConfig2();\nvar DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph;\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10).attr(\"y\", commitPosition.y - 10).attr(\"width\", 20).attr(\"height\", 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6).attr(\"y\", commitPosition.y - 6).attr(\"width\", 12).attr(\"height\", 12).attr(\n \"class\",\n `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", commit2.type === commitType.MERGE ? 9 : 10);\n circle.attr(\"class\", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n cross.attr(\n \"d\",\n `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}`\n ).attr(\"class\", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || y === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph) => {\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\"class\", \"arrow arrow\" + colorClassNum % THEME_COLOR_LIMIT);\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches) => {\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", pos);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", pos);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(pos);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\"rx\", 4).attr(\"ry\", 4).attr(\"x\", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 8).attr(\"width\", bbox.width + 18).attr(\"height\", bbox.height + 4);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + \", \" + (pos - bbox.height / 2 - 1) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (pos - bbox.height / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false;\n const db2 = diagObj.db;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false);\n if (DEFAULT_GITGRAPH_CONFIG2.showBranches) {\n drawBranches(diagram2, branches);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(\n void 0,\n diagram2,\n DEFAULT_GITGRAPH_CONFIG2.diagramPadding,\n DEFAULT_GITGRAPH_CONFIG2.useMaxWidth\n );\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true;\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false;\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(\n (i) => `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + i]}; }\n .commit${i} { stroke: ${options[\"git\" + i]}; fill: ${options[\"git\" + i]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + i]}; fill: ${options[\"gitInv\" + i]}; }\n .label${i} { fill: ${options[\"git\" + i]}; }\n .arrow${i} { stroke: ${options[\"git\" + i]}; }\n `\n).join(\"\\n\")}\n\n .branch {\n stroke-width: 1;\n stroke: ${options.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n .commit-reverse {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["commitType","DEFAULT_GITGRAPH_CONFIG","defaultConfig_default","getConfig3","__name","cleanAndMerge","getConfig","state","ImperativeState","config","mainBranchName","mainBranchOrder","getID","random","uniqBy","list","fn","recordMap","out","item","key","setDirection","dir2","setOptions","rawOptString","log","e","getOptions","commit","commitDB","msg","id","type","tags","common_default","tag","newCommit","branch","branchDB","name","order","checkout","merge","mergeDB","otherBranch","customId","overrideType","customTags","currentBranchCheck","otherBranchCheck","currentCommit","otherCommit","error","verifiedBranch","commit2","cherryPick","cherryPickDB","sourceId","targetId","parentCommitId","sourceCommit","sourceCommitBranch","currentCommitId","branch2","upsert","arr","newVal","index","prettyPrintCommitHistory","commitArr","commit3","line","c","label","prettyPrint","node","getCommitsArray","clear2","clear","getBranchesAsObjArray","branchConfig","i","a","b","getBranches","getCommits","o","getCurrentBranch","getDirection","getHead","db","setAccTitle","getAccTitle","getAccDescription","setAccDescription","setDiagramTitle","getDiagramTitle","populate","ast","db2","populateCommonDb","statement","parseStatement","parser2","stmt","parseCommit","parseBranch","parseMerge","parseCheckout","parseCherryPicking","merge2","checkout2","cherryPicking","_a","parser","input","parse","DEFAULT_CONFIG","getConfig2","DEFAULT_GITGRAPH_CONFIG2","LAYOUT_OFFSET","COMMIT_STEP","PX","PY","THEME_COLOR_LIMIT","branchPos","commitPos","defaultPos","allCommitsDict","lanes","maxPos","dir","clear3","drawText","txt","svgLabel","row","tspan","findClosestParent","parents","closestParent","comparisonFunc","targetPosition","parent","parentPosition","_b","findClosestParentBT","maxPosition","setParallelBTPos","sortedKeys","commits","defaultPos2","curPos","roots","calculateCommitPosition","setCommitPosition","setRootPosition","x","y","findClosestParentPos","p","closestParentPos","drawCommitBullet","gBullets","commitPosition","typeClass","branchIndex","commitSymbolType","circle","circle2","drawCommitLabel","gLabels","pos","wrapper","labelBkg","text","bbox","r_x","r_y","drawCommitTags","yOffset","maxTagBboxWidth","maxTagBboxHeight","tagElements","tagValue","rect","hole","tagBbox","yOffset2","h2","ly","yOrigin","getCommitClassType","calculatePosition","commitPos2","defaultCommitPosition","getCommitPosition","isParallelCommits","posWithOffset","drawCommits","svg","modifyGraph","keys","sortKeys","seqA","seqB","shouldRerouteArrow","commitA","commitB","p1","p2","allCommits","branchToGetCurve","isOnBranchToGetCurve","isBetweenCommits","commitX","findLane","y1","y2","depth","candidate","lane","diff","drawArrow","arrowNeedsRerouting","arc","arc2","radius","offset","colorClassNum","lineDef","lineY","lineX","_c","_d","_e","drawArrows","gArrows","drawBranches","branches","g","adjustIndexForTheme","labelElement","bkg","setBranchPosition","rotateCommitLabel","draw","ver","diagObj","diagram2","select","branchLabel","utils_default","setupGraphViewbox","gitGraphRenderer_default","getStyles","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"gitGraphDiagram-NY62KEGX-CkEH2745.js","sources":["../../../../../webui/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: []\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ]\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar DEFAULT_CONFIG = getConfig2();\nvar DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph;\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10).attr(\"y\", commitPosition.y - 10).attr(\"width\", 20).attr(\"height\", 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6).attr(\"y\", commitPosition.y - 6).attr(\"width\", 12).attr(\"height\", 12).attr(\n \"class\",\n `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", commit2.type === commitType.MERGE ? 9 : 10);\n circle.attr(\"class\", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n cross.attr(\n \"d\",\n `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}`\n ).attr(\"class\", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || y === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph) => {\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\"class\", \"arrow arrow\" + colorClassNum % THEME_COLOR_LIMIT);\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches) => {\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", pos);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", pos);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(pos);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\"rx\", 4).attr(\"ry\", 4).attr(\"x\", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 8).attr(\"width\", bbox.width + 18).attr(\"height\", bbox.height + 4);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + \", \" + (pos - bbox.height / 2 - 1) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (pos - bbox.height / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false;\n const db2 = diagObj.db;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false);\n if (DEFAULT_GITGRAPH_CONFIG2.showBranches) {\n drawBranches(diagram2, branches);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(\n void 0,\n diagram2,\n DEFAULT_GITGRAPH_CONFIG2.diagramPadding,\n DEFAULT_GITGRAPH_CONFIG2.useMaxWidth\n );\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true;\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false;\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(\n (i) => `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + i]}; }\n .commit${i} { stroke: ${options[\"git\" + i]}; fill: ${options[\"git\" + i]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + i]}; fill: ${options[\"gitInv\" + i]}; }\n .label${i} { fill: ${options[\"git\" + i]}; }\n .arrow${i} { stroke: ${options[\"git\" + i]}; }\n `\n).join(\"\\n\")}\n\n .branch {\n stroke-width: 1;\n stroke: ${options.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n .commit-reverse {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"names":["commitType","DEFAULT_GITGRAPH_CONFIG","defaultConfig_default","getConfig3","__name","cleanAndMerge","getConfig","state","ImperativeState","config","mainBranchName","mainBranchOrder","getID","random","uniqBy","list","fn","recordMap","out","item","key","setDirection","dir2","setOptions","rawOptString","log","e","getOptions","commit","commitDB","msg","id","type","tags","common_default","tag","newCommit","branch","branchDB","name","order","checkout","merge","mergeDB","otherBranch","customId","overrideType","customTags","currentBranchCheck","otherBranchCheck","currentCommit","otherCommit","error","verifiedBranch","commit2","cherryPick","cherryPickDB","sourceId","targetId","parentCommitId","sourceCommit","sourceCommitBranch","currentCommitId","branch2","upsert","arr","newVal","index","prettyPrintCommitHistory","commitArr","commit3","line","c","label","prettyPrint","node","getCommitsArray","clear2","clear","getBranchesAsObjArray","branchConfig","i","a","b","getBranches","getCommits","o","getCurrentBranch","getDirection","getHead","db","setAccTitle","getAccTitle","getAccDescription","setAccDescription","setDiagramTitle","getDiagramTitle","populate","ast","db2","populateCommonDb","statement","parseStatement","parser2","stmt","parseCommit","parseBranch","parseMerge","parseCheckout","parseCherryPicking","merge2","checkout2","cherryPicking","_a","parser","input","parse","DEFAULT_CONFIG","getConfig2","DEFAULT_GITGRAPH_CONFIG2","LAYOUT_OFFSET","COMMIT_STEP","PX","PY","THEME_COLOR_LIMIT","branchPos","commitPos","defaultPos","allCommitsDict","lanes","maxPos","dir","clear3","drawText","txt","svgLabel","row","tspan","findClosestParent","parents","closestParent","comparisonFunc","targetPosition","parent","parentPosition","_b","findClosestParentBT","maxPosition","setParallelBTPos","sortedKeys","commits","defaultPos2","curPos","roots","calculateCommitPosition","setCommitPosition","setRootPosition","x","y","findClosestParentPos","p","closestParentPos","drawCommitBullet","gBullets","commitPosition","typeClass","branchIndex","commitSymbolType","circle","circle2","drawCommitLabel","gLabels","pos","wrapper","labelBkg","text","bbox","r_x","r_y","drawCommitTags","yOffset","maxTagBboxWidth","maxTagBboxHeight","tagElements","tagValue","rect","hole","tagBbox","yOffset2","h2","ly","yOrigin","getCommitClassType","calculatePosition","commitPos2","defaultCommitPosition","getCommitPosition","isParallelCommits","posWithOffset","drawCommits","svg","modifyGraph","keys","sortKeys","seqA","seqB","shouldRerouteArrow","commitA","commitB","p1","p2","allCommits","branchToGetCurve","isOnBranchToGetCurve","isBetweenCommits","commitX","findLane","y1","y2","depth","candidate","lane","diff","drawArrow","arrowNeedsRerouting","arc","arc2","radius","offset","colorClassNum","lineDef","lineY","lineX","_c","_d","_e","drawArrows","gArrows","drawBranches","branches","g","adjustIndexForTheme","labelElement","bkg","setBranchPosition","rotateCommitLabel","draw","ver","diagObj","diagram2","select","branchLabel","utils_default","setupGraphViewbox","gitGraphRenderer_default","getStyles","options","styles_default","diagram"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/graph-4lxArx4u.js b/massgen/frontend/web/static/assets/graph-ClFPgZSo.js similarity index 98% rename from massgen/frontend/web/static/assets/graph-4lxArx4u.js rename to massgen/frontend/web/static/assets/graph-ClFPgZSo.js index 592aaba52..034e01272 100644 --- a/massgen/frontend/web/static/assets/graph-4lxArx4u.js +++ b/massgen/frontend/web/static/assets/graph-ClFPgZSo.js @@ -1,2 +1,2 @@ -import{b0 as T,b1 as C,b2 as z,b3 as R,b4 as S,b5 as k,b6 as V,b7 as L,b8 as K,b9 as j,ba as ee,bb as te,bc as re,bd as se,be as ne,bf as ie,bg as ae,aS as oe,bh as ue,bi as he,bj as y,bk as v,bl as $}from"./index-yx4Z55Qu.js";import{k as d,g as Y,s as de,e as ce,f as fe,h as ge,j as le,c as be,l as _e,b as pe,m,n as g,r as ye}from"./_baseUniq-LXHsPSjj.js";function me(t,e){return t&&T(e,d(e),t)}function je(t,e){return t&&T(e,C(e),t)}function Te(t,e){return T(t,Y(t),e)}var Oe=Object.getOwnPropertySymbols,q=Oe?function(t){for(var e=[];t;)ce(e,Y(t)),t=z(t);return e}:de;function Ae(t,e){return T(t,q(t),e)}function Ee(t){return fe(t,C,q)}var Ce=Object.prototype,Le=Ce.hasOwnProperty;function we(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Le.call(t,"index")&&(r.index=t.index,r.input=t.input),r}function Ne(t,e){var r=e?R(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var Fe=/\w*$/;function Pe(t){var e=new t.constructor(t.source,Fe.exec(t));return e.lastIndex=t.lastIndex,e}var I=S?S.prototype:void 0,D=I?I.valueOf:void 0;function Se(t){return D?Object(D.call(t)):{}}var ve="[object Boolean]",$e="[object Date]",Ie="[object Map]",De="[object Number]",Me="[object RegExp]",Ge="[object Set]",Ue="[object String]",xe="[object Symbol]",Be="[object ArrayBuffer]",Re="[object DataView]",Ve="[object Float32Array]",Ke="[object Float64Array]",Ye="[object Int8Array]",qe="[object Int16Array]",He="[object Int32Array]",We="[object Uint8Array]",Je="[object Uint8ClampedArray]",Qe="[object Uint16Array]",Xe="[object Uint32Array]";function Ze(t,e,r){var s=t.constructor;switch(e){case Be:return R(t);case ve:case $e:return new s(+t);case Re:return Ne(t,r);case Ve:case Ke:case Ye:case qe:case He:case We:case Je:case Qe:case Xe:return k(t,r);case Ie:return new s;case De:case Ue:return new s(t);case Me:return Pe(t);case Ge:return new s;case xe:return Se(t)}}var ze="[object Map]";function ke(t){return V(t)&&L(t)==ze}var M=j&&j.isMap,et=M?K(M):ke,tt="[object Set]";function rt(t){return V(t)&&L(t)==tt}var G=j&&j.isSet,st=G?K(G):rt,nt=1,it=2,at=4,H="[object Arguments]",ot="[object Array]",ut="[object Boolean]",ht="[object Date]",dt="[object Error]",W="[object Function]",ct="[object GeneratorFunction]",ft="[object Map]",gt="[object Number]",J="[object Object]",lt="[object RegExp]",bt="[object Set]",_t="[object String]",pt="[object Symbol]",yt="[object WeakMap]",mt="[object ArrayBuffer]",jt="[object DataView]",Tt="[object Float32Array]",Ot="[object Float64Array]",At="[object Int8Array]",Et="[object Int16Array]",Ct="[object Int32Array]",Lt="[object Uint8Array]",wt="[object Uint8ClampedArray]",Nt="[object Uint16Array]",Ft="[object Uint32Array]",o={};o[H]=o[ot]=o[mt]=o[jt]=o[ut]=o[ht]=o[Tt]=o[Ot]=o[At]=o[Et]=o[Ct]=o[ft]=o[gt]=o[J]=o[lt]=o[bt]=o[_t]=o[pt]=o[Lt]=o[wt]=o[Nt]=o[Ft]=!0;o[dt]=o[W]=o[yt]=!1;function O(t,e,r,s,n,a){var i,u=e&nt,h=e&it,X=e&at;if(i!==void 0)return i;if(!ee(t))return t;var w=oe(t);if(w){if(i=we(t),!u)return te(t,i)}else{var b=L(t),N=b==W||b==ct;if(re(t))return se(t,u);if(b==J||b==H||N&&!n){if(i=h||N?{}:ne(t),!u)return h?Ae(t,je(i,t)):Te(t,me(i,t))}else{if(!o[b])return n?t:{};i=Ze(t,b,u)}}a||(a=new ie);var F=a.get(t);if(F)return F;a.set(t,i),st(t)?t.forEach(function(c){i.add(O(c,e,r,c,t,a))}):et(t)&&t.forEach(function(c,f){i.set(f,O(c,e,r,f,t,a))});var Z=X?h?Ee:ge:h?C:d,P=w?void 0:Z(t);return le(P||t,function(c,f){P&&(f=c,c=t[f]),ae(i,f,O(c,e,r,f,t,a))}),i}function Pt(t,e){return be(e,function(r){return t[r]})}function A(t){return t==null?[]:Pt(t,d(t))}function _(t){return t===void 0}var St=ue(function(t){return _e(pe(t,1,he,!0))}),vt="\0",l="\0",U="";class Q{constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=y(void 0),this._defaultEdgeLabelFn=y(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[l]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return v(e)||(e=y(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return d(this._nodes)}sources(){var e=this;return m(this.nodes(),function(r){return $(e._in[r])})}sinks(){var e=this;return m(this.nodes(),function(r){return $(e._out[r])})}setNodes(e,r){var s=arguments,n=this;return g(e,function(a){s.length>1?n.setNode(a,r):n.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=l,this._children[e]={},this._children[l][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=s=>this.removeEdge(this._edgeObjs[s]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],g(this.children(e),s=>{this.setParent(s)}),delete this._children[e]),g(d(this._in[e]),r),delete this._in[e],delete this._preds[e],g(d(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(_(r))r=l;else{r+="";for(var s=r;!_(s);s=this.parent(s))if(s===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==l)return r}}children(e){if(_(e)&&(e=l),this._isCompound){var r=this._children[e];if(r)return d(r)}else{if(e===l)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return d(r)}successors(e){var r=this._sucs[e];if(r)return d(r)}neighbors(e){var r=this.predecessors(e);if(r)return St(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var s=this;g(this._nodes,function(i,u){e(u)&&r.setNode(u,i)}),g(this._edgeObjs,function(i){r.hasNode(i.v)&&r.hasNode(i.w)&&r.setEdge(i,s.edge(i))});var n={};function a(i){var u=s.parent(i);return u===void 0||r.hasNode(u)?(n[i]=u,u):u in n?n[u]:a(u)}return this._isCompound&&g(r.nodes(),function(i){r.setParent(i,a(i))}),r}setDefaultEdgeLabel(e){return v(e)||(e=y(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return A(this._edgeObjs)}setPath(e,r){var s=this,n=arguments;return ye(e,function(a,i){return n.length>1?s.setEdge(a,i,r):s.setEdge(a,i),i}),this}setEdge(){var e,r,s,n,a=!1,i=arguments[0];typeof i=="object"&&i!==null&&"v"in i?(e=i.v,r=i.w,s=i.name,arguments.length===2&&(n=arguments[1],a=!0)):(e=i,r=arguments[1],s=arguments[3],arguments.length>2&&(n=arguments[2],a=!0)),e=""+e,r=""+r,_(s)||(s=""+s);var u=p(this._isDirected,e,r,s);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,u))return a&&(this._edgeLabels[u]=n),this;if(!_(s)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[u]=a?n:this._defaultEdgeLabelFn(e,r,s);var h=$t(this._isDirected,e,r,s);return e=h.v,r=h.w,Object.freeze(h),this._edgeObjs[u]=h,x(this._preds[r],e),x(this._sucs[e],r),this._in[r][u]=h,this._out[e][u]=h,this._edgeCount++,this}edge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s);return this._edgeLabels[n]}hasEdge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s);return Object.prototype.hasOwnProperty.call(this._edgeLabels,n)}removeEdge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s),a=this._edgeObjs[n];return a&&(e=a.v,r=a.w,delete this._edgeLabels[n],delete this._edgeObjs[n],B(this._preds[r],e),B(this._sucs[e],r),delete this._in[r][n],delete this._out[e][n],this._edgeCount--),this}inEdges(e,r){var s=this._in[e];if(s){var n=A(s);return r?m(n,function(a){return a.v===r}):n}}outEdges(e,r){var s=this._out[e];if(s){var n=A(s);return r?m(n,function(a){return a.w===r}):n}}nodeEdges(e,r){var s=this.inEdges(e,r);if(s)return s.concat(this.outEdges(e,r))}}Q.prototype._nodeCount=0;Q.prototype._edgeCount=0;function x(t,e){t[e]?t[e]++:t[e]=1}function B(t,e){--t[e]||delete t[e]}function p(t,e,r,s){var n=""+e,a=""+r;if(!t&&n>a){var i=n;n=a,a=i}return n+U+a+U+(_(s)?vt:s)}function $t(t,e,r,s){var n=""+e,a=""+r;if(!t&&n>a){var i=n;n=a,a=i}var u={v:n,w:a};return s&&(u.name=s),u}function E(t,e){return p(t,e.v,e.w,e.name)}export{Q as G,O as b,_ as i,A as v}; -//# sourceMappingURL=graph-4lxArx4u.js.map +import{b0 as T,b1 as C,b2 as z,b3 as R,b4 as S,b5 as k,b6 as V,b7 as L,b8 as K,b9 as j,ba as ee,bb as te,bc as re,bd as se,be as ne,bf as ie,bg as ae,aS as oe,bh as ue,bi as he,bj as y,bk as v,bl as $}from"./index-DbSnkTMx.js";import{k as d,g as Y,s as de,e as ce,f as fe,h as ge,j as le,c as be,l as _e,b as pe,m,n as g,r as ye}from"./_baseUniq-CR-Qd8A8.js";function me(t,e){return t&&T(e,d(e),t)}function je(t,e){return t&&T(e,C(e),t)}function Te(t,e){return T(t,Y(t),e)}var Oe=Object.getOwnPropertySymbols,q=Oe?function(t){for(var e=[];t;)ce(e,Y(t)),t=z(t);return e}:de;function Ae(t,e){return T(t,q(t),e)}function Ee(t){return fe(t,C,q)}var Ce=Object.prototype,Le=Ce.hasOwnProperty;function we(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Le.call(t,"index")&&(r.index=t.index,r.input=t.input),r}function Ne(t,e){var r=e?R(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var Fe=/\w*$/;function Pe(t){var e=new t.constructor(t.source,Fe.exec(t));return e.lastIndex=t.lastIndex,e}var I=S?S.prototype:void 0,D=I?I.valueOf:void 0;function Se(t){return D?Object(D.call(t)):{}}var ve="[object Boolean]",$e="[object Date]",Ie="[object Map]",De="[object Number]",Me="[object RegExp]",Ge="[object Set]",Ue="[object String]",xe="[object Symbol]",Be="[object ArrayBuffer]",Re="[object DataView]",Ve="[object Float32Array]",Ke="[object Float64Array]",Ye="[object Int8Array]",qe="[object Int16Array]",He="[object Int32Array]",We="[object Uint8Array]",Je="[object Uint8ClampedArray]",Qe="[object Uint16Array]",Xe="[object Uint32Array]";function Ze(t,e,r){var s=t.constructor;switch(e){case Be:return R(t);case ve:case $e:return new s(+t);case Re:return Ne(t,r);case Ve:case Ke:case Ye:case qe:case He:case We:case Je:case Qe:case Xe:return k(t,r);case Ie:return new s;case De:case Ue:return new s(t);case Me:return Pe(t);case Ge:return new s;case xe:return Se(t)}}var ze="[object Map]";function ke(t){return V(t)&&L(t)==ze}var M=j&&j.isMap,et=M?K(M):ke,tt="[object Set]";function rt(t){return V(t)&&L(t)==tt}var G=j&&j.isSet,st=G?K(G):rt,nt=1,it=2,at=4,H="[object Arguments]",ot="[object Array]",ut="[object Boolean]",ht="[object Date]",dt="[object Error]",W="[object Function]",ct="[object GeneratorFunction]",ft="[object Map]",gt="[object Number]",J="[object Object]",lt="[object RegExp]",bt="[object Set]",_t="[object String]",pt="[object Symbol]",yt="[object WeakMap]",mt="[object ArrayBuffer]",jt="[object DataView]",Tt="[object Float32Array]",Ot="[object Float64Array]",At="[object Int8Array]",Et="[object Int16Array]",Ct="[object Int32Array]",Lt="[object Uint8Array]",wt="[object Uint8ClampedArray]",Nt="[object Uint16Array]",Ft="[object Uint32Array]",o={};o[H]=o[ot]=o[mt]=o[jt]=o[ut]=o[ht]=o[Tt]=o[Ot]=o[At]=o[Et]=o[Ct]=o[ft]=o[gt]=o[J]=o[lt]=o[bt]=o[_t]=o[pt]=o[Lt]=o[wt]=o[Nt]=o[Ft]=!0;o[dt]=o[W]=o[yt]=!1;function O(t,e,r,s,n,a){var i,u=e&nt,h=e&it,X=e&at;if(i!==void 0)return i;if(!ee(t))return t;var w=oe(t);if(w){if(i=we(t),!u)return te(t,i)}else{var b=L(t),N=b==W||b==ct;if(re(t))return se(t,u);if(b==J||b==H||N&&!n){if(i=h||N?{}:ne(t),!u)return h?Ae(t,je(i,t)):Te(t,me(i,t))}else{if(!o[b])return n?t:{};i=Ze(t,b,u)}}a||(a=new ie);var F=a.get(t);if(F)return F;a.set(t,i),st(t)?t.forEach(function(c){i.add(O(c,e,r,c,t,a))}):et(t)&&t.forEach(function(c,f){i.set(f,O(c,e,r,f,t,a))});var Z=X?h?Ee:ge:h?C:d,P=w?void 0:Z(t);return le(P||t,function(c,f){P&&(f=c,c=t[f]),ae(i,f,O(c,e,r,f,t,a))}),i}function Pt(t,e){return be(e,function(r){return t[r]})}function A(t){return t==null?[]:Pt(t,d(t))}function _(t){return t===void 0}var St=ue(function(t){return _e(pe(t,1,he,!0))}),vt="\0",l="\0",U="";class Q{constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=y(void 0),this._defaultEdgeLabelFn=y(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[l]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return v(e)||(e=y(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return d(this._nodes)}sources(){var e=this;return m(this.nodes(),function(r){return $(e._in[r])})}sinks(){var e=this;return m(this.nodes(),function(r){return $(e._out[r])})}setNodes(e,r){var s=arguments,n=this;return g(e,function(a){s.length>1?n.setNode(a,r):n.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=l,this._children[e]={},this._children[l][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=s=>this.removeEdge(this._edgeObjs[s]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],g(this.children(e),s=>{this.setParent(s)}),delete this._children[e]),g(d(this._in[e]),r),delete this._in[e],delete this._preds[e],g(d(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(_(r))r=l;else{r+="";for(var s=r;!_(s);s=this.parent(s))if(s===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==l)return r}}children(e){if(_(e)&&(e=l),this._isCompound){var r=this._children[e];if(r)return d(r)}else{if(e===l)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return d(r)}successors(e){var r=this._sucs[e];if(r)return d(r)}neighbors(e){var r=this.predecessors(e);if(r)return St(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var s=this;g(this._nodes,function(i,u){e(u)&&r.setNode(u,i)}),g(this._edgeObjs,function(i){r.hasNode(i.v)&&r.hasNode(i.w)&&r.setEdge(i,s.edge(i))});var n={};function a(i){var u=s.parent(i);return u===void 0||r.hasNode(u)?(n[i]=u,u):u in n?n[u]:a(u)}return this._isCompound&&g(r.nodes(),function(i){r.setParent(i,a(i))}),r}setDefaultEdgeLabel(e){return v(e)||(e=y(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return A(this._edgeObjs)}setPath(e,r){var s=this,n=arguments;return ye(e,function(a,i){return n.length>1?s.setEdge(a,i,r):s.setEdge(a,i),i}),this}setEdge(){var e,r,s,n,a=!1,i=arguments[0];typeof i=="object"&&i!==null&&"v"in i?(e=i.v,r=i.w,s=i.name,arguments.length===2&&(n=arguments[1],a=!0)):(e=i,r=arguments[1],s=arguments[3],arguments.length>2&&(n=arguments[2],a=!0)),e=""+e,r=""+r,_(s)||(s=""+s);var u=p(this._isDirected,e,r,s);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,u))return a&&(this._edgeLabels[u]=n),this;if(!_(s)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[u]=a?n:this._defaultEdgeLabelFn(e,r,s);var h=$t(this._isDirected,e,r,s);return e=h.v,r=h.w,Object.freeze(h),this._edgeObjs[u]=h,x(this._preds[r],e),x(this._sucs[e],r),this._in[r][u]=h,this._out[e][u]=h,this._edgeCount++,this}edge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s);return this._edgeLabels[n]}hasEdge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s);return Object.prototype.hasOwnProperty.call(this._edgeLabels,n)}removeEdge(e,r,s){var n=arguments.length===1?E(this._isDirected,arguments[0]):p(this._isDirected,e,r,s),a=this._edgeObjs[n];return a&&(e=a.v,r=a.w,delete this._edgeLabels[n],delete this._edgeObjs[n],B(this._preds[r],e),B(this._sucs[e],r),delete this._in[r][n],delete this._out[e][n],this._edgeCount--),this}inEdges(e,r){var s=this._in[e];if(s){var n=A(s);return r?m(n,function(a){return a.v===r}):n}}outEdges(e,r){var s=this._out[e];if(s){var n=A(s);return r?m(n,function(a){return a.w===r}):n}}nodeEdges(e,r){var s=this.inEdges(e,r);if(s)return s.concat(this.outEdges(e,r))}}Q.prototype._nodeCount=0;Q.prototype._edgeCount=0;function x(t,e){t[e]?t[e]++:t[e]=1}function B(t,e){--t[e]||delete t[e]}function p(t,e,r,s){var n=""+e,a=""+r;if(!t&&n>a){var i=n;n=a,a=i}return n+U+a+U+(_(s)?vt:s)}function $t(t,e,r,s){var n=""+e,a=""+r;if(!t&&n>a){var i=n;n=a,a=i}var u={v:n,w:a};return s&&(u.name=s),u}function E(t,e){return p(t,e.v,e.w,e.name)}export{Q as G,O as b,_ as i,A as v}; +//# sourceMappingURL=graph-ClFPgZSo.js.map diff --git a/massgen/frontend/web/static/assets/graph-4lxArx4u.js.map b/massgen/frontend/web/static/assets/graph-ClFPgZSo.js.map similarity index 99% rename from massgen/frontend/web/static/assets/graph-4lxArx4u.js.map rename to massgen/frontend/web/static/assets/graph-ClFPgZSo.js.map index 4980ec7b0..ca90c13df 100644 --- a/massgen/frontend/web/static/assets/graph-4lxArx4u.js.map +++ b/massgen/frontend/web/static/assets/graph-ClFPgZSo.js.map @@ -1 +1 @@ -{"version":3,"file":"graph-4lxArx4u.js","sources":["../../../../../webui/node_modules/lodash-es/_baseAssign.js","../../../../../webui/node_modules/lodash-es/_baseAssignIn.js","../../../../../webui/node_modules/lodash-es/_copySymbols.js","../../../../../webui/node_modules/lodash-es/_getSymbolsIn.js","../../../../../webui/node_modules/lodash-es/_copySymbolsIn.js","../../../../../webui/node_modules/lodash-es/_getAllKeysIn.js","../../../../../webui/node_modules/lodash-es/_initCloneArray.js","../../../../../webui/node_modules/lodash-es/_cloneDataView.js","../../../../../webui/node_modules/lodash-es/_cloneRegExp.js","../../../../../webui/node_modules/lodash-es/_cloneSymbol.js","../../../../../webui/node_modules/lodash-es/_initCloneByTag.js","../../../../../webui/node_modules/lodash-es/_baseIsMap.js","../../../../../webui/node_modules/lodash-es/isMap.js","../../../../../webui/node_modules/lodash-es/_baseIsSet.js","../../../../../webui/node_modules/lodash-es/isSet.js","../../../../../webui/node_modules/lodash-es/_baseClone.js","../../../../../webui/node_modules/lodash-es/_baseValues.js","../../../../../webui/node_modules/lodash-es/values.js","../../../../../webui/node_modules/lodash-es/isUndefined.js","../../../../../webui/node_modules/lodash-es/union.js","../../../../../webui/node_modules/dagre-d3-es/src/graphlib/graph.js"],"sourcesContent":["import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"],"names":["baseAssign","object","source","copyObject","keys","baseAssignIn","keysIn","copySymbols","getSymbols","nativeGetSymbols","getSymbolsIn","result","arrayPush","getPrototype","stubArray","copySymbolsIn","getAllKeysIn","baseGetAllKeys","objectProto","hasOwnProperty","initCloneArray","array","length","cloneDataView","dataView","isDeep","buffer","cloneArrayBuffer","reFlags","cloneRegExp","regexp","symbolProto","Symbol","symbolValueOf","cloneSymbol","symbol","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","tag","Ctor","cloneTypedArray","baseIsMap","value","isObjectLike","getTag","nodeIsMap","nodeUtil","isMap","baseUnary","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","objectTag","weakMapTag","cloneableTags","baseClone","bitmask","customizer","key","stack","isFlat","isFull","isObject","isArr","isArray","copyArray","isFunc","isBuffer","cloneBuffer","initCloneObject","Stack","stacked","subValue","keysFunc","getAllKeys","props","arrayEach","assignValue","baseValues","arrayMap","values","isUndefined","union","baseRest","arrays","baseUniq","baseFlatten","isArrayLikeObject","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","Graph","opts","_.constant","label","newDefault","_.isFunction","_.keys","self","_.filter","v","_.isEmpty","vs","args","_.each","removeEdge","e","child","parent","_.isUndefined","ancestor","children","predsV","sucsV","preds","_.union","neighbors","filter","copy","parents","findParent","_.values","_.reduce","w","name","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","edge","decrementOrRemoveEntry","u","inV","edges","outV","inEdges","map","k","isDirected","v_","w_","tmp"],"mappings":"uWAYA,SAASA,GAAWC,EAAQC,EAAQ,CAClC,OAAOD,GAAUE,EAAWD,EAAQE,EAAKF,CAAM,EAAGD,CAAM,CAC1D,CCFA,SAASI,GAAaJ,EAAQC,EAAQ,CACpC,OAAOD,GAAUE,EAAWD,EAAQI,EAAOJ,CAAM,EAAGD,CAAM,CAC5D,CCHA,SAASM,GAAYL,EAAQD,EAAQ,CACnC,OAAOE,EAAWD,EAAQM,EAAWN,CAAM,EAAGD,CAAM,CACtD,CCPA,IAAIQ,GAAmB,OAAO,sBAS1BC,EAAgBD,GAA+B,SAASR,EAAQ,CAElE,QADIU,EAAS,CAAA,EACNV,GACLW,GAAUD,EAAQH,EAAWP,CAAM,CAAC,EACpCA,EAASY,EAAaZ,CAAM,EAE9B,OAAOU,CACT,EAPuCG,GCJvC,SAASC,GAAcb,EAAQD,EAAQ,CACrC,OAAOE,EAAWD,EAAQQ,EAAaR,CAAM,EAAGD,CAAM,CACxD,CCDA,SAASe,GAAaf,EAAQ,CAC5B,OAAOgB,GAAehB,EAAQK,EAAQI,CAAY,CACpD,CCbA,IAAIQ,GAAc,OAAO,UAGrBC,GAAiBD,GAAY,eASjC,SAASE,GAAeC,EAAO,CAC7B,IAAIC,EAASD,EAAM,OACfV,EAAS,IAAIU,EAAM,YAAYC,CAAM,EAGzC,OAAIA,GAAU,OAAOD,EAAM,CAAC,GAAK,UAAYF,GAAe,KAAKE,EAAO,OAAO,IAC7EV,EAAO,MAAQU,EAAM,MACrBV,EAAO,MAAQU,EAAM,OAEhBV,CACT,CCbA,SAASY,GAAcC,EAAUC,EAAQ,CACvC,IAAIC,EAASD,EAASE,EAAiBH,EAAS,MAAM,EAAIA,EAAS,OACnE,OAAO,IAAIA,EAAS,YAAYE,EAAQF,EAAS,WAAYA,EAAS,UAAU,CAClF,CCZA,IAAII,GAAU,OASd,SAASC,GAAYC,EAAQ,CAC3B,IAAInB,EAAS,IAAImB,EAAO,YAAYA,EAAO,OAAQF,GAAQ,KAAKE,CAAM,CAAC,EACvE,OAAAnB,EAAO,UAAYmB,EAAO,UACnBnB,CACT,CCXA,IAAIoB,EAAcC,EAASA,EAAO,UAAY,OAC1CC,EAAgBF,EAAcA,EAAY,QAAU,OASxD,SAASG,GAAYC,EAAQ,CAC3B,OAAOF,EAAgB,OAAOA,EAAc,KAAKE,CAAM,CAAC,EAAI,CAAA,CAC9D,CCRA,IAAIC,GAAU,mBACVC,GAAU,gBACVC,GAAS,eACTC,GAAY,kBACZC,GAAY,kBACZC,GAAS,eACTC,GAAY,kBACZC,GAAY,kBAEZC,GAAiB,uBACjBC,GAAc,oBACdC,GAAa,wBACbC,GAAa,wBACbC,GAAU,qBACVC,GAAW,sBACXC,GAAW,sBACXC,GAAW,sBACXC,GAAkB,6BAClBC,GAAY,uBACZC,GAAY,uBAchB,SAASC,GAAetD,EAAQuD,EAAK/B,EAAQ,CAC3C,IAAIgC,EAAOxD,EAAO,YAClB,OAAQuD,EAAG,CACT,KAAKZ,GACH,OAAOjB,EAAiB1B,CAAM,EAEhC,KAAKmC,GACL,KAAKC,GACH,OAAO,IAAIoB,EAAK,CAACxD,CAAM,EAEzB,KAAK4C,GACH,OAAOtB,GAActB,EAAQwB,CAAM,EAErC,KAAKqB,GAAY,KAAKC,GACtB,KAAKC,GAAS,KAAKC,GAAU,KAAKC,GAClC,KAAKC,GAAU,KAAKC,GAAiB,KAAKC,GAAW,KAAKC,GACxD,OAAOI,EAAgBzD,EAAQwB,CAAM,EAEvC,KAAKa,GACH,OAAO,IAAImB,EAEb,KAAKlB,GACL,KAAKG,GACH,OAAO,IAAIe,EAAKxD,CAAM,EAExB,KAAKuC,GACH,OAAOX,GAAY5B,CAAM,EAE3B,KAAKwC,GACH,OAAO,IAAIgB,EAEb,KAAKd,GACH,OAAOT,GAAYjC,CAAM,CAC/B,CACA,CCtEA,IAAIqC,GAAS,eASb,SAASqB,GAAUC,EAAO,CACxB,OAAOC,EAAaD,CAAK,GAAKE,EAAOF,CAAK,GAAKtB,EACjD,CCVA,IAAIyB,EAAYC,GAAYA,EAAS,MAmBjCC,GAAQF,EAAYG,EAAUH,CAAS,EAAIJ,GCpB3ClB,GAAS,eASb,SAAS0B,GAAUP,EAAO,CACxB,OAAOC,EAAaD,CAAK,GAAKE,EAAOF,CAAK,GAAKnB,EACjD,CCVA,IAAI2B,EAAYJ,GAAYA,EAAS,MAmBjCK,GAAQD,EAAYF,EAAUE,CAAS,EAAID,GCA3CG,GAAkB,EAClBC,GAAkB,EAClBC,GAAqB,EAGrBC,EAAU,qBACVC,GAAW,iBACXtC,GAAU,mBACVC,GAAU,gBACVsC,GAAW,iBACXC,EAAU,oBACVC,GAAS,6BACTvC,GAAS,eACTC,GAAY,kBACZuC,EAAY,kBACZtC,GAAY,kBACZC,GAAS,eACTC,GAAY,kBACZC,GAAY,kBACZoC,GAAa,mBAEbnC,GAAiB,uBACjBC,GAAc,oBACdC,GAAa,wBACbC,GAAa,wBACbC,GAAU,qBACVC,GAAW,sBACXC,GAAW,sBACXC,GAAW,sBACXC,GAAkB,6BAClBC,GAAY,uBACZC,GAAY,uBAGZ0B,EAAgB,CAAA,EACpBA,EAAcP,CAAO,EAAIO,EAAcN,EAAQ,EAC/CM,EAAcpC,EAAc,EAAIoC,EAAcnC,EAAW,EACzDmC,EAAc5C,EAAO,EAAI4C,EAAc3C,EAAO,EAC9C2C,EAAclC,EAAU,EAAIkC,EAAcjC,EAAU,EACpDiC,EAAchC,EAAO,EAAIgC,EAAc/B,EAAQ,EAC/C+B,EAAc9B,EAAQ,EAAI8B,EAAc1C,EAAM,EAC9C0C,EAAczC,EAAS,EAAIyC,EAAcF,CAAS,EAClDE,EAAcxC,EAAS,EAAIwC,EAAcvC,EAAM,EAC/CuC,EAActC,EAAS,EAAIsC,EAAcrC,EAAS,EAClDqC,EAAc7B,EAAQ,EAAI6B,EAAc5B,EAAe,EACvD4B,EAAc3B,EAAS,EAAI2B,EAAc1B,EAAS,EAAI,GACtD0B,EAAcL,EAAQ,EAAIK,EAAcJ,CAAO,EAC/CI,EAAcD,EAAU,EAAI,GAkB5B,SAASE,EAAUrB,EAAOsB,EAASC,EAAYC,EAAKnF,EAAQoF,EAAO,CACjE,IAAI1E,EACAc,EAASyD,EAAUZ,GACnBgB,EAASJ,EAAUX,GACnBgB,EAASL,EAAUV,GAKvB,GAAI7D,IAAW,OACb,OAAOA,EAET,GAAI,CAAC6E,GAAS5B,CAAK,EACjB,OAAOA,EAET,IAAI6B,EAAQC,GAAQ9B,CAAK,EACzB,GAAI6B,GAEF,GADA9E,EAASS,GAAewC,CAAK,EACzB,CAACnC,EACH,OAAOkE,GAAU/B,EAAOjD,CAAM,MAE3B,CACL,IAAI6C,EAAMM,EAAOF,CAAK,EAClBgC,EAASpC,GAAOoB,GAAWpB,GAAOqB,GAEtC,GAAIgB,GAASjC,CAAK,EAChB,OAAOkC,GAAYlC,EAAOnC,CAAM,EAElC,GAAI+B,GAAOsB,GAAatB,GAAOiB,GAAYmB,GAAU,CAAC3F,GAEpD,GADAU,EAAU2E,GAAUM,EAAU,CAAA,EAAKG,GAAgBnC,CAAK,EACpD,CAACnC,EACH,OAAO6D,EACHvE,GAAc6C,EAAOvD,GAAaM,EAAQiD,CAAK,CAAC,EAChDrD,GAAYqD,EAAO5D,GAAWW,EAAQiD,CAAK,CAAC,MAE7C,CACL,GAAI,CAACoB,EAAcxB,CAAG,EACpB,OAAOvD,EAAS2D,EAAQ,CAAA,EAE1BjD,EAAS4C,GAAeK,EAAOJ,EAAK/B,CAAM,CAC5C,CACF,CAEA4D,IAAUA,EAAQ,IAAIW,IACtB,IAAIC,EAAUZ,EAAM,IAAIzB,CAAK,EAC7B,GAAIqC,EACF,OAAOA,EAETZ,EAAM,IAAIzB,EAAOjD,CAAM,EAEnB0D,GAAMT,CAAK,EACbA,EAAM,QAAQ,SAASsC,EAAU,CAC/BvF,EAAO,IAAIsE,EAAUiB,EAAUhB,EAASC,EAAYe,EAAUtC,EAAOyB,CAAK,CAAC,CAC7E,CAAC,EACQpB,GAAML,CAAK,GACpBA,EAAM,QAAQ,SAASsC,EAAUd,EAAK,CACpCzE,EAAO,IAAIyE,EAAKH,EAAUiB,EAAUhB,EAASC,EAAYC,EAAKxB,EAAOyB,CAAK,CAAC,CAC7E,CAAC,EAGH,IAAIc,EAAWZ,EACVD,EAAStE,GAAeoF,GACxBd,EAAShF,EAASF,EAEnBiG,EAAQZ,EAAQ,OAAYU,EAASvC,CAAK,EAC9C,OAAA0C,GAAUD,GAASzC,EAAO,SAASsC,EAAUd,EAAK,CAC5CiB,IACFjB,EAAMc,EACNA,EAAWtC,EAAMwB,CAAG,GAGtBmB,GAAY5F,EAAQyE,EAAKH,EAAUiB,EAAUhB,EAASC,EAAYC,EAAKxB,EAAOyB,CAAK,CAAC,CACtF,CAAC,EACM1E,CACT,CCvJA,SAAS6F,GAAWvG,EAAQoG,EAAO,CACjC,OAAOI,GAASJ,EAAO,SAASjB,EAAK,CACnC,OAAOnF,EAAOmF,CAAG,CACnB,CAAC,CACH,CCaA,SAASsB,EAAOzG,EAAQ,CACtB,OAAOA,GAAU,KAAO,CAAA,EAAKuG,GAAWvG,EAAQG,EAAKH,CAAM,CAAC,CAC9D,CCdA,SAAS0G,EAAY/C,EAAO,CAC1B,OAAOA,IAAU,MACnB,CCEA,IAAIgD,GAAQC,GAAS,SAASC,EAAQ,CACpC,OAAOC,GAASC,GAAYF,EAAQ,EAAGG,GAAmB,EAAI,CAAC,CACjE,CAAC,ECrBGC,GAAoB,KACpBC,EAAa,KACbC,EAAiB,IAqBd,MAAMC,CAAM,CACjB,YAAYC,EAAO,GAAI,CACrB,KAAK,YAAc,OAAO,UAAU,eAAe,KAAKA,EAAM,UAAU,EACpEA,EAAK,SACL,GACJ,KAAK,cAAgB,OAAO,UAAU,eAAe,KAAKA,EAAM,YAAY,EACxEA,EAAK,WACL,GACJ,KAAK,YAAc,OAAO,UAAU,eAAe,KAAKA,EAAM,UAAU,EACpEA,EAAK,SACL,GAGJ,KAAK,OAAS,OAGd,KAAK,oBAAsBC,EAAW,MAAS,EAG/C,KAAK,oBAAsBA,EAAW,MAAS,EAG/C,KAAK,OAAS,CAAA,EAEV,KAAK,cAEP,KAAK,QAAU,CAAA,EAGf,KAAK,UAAY,CAAA,EACjB,KAAK,UAAUJ,CAAU,EAAI,CAAA,GAI/B,KAAK,IAAM,CAAA,EAGX,KAAK,OAAS,CAAA,EAGd,KAAK,KAAO,CAAA,EAGZ,KAAK,MAAQ,CAAA,EAGb,KAAK,UAAY,CAAA,EAGjB,KAAK,YAAc,CAAA,CACrB,CAEA,YAAa,CACX,OAAO,KAAK,WACd,CACA,cAAe,CACb,OAAO,KAAK,aACd,CACA,YAAa,CACX,OAAO,KAAK,WACd,CACA,SAASK,EAAO,CACd,YAAK,OAASA,EACP,IACT,CACA,OAAQ,CACN,OAAO,KAAK,MACd,CAEA,oBAAoBC,EAAY,CAC9B,OAAKC,EAAaD,CAAU,IAC1BA,EAAaF,EAAWE,CAAU,GAEpC,KAAK,oBAAsBA,EACpB,IACT,CACA,WAAY,CACV,OAAO,KAAK,UACd,CACA,OAAQ,CACN,OAAOE,EAAO,KAAK,MAAM,CAC3B,CACA,SAAU,CACR,IAAIC,EAAO,KACX,OAAOC,EAAS,KAAK,MAAK,EAAI,SAAUC,EAAG,CACzC,OAAOC,EAAUH,EAAK,IAAIE,CAAC,CAAC,CAC9B,CAAC,CACH,CACA,OAAQ,CACN,IAAIF,EAAO,KACX,OAAOC,EAAS,KAAK,MAAK,EAAI,SAAUC,EAAG,CACzC,OAAOC,EAAUH,EAAK,KAAKE,CAAC,CAAC,CAC/B,CAAC,CACH,CACA,SAASE,EAAIpE,EAAO,CAClB,IAAIqE,EAAO,UACPL,EAAO,KACXM,OAAAA,EAAOF,EAAI,SAAUF,EAAG,CAClBG,EAAK,OAAS,EAChBL,EAAK,QAAQE,EAAGlE,CAAK,EAErBgE,EAAK,QAAQE,CAAC,CAElB,CAAC,EACM,IACT,CACA,QAAQA,EAAGlE,EAAO,CAChB,OAAI,OAAO,UAAU,eAAe,KAAK,KAAK,OAAQkE,CAAC,GACjD,UAAU,OAAS,IACrB,KAAK,OAAOA,CAAC,EAAIlE,GAEZ,OAIT,KAAK,OAAOkE,CAAC,EAAI,UAAU,OAAS,EAAIlE,EAAQ,KAAK,oBAAoBkE,CAAC,EACtE,KAAK,cACP,KAAK,QAAQA,CAAC,EAAIX,EAClB,KAAK,UAAUW,CAAC,EAAI,CAAA,EACpB,KAAK,UAAUX,CAAU,EAAEW,CAAC,EAAI,IAElC,KAAK,IAAIA,CAAC,EAAI,CAAA,EACd,KAAK,OAAOA,CAAC,EAAI,CAAA,EACjB,KAAK,KAAKA,CAAC,EAAI,CAAA,EACf,KAAK,MAAMA,CAAC,EAAI,CAAA,EAChB,EAAE,KAAK,WACA,KACT,CACA,KAAKA,EAAG,CACN,OAAO,KAAK,OAAOA,CAAC,CACtB,CACA,QAAQA,EAAG,CACT,OAAO,OAAO,UAAU,eAAe,KAAK,KAAK,OAAQA,CAAC,CAC5D,CACA,WAAWA,EAAG,CACZ,GAAI,OAAO,UAAU,eAAe,KAAK,KAAK,OAAQA,CAAC,EAAG,CACxD,IAAIK,EAAcC,GAAM,KAAK,WAAW,KAAK,UAAUA,CAAC,CAAC,EACzD,OAAO,KAAK,OAAON,CAAC,EAChB,KAAK,cACP,KAAK,4BAA4BA,CAAC,EAClC,OAAO,KAAK,QAAQA,CAAC,EACrBI,EAAO,KAAK,SAASJ,CAAC,EAAIO,GAAU,CAClC,KAAK,UAAUA,CAAK,CACtB,CAAC,EACD,OAAO,KAAK,UAAUP,CAAC,GAEzBI,EAAOP,EAAO,KAAK,IAAIG,CAAC,CAAC,EAAGK,CAAU,EACtC,OAAO,KAAK,IAAIL,CAAC,EACjB,OAAO,KAAK,OAAOA,CAAC,EACpBI,EAAOP,EAAO,KAAK,KAAKG,CAAC,CAAC,EAAGK,CAAU,EACvC,OAAO,KAAK,KAAKL,CAAC,EAClB,OAAO,KAAK,MAAMA,CAAC,EACnB,EAAE,KAAK,UACT,CACA,OAAO,IACT,CACA,UAAUA,EAAGQ,EAAQ,CACnB,GAAI,CAAC,KAAK,YACR,MAAM,IAAI,MAAM,2CAA2C,EAG7D,GAAIC,EAAcD,CAAM,EACtBA,EAASnB,MACJ,CAELmB,GAAU,GACV,QAASE,EAAWF,EAAQ,CAACC,EAAcC,CAAQ,EAAGA,EAAW,KAAK,OAAOA,CAAQ,EACnF,GAAIA,IAAaV,EACf,MAAM,IAAI,MAAM,WAAaQ,EAAS,iBAAmBR,EAAI,uBAAuB,EAIxF,KAAK,QAAQQ,CAAM,CACrB,CAEA,YAAK,QAAQR,CAAC,EACd,KAAK,4BAA4BA,CAAC,EAClC,KAAK,QAAQA,CAAC,EAAIQ,EAClB,KAAK,UAAUA,CAAM,EAAER,CAAC,EAAI,GACrB,IACT,CACA,4BAA4BA,EAAG,CAC7B,OAAO,KAAK,UAAU,KAAK,QAAQA,CAAC,CAAC,EAAEA,CAAC,CAC1C,CACA,OAAOA,EAAG,CACR,GAAI,KAAK,YAAa,CACpB,IAAIQ,EAAS,KAAK,QAAQR,CAAC,EAC3B,GAAIQ,IAAWnB,EACb,OAAOmB,CAEX,CACF,CACA,SAASR,EAAG,CAKV,GAJIS,EAAcT,CAAC,IACjBA,EAAIX,GAGF,KAAK,YAAa,CACpB,IAAIsB,EAAW,KAAK,UAAUX,CAAC,EAC/B,GAAIW,EACF,OAAOd,EAAOc,CAAQ,CAE1B,KAAO,IAAIX,IAAMX,EACf,OAAO,KAAK,MAAK,EACZ,GAAI,KAAK,QAAQW,CAAC,EACvB,MAAO,CAAA,EAEX,CACA,aAAaA,EAAG,CACd,IAAIY,EAAS,KAAK,OAAOZ,CAAC,EAC1B,GAAIY,EACF,OAAOf,EAAOe,CAAM,CAExB,CACA,WAAWZ,EAAG,CACZ,IAAIa,EAAQ,KAAK,MAAMb,CAAC,EACxB,GAAIa,EACF,OAAOhB,EAAOgB,CAAK,CAEvB,CACA,UAAUb,EAAG,CACX,IAAIc,EAAQ,KAAK,aAAad,CAAC,EAC/B,GAAIc,EACF,OAAOC,GAAQD,EAAO,KAAK,WAAWd,CAAC,CAAC,CAE5C,CACA,OAAOA,EAAG,CACR,IAAIgB,EACJ,OAAI,KAAK,aACPA,EAAY,KAAK,WAAWhB,CAAC,EAE7BgB,EAAY,KAAK,UAAUhB,CAAC,EAEvBgB,EAAU,SAAW,CAC9B,CACA,YAAYC,EAAQ,CAElB,IAAIC,EAAO,IAAI,KAAK,YAAY,CAC9B,SAAU,KAAK,YACf,WAAY,KAAK,cACjB,SAAU,KAAK,WACrB,CAAK,EAEDA,EAAK,SAAS,KAAK,OAAO,EAE1B,IAAIpB,EAAO,KACXM,EAAO,KAAK,OAAQ,SAAUtE,EAAOkE,EAAG,CAClCiB,EAAOjB,CAAC,GACVkB,EAAK,QAAQlB,EAAGlE,CAAK,CAEzB,CAAC,EAEDsE,EAAO,KAAK,UAAW,SAAUE,EAAG,CAE9BY,EAAK,QAAQZ,EAAE,CAAC,GAAKY,EAAK,QAAQZ,EAAE,CAAC,GACvCY,EAAK,QAAQZ,EAAGR,EAAK,KAAKQ,CAAC,CAAC,CAEhC,CAAC,EAED,IAAIa,EAAU,CAAA,EACd,SAASC,EAAWpB,EAAG,CACrB,IAAIQ,EAASV,EAAK,OAAOE,CAAC,EAC1B,OAAIQ,IAAW,QAAaU,EAAK,QAAQV,CAAM,GAC7CW,EAAQnB,CAAC,EAAIQ,EACNA,GACEA,KAAUW,EACZA,EAAQX,CAAM,EAEdY,EAAWZ,CAAM,CAE5B,CAEA,OAAI,KAAK,aACPJ,EAAOc,EAAK,MAAK,EAAI,SAAUlB,EAAG,CAChCkB,EAAK,UAAUlB,EAAGoB,EAAWpB,CAAC,CAAC,CACjC,CAAC,EAGIkB,CACT,CAEA,oBAAoBvB,EAAY,CAC9B,OAAKC,EAAaD,CAAU,IAC1BA,EAAaF,EAAWE,CAAU,GAEpC,KAAK,oBAAsBA,EACpB,IACT,CACA,WAAY,CACV,OAAO,KAAK,UACd,CACA,OAAQ,CACN,OAAO0B,EAAS,KAAK,SAAS,CAChC,CACA,QAAQnB,EAAIpE,EAAO,CACjB,IAAIgE,EAAO,KACPK,EAAO,UACXmB,OAAAA,GAASpB,EAAI,SAAUF,EAAGuB,EAAG,CAC3B,OAAIpB,EAAK,OAAS,EAChBL,EAAK,QAAQE,EAAGuB,EAAGzF,CAAK,EAExBgE,EAAK,QAAQE,EAAGuB,CAAC,EAEZA,CACT,CAAC,EACM,IACT,CAKA,SAAU,CACR,IAAIvB,EAAGuB,EAAGC,EAAM1F,EACZ2F,EAAiB,GACjBC,EAAO,UAAU,CAAC,EAElB,OAAOA,GAAS,UAAYA,IAAS,MAAQ,MAAOA,GACtD1B,EAAI0B,EAAK,EACTH,EAAIG,EAAK,EACTF,EAAOE,EAAK,KACR,UAAU,SAAW,IACvB5F,EAAQ,UAAU,CAAC,EACnB2F,EAAiB,MAGnBzB,EAAI0B,EACJH,EAAI,UAAU,CAAC,EACfC,EAAO,UAAU,CAAC,EACd,UAAU,OAAS,IACrB1F,EAAQ,UAAU,CAAC,EACnB2F,EAAiB,KAIrBzB,EAAI,GAAKA,EACTuB,EAAI,GAAKA,EACJd,EAAce,CAAI,IACrBA,EAAO,GAAKA,GAGd,IAAIlB,EAAIqB,EAAa,KAAK,YAAa3B,EAAGuB,EAAGC,CAAI,EACjD,GAAI,OAAO,UAAU,eAAe,KAAK,KAAK,YAAalB,CAAC,EAC1D,OAAImB,IACF,KAAK,YAAYnB,CAAC,EAAIxE,GAEjB,KAGT,GAAI,CAAC2E,EAAce,CAAI,GAAK,CAAC,KAAK,cAChC,MAAM,IAAI,MAAM,mDAAmD,EAKrE,KAAK,QAAQxB,CAAC,EACd,KAAK,QAAQuB,CAAC,EAGd,KAAK,YAAYjB,CAAC,EAAImB,EAAiB3F,EAAQ,KAAK,oBAAoBkE,EAAGuB,EAAGC,CAAI,EAElF,IAAII,EAAUC,GAAc,KAAK,YAAa7B,EAAGuB,EAAGC,CAAI,EAExD,OAAAxB,EAAI4B,EAAQ,EACZL,EAAIK,EAAQ,EAEZ,OAAO,OAAOA,CAAO,EACrB,KAAK,UAAUtB,CAAC,EAAIsB,EACpBE,EAAqB,KAAK,OAAOP,CAAC,EAAGvB,CAAC,EACtC8B,EAAqB,KAAK,MAAM9B,CAAC,EAAGuB,CAAC,EACrC,KAAK,IAAIA,CAAC,EAAEjB,CAAC,EAAIsB,EACjB,KAAK,KAAK5B,CAAC,EAAEM,CAAC,EAAIsB,EAClB,KAAK,aACE,IACT,CACA,KAAK5B,EAAGuB,EAAGC,EAAM,CACf,IAAIlB,EACF,UAAU,SAAW,EACjByB,EAAY,KAAK,YAAa,UAAU,CAAC,CAAC,EAC1CJ,EAAa,KAAK,YAAa3B,EAAGuB,EAAGC,CAAI,EAC/C,OAAO,KAAK,YAAYlB,CAAC,CAC3B,CACA,QAAQN,EAAGuB,EAAGC,EAAM,CAClB,IAAIlB,EACF,UAAU,SAAW,EACjByB,EAAY,KAAK,YAAa,UAAU,CAAC,CAAC,EAC1CJ,EAAa,KAAK,YAAa3B,EAAGuB,EAAGC,CAAI,EAC/C,OAAO,OAAO,UAAU,eAAe,KAAK,KAAK,YAAalB,CAAC,CACjE,CACA,WAAWN,EAAGuB,EAAGC,EAAM,CACrB,IAAIlB,EACF,UAAU,SAAW,EACjByB,EAAY,KAAK,YAAa,UAAU,CAAC,CAAC,EAC1CJ,EAAa,KAAK,YAAa3B,EAAGuB,EAAGC,CAAI,EAC3CQ,EAAO,KAAK,UAAU1B,CAAC,EAC3B,OAAI0B,IACFhC,EAAIgC,EAAK,EACTT,EAAIS,EAAK,EACT,OAAO,KAAK,YAAY1B,CAAC,EACzB,OAAO,KAAK,UAAUA,CAAC,EACvB2B,EAAuB,KAAK,OAAOV,CAAC,EAAGvB,CAAC,EACxCiC,EAAuB,KAAK,MAAMjC,CAAC,EAAGuB,CAAC,EACvC,OAAO,KAAK,IAAIA,CAAC,EAAEjB,CAAC,EACpB,OAAO,KAAK,KAAKN,CAAC,EAAEM,CAAC,EACrB,KAAK,cAEA,IACT,CACA,QAAQN,EAAGkC,EAAG,CACZ,IAAIC,EAAM,KAAK,IAAInC,CAAC,EACpB,GAAImC,EAAK,CACP,IAAIC,EAAQf,EAASc,CAAG,EACxB,OAAKD,EAGEnC,EAASqC,EAAO,SAAUJ,EAAM,CACrC,OAAOA,EAAK,IAAME,CACpB,CAAC,EAJQE,CAKX,CACF,CACA,SAASpC,EAAGuB,EAAG,CACb,IAAIc,EAAO,KAAK,KAAKrC,CAAC,EACtB,GAAIqC,EAAM,CACR,IAAID,EAAQf,EAASgB,CAAI,EACzB,OAAKd,EAGExB,EAASqC,EAAO,SAAUJ,EAAM,CACrC,OAAOA,EAAK,IAAMT,CACpB,CAAC,EAJQa,CAKX,CACF,CACA,UAAUpC,EAAGuB,EAAG,CACd,IAAIe,EAAU,KAAK,QAAQtC,EAAGuB,CAAC,EAC/B,GAAIe,EACF,OAAOA,EAAQ,OAAO,KAAK,SAAStC,EAAGuB,CAAC,CAAC,CAE7C,CACF,CAGAhC,EAAM,UAAU,WAAa,EAG7BA,EAAM,UAAU,WAAa,EAE7B,SAASuC,EAAqBS,EAAKC,EAAG,CAChCD,EAAIC,CAAC,EACPD,EAAIC,CAAC,IAELD,EAAIC,CAAC,EAAI,CAEb,CAEA,SAASP,EAAuBM,EAAKC,EAAG,CACjC,EAAED,EAAIC,CAAC,GACV,OAAOD,EAAIC,CAAC,CAEhB,CAEA,SAASb,EAAac,EAAYC,EAAIC,EAAInB,EAAM,CAC9C,IAAIxB,EAAI,GAAK0C,EACTnB,EAAI,GAAKoB,EACb,GAAI,CAACF,GAAczC,EAAIuB,EAAG,CACxB,IAAIqB,EAAM5C,EACVA,EAAIuB,EACJA,EAAIqB,CACN,CACA,OAAO5C,EAAIV,EAAiBiC,EAAIjC,GAAkBmB,EAAce,CAAI,EAAIpC,GAAoBoC,EAC9F,CAEA,SAASK,GAAcY,EAAYC,EAAIC,EAAInB,EAAM,CAC/C,IAAIxB,EAAI,GAAK0C,EACTnB,EAAI,GAAKoB,EACb,GAAI,CAACF,GAAczC,EAAIuB,EAAG,CACxB,IAAIqB,EAAM5C,EACVA,EAAIuB,EACJA,EAAIqB,CACN,CACA,IAAIhB,EAAU,CAAE,EAAG5B,EAAG,EAAGuB,CAAC,EAC1B,OAAIC,IACFI,EAAQ,KAAOJ,GAEVI,CACT,CAEA,SAASG,EAAYU,EAAYb,EAAS,CACxC,OAAOD,EAAac,EAAYb,EAAQ,EAAGA,EAAQ,EAAGA,EAAQ,IAAI,CACpE","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]} \ No newline at end of file +{"version":3,"file":"graph-ClFPgZSo.js","sources":["../../../../../webui/node_modules/lodash-es/_baseAssign.js","../../../../../webui/node_modules/lodash-es/_baseAssignIn.js","../../../../../webui/node_modules/lodash-es/_copySymbols.js","../../../../../webui/node_modules/lodash-es/_getSymbolsIn.js","../../../../../webui/node_modules/lodash-es/_copySymbolsIn.js","../../../../../webui/node_modules/lodash-es/_getAllKeysIn.js","../../../../../webui/node_modules/lodash-es/_initCloneArray.js","../../../../../webui/node_modules/lodash-es/_cloneDataView.js","../../../../../webui/node_modules/lodash-es/_cloneRegExp.js","../../../../../webui/node_modules/lodash-es/_cloneSymbol.js","../../../../../webui/node_modules/lodash-es/_initCloneByTag.js","../../../../../webui/node_modules/lodash-es/_baseIsMap.js","../../../../../webui/node_modules/lodash-es/isMap.js","../../../../../webui/node_modules/lodash-es/_baseIsSet.js","../../../../../webui/node_modules/lodash-es/isSet.js","../../../../../webui/node_modules/lodash-es/_baseClone.js","../../../../../webui/node_modules/lodash-es/_baseValues.js","../../../../../webui/node_modules/lodash-es/values.js","../../../../../webui/node_modules/lodash-es/isUndefined.js","../../../../../webui/node_modules/lodash-es/union.js","../../../../../webui/node_modules/dagre-d3-es/src/graphlib/graph.js"],"sourcesContent":["import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"],"names":["baseAssign","object","source","copyObject","keys","baseAssignIn","keysIn","copySymbols","getSymbols","nativeGetSymbols","getSymbolsIn","result","arrayPush","getPrototype","stubArray","copySymbolsIn","getAllKeysIn","baseGetAllKeys","objectProto","hasOwnProperty","initCloneArray","array","length","cloneDataView","dataView","isDeep","buffer","cloneArrayBuffer","reFlags","cloneRegExp","regexp","symbolProto","Symbol","symbolValueOf","cloneSymbol","symbol","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","tag","Ctor","cloneTypedArray","baseIsMap","value","isObjectLike","getTag","nodeIsMap","nodeUtil","isMap","baseUnary","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","objectTag","weakMapTag","cloneableTags","baseClone","bitmask","customizer","key","stack","isFlat","isFull","isObject","isArr","isArray","copyArray","isFunc","isBuffer","cloneBuffer","initCloneObject","Stack","stacked","subValue","keysFunc","getAllKeys","props","arrayEach","assignValue","baseValues","arrayMap","values","isUndefined","union","baseRest","arrays","baseUniq","baseFlatten","isArrayLikeObject","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","Graph","opts","_.constant","label","newDefault","_.isFunction","_.keys","self","_.filter","v","_.isEmpty","vs","args","_.each","removeEdge","e","child","parent","_.isUndefined","ancestor","children","predsV","sucsV","preds","_.union","neighbors","filter","copy","parents","findParent","_.values","_.reduce","w","name","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","edge","decrementOrRemoveEntry","u","inV","edges","outV","inEdges","map","k","isDirected","v_","w_","tmp"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js b/massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js similarity index 99% rename from massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js rename to massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js index 4169d231b..25eb20632 100644 --- a/massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js +++ b/massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js @@ -1,4 +1,4 @@ -import{aD as R,aE as A,aF as L}from"./index-yx4Z55Qu.js";import{a as $,E as H,b as N,c as W}from"./consoleHook-59e792cb-BtJ0yZKI.js";import{S as D}from"./base-80a1f760-Byw-bEXF.js";var k,F;function B(){if(F)return k;F=1;var u=Object.create,p=Object.defineProperty,i=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,s=(a,e)=>function(){return e||(0,a[n(a)[0]])((e={exports:{}}).exports,e),e.exports},x=(a,e)=>{for(var o in e)p(a,o,{get:e[o],enumerable:!0})},b=(a,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of n(e))!l.call(a,t)&&t!==o&&p(a,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return a},m=(a,e,o)=>(o=a!=null?u(c(a)):{},b(!a||!a.__esModule?p(o,"default",{value:a,enumerable:!0}):o,a)),h=a=>b(p({},"__esModule",{value:!0}),a),T=s({"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json"(a,e){e.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}}}),P=s({"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js"(a,e){e.exports=T()}}),j={};x(j,{PreviewController:()=>O,getExtension:()=>_,joinFilepath:()=>q,normalizeFilepath:()=>w}),k=h(j);var g="$CSB_RELAY",E=m(P()),z=new Map,S=Object.entries(E.default);for(const[a,e]of S){const o=e.extensions;if(o!=null&&o.length)for(const r of o)z.set(r,a)}var C=z,M=0;function I(){const a=Date.now(),e=Math.round(Math.random()*1e4),o=M+=1;return(+`${a}${e}${o}`).toString(16)}function w(a){return"/"+a.split("/").filter(Boolean).join("/")}function q(a,e){return w(a+"/"+e)}function _(a){const e=a.split(".");return e.length<=1?"":e[e.length-1]}var O=class{constructor(a){this.initPromise=null,this.baseUrl=new URL(a.baseUrl),this.getFileContent=a.getFileContent,this.indexFiles=a.indexFiles??["index.html","index.html"]}async getIndexAtPath(a){for(const e of this.indexFiles)try{return await this.getFileContent(q(a,e))}catch{}throw new Error("No index file not found")}async handleWorkerRequest(a){if(!this.initPromise)throw new Error("Init promise is null");const[e,o]=await this.initPromise;try{const r=w(new URL(a.url,e).pathname);let t=null;const v={};try{t=await this.getFileContent(r)}catch{}if(t==null&&(t=await this.getIndexAtPath(r),v["Content-Type"]="text/html; charset=utf-8"),t==null)throw new Error("File not found");if(!v["Content-Type"]){const f=_(r),d=C.get(f);d&&(v["Content-Type"]=d)}const y={$channel:g,$type:"preview/response",id:a.id,headers:v,status:200,body:t};o.postMessage(y)}catch{const t={$channel:g,$type:"preview/response",id:a.id,headers:{"Content-Type":"text/html; charset=utf-8"},status:404,body:"File not found"};o.postMessage(t)}}getRelayUrl(a){const e=new URL(a);return e.pathname="/__csb_relay/",e.toString()}async _initPreview(){const a=I(),e=new URL(this.baseUrl);e.hostname=a+"-"+e.hostname,e.pathname="/";const o=this.getRelayUrl(e.toString()),r=document.createElement("iframe");r.setAttribute("src",o.toString()),r.style.display="none",document.body.appendChild(r);const t=new MessageChannel,v=r.contentWindow;if(!v)throw new Error("Could not get iframe contentWindow");return new Promise(y=>{const f=t.port1;f.onmessage=d=>{if(typeof d.data=="object"&&d.data.$channel===g)switch(d.data.$type){case"preview/ready":y([e.toString(),f,r]);break;case"preview/request":this.handleWorkerRequest(d.data);break}},r.onload=()=>{const d={$channel:g,$type:"preview/init"};v.postMessage(d,"*",[t.port2])}})}initPreview(){return this.initPromise||(this.initPromise=this._initPreview()),this.initPromise.then(a=>a[0])}destroy(){this.initPromise&&(this.initPromise.then(e=>{e[1].close();const o=this.getRelayUrl(e[0]);document.body.querySelectorAll(`src="${o}"`).forEach(t=>t.remove())}),this.initPromise=null)}};/*! Bundled license information: +import{aD as R,aE as A,aF as L}from"./index-DbSnkTMx.js";import{a as $,E as H,b as N,c as W}from"./consoleHook-59e792cb-CpqUu8vm.js";import{S as D}from"./base-80a1f760-CNB8plsN.js";var k,F;function B(){if(F)return k;F=1;var u=Object.create,p=Object.defineProperty,i=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,s=(a,e)=>function(){return e||(0,a[n(a)[0]])((e={exports:{}}).exports,e),e.exports},x=(a,e)=>{for(var o in e)p(a,o,{get:e[o],enumerable:!0})},b=(a,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of n(e))!l.call(a,t)&&t!==o&&p(a,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return a},m=(a,e,o)=>(o=a!=null?u(c(a)):{},b(!a||!a.__esModule?p(o,"default",{value:a,enumerable:!0}):o,a)),h=a=>b(p({},"__esModule",{value:!0}),a),T=s({"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json"(a,e){e.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}}}),P=s({"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js"(a,e){e.exports=T()}}),j={};x(j,{PreviewController:()=>O,getExtension:()=>_,joinFilepath:()=>q,normalizeFilepath:()=>w}),k=h(j);var g="$CSB_RELAY",E=m(P()),z=new Map,S=Object.entries(E.default);for(const[a,e]of S){const o=e.extensions;if(o!=null&&o.length)for(const r of o)z.set(r,a)}var C=z,M=0;function I(){const a=Date.now(),e=Math.round(Math.random()*1e4),o=M+=1;return(+`${a}${e}${o}`).toString(16)}function w(a){return"/"+a.split("/").filter(Boolean).join("/")}function q(a,e){return w(a+"/"+e)}function _(a){const e=a.split(".");return e.length<=1?"":e[e.length-1]}var O=class{constructor(a){this.initPromise=null,this.baseUrl=new URL(a.baseUrl),this.getFileContent=a.getFileContent,this.indexFiles=a.indexFiles??["index.html","index.html"]}async getIndexAtPath(a){for(const e of this.indexFiles)try{return await this.getFileContent(q(a,e))}catch{}throw new Error("No index file not found")}async handleWorkerRequest(a){if(!this.initPromise)throw new Error("Init promise is null");const[e,o]=await this.initPromise;try{const r=w(new URL(a.url,e).pathname);let t=null;const v={};try{t=await this.getFileContent(r)}catch{}if(t==null&&(t=await this.getIndexAtPath(r),v["Content-Type"]="text/html; charset=utf-8"),t==null)throw new Error("File not found");if(!v["Content-Type"]){const f=_(r),d=C.get(f);d&&(v["Content-Type"]=d)}const y={$channel:g,$type:"preview/response",id:a.id,headers:v,status:200,body:t};o.postMessage(y)}catch{const t={$channel:g,$type:"preview/response",id:a.id,headers:{"Content-Type":"text/html; charset=utf-8"},status:404,body:"File not found"};o.postMessage(t)}}getRelayUrl(a){const e=new URL(a);return e.pathname="/__csb_relay/",e.toString()}async _initPreview(){const a=I(),e=new URL(this.baseUrl);e.hostname=a+"-"+e.hostname,e.pathname="/";const o=this.getRelayUrl(e.toString()),r=document.createElement("iframe");r.setAttribute("src",o.toString()),r.style.display="none",document.body.appendChild(r);const t=new MessageChannel,v=r.contentWindow;if(!v)throw new Error("Could not get iframe contentWindow");return new Promise(y=>{const f=t.port1;f.onmessage=d=>{if(typeof d.data=="object"&&d.data.$channel===g)switch(d.data.$type){case"preview/ready":y([e.toString(),f,r]);break;case"preview/request":this.handleWorkerRequest(d.data);break}},r.onload=()=>{const d={$channel:g,$type:"preview/init"};v.postMessage(d,"*",[t.port2])}})}initPreview(){return this.initPromise||(this.initPromise=this._initPreview()),this.initPromise.then(a=>a[0])}destroy(){this.initPromise&&(this.initPromise.then(e=>{e[1].close();const o=this.getRelayUrl(e[0]);document.body.querySelectorAll(`src="${o}"`).forEach(t=>t.remove())}),this.initPromise=null)}};/*! Bundled license information: mime-db/index.js: (*! @@ -23,4 +23,4 @@ import{aD as R,aE as A,aF as L}from"./index-yx4Z55Qu.js";import{a as $,E as H,b `).concat(c,` <\/script> `).trim();return this.injectContentIntoHead(i,x)},p.prototype.updateSandbox=function(i,n){i===void 0&&(i=this.sandboxSetup);var c=$(i.files);this.dispatch({codesandbox:!0,modules:c,template:i.template,type:"compile"})},p.prototype.compile=function(i){return A(this,void 0,void 0,function(){var n;return L(this,function(c){switch(c.label){case 0:return this.files=new Map(Object.entries(i)),[4,this.previewController.initPreview()];case 1:return n=c.sent(),this.iframe.setAttribute("src",n),this.status="done",this.dispatch({type:"done",compilatonError:!1}),this.dispatch({type:"urlchange",url:n,back:!1,forward:!1}),[2]}})})},p.prototype.eventListener=function(i){if(i.source===this.iframe.contentWindow){var n=i.data;n.codesandbox&&this.dispatch(n)}},p.prototype.dispatch=function(i){var n;switch(i.type){case"compile":this.compile(i.modules);break;default:(n=this.iframe.contentWindow)===null||n===void 0||n.postMessage(i,"*"),this.emitter.dispatch(i)}},p.prototype.listen=function(i){return this.emitter.listener(i)},p.prototype.destroy=function(){this.emitter.cleanup(),typeof window<"u"&&window.removeEventListener("message",this.eventListener)},p})(D);export{V as SandpackStatic}; -//# sourceMappingURL=index-599aeaf7-DsfSQr-O.js.map +//# sourceMappingURL=index-599aeaf7-DH1qEGyX.js.map diff --git a/massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js.map b/massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js.map similarity index 99% rename from massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js.map rename to massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js.map index 35a238807..5d683b7da 100644 --- a/massgen/frontend/web/static/assets/index-599aeaf7-DsfSQr-O.js.map +++ b/massgen/frontend/web/static/assets/index-599aeaf7-DH1qEGyX.js.map @@ -1 +1 @@ -{"version":3,"file":"index-599aeaf7-DsfSQr-O.js","sources":["../../../../../webui/node_modules/static-browser-server/out/lib/main.js","../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/index-599aeaf7.mjs"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json\nvar require_db = __commonJS({\n \"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json\"(exports, module2) {\n module2.exports = {\n \"application/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/3gpp-ims+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/3gpphal+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/3gpphalforms+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/a2l\": {\n source: \"iana\"\n },\n \"application/ace+cbor\": {\n source: \"iana\"\n },\n \"application/activemessage\": {\n source: \"iana\"\n },\n \"application/activity+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-costmap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-costmapfilter+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-directory+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointcost+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointcostparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointprop+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointpropparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-error+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-networkmap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-networkmapfilter+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-updatestreamcontrol+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-updatestreamparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/aml\": {\n source: \"iana\"\n },\n \"application/andrew-inset\": {\n source: \"iana\",\n extensions: [\"ez\"]\n },\n \"application/applefile\": {\n source: \"iana\"\n },\n \"application/applixware\": {\n source: \"apache\",\n extensions: [\"aw\"]\n },\n \"application/at+jwt\": {\n source: \"iana\"\n },\n \"application/atf\": {\n source: \"iana\"\n },\n \"application/atfx\": {\n source: \"iana\"\n },\n \"application/atom+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atom\"]\n },\n \"application/atomcat+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n source: \"iana\"\n },\n \"application/atomsvc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n source: \"iana\"\n },\n \"application/atsc-held+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/atsc-rsat+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rsat\"]\n },\n \"application/atxml\": {\n source: \"iana\"\n },\n \"application/auth-policy+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/bacnet-xdd+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/batch-smtp\": {\n source: \"iana\"\n },\n \"application/bdoc\": {\n compressible: false,\n extensions: [\"bdoc\"]\n },\n \"application/beep+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/calendar+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/calendar+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xcs\"]\n },\n \"application/call-completion\": {\n source: \"iana\"\n },\n \"application/cals-1840\": {\n source: \"iana\"\n },\n \"application/captive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cbor\": {\n source: \"iana\"\n },\n \"application/cbor-seq\": {\n source: \"iana\"\n },\n \"application/cccex\": {\n source: \"iana\"\n },\n \"application/ccmp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ccxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n source: \"iana\",\n extensions: [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n source: \"iana\",\n extensions: [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n source: \"iana\",\n extensions: [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n source: \"iana\",\n extensions: [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n source: \"iana\",\n extensions: [\"cdmiq\"]\n },\n \"application/cdni\": {\n source: \"iana\"\n },\n \"application/cea\": {\n source: \"iana\"\n },\n \"application/cea-2018+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cellml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cfw\": {\n source: \"iana\"\n },\n \"application/city+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/clr\": {\n source: \"iana\"\n },\n \"application/clue+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/clue_info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cms\": {\n source: \"iana\"\n },\n \"application/cnrp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/coap-group+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/coap-payload\": {\n source: \"iana\"\n },\n \"application/commonground\": {\n source: \"iana\"\n },\n \"application/conference-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cose\": {\n source: \"iana\"\n },\n \"application/cose-key\": {\n source: \"iana\"\n },\n \"application/cose-key-set\": {\n source: \"iana\"\n },\n \"application/cpl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cpl\"]\n },\n \"application/csrattrs\": {\n source: \"iana\"\n },\n \"application/csta+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cstadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/csvm+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cu-seeme\": {\n source: \"apache\",\n extensions: [\"cu\"]\n },\n \"application/cwt\": {\n source: \"iana\"\n },\n \"application/cybercash\": {\n source: \"iana\"\n },\n \"application/dart\": {\n compressible: true\n },\n \"application/dash+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpp\"]\n },\n \"application/dashdelta\": {\n source: \"iana\"\n },\n \"application/davmount+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"davmount\"]\n },\n \"application/dca-rft\": {\n source: \"iana\"\n },\n \"application/dcd\": {\n source: \"iana\"\n },\n \"application/dec-dx\": {\n source: \"iana\"\n },\n \"application/dialog-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dicom\": {\n source: \"iana\"\n },\n \"application/dicom+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dicom+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dii\": {\n source: \"iana\"\n },\n \"application/dit\": {\n source: \"iana\"\n },\n \"application/dns\": {\n source: \"iana\"\n },\n \"application/dns+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dns-message\": {\n source: \"iana\"\n },\n \"application/docbook+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"dbk\"]\n },\n \"application/dots+cbor\": {\n source: \"iana\"\n },\n \"application/dskpp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dssc+der\": {\n source: \"iana\",\n extensions: [\"dssc\"]\n },\n \"application/dssc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdssc\"]\n },\n \"application/dvcs\": {\n source: \"iana\"\n },\n \"application/ecmascript\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"es\", \"ecma\"]\n },\n \"application/edi-consent\": {\n source: \"iana\"\n },\n \"application/edi-x12\": {\n source: \"iana\",\n compressible: false\n },\n \"application/edifact\": {\n source: \"iana\",\n compressible: false\n },\n \"application/efi\": {\n source: \"iana\"\n },\n \"application/elm+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/elm+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.cap+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/emergencycalldata.comment+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.ecall.msd\": {\n source: \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.veds+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emma+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"emma\"]\n },\n \"application/emotionml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"emotionml\"]\n },\n \"application/encaprtp\": {\n source: \"iana\"\n },\n \"application/epp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/epub+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"epub\"]\n },\n \"application/eshop\": {\n source: \"iana\"\n },\n \"application/exi\": {\n source: \"iana\",\n extensions: [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/express\": {\n source: \"iana\",\n extensions: [\"exp\"]\n },\n \"application/fastinfoset\": {\n source: \"iana\"\n },\n \"application/fastsoap\": {\n source: \"iana\"\n },\n \"application/fdt+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"fdt\"]\n },\n \"application/fhir+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/fhir+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/fido.trusted-apps+json\": {\n compressible: true\n },\n \"application/fits\": {\n source: \"iana\"\n },\n \"application/flexfec\": {\n source: \"iana\"\n },\n \"application/font-sfnt\": {\n source: \"iana\"\n },\n \"application/font-tdpfr\": {\n source: \"iana\",\n extensions: [\"pfr\"]\n },\n \"application/font-woff\": {\n source: \"iana\",\n compressible: false\n },\n \"application/framework-attributes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/geo+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n source: \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n source: \"iana\"\n },\n \"application/geoxacml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/gltf-buffer\": {\n source: \"iana\"\n },\n \"application/gml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"gml\"]\n },\n \"application/gpx+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"gpx\"]\n },\n \"application/gxf\": {\n source: \"apache\",\n extensions: [\"gxf\"]\n },\n \"application/gzip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"gz\"]\n },\n \"application/h224\": {\n source: \"iana\"\n },\n \"application/held+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/hjson\": {\n extensions: [\"hjson\"]\n },\n \"application/http\": {\n source: \"iana\"\n },\n \"application/hyperstudio\": {\n source: \"iana\",\n extensions: [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ibe-pkg-reply+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ibe-pp-data\": {\n source: \"iana\"\n },\n \"application/iges\": {\n source: \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/index\": {\n source: \"iana\"\n },\n \"application/index.cmd\": {\n source: \"iana\"\n },\n \"application/index.obj\": {\n source: \"iana\"\n },\n \"application/index.response\": {\n source: \"iana\"\n },\n \"application/index.vnd\": {\n source: \"iana\"\n },\n \"application/inkml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ink\", \"inkml\"]\n },\n \"application/iotp\": {\n source: \"iana\"\n },\n \"application/ipfix\": {\n source: \"iana\",\n extensions: [\"ipfix\"]\n },\n \"application/ipp\": {\n source: \"iana\"\n },\n \"application/isup\": {\n source: \"iana\"\n },\n \"application/its+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"its\"]\n },\n \"application/java-archive\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"jar\", \"war\", \"ear\"]\n },\n \"application/java-serialized-object\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"ser\"]\n },\n \"application/java-vm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"class\"]\n },\n \"application/javascript\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"js\", \"mjs\"]\n },\n \"application/jf2feed+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jose\": {\n source: \"iana\"\n },\n \"application/jose+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jrd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jscalendar+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"json\", \"map\"]\n },\n \"application/json-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/json-seq\": {\n source: \"iana\"\n },\n \"application/json5\": {\n extensions: [\"json5\"]\n },\n \"application/jsonml+json\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"jsonml\"]\n },\n \"application/jwk+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jwk-set+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jwt\": {\n source: \"iana\"\n },\n \"application/kpml-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/kpml-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ld+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lgr\"]\n },\n \"application/link-format\": {\n source: \"iana\"\n },\n \"application/load-control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/lost+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/lpf+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/lxf\": {\n source: \"iana\"\n },\n \"application/mac-binhex40\": {\n source: \"iana\",\n extensions: [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n source: \"apache\",\n extensions: [\"cpt\"]\n },\n \"application/macwriteii\": {\n source: \"iana\"\n },\n \"application/mads+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mads\"]\n },\n \"application/manifest+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"webmanifest\"]\n },\n \"application/marc\": {\n source: \"iana\",\n extensions: [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mrcx\"]\n },\n \"application/mathematica\": {\n source: \"iana\",\n extensions: [\"ma\", \"nb\", \"mb\"]\n },\n \"application/mathml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mathml-presentation+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-deregister+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-envelope+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-msk+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-msk-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-protection-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-reception-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-register+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-register-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-schedule+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-user-service-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbox\": {\n source: \"iana\",\n extensions: [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpf\"]\n },\n \"application/media_control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mediaservercontrol+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/metalink+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"meta4\"]\n },\n \"application/mets+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mets\"]\n },\n \"application/mf4\": {\n source: \"iana\"\n },\n \"application/mikey\": {\n source: \"iana\"\n },\n \"application/mipc\": {\n source: \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n source: \"iana\"\n },\n \"application/mmt-aei+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"musd\"]\n },\n \"application/mods+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mods\"]\n },\n \"application/moss-keys\": {\n source: \"iana\"\n },\n \"application/moss-signature\": {\n source: \"iana\"\n },\n \"application/mosskey-data\": {\n source: \"iana\"\n },\n \"application/mosskey-request\": {\n source: \"iana\"\n },\n \"application/mp21\": {\n source: \"iana\",\n extensions: [\"m21\", \"mp21\"]\n },\n \"application/mp4\": {\n source: \"iana\",\n extensions: [\"mp4s\", \"m4p\"]\n },\n \"application/mpeg4-generic\": {\n source: \"iana\"\n },\n \"application/mpeg4-iod\": {\n source: \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n source: \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mrb-publish+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/msc-ivr+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/msc-mixer+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/msword\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"doc\", \"dot\"]\n },\n \"application/mud+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/multipart-core\": {\n source: \"iana\"\n },\n \"application/mxf\": {\n source: \"iana\",\n extensions: [\"mxf\"]\n },\n \"application/n-quads\": {\n source: \"iana\",\n extensions: [\"nq\"]\n },\n \"application/n-triples\": {\n source: \"iana\",\n extensions: [\"nt\"]\n },\n \"application/nasdata\": {\n source: \"iana\"\n },\n \"application/news-checkgroups\": {\n source: \"iana\",\n charset: \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n source: \"iana\",\n charset: \"US-ASCII\"\n },\n \"application/news-transmission\": {\n source: \"iana\"\n },\n \"application/nlsml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/node\": {\n source: \"iana\",\n extensions: [\"cjs\"]\n },\n \"application/nss\": {\n source: \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n source: \"iana\"\n },\n \"application/oblivious-dns-message\": {\n source: \"iana\"\n },\n \"application/ocsp-request\": {\n source: \"iana\"\n },\n \"application/ocsp-response\": {\n source: \"iana\"\n },\n \"application/octet-stream\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"]\n },\n \"application/oda\": {\n source: \"iana\",\n extensions: [\"oda\"]\n },\n \"application/odm+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/odx\": {\n source: \"iana\"\n },\n \"application/oebps-package+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"opf\"]\n },\n \"application/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"omdoc\"]\n },\n \"application/onenote\": {\n source: \"apache\",\n extensions: [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/oscore\": {\n source: \"iana\"\n },\n \"application/oxps\": {\n source: \"iana\",\n extensions: [\"oxps\"]\n },\n \"application/p21\": {\n source: \"iana\"\n },\n \"application/p21+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/p2p-overlay+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"relo\"]\n },\n \"application/parityfec\": {\n source: \"iana\"\n },\n \"application/passport\": {\n source: \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xer\"]\n },\n \"application/pdf\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pdf\"]\n },\n \"application/pdx\": {\n source: \"iana\"\n },\n \"application/pem-certificate-chain\": {\n source: \"iana\"\n },\n \"application/pgp-encrypted\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pgp\"]\n },\n \"application/pgp-keys\": {\n source: \"iana\",\n extensions: [\"asc\"]\n },\n \"application/pgp-signature\": {\n source: \"iana\",\n extensions: [\"asc\", \"sig\"]\n },\n \"application/pics-rules\": {\n source: \"apache\",\n extensions: [\"prf\"]\n },\n \"application/pidf+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/pidf-diff+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/pkcs10\": {\n source: \"iana\",\n extensions: [\"p10\"]\n },\n \"application/pkcs12\": {\n source: \"iana\"\n },\n \"application/pkcs7-mime\": {\n source: \"iana\",\n extensions: [\"p7m\", \"p7c\"]\n },\n \"application/pkcs7-signature\": {\n source: \"iana\",\n extensions: [\"p7s\"]\n },\n \"application/pkcs8\": {\n source: \"iana\",\n extensions: [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n source: \"iana\"\n },\n \"application/pkix-attr-cert\": {\n source: \"iana\",\n extensions: [\"ac\"]\n },\n \"application/pkix-cert\": {\n source: \"iana\",\n extensions: [\"cer\"]\n },\n \"application/pkix-crl\": {\n source: \"iana\",\n extensions: [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n source: \"iana\",\n extensions: [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n source: \"iana\",\n extensions: [\"pki\"]\n },\n \"application/pls+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/postscript\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ai\", \"eps\", \"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/problem+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/problem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/provenance+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n source: \"iana\"\n },\n \"application/prs.cww\": {\n source: \"iana\",\n extensions: [\"cww\"]\n },\n \"application/prs.cyn\": {\n source: \"iana\",\n charset: \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/prs.nprend\": {\n source: \"iana\"\n },\n \"application/prs.plucker\": {\n source: \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n source: \"iana\"\n },\n \"application/prs.xsf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/pskc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/qsig\": {\n source: \"iana\"\n },\n \"application/raml+yaml\": {\n compressible: true,\n extensions: [\"raml\"]\n },\n \"application/raptorfec\": {\n source: \"iana\"\n },\n \"application/rdap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/rdf+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rdf\", \"owl\"]\n },\n \"application/reginfo+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n source: \"iana\",\n extensions: [\"rnc\"]\n },\n \"application/remote-printing\": {\n source: \"iana\"\n },\n \"application/reputon+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/resource-lists+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rld\"]\n },\n \"application/rfc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/riscos\": {\n source: \"iana\"\n },\n \"application/rlmi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/rls-services+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rs\"]\n },\n \"application/route-apd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sls\"]\n },\n \"application/route-usd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n source: \"iana\",\n extensions: [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n source: \"iana\",\n extensions: [\"mft\"]\n },\n \"application/rpki-publication\": {\n source: \"iana\"\n },\n \"application/rpki-roa\": {\n source: \"iana\",\n extensions: [\"roa\"]\n },\n \"application/rpki-updown\": {\n source: \"iana\"\n },\n \"application/rsd+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"rsd\"]\n },\n \"application/rss+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"rss\"]\n },\n \"application/rtf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtf\"]\n },\n \"application/rtploopback\": {\n source: \"iana\"\n },\n \"application/rtx\": {\n source: \"iana\"\n },\n \"application/samlassertion+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/samlmetadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sarif+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sarif-external-properties+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sbe\": {\n source: \"iana\"\n },\n \"application/sbml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sbml\"]\n },\n \"application/scaip+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/scim+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/scvp-cv-request\": {\n source: \"iana\",\n extensions: [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n source: \"iana\",\n extensions: [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n source: \"iana\",\n extensions: [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n source: \"iana\",\n extensions: [\"spp\"]\n },\n \"application/sdp\": {\n source: \"iana\",\n extensions: [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n source: \"iana\"\n },\n \"application/senml+cbor\": {\n source: \"iana\"\n },\n \"application/senml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/senml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n source: \"iana\"\n },\n \"application/senml-etch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/senml-exi\": {\n source: \"iana\"\n },\n \"application/sensml+cbor\": {\n source: \"iana\"\n },\n \"application/sensml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sensml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n source: \"iana\"\n },\n \"application/sep+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sep-exi\": {\n source: \"iana\"\n },\n \"application/session-info\": {\n source: \"iana\"\n },\n \"application/set-payment\": {\n source: \"iana\"\n },\n \"application/set-payment-initiation\": {\n source: \"iana\",\n extensions: [\"setpay\"]\n },\n \"application/set-registration\": {\n source: \"iana\"\n },\n \"application/set-registration-initiation\": {\n source: \"iana\",\n extensions: [\"setreg\"]\n },\n \"application/sgml\": {\n source: \"iana\"\n },\n \"application/sgml-open-catalog\": {\n source: \"iana\"\n },\n \"application/shf+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"shf\"]\n },\n \"application/sieve\": {\n source: \"iana\",\n extensions: [\"siv\", \"sieve\"]\n },\n \"application/simple-filter+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/simple-message-summary\": {\n source: \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n source: \"iana\"\n },\n \"application/sipc\": {\n source: \"iana\"\n },\n \"application/slate\": {\n source: \"iana\"\n },\n \"application/smil\": {\n source: \"iana\"\n },\n \"application/smil+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"smi\", \"smil\"]\n },\n \"application/smpte336m\": {\n source: \"iana\"\n },\n \"application/soap+fastinfoset\": {\n source: \"iana\"\n },\n \"application/soap+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sparql-query\": {\n source: \"iana\",\n extensions: [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"srx\"]\n },\n \"application/spdx+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/spirits-event+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sql\": {\n source: \"iana\"\n },\n \"application/srgs\": {\n source: \"iana\",\n extensions: [\"gram\"]\n },\n \"application/srgs+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"grxml\"]\n },\n \"application/sru+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sru\"]\n },\n \"application/ssdl+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ssml\"]\n },\n \"application/stix+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/swid+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n source: \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-community-update\": {\n source: \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-error\": {\n source: \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n source: \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-status-query\": {\n source: \"iana\"\n },\n \"application/tamp-status-response\": {\n source: \"iana\"\n },\n \"application/tamp-update\": {\n source: \"iana\"\n },\n \"application/tamp-update-confirm\": {\n source: \"iana\"\n },\n \"application/tar\": {\n compressible: true\n },\n \"application/taxii+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/td+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/tei+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tei\", \"teicorpus\"]\n },\n \"application/tetra_isi\": {\n source: \"iana\"\n },\n \"application/thraud+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tfi\"]\n },\n \"application/timestamp-query\": {\n source: \"iana\"\n },\n \"application/timestamp-reply\": {\n source: \"iana\"\n },\n \"application/timestamped-data\": {\n source: \"iana\",\n extensions: [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n source: \"iana\"\n },\n \"application/tlsrpt+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/tnauthlist\": {\n source: \"iana\"\n },\n \"application/token-introspection+jwt\": {\n source: \"iana\"\n },\n \"application/toml\": {\n compressible: true,\n extensions: [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n source: \"iana\"\n },\n \"application/trig\": {\n source: \"iana\",\n extensions: [\"trig\"]\n },\n \"application/ttml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ttml\"]\n },\n \"application/tve-trigger\": {\n source: \"iana\"\n },\n \"application/tzif\": {\n source: \"iana\"\n },\n \"application/tzif-leap\": {\n source: \"iana\"\n },\n \"application/ubjson\": {\n compressible: false,\n extensions: [\"ubj\"]\n },\n \"application/ulpfec\": {\n source: \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/urc-ressheet+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vcard+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vcard+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vemmi\": {\n source: \"iana\"\n },\n \"application/vividence.scriptfile\": {\n source: \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.gtpc\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.ngap\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n source: \"iana\",\n extensions: [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n source: \"iana\",\n extensions: [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n source: \"iana\",\n extensions: [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp2.sms\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n source: \"iana\",\n extensions: [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n source: \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n source: \"iana\",\n extensions: [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n source: \"iana\",\n extensions: [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n source: \"iana\",\n extensions: [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n source: \"iana\",\n extensions: [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n source: \"iana\",\n extensions: [\"atc\", \"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n source: \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n source: \"iana\",\n extensions: [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n source: \"iana\",\n extensions: [\"fxp\", \"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n source: \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n source: \"iana\",\n extensions: [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n source: \"iana\"\n },\n \"application/vnd.age\": {\n source: \"iana\",\n extensions: [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n source: \"iana\"\n },\n \"application/vnd.ahead.space\": {\n source: \"iana\",\n extensions: [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n source: \"iana\",\n extensions: [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n source: \"iana\",\n extensions: [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.amazon.ebook\": {\n source: \"apache\",\n extensions: [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n source: \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n source: \"iana\",\n extensions: [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n source: \"iana\",\n extensions: [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.android.ota\": {\n source: \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"apk\"]\n },\n \"application/vnd.anki\": {\n source: \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n source: \"iana\",\n extensions: [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n source: \"apache\",\n extensions: [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n source: \"iana\",\n extensions: [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n source: \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n source: \"iana\"\n },\n \"application/vnd.api+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.aplextor.warrp+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.apothekende.reservation+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.apple.installer+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n source: \"iana\",\n extensions: [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n source: \"iana\",\n extensions: [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n source: \"iana\",\n extensions: [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n source: \"iana\",\n extensions: [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n compressible: false,\n extensions: [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n source: \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n source: \"iana\",\n extensions: [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.artsquare\": {\n source: \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n source: \"iana\",\n extensions: [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n source: \"iana\",\n extensions: [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n source: \"iana\"\n },\n \"application/vnd.avalon+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.avistar+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n source: \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.bekitzur-stech+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.bint.med-content\": {\n source: \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n source: \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n source: \"iana\",\n extensions: [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n source: \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n source: \"iana\"\n },\n \"application/vnd.bmi\": {\n source: \"iana\",\n extensions: [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n source: \"iana\"\n },\n \"application/vnd.bpf3\": {\n source: \"iana\"\n },\n \"application/vnd.businessobjects\": {\n source: \"iana\",\n extensions: [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cab-jscript\": {\n source: \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n source: \"iana\"\n },\n \"application/vnd.canon-lips\": {\n source: \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n source: \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n source: \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n source: \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n source: \"iana\",\n extensions: [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n source: \"iana\"\n },\n \"application/vnd.cinderella\": {\n source: \"iana\",\n extensions: [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n source: \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"csl\"]\n },\n \"application/vnd.claymore\": {\n source: \"iana\",\n extensions: [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n source: \"iana\",\n extensions: [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n source: \"iana\",\n extensions: [\"c4g\", \"c4d\", \"c4f\", \"c4p\", \"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n source: \"iana\",\n extensions: [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n source: \"iana\",\n extensions: [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n source: \"iana\"\n },\n \"application/vnd.collection+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.collection.doc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.collection.next+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.comicbook+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.comicbook-rar\": {\n source: \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n source: \"iana\"\n },\n \"application/vnd.commonspace\": {\n source: \"iana\",\n extensions: [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n source: \"iana\",\n extensions: [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cosmocaller\": {\n source: \"iana\",\n extensions: [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n source: \"iana\",\n extensions: [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n source: \"iana\",\n extensions: [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n source: \"iana\",\n extensions: [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n source: \"iana\",\n extensions: [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n source: \"iana\",\n extensions: [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.crypto-shade-file\": {\n source: \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n source: \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n source: \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n source: \"iana\",\n extensions: [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cups-pdf\": {\n source: \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n source: \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n source: \"iana\",\n extensions: [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n source: \"iana\"\n },\n \"application/vnd.cups-raw\": {\n source: \"iana\"\n },\n \"application/vnd.curl\": {\n source: \"iana\"\n },\n \"application/vnd.curl.car\": {\n source: \"apache\",\n extensions: [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n source: \"apache\",\n extensions: [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cybank\": {\n source: \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cyclonedx+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.d3m-dataset\": {\n source: \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n source: \"iana\"\n },\n \"application/vnd.dart\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n source: \"iana\",\n extensions: [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dataresource+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dbf\": {\n source: \"iana\",\n extensions: [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n source: \"iana\"\n },\n \"application/vnd.dece.data\": {\n source: \"iana\",\n extensions: [\"uvf\", \"uvvf\", \"uvd\", \"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uvt\", \"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n source: \"iana\",\n extensions: [\"uvx\", \"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n source: \"iana\",\n extensions: [\"uvz\", \"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n source: \"iana\",\n extensions: [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n source: \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n source: \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dna\": {\n source: \"iana\",\n extensions: [\"dna\"]\n },\n \"application/vnd.document+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dolby.mlp\": {\n source: \"apache\",\n extensions: [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n source: \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n source: \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n source: \"iana\"\n },\n \"application/vnd.dpgraph\": {\n source: \"iana\",\n extensions: [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n source: \"iana\",\n extensions: [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ds-keypoint\": {\n source: \"apache\",\n extensions: [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n source: \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n source: \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n source: \"iana\",\n extensions: [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.dvbj\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.pfr\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.service\": {\n source: \"iana\",\n extensions: [\"svc\"]\n },\n \"application/vnd.dxr\": {\n source: \"iana\"\n },\n \"application/vnd.dynageo\": {\n source: \"iana\",\n extensions: [\"geo\"]\n },\n \"application/vnd.dzr\": {\n source: \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n source: \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n source: \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n source: \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ecowin.chart\": {\n source: \"iana\",\n extensions: [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n source: \"iana\"\n },\n \"application/vnd.efi.img\": {\n source: \"iana\"\n },\n \"application/vnd.efi.iso\": {\n source: \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.enliven\": {\n source: \"iana\",\n extensions: [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n source: \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.epson.esf\": {\n source: \"iana\",\n extensions: [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n source: \"iana\",\n extensions: [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n source: \"iana\",\n extensions: [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n source: \"iana\",\n extensions: [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n source: \"iana\",\n extensions: [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n source: \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.eszigno3+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"es3\", \"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.etsi.cug+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.mcid+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.mheg5\": {\n source: \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.pstn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.sci+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.simservs+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.timestamp-token\": {\n source: \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.tsl.der\": {\n source: \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.eudora.data\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n source: \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.exstream-package\": {\n source: \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n source: \"iana\",\n extensions: [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n source: \"iana\",\n extensions: [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n source: \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.fastcopy-disk-image\": {\n source: \"iana\"\n },\n \"application/vnd.fdf\": {\n source: \"iana\",\n extensions: [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n source: \"iana\",\n extensions: [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n source: \"iana\",\n extensions: [\"seed\", \"dataless\"]\n },\n \"application/vnd.ffsns\": {\n source: \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.filmit.zfc\": {\n source: \"iana\"\n },\n \"application/vnd.fints\": {\n source: \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n source: \"iana\"\n },\n \"application/vnd.flographit\": {\n source: \"iana\",\n extensions: [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n source: \"iana\",\n extensions: [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n source: \"iana\"\n },\n \"application/vnd.framemaker\": {\n source: \"iana\",\n extensions: [\"fm\", \"frame\", \"maker\", \"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n source: \"iana\",\n extensions: [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n source: \"iana\",\n extensions: [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n source: \"iana\",\n extensions: [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.fujitsu.oasys\": {\n source: \"iana\",\n extensions: [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n source: \"iana\",\n extensions: [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n source: \"iana\",\n extensions: [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n source: \"iana\",\n extensions: [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n source: \"iana\",\n extensions: [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n source: \"iana\",\n extensions: [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n source: \"iana\",\n extensions: [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n source: \"iana\",\n extensions: [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n source: \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n source: \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.futoin+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.fuzzysheet\": {\n source: \"iana\",\n extensions: [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n source: \"iana\",\n extensions: [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geo+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geocube+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geogebra.file\": {\n source: \"iana\",\n extensions: [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n source: \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n source: \"iana\",\n extensions: [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n source: \"iana\",\n extensions: [\"gex\", \"gre\"]\n },\n \"application/vnd.geonext\": {\n source: \"iana\",\n extensions: [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n source: \"iana\",\n extensions: [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n source: \"iana\",\n extensions: [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n source: \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n source: \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n source: \"iana\"\n },\n \"application/vnd.gmx\": {\n source: \"iana\",\n extensions: [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n compressible: false,\n extensions: [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n compressible: false,\n extensions: [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n compressible: false,\n extensions: [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.grafeq\": {\n source: \"iana\",\n extensions: [\"gqf\", \"gqs\"]\n },\n \"application/vnd.gridmp\": {\n source: \"iana\"\n },\n \"application/vnd.groove-account\": {\n source: \"iana\",\n extensions: [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n source: \"iana\",\n extensions: [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n source: \"iana\",\n extensions: [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n source: \"iana\",\n extensions: [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n source: \"iana\",\n extensions: [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n source: \"iana\",\n extensions: [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n source: \"iana\",\n extensions: [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hal+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n source: \"iana\",\n extensions: [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hcl-bireports\": {\n source: \"iana\"\n },\n \"application/vnd.hdt\": {\n source: \"iana\"\n },\n \"application/vnd.heroku+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hhe.lesson-player\": {\n source: \"iana\",\n extensions: [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.hl7v2+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.hp-hpgl\": {\n source: \"iana\",\n extensions: [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n source: \"iana\",\n extensions: [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n source: \"iana\",\n extensions: [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n source: \"iana\",\n extensions: [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n source: \"iana\",\n extensions: [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n source: \"iana\",\n extensions: [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n source: \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n source: \"iana\",\n extensions: [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hyper-item+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hyperdrive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hzn-3d-crossword\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n source: \"iana\",\n extensions: [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n source: \"iana\",\n extensions: [\"afp\", \"listafp\", \"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n source: \"iana\",\n extensions: [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n source: \"iana\",\n extensions: [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n source: \"iana\",\n extensions: [\"icc\", \"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n source: \"iana\"\n },\n \"application/vnd.igloader\": {\n source: \"iana\",\n extensions: [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.imagemeter.image+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.immervision-ivp\": {\n source: \"iana\",\n extensions: [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n source: \"iana\",\n extensions: [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n source: \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n source: \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n source: \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.informix-visionary\": {\n source: \"iana\"\n },\n \"application/vnd.infotech.project\": {\n source: \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.innopath.wamp.notification\": {\n source: \"iana\"\n },\n \"application/vnd.insors.igm\": {\n source: \"iana\",\n extensions: [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n source: \"iana\",\n extensions: [\"xpw\", \"xpx\"]\n },\n \"application/vnd.intergeo\": {\n source: \"iana\",\n extensions: [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n source: \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n source: \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n source: \"iana\",\n extensions: [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n source: \"iana\",\n extensions: [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n source: \"iana\",\n extensions: [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n source: \"iana\",\n extensions: [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n source: \"iana\",\n extensions: [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.jam\": {\n source: \"iana\",\n extensions: [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n source: \"iana\",\n extensions: [\"rms\"]\n },\n \"application/vnd.jisp\": {\n source: \"iana\",\n extensions: [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n source: \"iana\",\n extensions: [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n source: \"iana\"\n },\n \"application/vnd.kahootz\": {\n source: \"iana\",\n extensions: [\"ktz\", \"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n source: \"iana\",\n extensions: [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n source: \"iana\",\n extensions: [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n source: \"iana\",\n extensions: [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n source: \"iana\",\n extensions: [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n source: \"iana\",\n extensions: [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n source: \"iana\",\n extensions: [\"kpr\", \"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n source: \"iana\",\n extensions: [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n source: \"iana\",\n extensions: [\"kwd\", \"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n source: \"iana\",\n extensions: [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n source: \"iana\",\n extensions: [\"kia\"]\n },\n \"application/vnd.kinar\": {\n source: \"iana\",\n extensions: [\"kne\", \"knp\"]\n },\n \"application/vnd.koan\": {\n source: \"iana\",\n extensions: [\"skp\", \"skd\", \"skt\", \"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n source: \"iana\",\n extensions: [\"sse\"]\n },\n \"application/vnd.las\": {\n source: \"iana\"\n },\n \"application/vnd.las.las+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.las.las+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n source: \"iana\"\n },\n \"application/vnd.leap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.liberty-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n source: \"iana\",\n extensions: [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.loom\": {\n source: \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n source: \"iana\",\n extensions: [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n source: \"iana\",\n extensions: [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n source: \"iana\",\n extensions: [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n source: \"iana\",\n extensions: [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n source: \"iana\",\n extensions: [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n source: \"iana\",\n extensions: [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n source: \"iana\",\n extensions: [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n source: \"iana\",\n extensions: [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n source: \"iana\",\n extensions: [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n source: \"iana\"\n },\n \"application/vnd.mason+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n source: \"iana\"\n },\n \"application/vnd.mcd\": {\n source: \"iana\",\n extensions: [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n source: \"iana\",\n extensions: [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n source: \"iana\",\n extensions: [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n source: \"iana\"\n },\n \"application/vnd.mfer\": {\n source: \"iana\",\n extensions: [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n source: \"iana\",\n extensions: [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.micrografx.flo\": {\n source: \"iana\",\n extensions: [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n source: \"iana\",\n extensions: [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n source: \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n source: \"iana\"\n },\n \"application/vnd.miele+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.mif\": {\n source: \"iana\",\n extensions: [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n source: \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n source: \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n source: \"iana\",\n extensions: [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n source: \"iana\",\n extensions: [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n source: \"iana\",\n extensions: [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n source: \"iana\",\n extensions: [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n source: \"iana\",\n extensions: [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n source: \"iana\",\n extensions: [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n source: \"iana\",\n extensions: [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n source: \"iana\",\n extensions: [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n source: \"iana\",\n extensions: [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n source: \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n source: \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n source: \"iana\",\n extensions: [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n source: \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n source: \"iana\",\n extensions: [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n source: \"apache\"\n },\n \"application/vnd.ms-excel\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xls\", \"xlm\", \"xla\", \"xlc\", \"xlt\", \"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n source: \"iana\",\n extensions: [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n source: \"iana\",\n extensions: [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n source: \"iana\",\n extensions: [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-officetheme\": {\n source: \"iana\",\n extensions: [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n source: \"apache\",\n compressible: true\n },\n \"application/vnd.ms-outlook\": {\n compressible: false,\n extensions: [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n source: \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n source: \"apache\",\n extensions: [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n source: \"apache\",\n extensions: [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-powerpoint\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ppt\", \"pps\", \"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n source: \"apache\",\n compressible: true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-project\": {\n source: \"iana\",\n extensions: [\"mpp\", \"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n source: \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n source: \"iana\",\n extensions: [\"wps\", \"wks\", \"wcm\", \"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n source: \"iana\",\n extensions: [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n source: \"iana\"\n },\n \"application/vnd.mseq\": {\n source: \"iana\",\n extensions: [\"mseq\"]\n },\n \"application/vnd.msign\": {\n source: \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n source: \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n source: \"iana\"\n },\n \"application/vnd.music-niff\": {\n source: \"iana\"\n },\n \"application/vnd.musician\": {\n source: \"iana\",\n extensions: [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n source: \"iana\",\n extensions: [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n source: \"iana\",\n extensions: [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ncd.control\": {\n source: \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n source: \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nebumind.line\": {\n source: \"iana\"\n },\n \"application/vnd.nervana\": {\n source: \"iana\"\n },\n \"application/vnd.netfpx\": {\n source: \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n source: \"iana\",\n extensions: [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n source: \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n source: \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n source: \"iana\"\n },\n \"application/vnd.nitf\": {\n source: \"iana\",\n extensions: [\"ntf\", \"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n source: \"iana\",\n extensions: [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n source: \"iana\",\n extensions: [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n source: \"iana\",\n extensions: [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n source: \"iana\",\n extensions: [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n source: \"iana\",\n extensions: [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.radio-preset\": {\n source: \"iana\",\n extensions: [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n source: \"iana\",\n extensions: [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n source: \"iana\",\n extensions: [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n source: \"iana\",\n extensions: [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n source: \"iana\",\n extensions: [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n source: \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n source: \"iana\",\n extensions: [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n source: \"iana\",\n extensions: [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n source: \"iana\",\n extensions: [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n source: \"iana\",\n extensions: [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n source: \"iana\",\n extensions: [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n source: \"iana\",\n extensions: [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n source: \"iana\",\n extensions: [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n source: \"iana\",\n extensions: [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n source: \"iana\",\n extensions: [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n source: \"iana\",\n extensions: [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n source: \"iana\",\n extensions: [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n source: \"iana\",\n extensions: [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n source: \"iana\",\n extensions: [\"oth\"]\n },\n \"application/vnd.obn\": {\n source: \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oftn.l10n+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n source: \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.pae.gem\": {\n source: \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.olpc-sugar\": {\n source: \"iana\",\n extensions: [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n source: \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n source: \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.stkm\": {\n source: \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.dcd\": {\n source: \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n source: \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n source: \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.push\": {\n source: \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.omads-email+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omads-file+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omads-folder+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omaloc-supl-init\": {\n source: \"iana\"\n },\n \"application/vnd.onepager\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertat\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n source: \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n source: \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n source: \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n source: \"apache\",\n extensions: [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n source: \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n source: \"iana\",\n extensions: [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n source: \"iana\",\n extensions: [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n source: \"iana\",\n extensions: [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n source: \"iana\",\n extensions: [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n source: \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n source: \"iana\",\n extensions: [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oracle.resource+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.orange.indata\": {\n source: \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n source: \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n source: \"iana\",\n extensions: [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n source: \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n source: \"iana\",\n extensions: [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n source: \"iana\",\n extensions: [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oxli.countgraph\": {\n source: \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.palm\": {\n source: \"iana\",\n extensions: [\"pdb\", \"pqa\", \"oprc\"]\n },\n \"application/vnd.panoply\": {\n source: \"iana\"\n },\n \"application/vnd.paos.xml\": {\n source: \"iana\"\n },\n \"application/vnd.patentdive\": {\n source: \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n source: \"iana\"\n },\n \"application/vnd.pawaafile\": {\n source: \"iana\",\n extensions: [\"paw\"]\n },\n \"application/vnd.pcos\": {\n source: \"iana\"\n },\n \"application/vnd.pg.format\": {\n source: \"iana\",\n extensions: [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n source: \"iana\",\n extensions: [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n source: \"iana\"\n },\n \"application/vnd.picsel\": {\n source: \"iana\",\n extensions: [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n source: \"iana\",\n extensions: [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.pocketlearn\": {\n source: \"iana\",\n extensions: [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n source: \"iana\",\n extensions: [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n source: \"iana\"\n },\n \"application/vnd.preminet\": {\n source: \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n source: \"iana\",\n extensions: [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n source: \"iana\",\n extensions: [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n source: \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n source: \"iana\",\n extensions: [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n source: \"iana\",\n extensions: [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n source: \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n source: \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n source: \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n source: \"iana\",\n extensions: [\"qxd\", \"qxt\", \"qwd\", \"qwt\", \"qxl\", \"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n source: \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.rainstor.data\": {\n source: \"iana\"\n },\n \"application/vnd.rapid\": {\n source: \"iana\"\n },\n \"application/vnd.rar\": {\n source: \"iana\",\n extensions: [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n source: \"iana\",\n extensions: [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n source: \"iana\",\n extensions: [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n source: \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n source: \"iana\"\n },\n \"application/vnd.restful+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.rig.cryptonote\": {\n source: \"iana\",\n extensions: [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n source: \"apache\",\n extensions: [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n source: \"apache\",\n extensions: [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n source: \"apache\",\n extensions: [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n source: \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n source: \"iana\"\n },\n \"application/vnd.s3sms\": {\n source: \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n source: \"iana\",\n extensions: [\"st\"]\n },\n \"application/vnd.sar\": {\n source: \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n source: \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n source: \"iana\"\n },\n \"application/vnd.scribus\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.net\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n source: \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n source: \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n source: \"iana\"\n },\n \"application/vnd.seemail\": {\n source: \"iana\",\n extensions: [\"see\"]\n },\n \"application/vnd.seis+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.sema\": {\n source: \"iana\",\n extensions: [\"sema\"]\n },\n \"application/vnd.semd\": {\n source: \"iana\",\n extensions: [\"semd\"]\n },\n \"application/vnd.semf\": {\n source: \"iana\",\n extensions: [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n source: \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n source: \"iana\",\n extensions: [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n source: \"iana\",\n extensions: [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n source: \"iana\",\n extensions: [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n source: \"iana\",\n extensions: [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.shopkick+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.shp\": {\n source: \"iana\"\n },\n \"application/vnd.shx\": {\n source: \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n source: \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n source: \"iana\",\n extensions: [\"twd\", \"twds\"]\n },\n \"application/vnd.siren+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.smaf\": {\n source: \"iana\",\n extensions: [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n source: \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n source: \"iana\",\n extensions: [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n source: \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n source: \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sdkm\", \"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n source: \"iana\",\n extensions: [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n source: \"iana\",\n extensions: [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n source: \"iana\"\n },\n \"application/vnd.sss-cod\": {\n source: \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n source: \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n source: \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n source: \"apache\",\n extensions: [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n source: \"apache\",\n extensions: [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n source: \"apache\",\n extensions: [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n source: \"apache\",\n extensions: [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n source: \"apache\",\n extensions: [\"sdw\", \"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n source: \"apache\",\n extensions: [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n source: \"iana\",\n extensions: [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n source: \"iana\",\n extensions: [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n source: \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n source: \"apache\",\n extensions: [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n source: \"apache\",\n extensions: [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n source: \"apache\",\n extensions: [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n source: \"apache\",\n extensions: [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n source: \"apache\",\n extensions: [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n source: \"apache\",\n extensions: [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n source: \"apache\",\n extensions: [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n source: \"apache\",\n extensions: [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n source: \"apache\",\n extensions: [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n source: \"apache\",\n extensions: [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n source: \"iana\",\n extensions: [\"sus\", \"susp\"]\n },\n \"application/vnd.svd\": {\n source: \"iana\",\n extensions: [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n source: \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.syft+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.symbian.install\": {\n source: \"apache\",\n extensions: [\"sis\", \"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.syncml.ds.notification\": {\n source: \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tao.intent-module-archive\": {\n source: \"iana\",\n extensions: [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n source: \"iana\",\n extensions: [\"pcap\", \"cap\", \"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tml\": {\n source: \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n source: \"iana\",\n extensions: [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n source: \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n source: \"iana\",\n extensions: [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n source: \"iana\",\n extensions: [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n source: \"iana\",\n extensions: [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n source: \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n source: \"iana\"\n },\n \"application/vnd.ufdl\": {\n source: \"iana\",\n extensions: [\"ufd\", \"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n source: \"iana\",\n extensions: [\"utz\"]\n },\n \"application/vnd.umajin\": {\n source: \"iana\",\n extensions: [\"umj\"]\n },\n \"application/vnd.unity\": {\n source: \"iana\",\n extensions: [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n source: \"iana\"\n },\n \"application/vnd.uri-map\": {\n source: \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n source: \"iana\"\n },\n \"application/vnd.vcx\": {\n source: \"iana\",\n extensions: [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n source: \"iana\"\n },\n \"application/vnd.vectorworks\": {\n source: \"iana\"\n },\n \"application/vnd.vel+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.verimatrix.vcas\": {\n source: \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.veryant.thin\": {\n source: \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n source: \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n source: \"iana\"\n },\n \"application/vnd.visio\": {\n source: \"iana\",\n extensions: [\"vsd\", \"vst\", \"vss\", \"vsw\"]\n },\n \"application/vnd.visionary\": {\n source: \"iana\",\n extensions: [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n source: \"iana\"\n },\n \"application/vnd.vsf\": {\n source: \"iana\",\n extensions: [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n source: \"iana\"\n },\n \"application/vnd.wap.slc\": {\n source: \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n source: \"iana\",\n extensions: [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n source: \"iana\",\n extensions: [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n source: \"iana\",\n extensions: [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n source: \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n source: \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n source: \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n source: \"iana\"\n },\n \"application/vnd.wmc\": {\n source: \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n source: \"iana\",\n extensions: [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n source: \"iana\",\n extensions: [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n source: \"iana\",\n extensions: [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n source: \"iana\"\n },\n \"application/vnd.wt.stf\": {\n source: \"iana\",\n extensions: [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.wv.ssp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xacml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xara\": {\n source: \"iana\",\n extensions: [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n source: \"iana\",\n extensions: [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n source: \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xmpie.cpkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n source: \"iana\",\n extensions: [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n source: \"iana\",\n extensions: [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n source: \"iana\",\n extensions: [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n source: \"iana\",\n extensions: [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n source: \"iana\",\n extensions: [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n source: \"iana\",\n extensions: [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n source: \"iana\"\n },\n \"application/vnd.yaoweme\": {\n source: \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n source: \"iana\",\n extensions: [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n source: \"iana\"\n },\n \"application/vnd.zul\": {\n source: \"iana\",\n extensions: [\"zir\", \"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vq-rtcpxr\": {\n source: \"iana\"\n },\n \"application/wasm\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wif\"]\n },\n \"application/webpush-options+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/whoispp-query\": {\n source: \"iana\"\n },\n \"application/whoispp-response\": {\n source: \"iana\"\n },\n \"application/widget\": {\n source: \"iana\",\n extensions: [\"wgt\"]\n },\n \"application/winhlp\": {\n source: \"apache\",\n extensions: [\"hlp\"]\n },\n \"application/wita\": {\n source: \"iana\"\n },\n \"application/wordperfect5.1\": {\n source: \"iana\"\n },\n \"application/wsdl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"7z\"]\n },\n \"application/x-abiword\": {\n source: \"apache\",\n extensions: [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n source: \"apache\",\n extensions: [\"ace\"]\n },\n \"application/x-amf\": {\n source: \"apache\"\n },\n \"application/x-apple-diskimage\": {\n source: \"apache\",\n extensions: [\"dmg\"]\n },\n \"application/x-arj\": {\n compressible: false,\n extensions: [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n source: \"apache\",\n extensions: [\"aab\", \"x32\", \"u32\", \"vox\"]\n },\n \"application/x-authorware-map\": {\n source: \"apache\",\n extensions: [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n source: \"apache\",\n extensions: [\"aas\"]\n },\n \"application/x-bcpio\": {\n source: \"apache\",\n extensions: [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n compressible: false,\n extensions: [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n source: \"apache\",\n extensions: [\"torrent\"]\n },\n \"application/x-blorb\": {\n source: \"apache\",\n extensions: [\"blb\", \"blorb\"]\n },\n \"application/x-bzip\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"bz\"]\n },\n \"application/x-bzip2\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"bz2\", \"boz\"]\n },\n \"application/x-cbr\": {\n source: \"apache\",\n extensions: [\"cbr\", \"cba\", \"cbt\", \"cbz\", \"cb7\"]\n },\n \"application/x-cdlink\": {\n source: \"apache\",\n extensions: [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n source: \"apache\",\n extensions: [\"cfs\"]\n },\n \"application/x-chat\": {\n source: \"apache\",\n extensions: [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n source: \"apache\",\n extensions: [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n extensions: [\"crx\"]\n },\n \"application/x-cocoa\": {\n source: \"nginx\",\n extensions: [\"cco\"]\n },\n \"application/x-compress\": {\n source: \"apache\"\n },\n \"application/x-conference\": {\n source: \"apache\",\n extensions: [\"nsc\"]\n },\n \"application/x-cpio\": {\n source: \"apache\",\n extensions: [\"cpio\"]\n },\n \"application/x-csh\": {\n source: \"apache\",\n extensions: [\"csh\"]\n },\n \"application/x-deb\": {\n compressible: false\n },\n \"application/x-debian-package\": {\n source: \"apache\",\n extensions: [\"deb\", \"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n source: \"apache\",\n extensions: [\"dgc\"]\n },\n \"application/x-director\": {\n source: \"apache\",\n extensions: [\"dir\", \"dcr\", \"dxr\", \"cst\", \"cct\", \"cxt\", \"w3d\", \"fgd\", \"swa\"]\n },\n \"application/x-doom\": {\n source: \"apache\",\n extensions: [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"res\"]\n },\n \"application/x-dvi\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"dvi\"]\n },\n \"application/x-envoy\": {\n source: \"apache\",\n extensions: [\"evy\"]\n },\n \"application/x-eva\": {\n source: \"apache\",\n extensions: [\"eva\"]\n },\n \"application/x-font-bdf\": {\n source: \"apache\",\n extensions: [\"bdf\"]\n },\n \"application/x-font-dos\": {\n source: \"apache\"\n },\n \"application/x-font-framemaker\": {\n source: \"apache\"\n },\n \"application/x-font-ghostscript\": {\n source: \"apache\",\n extensions: [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n source: \"apache\"\n },\n \"application/x-font-linux-psf\": {\n source: \"apache\",\n extensions: [\"psf\"]\n },\n \"application/x-font-pcf\": {\n source: \"apache\",\n extensions: [\"pcf\"]\n },\n \"application/x-font-snf\": {\n source: \"apache\",\n extensions: [\"snf\"]\n },\n \"application/x-font-speedo\": {\n source: \"apache\"\n },\n \"application/x-font-sunos-news\": {\n source: \"apache\"\n },\n \"application/x-font-type1\": {\n source: \"apache\",\n extensions: [\"pfa\", \"pfb\", \"pfm\", \"afm\"]\n },\n \"application/x-font-vfont\": {\n source: \"apache\"\n },\n \"application/x-freearc\": {\n source: \"apache\",\n extensions: [\"arc\"]\n },\n \"application/x-futuresplash\": {\n source: \"apache\",\n extensions: [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n source: \"apache\",\n extensions: [\"gca\"]\n },\n \"application/x-glulx\": {\n source: \"apache\",\n extensions: [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n source: \"apache\",\n extensions: [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n source: \"apache\",\n extensions: [\"gramps\"]\n },\n \"application/x-gtar\": {\n source: \"apache\",\n extensions: [\"gtar\"]\n },\n \"application/x-gzip\": {\n source: \"apache\"\n },\n \"application/x-hdf\": {\n source: \"apache\",\n extensions: [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n compressible: true,\n extensions: [\"php\"]\n },\n \"application/x-install-instructions\": {\n source: \"apache\",\n extensions: [\"install\"]\n },\n \"application/x-iso9660-image\": {\n source: \"apache\",\n extensions: [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n extensions: [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n extensions: [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n extensions: [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n source: \"nginx\",\n extensions: [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"jnlp\"]\n },\n \"application/x-javascript\": {\n compressible: true\n },\n \"application/x-keepass2\": {\n extensions: [\"kdbx\"]\n },\n \"application/x-latex\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n extensions: [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n source: \"apache\",\n extensions: [\"lzh\", \"lha\"]\n },\n \"application/x-makeself\": {\n source: \"nginx\",\n extensions: [\"run\"]\n },\n \"application/x-mie\": {\n source: \"apache\",\n extensions: [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n source: \"apache\",\n extensions: [\"prc\", \"mobi\"]\n },\n \"application/x-mpegurl\": {\n compressible: false\n },\n \"application/x-ms-application\": {\n source: \"apache\",\n extensions: [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n source: \"apache\",\n extensions: [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n source: \"apache\",\n extensions: [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n source: \"apache\",\n extensions: [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n source: \"apache\",\n extensions: [\"xbap\"]\n },\n \"application/x-msaccess\": {\n source: \"apache\",\n extensions: [\"mdb\"]\n },\n \"application/x-msbinder\": {\n source: \"apache\",\n extensions: [\"obd\"]\n },\n \"application/x-mscardfile\": {\n source: \"apache\",\n extensions: [\"crd\"]\n },\n \"application/x-msclip\": {\n source: \"apache\",\n extensions: [\"clp\"]\n },\n \"application/x-msdos-program\": {\n extensions: [\"exe\"]\n },\n \"application/x-msdownload\": {\n source: \"apache\",\n extensions: [\"exe\", \"dll\", \"com\", \"bat\", \"msi\"]\n },\n \"application/x-msmediaview\": {\n source: \"apache\",\n extensions: [\"mvb\", \"m13\", \"m14\"]\n },\n \"application/x-msmetafile\": {\n source: \"apache\",\n extensions: [\"wmf\", \"wmz\", \"emf\", \"emz\"]\n },\n \"application/x-msmoney\": {\n source: \"apache\",\n extensions: [\"mny\"]\n },\n \"application/x-mspublisher\": {\n source: \"apache\",\n extensions: [\"pub\"]\n },\n \"application/x-msschedule\": {\n source: \"apache\",\n extensions: [\"scd\"]\n },\n \"application/x-msterminal\": {\n source: \"apache\",\n extensions: [\"trm\"]\n },\n \"application/x-mswrite\": {\n source: \"apache\",\n extensions: [\"wri\"]\n },\n \"application/x-netcdf\": {\n source: \"apache\",\n extensions: [\"nc\", \"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n compressible: true,\n extensions: [\"pac\"]\n },\n \"application/x-nzb\": {\n source: \"apache\",\n extensions: [\"nzb\"]\n },\n \"application/x-perl\": {\n source: \"nginx\",\n extensions: [\"pl\", \"pm\"]\n },\n \"application/x-pilot\": {\n source: \"nginx\",\n extensions: [\"prc\", \"pdb\"]\n },\n \"application/x-pkcs12\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"p12\", \"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n source: \"apache\",\n extensions: [\"p7b\", \"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n source: \"apache\",\n extensions: [\"p7r\"]\n },\n \"application/x-pki-message\": {\n source: \"iana\"\n },\n \"application/x-rar-compressed\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n source: \"nginx\",\n extensions: [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n source: \"apache\",\n extensions: [\"ris\"]\n },\n \"application/x-sea\": {\n source: \"nginx\",\n extensions: [\"sea\"]\n },\n \"application/x-sh\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"sh\"]\n },\n \"application/x-shar\": {\n source: \"apache\",\n extensions: [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n source: \"apache\",\n extensions: [\"xap\"]\n },\n \"application/x-sql\": {\n source: \"apache\",\n extensions: [\"sql\"]\n },\n \"application/x-stuffit\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"sit\"]\n },\n \"application/x-stuffitx\": {\n source: \"apache\",\n extensions: [\"sitx\"]\n },\n \"application/x-subrip\": {\n source: \"apache\",\n extensions: [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n source: \"apache\",\n extensions: [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n source: \"apache\",\n extensions: [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n source: \"apache\",\n extensions: [\"t3\"]\n },\n \"application/x-tads\": {\n source: \"apache\",\n extensions: [\"gam\"]\n },\n \"application/x-tar\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"tar\"]\n },\n \"application/x-tcl\": {\n source: \"apache\",\n extensions: [\"tcl\", \"tk\"]\n },\n \"application/x-tex\": {\n source: \"apache\",\n extensions: [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n source: \"apache\",\n extensions: [\"tfm\"]\n },\n \"application/x-texinfo\": {\n source: \"apache\",\n extensions: [\"texinfo\", \"texi\"]\n },\n \"application/x-tgif\": {\n source: \"apache\",\n extensions: [\"obj\"]\n },\n \"application/x-ustar\": {\n source: \"apache\",\n extensions: [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n compressible: true,\n extensions: [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n compressible: true,\n extensions: [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n compressible: true,\n extensions: [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n compressible: true,\n extensions: [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n compressible: false,\n extensions: [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n compressible: true,\n extensions: [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n compressible: true,\n extensions: [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n compressible: true,\n extensions: [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n source: \"apache\",\n extensions: [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n compressible: true,\n extensions: [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n source: \"iana\",\n compressible: true\n },\n \"application/x-x509-ca-cert\": {\n source: \"iana\",\n extensions: [\"der\", \"crt\", \"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n source: \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n source: \"iana\"\n },\n \"application/x-xfig\": {\n source: \"apache\",\n extensions: [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"xpi\"]\n },\n \"application/x-xz\": {\n source: \"apache\",\n extensions: [\"xz\"]\n },\n \"application/x-zmachine\": {\n source: \"apache\",\n extensions: [\"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\"]\n },\n \"application/x400-bp\": {\n source: \"iana\"\n },\n \"application/xacml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xaml+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xcap-ns+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xcon-conference-info-diff+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xenc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xhtml\", \"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n source: \"apache\",\n compressible: true\n },\n \"application/xliff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xlf\"]\n },\n \"application/xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xml\", \"xsl\", \"xsd\", \"rng\"]\n },\n \"application/xml-dtd\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n source: \"iana\"\n },\n \"application/xml-patch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xmpp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xop+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xop\"]\n },\n \"application/xproc+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xpl\"]\n },\n \"application/xslt+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xsl\", \"xslt\"]\n },\n \"application/xspf+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xspf\"]\n },\n \"application/xv+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"]\n },\n \"application/yang\": {\n source: \"iana\",\n extensions: [\"yang\"]\n },\n \"application/yang-data+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-data+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-patch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yin+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"yin\"]\n },\n \"application/zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"zip\"]\n },\n \"application/zlib\": {\n source: \"iana\"\n },\n \"application/zstd\": {\n source: \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"audio/32kadpcm\": {\n source: \"iana\"\n },\n \"audio/3gpp\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n source: \"iana\"\n },\n \"audio/aac\": {\n source: \"iana\"\n },\n \"audio/ac3\": {\n source: \"iana\"\n },\n \"audio/adpcm\": {\n source: \"apache\",\n extensions: [\"adp\"]\n },\n \"audio/amr\": {\n source: \"iana\",\n extensions: [\"amr\"]\n },\n \"audio/amr-wb\": {\n source: \"iana\"\n },\n \"audio/amr-wb+\": {\n source: \"iana\"\n },\n \"audio/aptx\": {\n source: \"iana\"\n },\n \"audio/asc\": {\n source: \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n source: \"iana\"\n },\n \"audio/atrac-x\": {\n source: \"iana\"\n },\n \"audio/atrac3\": {\n source: \"iana\"\n },\n \"audio/basic\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"au\", \"snd\"]\n },\n \"audio/bv16\": {\n source: \"iana\"\n },\n \"audio/bv32\": {\n source: \"iana\"\n },\n \"audio/clearmode\": {\n source: \"iana\"\n },\n \"audio/cn\": {\n source: \"iana\"\n },\n \"audio/dat12\": {\n source: \"iana\"\n },\n \"audio/dls\": {\n source: \"iana\"\n },\n \"audio/dsr-es201108\": {\n source: \"iana\"\n },\n \"audio/dsr-es202050\": {\n source: \"iana\"\n },\n \"audio/dsr-es202211\": {\n source: \"iana\"\n },\n \"audio/dsr-es202212\": {\n source: \"iana\"\n },\n \"audio/dv\": {\n source: \"iana\"\n },\n \"audio/dvi4\": {\n source: \"iana\"\n },\n \"audio/eac3\": {\n source: \"iana\"\n },\n \"audio/encaprtp\": {\n source: \"iana\"\n },\n \"audio/evrc\": {\n source: \"iana\"\n },\n \"audio/evrc-qcp\": {\n source: \"iana\"\n },\n \"audio/evrc0\": {\n source: \"iana\"\n },\n \"audio/evrc1\": {\n source: \"iana\"\n },\n \"audio/evrcb\": {\n source: \"iana\"\n },\n \"audio/evrcb0\": {\n source: \"iana\"\n },\n \"audio/evrcb1\": {\n source: \"iana\"\n },\n \"audio/evrcnw\": {\n source: \"iana\"\n },\n \"audio/evrcnw0\": {\n source: \"iana\"\n },\n \"audio/evrcnw1\": {\n source: \"iana\"\n },\n \"audio/evrcwb\": {\n source: \"iana\"\n },\n \"audio/evrcwb0\": {\n source: \"iana\"\n },\n \"audio/evrcwb1\": {\n source: \"iana\"\n },\n \"audio/evs\": {\n source: \"iana\"\n },\n \"audio/flexfec\": {\n source: \"iana\"\n },\n \"audio/fwdred\": {\n source: \"iana\"\n },\n \"audio/g711-0\": {\n source: \"iana\"\n },\n \"audio/g719\": {\n source: \"iana\"\n },\n \"audio/g722\": {\n source: \"iana\"\n },\n \"audio/g7221\": {\n source: \"iana\"\n },\n \"audio/g723\": {\n source: \"iana\"\n },\n \"audio/g726-16\": {\n source: \"iana\"\n },\n \"audio/g726-24\": {\n source: \"iana\"\n },\n \"audio/g726-32\": {\n source: \"iana\"\n },\n \"audio/g726-40\": {\n source: \"iana\"\n },\n \"audio/g728\": {\n source: \"iana\"\n },\n \"audio/g729\": {\n source: \"iana\"\n },\n \"audio/g7291\": {\n source: \"iana\"\n },\n \"audio/g729d\": {\n source: \"iana\"\n },\n \"audio/g729e\": {\n source: \"iana\"\n },\n \"audio/gsm\": {\n source: \"iana\"\n },\n \"audio/gsm-efr\": {\n source: \"iana\"\n },\n \"audio/gsm-hr-08\": {\n source: \"iana\"\n },\n \"audio/ilbc\": {\n source: \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n source: \"iana\"\n },\n \"audio/isac\": {\n source: \"apache\"\n },\n \"audio/l16\": {\n source: \"iana\"\n },\n \"audio/l20\": {\n source: \"iana\"\n },\n \"audio/l24\": {\n source: \"iana\",\n compressible: false\n },\n \"audio/l8\": {\n source: \"iana\"\n },\n \"audio/lpc\": {\n source: \"iana\"\n },\n \"audio/melp\": {\n source: \"iana\"\n },\n \"audio/melp1200\": {\n source: \"iana\"\n },\n \"audio/melp2400\": {\n source: \"iana\"\n },\n \"audio/melp600\": {\n source: \"iana\"\n },\n \"audio/mhas\": {\n source: \"iana\"\n },\n \"audio/midi\": {\n source: \"apache\",\n extensions: [\"mid\", \"midi\", \"kar\", \"rmi\"]\n },\n \"audio/mobile-xmf\": {\n source: \"iana\",\n extensions: [\"mxmf\"]\n },\n \"audio/mp3\": {\n compressible: false,\n extensions: [\"mp3\"]\n },\n \"audio/mp4\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"m4a\", \"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n source: \"iana\"\n },\n \"audio/mpa\": {\n source: \"iana\"\n },\n \"audio/mpa-robust\": {\n source: \"iana\"\n },\n \"audio/mpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n source: \"iana\"\n },\n \"audio/musepack\": {\n source: \"apache\"\n },\n \"audio/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"oga\", \"ogg\", \"spx\", \"opus\"]\n },\n \"audio/opus\": {\n source: \"iana\"\n },\n \"audio/parityfec\": {\n source: \"iana\"\n },\n \"audio/pcma\": {\n source: \"iana\"\n },\n \"audio/pcma-wb\": {\n source: \"iana\"\n },\n \"audio/pcmu\": {\n source: \"iana\"\n },\n \"audio/pcmu-wb\": {\n source: \"iana\"\n },\n \"audio/prs.sid\": {\n source: \"iana\"\n },\n \"audio/qcelp\": {\n source: \"iana\"\n },\n \"audio/raptorfec\": {\n source: \"iana\"\n },\n \"audio/red\": {\n source: \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"audio/rtp-midi\": {\n source: \"iana\"\n },\n \"audio/rtploopback\": {\n source: \"iana\"\n },\n \"audio/rtx\": {\n source: \"iana\"\n },\n \"audio/s3m\": {\n source: \"apache\",\n extensions: [\"s3m\"]\n },\n \"audio/scip\": {\n source: \"iana\"\n },\n \"audio/silk\": {\n source: \"apache\",\n extensions: [\"sil\"]\n },\n \"audio/smv\": {\n source: \"iana\"\n },\n \"audio/smv-qcp\": {\n source: \"iana\"\n },\n \"audio/smv0\": {\n source: \"iana\"\n },\n \"audio/sofa\": {\n source: \"iana\"\n },\n \"audio/sp-midi\": {\n source: \"iana\"\n },\n \"audio/speex\": {\n source: \"iana\"\n },\n \"audio/t140c\": {\n source: \"iana\"\n },\n \"audio/t38\": {\n source: \"iana\"\n },\n \"audio/telephone-event\": {\n source: \"iana\"\n },\n \"audio/tetra_acelp\": {\n source: \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n source: \"iana\"\n },\n \"audio/tone\": {\n source: \"iana\"\n },\n \"audio/tsvcis\": {\n source: \"iana\"\n },\n \"audio/uemclip\": {\n source: \"iana\"\n },\n \"audio/ulpfec\": {\n source: \"iana\"\n },\n \"audio/usac\": {\n source: \"iana\"\n },\n \"audio/vdvi\": {\n source: \"iana\"\n },\n \"audio/vmr-wb\": {\n source: \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n source: \"iana\"\n },\n \"audio/vnd.4sb\": {\n source: \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n source: \"iana\"\n },\n \"audio/vnd.celp\": {\n source: \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n source: \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n source: \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n source: \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n source: \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n source: \"iana\",\n extensions: [\"uva\", \"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n source: \"iana\",\n extensions: [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n source: \"iana\"\n },\n \"audio/vnd.dra\": {\n source: \"iana\",\n extensions: [\"dra\"]\n },\n \"audio/vnd.dts\": {\n source: \"iana\",\n extensions: [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n source: \"iana\",\n extensions: [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n source: \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n source: \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n source: \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n source: \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n source: \"iana\",\n extensions: [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n source: \"iana\",\n extensions: [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n source: \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n source: \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n source: \"iana\",\n extensions: [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n source: \"iana\",\n extensions: [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n source: \"iana\",\n extensions: [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n source: \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n source: \"iana\"\n },\n \"audio/vnd.qcelp\": {\n source: \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n source: \"iana\"\n },\n \"audio/vnd.rip\": {\n source: \"iana\",\n extensions: [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n compressible: false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n source: \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n source: \"iana\"\n },\n \"audio/vnd.wave\": {\n compressible: false\n },\n \"audio/vorbis\": {\n source: \"iana\",\n compressible: false\n },\n \"audio/vorbis-config\": {\n source: \"iana\"\n },\n \"audio/wav\": {\n compressible: false,\n extensions: [\"wav\"]\n },\n \"audio/wave\": {\n compressible: false,\n extensions: [\"wav\"]\n },\n \"audio/webm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"weba\"]\n },\n \"audio/x-aac\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"aac\"]\n },\n \"audio/x-aiff\": {\n source: \"apache\",\n extensions: [\"aif\", \"aiff\", \"aifc\"]\n },\n \"audio/x-caf\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"caf\"]\n },\n \"audio/x-flac\": {\n source: \"apache\",\n extensions: [\"flac\"]\n },\n \"audio/x-m4a\": {\n source: \"nginx\",\n extensions: [\"m4a\"]\n },\n \"audio/x-matroska\": {\n source: \"apache\",\n extensions: [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n source: \"apache\",\n extensions: [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n source: \"apache\",\n extensions: [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n source: \"apache\",\n extensions: [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n source: \"apache\",\n extensions: [\"ram\", \"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n source: \"apache\",\n extensions: [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n source: \"nginx\",\n extensions: [\"ra\"]\n },\n \"audio/x-tta\": {\n source: \"apache\"\n },\n \"audio/x-wav\": {\n source: \"apache\",\n extensions: [\"wav\"]\n },\n \"audio/xm\": {\n source: \"apache\",\n extensions: [\"xm\"]\n },\n \"chemical/x-cdx\": {\n source: \"apache\",\n extensions: [\"cdx\"]\n },\n \"chemical/x-cif\": {\n source: \"apache\",\n extensions: [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n source: \"apache\",\n extensions: [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n source: \"apache\",\n extensions: [\"cml\"]\n },\n \"chemical/x-csml\": {\n source: \"apache\",\n extensions: [\"csml\"]\n },\n \"chemical/x-pdb\": {\n source: \"apache\"\n },\n \"chemical/x-xyz\": {\n source: \"apache\",\n extensions: [\"xyz\"]\n },\n \"font/collection\": {\n source: \"iana\",\n extensions: [\"ttc\"]\n },\n \"font/otf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"otf\"]\n },\n \"font/sfnt\": {\n source: \"iana\"\n },\n \"font/ttf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ttf\"]\n },\n \"font/woff\": {\n source: \"iana\",\n extensions: [\"woff\"]\n },\n \"font/woff2\": {\n source: \"iana\",\n extensions: [\"woff2\"]\n },\n \"image/aces\": {\n source: \"iana\",\n extensions: [\"exr\"]\n },\n \"image/apng\": {\n compressible: false,\n extensions: [\"apng\"]\n },\n \"image/avci\": {\n source: \"iana\",\n extensions: [\"avci\"]\n },\n \"image/avcs\": {\n source: \"iana\",\n extensions: [\"avcs\"]\n },\n \"image/avif\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"avif\"]\n },\n \"image/bmp\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"bmp\"]\n },\n \"image/cgm\": {\n source: \"iana\",\n extensions: [\"cgm\"]\n },\n \"image/dicom-rle\": {\n source: \"iana\",\n extensions: [\"drle\"]\n },\n \"image/emf\": {\n source: \"iana\",\n extensions: [\"emf\"]\n },\n \"image/fits\": {\n source: \"iana\",\n extensions: [\"fits\"]\n },\n \"image/g3fax\": {\n source: \"iana\",\n extensions: [\"g3\"]\n },\n \"image/gif\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"gif\"]\n },\n \"image/heic\": {\n source: \"iana\",\n extensions: [\"heic\"]\n },\n \"image/heic-sequence\": {\n source: \"iana\",\n extensions: [\"heics\"]\n },\n \"image/heif\": {\n source: \"iana\",\n extensions: [\"heif\"]\n },\n \"image/heif-sequence\": {\n source: \"iana\",\n extensions: [\"heifs\"]\n },\n \"image/hej2k\": {\n source: \"iana\",\n extensions: [\"hej2\"]\n },\n \"image/hsj2\": {\n source: \"iana\",\n extensions: [\"hsj2\"]\n },\n \"image/ief\": {\n source: \"iana\",\n extensions: [\"ief\"]\n },\n \"image/jls\": {\n source: \"iana\",\n extensions: [\"jls\"]\n },\n \"image/jp2\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jp2\", \"jpg2\"]\n },\n \"image/jpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpeg\", \"jpg\", \"jpe\"]\n },\n \"image/jph\": {\n source: \"iana\",\n extensions: [\"jph\"]\n },\n \"image/jphc\": {\n source: \"iana\",\n extensions: [\"jhc\"]\n },\n \"image/jpm\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpm\"]\n },\n \"image/jpx\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpx\", \"jpf\"]\n },\n \"image/jxr\": {\n source: \"iana\",\n extensions: [\"jxr\"]\n },\n \"image/jxra\": {\n source: \"iana\",\n extensions: [\"jxra\"]\n },\n \"image/jxrs\": {\n source: \"iana\",\n extensions: [\"jxrs\"]\n },\n \"image/jxs\": {\n source: \"iana\",\n extensions: [\"jxs\"]\n },\n \"image/jxsc\": {\n source: \"iana\",\n extensions: [\"jxsc\"]\n },\n \"image/jxsi\": {\n source: \"iana\",\n extensions: [\"jxsi\"]\n },\n \"image/jxss\": {\n source: \"iana\",\n extensions: [\"jxss\"]\n },\n \"image/ktx\": {\n source: \"iana\",\n extensions: [\"ktx\"]\n },\n \"image/ktx2\": {\n source: \"iana\",\n extensions: [\"ktx2\"]\n },\n \"image/naplps\": {\n source: \"iana\"\n },\n \"image/pjpeg\": {\n compressible: false\n },\n \"image/png\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"png\"]\n },\n \"image/prs.btif\": {\n source: \"iana\",\n extensions: [\"btif\"]\n },\n \"image/prs.pti\": {\n source: \"iana\",\n extensions: [\"pti\"]\n },\n \"image/pwg-raster\": {\n source: \"iana\"\n },\n \"image/sgi\": {\n source: \"apache\",\n extensions: [\"sgi\"]\n },\n \"image/svg+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"svg\", \"svgz\"]\n },\n \"image/t38\": {\n source: \"iana\",\n extensions: [\"t38\"]\n },\n \"image/tiff\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"tif\", \"tiff\"]\n },\n \"image/tiff-fx\": {\n source: \"iana\",\n extensions: [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n source: \"iana\",\n extensions: [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n source: \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n source: \"iana\",\n extensions: [\"uvi\", \"uvvi\", \"uvg\", \"uvvg\"]\n },\n \"image/vnd.djvu\": {\n source: \"iana\",\n extensions: [\"djvu\", \"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n source: \"iana\",\n extensions: [\"sub\"]\n },\n \"image/vnd.dwg\": {\n source: \"iana\",\n extensions: [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n source: \"iana\",\n extensions: [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n source: \"iana\",\n extensions: [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n source: \"iana\",\n extensions: [\"fpx\"]\n },\n \"image/vnd.fst\": {\n source: \"iana\",\n extensions: [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n source: \"iana\",\n extensions: [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n source: \"iana\",\n extensions: [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n source: \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ico\"]\n },\n \"image/vnd.mix\": {\n source: \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n source: \"iana\"\n },\n \"image/vnd.ms-dds\": {\n compressible: true,\n extensions: [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n source: \"iana\",\n extensions: [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n source: \"apache\",\n extensions: [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n source: \"iana\",\n extensions: [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n source: \"iana\",\n extensions: [\"b16\"]\n },\n \"image/vnd.radiance\": {\n source: \"iana\"\n },\n \"image/vnd.sealed.png\": {\n source: \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n source: \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n source: \"iana\"\n },\n \"image/vnd.svf\": {\n source: \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n source: \"iana\",\n extensions: [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n source: \"iana\",\n extensions: [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n source: \"iana\",\n extensions: [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n source: \"iana\",\n extensions: [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n source: \"iana\",\n extensions: [\"pcx\"]\n },\n \"image/webp\": {\n source: \"apache\",\n extensions: [\"webp\"]\n },\n \"image/wmf\": {\n source: \"iana\",\n extensions: [\"wmf\"]\n },\n \"image/x-3ds\": {\n source: \"apache\",\n extensions: [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n source: \"apache\",\n extensions: [\"ras\"]\n },\n \"image/x-cmx\": {\n source: \"apache\",\n extensions: [\"cmx\"]\n },\n \"image/x-freehand\": {\n source: \"apache\",\n extensions: [\"fh\", \"fhc\", \"fh4\", \"fh5\", \"fh7\"]\n },\n \"image/x-icon\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ico\"]\n },\n \"image/x-jng\": {\n source: \"nginx\",\n extensions: [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n source: \"apache\",\n extensions: [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n source: \"nginx\",\n compressible: true,\n extensions: [\"bmp\"]\n },\n \"image/x-pcx\": {\n source: \"apache\",\n extensions: [\"pcx\"]\n },\n \"image/x-pict\": {\n source: \"apache\",\n extensions: [\"pic\", \"pct\"]\n },\n \"image/x-portable-anymap\": {\n source: \"apache\",\n extensions: [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n source: \"apache\",\n extensions: [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n source: \"apache\",\n extensions: [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n source: \"apache\",\n extensions: [\"ppm\"]\n },\n \"image/x-rgb\": {\n source: \"apache\",\n extensions: [\"rgb\"]\n },\n \"image/x-tga\": {\n source: \"apache\",\n extensions: [\"tga\"]\n },\n \"image/x-xbitmap\": {\n source: \"apache\",\n extensions: [\"xbm\"]\n },\n \"image/x-xcf\": {\n compressible: false\n },\n \"image/x-xpixmap\": {\n source: \"apache\",\n extensions: [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n source: \"apache\",\n extensions: [\"xwd\"]\n },\n \"message/cpim\": {\n source: \"iana\"\n },\n \"message/delivery-status\": {\n source: \"iana\"\n },\n \"message/disposition-notification\": {\n source: \"iana\",\n extensions: [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n source: \"iana\"\n },\n \"message/feedback-report\": {\n source: \"iana\"\n },\n \"message/global\": {\n source: \"iana\",\n extensions: [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n source: \"iana\",\n extensions: [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n source: \"iana\",\n extensions: [\"u8mdn\"]\n },\n \"message/global-headers\": {\n source: \"iana\",\n extensions: [\"u8hdr\"]\n },\n \"message/http\": {\n source: \"iana\",\n compressible: false\n },\n \"message/imdn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"message/news\": {\n source: \"iana\"\n },\n \"message/partial\": {\n source: \"iana\",\n compressible: false\n },\n \"message/rfc822\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"eml\", \"mime\"]\n },\n \"message/s-http\": {\n source: \"iana\"\n },\n \"message/sip\": {\n source: \"iana\"\n },\n \"message/sipfrag\": {\n source: \"iana\"\n },\n \"message/tracking-status\": {\n source: \"iana\"\n },\n \"message/vnd.si.simp\": {\n source: \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n source: \"iana\",\n extensions: [\"wsc\"]\n },\n \"model/3mf\": {\n source: \"iana\",\n extensions: [\"3mf\"]\n },\n \"model/e57\": {\n source: \"iana\"\n },\n \"model/gltf+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"gltf\"]\n },\n \"model/gltf-binary\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"glb\"]\n },\n \"model/iges\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"igs\", \"iges\"]\n },\n \"model/mesh\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"msh\", \"mesh\", \"silo\"]\n },\n \"model/mtl\": {\n source: \"iana\",\n extensions: [\"mtl\"]\n },\n \"model/obj\": {\n source: \"iana\",\n extensions: [\"obj\"]\n },\n \"model/step\": {\n source: \"iana\"\n },\n \"model/step+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"stpx\"]\n },\n \"model/step+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"stpxz\"]\n },\n \"model/stl\": {\n source: \"iana\",\n extensions: [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dae\"]\n },\n \"model/vnd.dwf\": {\n source: \"iana\",\n extensions: [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n source: \"iana\"\n },\n \"model/vnd.gdl\": {\n source: \"iana\",\n extensions: [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n source: \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n source: \"iana\"\n },\n \"model/vnd.gtw\": {\n source: \"iana\",\n extensions: [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"model/vnd.mts\": {\n source: \"iana\",\n extensions: [\"mts\"]\n },\n \"model/vnd.opengex\": {\n source: \"iana\",\n extensions: [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n source: \"iana\",\n extensions: [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n source: \"iana\",\n extensions: [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n source: \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n source: \"iana\"\n },\n \"model/vnd.sap.vds\": {\n source: \"iana\",\n extensions: [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n source: \"iana\",\n extensions: [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n source: \"iana\",\n extensions: [\"vtu\"]\n },\n \"model/vrml\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"wrl\", \"vrml\"]\n },\n \"model/x3d+binary\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"x3db\", \"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n source: \"iana\",\n extensions: [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"x3dv\", \"x3dvz\"]\n },\n \"model/x3d+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"x3d\", \"x3dz\"]\n },\n \"model/x3d-vrml\": {\n source: \"iana\",\n extensions: [\"x3dv\"]\n },\n \"multipart/alternative\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/appledouble\": {\n source: \"iana\"\n },\n \"multipart/byteranges\": {\n source: \"iana\"\n },\n \"multipart/digest\": {\n source: \"iana\"\n },\n \"multipart/encrypted\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/form-data\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/header-set\": {\n source: \"iana\"\n },\n \"multipart/mixed\": {\n source: \"iana\"\n },\n \"multipart/multilingual\": {\n source: \"iana\"\n },\n \"multipart/parallel\": {\n source: \"iana\"\n },\n \"multipart/related\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/report\": {\n source: \"iana\"\n },\n \"multipart/signed\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/vnd.bint.med-plus\": {\n source: \"iana\"\n },\n \"multipart/voice-message\": {\n source: \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n source: \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"text/cache-manifest\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"appcache\", \"manifest\"]\n },\n \"text/calendar\": {\n source: \"iana\",\n extensions: [\"ics\", \"ifb\"]\n },\n \"text/calender\": {\n compressible: true\n },\n \"text/cmd\": {\n compressible: true\n },\n \"text/coffeescript\": {\n extensions: [\"coffee\", \"litcoffee\"]\n },\n \"text/cql\": {\n source: \"iana\"\n },\n \"text/cql-expression\": {\n source: \"iana\"\n },\n \"text/cql-identifier\": {\n source: \"iana\"\n },\n \"text/css\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"css\"]\n },\n \"text/csv\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"csv\"]\n },\n \"text/csv-schema\": {\n source: \"iana\"\n },\n \"text/directory\": {\n source: \"iana\"\n },\n \"text/dns\": {\n source: \"iana\"\n },\n \"text/ecmascript\": {\n source: \"iana\"\n },\n \"text/encaprtp\": {\n source: \"iana\"\n },\n \"text/enriched\": {\n source: \"iana\"\n },\n \"text/fhirpath\": {\n source: \"iana\"\n },\n \"text/flexfec\": {\n source: \"iana\"\n },\n \"text/fwdred\": {\n source: \"iana\"\n },\n \"text/gff3\": {\n source: \"iana\"\n },\n \"text/grammar-ref-list\": {\n source: \"iana\"\n },\n \"text/html\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"html\", \"htm\", \"shtml\"]\n },\n \"text/jade\": {\n extensions: [\"jade\"]\n },\n \"text/javascript\": {\n source: \"iana\",\n compressible: true\n },\n \"text/jcr-cnd\": {\n source: \"iana\"\n },\n \"text/jsx\": {\n compressible: true,\n extensions: [\"jsx\"]\n },\n \"text/less\": {\n compressible: true,\n extensions: [\"less\"]\n },\n \"text/markdown\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"markdown\", \"md\"]\n },\n \"text/mathml\": {\n source: \"nginx\",\n extensions: [\"mml\"]\n },\n \"text/mdx\": {\n compressible: true,\n extensions: [\"mdx\"]\n },\n \"text/mizar\": {\n source: \"iana\"\n },\n \"text/n3\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"n3\"]\n },\n \"text/parameters\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/parityfec\": {\n source: \"iana\"\n },\n \"text/plain\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"]\n },\n \"text/provenance-notation\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n source: \"iana\"\n },\n \"text/prs.lines.tag\": {\n source: \"iana\",\n extensions: [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n source: \"iana\"\n },\n \"text/raptorfec\": {\n source: \"iana\"\n },\n \"text/red\": {\n source: \"iana\"\n },\n \"text/rfc822-headers\": {\n source: \"iana\"\n },\n \"text/richtext\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtx\"]\n },\n \"text/rtf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"text/rtploopback\": {\n source: \"iana\"\n },\n \"text/rtx\": {\n source: \"iana\"\n },\n \"text/sgml\": {\n source: \"iana\",\n extensions: [\"sgml\", \"sgm\"]\n },\n \"text/shaclc\": {\n source: \"iana\"\n },\n \"text/shex\": {\n source: \"iana\",\n extensions: [\"shex\"]\n },\n \"text/slim\": {\n extensions: [\"slim\", \"slm\"]\n },\n \"text/spdx\": {\n source: \"iana\",\n extensions: [\"spdx\"]\n },\n \"text/strings\": {\n source: \"iana\"\n },\n \"text/stylus\": {\n extensions: [\"stylus\", \"styl\"]\n },\n \"text/t140\": {\n source: \"iana\"\n },\n \"text/tab-separated-values\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tsv\"]\n },\n \"text/troff\": {\n source: \"iana\",\n extensions: [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"]\n },\n \"text/turtle\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"ttl\"]\n },\n \"text/ulpfec\": {\n source: \"iana\"\n },\n \"text/uri-list\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uri\", \"uris\", \"urls\"]\n },\n \"text/vcard\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"vcard\"]\n },\n \"text/vnd.a\": {\n source: \"iana\"\n },\n \"text/vnd.abc\": {\n source: \"iana\"\n },\n \"text/vnd.ascii-art\": {\n source: \"iana\"\n },\n \"text/vnd.curl\": {\n source: \"iana\",\n extensions: [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n source: \"apache\",\n extensions: [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n source: \"apache\",\n extensions: [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n source: \"apache\",\n extensions: [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n source: \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n source: \"iana\",\n extensions: [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n source: \"iana\",\n extensions: [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n source: \"iana\"\n },\n \"text/vnd.fly\": {\n source: \"iana\",\n extensions: [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n source: \"iana\",\n extensions: [\"flx\"]\n },\n \"text/vnd.gml\": {\n source: \"iana\"\n },\n \"text/vnd.graphviz\": {\n source: \"iana\",\n extensions: [\"gv\"]\n },\n \"text/vnd.hans\": {\n source: \"iana\"\n },\n \"text/vnd.hgl\": {\n source: \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n source: \"iana\",\n extensions: [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n source: \"iana\",\n extensions: [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n source: \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n source: \"iana\"\n },\n \"text/vnd.latex-z\": {\n source: \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n source: \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n source: \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n source: \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n source: \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n source: \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n source: \"iana\"\n },\n \"text/vnd.sosi\": {\n source: \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n source: \"iana\"\n },\n \"text/vnd.wap.sl\": {\n source: \"iana\"\n },\n \"text/vnd.wap.wml\": {\n source: \"iana\",\n extensions: [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n source: \"iana\",\n extensions: [\"wmls\"]\n },\n \"text/vtt\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"vtt\"]\n },\n \"text/x-asm\": {\n source: \"apache\",\n extensions: [\"s\", \"asm\"]\n },\n \"text/x-c\": {\n source: \"apache\",\n extensions: [\"c\", \"cc\", \"cxx\", \"cpp\", \"h\", \"hh\", \"dic\"]\n },\n \"text/x-component\": {\n source: \"nginx\",\n extensions: [\"htc\"]\n },\n \"text/x-fortran\": {\n source: \"apache\",\n extensions: [\"f\", \"for\", \"f77\", \"f90\"]\n },\n \"text/x-gwt-rpc\": {\n compressible: true\n },\n \"text/x-handlebars-template\": {\n extensions: [\"hbs\"]\n },\n \"text/x-java-source\": {\n source: \"apache\",\n extensions: [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n compressible: true\n },\n \"text/x-lua\": {\n extensions: [\"lua\"]\n },\n \"text/x-markdown\": {\n compressible: true,\n extensions: [\"mkd\"]\n },\n \"text/x-nfo\": {\n source: \"apache\",\n extensions: [\"nfo\"]\n },\n \"text/x-opml\": {\n source: \"apache\",\n extensions: [\"opml\"]\n },\n \"text/x-org\": {\n compressible: true,\n extensions: [\"org\"]\n },\n \"text/x-pascal\": {\n source: \"apache\",\n extensions: [\"p\", \"pas\"]\n },\n \"text/x-processing\": {\n compressible: true,\n extensions: [\"pde\"]\n },\n \"text/x-sass\": {\n extensions: [\"sass\"]\n },\n \"text/x-scss\": {\n extensions: [\"scss\"]\n },\n \"text/x-setext\": {\n source: \"apache\",\n extensions: [\"etx\"]\n },\n \"text/x-sfv\": {\n source: \"apache\",\n extensions: [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n compressible: true,\n extensions: [\"ymp\"]\n },\n \"text/x-uuencode\": {\n source: \"apache\",\n extensions: [\"uu\"]\n },\n \"text/x-vcalendar\": {\n source: \"apache\",\n extensions: [\"vcs\"]\n },\n \"text/x-vcard\": {\n source: \"apache\",\n extensions: [\"vcf\"]\n },\n \"text/xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n source: \"iana\"\n },\n \"text/yaml\": {\n compressible: true,\n extensions: [\"yaml\", \"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"video/3gpp\": {\n source: \"iana\",\n extensions: [\"3gp\", \"3gpp\"]\n },\n \"video/3gpp-tt\": {\n source: \"iana\"\n },\n \"video/3gpp2\": {\n source: \"iana\",\n extensions: [\"3g2\"]\n },\n \"video/av1\": {\n source: \"iana\"\n },\n \"video/bmpeg\": {\n source: \"iana\"\n },\n \"video/bt656\": {\n source: \"iana\"\n },\n \"video/celb\": {\n source: \"iana\"\n },\n \"video/dv\": {\n source: \"iana\"\n },\n \"video/encaprtp\": {\n source: \"iana\"\n },\n \"video/ffv1\": {\n source: \"iana\"\n },\n \"video/flexfec\": {\n source: \"iana\"\n },\n \"video/h261\": {\n source: \"iana\",\n extensions: [\"h261\"]\n },\n \"video/h263\": {\n source: \"iana\",\n extensions: [\"h263\"]\n },\n \"video/h263-1998\": {\n source: \"iana\"\n },\n \"video/h263-2000\": {\n source: \"iana\"\n },\n \"video/h264\": {\n source: \"iana\",\n extensions: [\"h264\"]\n },\n \"video/h264-rcdo\": {\n source: \"iana\"\n },\n \"video/h264-svc\": {\n source: \"iana\"\n },\n \"video/h265\": {\n source: \"iana\"\n },\n \"video/iso.segment\": {\n source: \"iana\",\n extensions: [\"m4s\"]\n },\n \"video/jpeg\": {\n source: \"iana\",\n extensions: [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n source: \"iana\"\n },\n \"video/jpm\": {\n source: \"apache\",\n extensions: [\"jpm\", \"jpgm\"]\n },\n \"video/jxsv\": {\n source: \"iana\"\n },\n \"video/mj2\": {\n source: \"iana\",\n extensions: [\"mj2\", \"mjp2\"]\n },\n \"video/mp1s\": {\n source: \"iana\"\n },\n \"video/mp2p\": {\n source: \"iana\"\n },\n \"video/mp2t\": {\n source: \"iana\",\n extensions: [\"ts\"]\n },\n \"video/mp4\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mp4\", \"mp4v\", \"mpg4\"]\n },\n \"video/mp4v-es\": {\n source: \"iana\"\n },\n \"video/mpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"]\n },\n \"video/mpeg4-generic\": {\n source: \"iana\"\n },\n \"video/mpv\": {\n source: \"iana\"\n },\n \"video/nv\": {\n source: \"iana\"\n },\n \"video/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ogv\"]\n },\n \"video/parityfec\": {\n source: \"iana\"\n },\n \"video/pointer\": {\n source: \"iana\"\n },\n \"video/quicktime\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"qt\", \"mov\"]\n },\n \"video/raptorfec\": {\n source: \"iana\"\n },\n \"video/raw\": {\n source: \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"video/rtploopback\": {\n source: \"iana\"\n },\n \"video/rtx\": {\n source: \"iana\"\n },\n \"video/scip\": {\n source: \"iana\"\n },\n \"video/smpte291\": {\n source: \"iana\"\n },\n \"video/smpte292m\": {\n source: \"iana\"\n },\n \"video/ulpfec\": {\n source: \"iana\"\n },\n \"video/vc1\": {\n source: \"iana\"\n },\n \"video/vc2\": {\n source: \"iana\"\n },\n \"video/vnd.cctv\": {\n source: \"iana\"\n },\n \"video/vnd.dece.hd\": {\n source: \"iana\",\n extensions: [\"uvh\", \"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n source: \"iana\",\n extensions: [\"uvm\", \"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n source: \"iana\"\n },\n \"video/vnd.dece.pd\": {\n source: \"iana\",\n extensions: [\"uvp\", \"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n source: \"iana\",\n extensions: [\"uvs\", \"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n source: \"iana\",\n extensions: [\"uvv\", \"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n source: \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n source: \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n source: \"iana\"\n },\n \"video/vnd.dvb.file\": {\n source: \"iana\",\n extensions: [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n source: \"iana\",\n extensions: [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n source: \"iana\"\n },\n \"video/vnd.motorola.video\": {\n source: \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n source: \"iana\"\n },\n \"video/vnd.mpegurl\": {\n source: \"iana\",\n extensions: [\"mxu\", \"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n source: \"iana\",\n extensions: [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n source: \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n source: \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n source: \"iana\"\n },\n \"video/vnd.objectvideo\": {\n source: \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n source: \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n source: \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n source: \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n source: \"iana\",\n extensions: [\"uvu\", \"uvvu\"]\n },\n \"video/vnd.vivo\": {\n source: \"iana\",\n extensions: [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n source: \"iana\"\n },\n \"video/vp8\": {\n source: \"iana\"\n },\n \"video/vp9\": {\n source: \"iana\"\n },\n \"video/webm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"webm\"]\n },\n \"video/x-f4v\": {\n source: \"apache\",\n extensions: [\"f4v\"]\n },\n \"video/x-fli\": {\n source: \"apache\",\n extensions: [\"fli\"]\n },\n \"video/x-flv\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"flv\"]\n },\n \"video/x-m4v\": {\n source: \"apache\",\n extensions: [\"m4v\"]\n },\n \"video/x-matroska\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"mkv\", \"mk3d\", \"mks\"]\n },\n \"video/x-mng\": {\n source: \"apache\",\n extensions: [\"mng\"]\n },\n \"video/x-ms-asf\": {\n source: \"apache\",\n extensions: [\"asf\", \"asx\"]\n },\n \"video/x-ms-vob\": {\n source: \"apache\",\n extensions: [\"vob\"]\n },\n \"video/x-ms-wm\": {\n source: \"apache\",\n extensions: [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n source: \"apache\",\n extensions: [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n source: \"apache\",\n extensions: [\"wvx\"]\n },\n \"video/x-msvideo\": {\n source: \"apache\",\n extensions: [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n source: \"apache\",\n extensions: [\"movie\"]\n },\n \"video/x-smv\": {\n source: \"apache\",\n extensions: [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n source: \"apache\",\n extensions: [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n compressible: true\n },\n \"x-shader/x-vertex\": {\n compressible: true\n }\n };\n }\n});\n\n// node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js\nvar require_mime_db = __commonJS({\n \"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js\"(exports, module2) {\n module2.exports = require_db();\n }\n});\n\n// src/lib/main.ts\nvar main_exports = {};\n__export(main_exports, {\n PreviewController: () => PreviewController,\n getExtension: () => getExtension,\n joinFilepath: () => joinFilepath,\n normalizeFilepath: () => normalizeFilepath\n});\nmodule.exports = __toCommonJS(main_exports);\n\n// src/preview/relay/constants.ts\nvar CHANNEL_NAME = \"$CSB_RELAY\";\n\n// src/lib/mime.ts\nvar import_mime_db = __toESM(require_mime_db());\nvar extensionMap = /* @__PURE__ */ new Map();\nvar entries = Object.entries(import_mime_db.default);\nfor (const [mimetype, entry] of entries) {\n const extensions = entry.extensions;\n if (extensions?.length) {\n for (const ext of extensions) {\n extensionMap.set(ext, mimetype);\n }\n }\n}\nvar EXTENSIONS_MAP = extensionMap;\n\n// src/lib/utils.ts\nvar counter = 0;\nfunction generateRandomId() {\n const now = Date.now();\n const randomNumber = Math.round(Math.random() * 1e4);\n const count = counter += 1;\n return (+`${now}${randomNumber}${count}`).toString(16);\n}\n\n// src/lib/main.ts\nfunction normalizeFilepath(filepath) {\n const split = filepath.split(\"/\").filter(Boolean);\n const normalized = split.join(\"/\");\n return \"/\" + normalized;\n}\nfunction joinFilepath(filepath, addition) {\n return normalizeFilepath(filepath + \"/\" + addition);\n}\nfunction getExtension(filepath) {\n const parts = filepath.split(\".\");\n if (parts.length <= 1) {\n return \"\";\n } else {\n const ext = parts[parts.length - 1];\n return ext;\n }\n}\nvar PreviewController = class {\n constructor(options) {\n this.initPromise = null;\n this.baseUrl = new URL(options.baseUrl);\n this.getFileContent = options.getFileContent;\n this.indexFiles = options.indexFiles ?? [\"index.html\", \"index.html\"];\n }\n async getIndexAtPath(filepath) {\n for (const index of this.indexFiles) {\n try {\n const content = await this.getFileContent(\n joinFilepath(filepath, index)\n );\n return content;\n } catch (err) {\n }\n }\n throw new Error(\"No index file not found\");\n }\n async handleWorkerRequest(request) {\n if (!this.initPromise) {\n throw new Error(\"Init promise is null\");\n }\n const [previewRoot, port] = await this.initPromise;\n try {\n const filepath = normalizeFilepath(\n new URL(request.url, previewRoot).pathname\n );\n let body = null;\n const headers = {};\n try {\n body = await this.getFileContent(filepath);\n } catch (err) {\n }\n if (body == null) {\n body = await this.getIndexAtPath(filepath);\n headers[\"Content-Type\"] = \"text/html; charset=utf-8\";\n }\n if (body == null) {\n throw new Error(\"File not found\");\n }\n if (!headers[\"Content-Type\"]) {\n const extension = getExtension(filepath);\n const foundMimetype = EXTENSIONS_MAP.get(extension);\n if (foundMimetype) {\n headers[\"Content-Type\"] = foundMimetype;\n }\n }\n const responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers,\n status: 200,\n body\n };\n port.postMessage(responseMessage);\n } catch (err) {\n const responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: {\n [\"Content-Type\"]: \"text/html; charset=utf-8\"\n },\n status: 404,\n body: \"File not found\"\n };\n port.postMessage(responseMessage);\n }\n }\n getRelayUrl(previewUrl) {\n const relayUrl = new URL(previewUrl);\n relayUrl.pathname = \"/__csb_relay/\";\n return relayUrl.toString();\n }\n async _initPreview() {\n const id = generateRandomId();\n const previewUrl = new URL(this.baseUrl);\n previewUrl.hostname = id + \"-\" + previewUrl.hostname;\n previewUrl.pathname = \"/\";\n const relayUrl = this.getRelayUrl(previewUrl.toString());\n const iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"src\", relayUrl.toString());\n iframe.style.display = \"none\";\n document.body.appendChild(iframe);\n const channel = new MessageChannel();\n const iframeContentWindow = iframe.contentWindow;\n if (!iframeContentWindow) {\n throw new Error(\"Could not get iframe contentWindow\");\n }\n return new Promise((resolve) => {\n const port = channel.port1;\n port.onmessage = (evt) => {\n if (typeof evt.data === \"object\" && evt.data.$channel === CHANNEL_NAME) {\n switch (evt.data.$type) {\n case \"preview/ready\":\n resolve([previewUrl.toString(), port, iframe]);\n break;\n case \"preview/request\":\n this.handleWorkerRequest(evt.data);\n break;\n }\n }\n };\n iframe.onload = () => {\n const initMsg = {\n $channel: CHANNEL_NAME,\n $type: \"preview/init\"\n };\n iframeContentWindow.postMessage(initMsg, \"*\", [channel.port2]);\n };\n });\n }\n /**\n * Initialize a preview and return the url at which the preview is being served\n **/\n initPreview() {\n if (!this.initPromise) {\n this.initPromise = this._initPreview();\n }\n return this.initPromise.then((v) => v[0]);\n }\n destroy() {\n if (this.initPromise) {\n const p = this.initPromise;\n p.then((val) => {\n val[1].close();\n const url = this.getRelayUrl(val[0]);\n const foundElements = document.body.querySelectorAll(`src=\"${url}\"`);\n foundElements.forEach((el) => el.remove());\n });\n this.initPromise = null;\n }\n }\n};\n/*! Bundled license information:\n\nmime-db/index.js:\n (*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n *)\n*/\n","import { g as __extends, _ as __awaiter, a as __generator } from './utils-52664384.mjs';\nimport { PreviewController } from 'static-browser-server';\nimport { E as EventEmitter, c as consoleHook, g as generateRandomId, f as fromBundlerFilesToFS } from './consoleHook-59e792cb.mjs';\nimport { S as SandpackClient } from './base-80a1f760.mjs';\nimport 'outvariant';\nimport 'dequal';\n\nvar insertHtmlAfterRegex = function (regex, content, insertable) {\n var match = regex.exec(content);\n if (match && match.length >= 1) {\n var offset = match.index + match[0].length;\n var prefix = content.substring(0, offset);\n var suffix = content.substring(offset);\n return prefix + insertable + suffix;\n }\n};\nvar readBuffer = function (content) {\n if (typeof content === \"string\") {\n return content;\n }\n else {\n return new TextDecoder().decode(content);\n }\n};\nvar validateHtml = function (content) {\n // Make it a string\n var contentString = readBuffer(content);\n var domParser = new DOMParser();\n var doc = domParser.parseFromString(contentString, \"text/html\");\n if (!doc.documentElement.getAttribute(\"lang\")) {\n doc.documentElement.setAttribute(\"lang\", \"en\");\n }\n var html = doc.documentElement.outerHTML;\n return \"\\n\".concat(html);\n};\n\nvar SandpackStatic = /** @class */ (function (_super) {\n __extends(SandpackStatic, _super);\n function SandpackStatic(selector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n var _a;\n var _this = _super.call(this, selector, sandboxSetup, options) || this;\n _this.files = new Map();\n _this.status = \"initializing\";\n _this.emitter = new EventEmitter();\n _this.previewController = new PreviewController({\n baseUrl: (_a = options.bundlerURL) !== null && _a !== void 0 ? _a : \"https://preview.sandpack-static-server.codesandbox.io\",\n // filepath is always normalized to start with / and not end with a slash\n getFileContent: function (filepath) {\n var content = _this.files.get(filepath);\n if (!content) {\n throw new Error(\"File not found\");\n }\n if (filepath.endsWith(\".html\") || filepath.endsWith(\".htm\")) {\n try {\n content = validateHtml(content);\n content = _this.injectProtocolScript(content);\n content = _this.injectExternalResources(content, options.externalResources);\n content = _this.injectScriptIntoHead(content, {\n script: consoleHook,\n scope: { channelId: generateRandomId() },\n });\n }\n catch (err) {\n console.error(\"Runtime injection failed\", err);\n }\n }\n return content;\n },\n });\n if (typeof selector === \"string\") {\n _this.selector = selector;\n var element = document.querySelector(selector);\n _this.element = element;\n _this.iframe = document.createElement(\"iframe\");\n }\n else {\n _this.element = selector;\n _this.iframe = selector;\n }\n if (!_this.iframe.getAttribute(\"sandbox\")) {\n _this.iframe.setAttribute(\"sandbox\", \"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-downloads allow-pointer-lock\");\n _this.iframe.setAttribute(\"allow\", \"accelerometer; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; clipboard-read; clipboard-write; xr-spatial-tracking;\");\n }\n _this.eventListener = _this.eventListener.bind(_this);\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", _this.eventListener);\n }\n // Dispatch very first compile action\n _this.updateSandbox();\n return _this;\n }\n SandpackStatic.prototype.injectContentIntoHead = function (content, contentToInsert) {\n var _a;\n // Make it a string\n content = readBuffer(content);\n // Inject script\n content =\n (_a = insertHtmlAfterRegex(/]*>/g, content, \"\\n\" + contentToInsert)) !== null && _a !== void 0 ? _a : contentToInsert + \"\\n\" + content;\n return content;\n };\n SandpackStatic.prototype.injectProtocolScript = function (content) {\n var scriptToInsert = \"\";\n return this.injectContentIntoHead(content, scriptToInsert);\n };\n SandpackStatic.prototype.injectExternalResources = function (content, externalResources) {\n if (externalResources === void 0) { externalResources = []; }\n var tagsToInsert = externalResources\n .map(function (resource) {\n var match = resource.match(/\\.([^.]*)$/);\n var fileType = match === null || match === void 0 ? void 0 : match[1];\n if (fileType === \"css\" || resource.includes(\"fonts.googleapis\")) {\n return \"\");\n }\n if (fileType === \"js\") {\n return \"\");\n }\n throw new Error(\"Unable to determine file type for external resource: \".concat(resource));\n })\n .join(\"\\n\");\n return this.injectContentIntoHead(content, tagsToInsert);\n };\n SandpackStatic.prototype.injectScriptIntoHead = function (content, opts) {\n var script = opts.script, _a = opts.scope, scope = _a === void 0 ? {} : _a;\n var scriptToInsert = \"\\n \\n \").trim();\n return this.injectContentIntoHead(content, scriptToInsert);\n };\n SandpackStatic.prototype.updateSandbox = function (setup, _isInitializationCompile) {\n if (setup === void 0) { setup = this.sandboxSetup; }\n var modules = fromBundlerFilesToFS(setup.files);\n /**\n * Pass init files to the bundler\n */\n this.dispatch({\n codesandbox: true,\n modules: modules,\n template: setup.template,\n type: \"compile\",\n });\n };\n SandpackStatic.prototype.compile = function (files) {\n return __awaiter(this, void 0, void 0, function () {\n var previewUrl;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.files = new Map(Object.entries(files));\n return [4 /*yield*/, this.previewController.initPreview()];\n case 1:\n previewUrl = _a.sent();\n this.iframe.setAttribute(\"src\", previewUrl);\n this.status = \"done\";\n this.dispatch({ type: \"done\", compilatonError: false });\n this.dispatch({\n type: \"urlchange\",\n url: previewUrl,\n back: false,\n forward: false,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n // Handles message windows coming from iframes\n SandpackStatic.prototype.eventListener = function (evt) {\n // skip events originating from different iframes\n if (evt.source !== this.iframe.contentWindow) {\n return;\n }\n var message = evt.data;\n if (!message.codesandbox) {\n return;\n }\n this.dispatch(message);\n };\n /**\n * Bundler communication\n */\n SandpackStatic.prototype.dispatch = function (message) {\n var _a;\n switch (message.type) {\n case \"compile\":\n this.compile(message.modules);\n break;\n default:\n (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, \"*\");\n this.emitter.dispatch(message);\n }\n };\n SandpackStatic.prototype.listen = function (listener) {\n return this.emitter.listener(listener);\n };\n SandpackStatic.prototype.destroy = function () {\n this.emitter.cleanup();\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"message\", this.eventListener);\n }\n };\n return SandpackStatic;\n}(SandpackClient));\n\nexport { SandpackStatic };\n"],"names":["__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJS","cb","mod","__export","target","all","name","__copyProps","to","from","except","desc","key","__toESM","isNodeMode","__toCommonJS","require_db","exports","module2","require_mime_db","main_exports","PreviewController","getExtension","joinFilepath","normalizeFilepath","main","CHANNEL_NAME","import_mime_db","extensionMap","entries","mimetype","entry","extensions","ext","EXTENSIONS_MAP","counter","generateRandomId","now","randomNumber","count","filepath","addition","parts","options","index","request","previewRoot","port","body","headers","extension","foundMimetype","responseMessage","previewUrl","relayUrl","id","iframe","channel","iframeContentWindow","resolve","evt","initMsg","v","val","url","el","insertHtmlAfterRegex","regex","content","insertable","match","offset","prefix","suffix","readBuffer","validateHtml","contentString","domParser","doc","html","SandpackStatic","_super","__extends","selector","sandboxSetup","_a","_this","EventEmitter","consoleHook","err","element","contentToInsert","scriptToInsert","externalResources","tagsToInsert","resource","fileType","opts","script","scope","setup","_isInitializationCompile","modules","fromBundlerFilesToFS","files","__awaiter","__generator","message","listener","SandpackClient"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"index-599aeaf7-DH1qEGyX.js","sources":["../../../../../webui/node_modules/static-browser-server/out/lib/main.js","../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/index-599aeaf7.mjs"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json\nvar require_db = __commonJS({\n \"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json\"(exports, module2) {\n module2.exports = {\n \"application/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/3gpp-ims+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/3gpphal+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/3gpphalforms+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/a2l\": {\n source: \"iana\"\n },\n \"application/ace+cbor\": {\n source: \"iana\"\n },\n \"application/activemessage\": {\n source: \"iana\"\n },\n \"application/activity+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-costmap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-costmapfilter+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-directory+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointcost+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointcostparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointprop+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-endpointpropparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-error+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-networkmap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-networkmapfilter+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-updatestreamcontrol+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/alto-updatestreamparams+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/aml\": {\n source: \"iana\"\n },\n \"application/andrew-inset\": {\n source: \"iana\",\n extensions: [\"ez\"]\n },\n \"application/applefile\": {\n source: \"iana\"\n },\n \"application/applixware\": {\n source: \"apache\",\n extensions: [\"aw\"]\n },\n \"application/at+jwt\": {\n source: \"iana\"\n },\n \"application/atf\": {\n source: \"iana\"\n },\n \"application/atfx\": {\n source: \"iana\"\n },\n \"application/atom+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atom\"]\n },\n \"application/atomcat+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n source: \"iana\"\n },\n \"application/atomsvc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n source: \"iana\"\n },\n \"application/atsc-held+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/atsc-rsat+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rsat\"]\n },\n \"application/atxml\": {\n source: \"iana\"\n },\n \"application/auth-policy+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/bacnet-xdd+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/batch-smtp\": {\n source: \"iana\"\n },\n \"application/bdoc\": {\n compressible: false,\n extensions: [\"bdoc\"]\n },\n \"application/beep+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/calendar+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/calendar+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xcs\"]\n },\n \"application/call-completion\": {\n source: \"iana\"\n },\n \"application/cals-1840\": {\n source: \"iana\"\n },\n \"application/captive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cbor\": {\n source: \"iana\"\n },\n \"application/cbor-seq\": {\n source: \"iana\"\n },\n \"application/cccex\": {\n source: \"iana\"\n },\n \"application/ccmp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ccxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n source: \"iana\",\n extensions: [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n source: \"iana\",\n extensions: [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n source: \"iana\",\n extensions: [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n source: \"iana\",\n extensions: [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n source: \"iana\",\n extensions: [\"cdmiq\"]\n },\n \"application/cdni\": {\n source: \"iana\"\n },\n \"application/cea\": {\n source: \"iana\"\n },\n \"application/cea-2018+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cellml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cfw\": {\n source: \"iana\"\n },\n \"application/city+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/clr\": {\n source: \"iana\"\n },\n \"application/clue+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/clue_info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cms\": {\n source: \"iana\"\n },\n \"application/cnrp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/coap-group+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/coap-payload\": {\n source: \"iana\"\n },\n \"application/commonground\": {\n source: \"iana\"\n },\n \"application/conference-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cose\": {\n source: \"iana\"\n },\n \"application/cose-key\": {\n source: \"iana\"\n },\n \"application/cose-key-set\": {\n source: \"iana\"\n },\n \"application/cpl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cpl\"]\n },\n \"application/csrattrs\": {\n source: \"iana\"\n },\n \"application/csta+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cstadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/csvm+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/cu-seeme\": {\n source: \"apache\",\n extensions: [\"cu\"]\n },\n \"application/cwt\": {\n source: \"iana\"\n },\n \"application/cybercash\": {\n source: \"iana\"\n },\n \"application/dart\": {\n compressible: true\n },\n \"application/dash+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpp\"]\n },\n \"application/dashdelta\": {\n source: \"iana\"\n },\n \"application/davmount+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"davmount\"]\n },\n \"application/dca-rft\": {\n source: \"iana\"\n },\n \"application/dcd\": {\n source: \"iana\"\n },\n \"application/dec-dx\": {\n source: \"iana\"\n },\n \"application/dialog-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dicom\": {\n source: \"iana\"\n },\n \"application/dicom+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dicom+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dii\": {\n source: \"iana\"\n },\n \"application/dit\": {\n source: \"iana\"\n },\n \"application/dns\": {\n source: \"iana\"\n },\n \"application/dns+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dns-message\": {\n source: \"iana\"\n },\n \"application/docbook+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"dbk\"]\n },\n \"application/dots+cbor\": {\n source: \"iana\"\n },\n \"application/dskpp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/dssc+der\": {\n source: \"iana\",\n extensions: [\"dssc\"]\n },\n \"application/dssc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdssc\"]\n },\n \"application/dvcs\": {\n source: \"iana\"\n },\n \"application/ecmascript\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"es\", \"ecma\"]\n },\n \"application/edi-consent\": {\n source: \"iana\"\n },\n \"application/edi-x12\": {\n source: \"iana\",\n compressible: false\n },\n \"application/edifact\": {\n source: \"iana\",\n compressible: false\n },\n \"application/efi\": {\n source: \"iana\"\n },\n \"application/elm+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/elm+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.cap+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/emergencycalldata.comment+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.ecall.msd\": {\n source: \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emergencycalldata.veds+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/emma+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"emma\"]\n },\n \"application/emotionml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"emotionml\"]\n },\n \"application/encaprtp\": {\n source: \"iana\"\n },\n \"application/epp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/epub+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"epub\"]\n },\n \"application/eshop\": {\n source: \"iana\"\n },\n \"application/exi\": {\n source: \"iana\",\n extensions: [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/express\": {\n source: \"iana\",\n extensions: [\"exp\"]\n },\n \"application/fastinfoset\": {\n source: \"iana\"\n },\n \"application/fastsoap\": {\n source: \"iana\"\n },\n \"application/fdt+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"fdt\"]\n },\n \"application/fhir+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/fhir+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/fido.trusted-apps+json\": {\n compressible: true\n },\n \"application/fits\": {\n source: \"iana\"\n },\n \"application/flexfec\": {\n source: \"iana\"\n },\n \"application/font-sfnt\": {\n source: \"iana\"\n },\n \"application/font-tdpfr\": {\n source: \"iana\",\n extensions: [\"pfr\"]\n },\n \"application/font-woff\": {\n source: \"iana\",\n compressible: false\n },\n \"application/framework-attributes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/geo+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n source: \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n source: \"iana\"\n },\n \"application/geoxacml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/gltf-buffer\": {\n source: \"iana\"\n },\n \"application/gml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"gml\"]\n },\n \"application/gpx+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"gpx\"]\n },\n \"application/gxf\": {\n source: \"apache\",\n extensions: [\"gxf\"]\n },\n \"application/gzip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"gz\"]\n },\n \"application/h224\": {\n source: \"iana\"\n },\n \"application/held+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/hjson\": {\n extensions: [\"hjson\"]\n },\n \"application/http\": {\n source: \"iana\"\n },\n \"application/hyperstudio\": {\n source: \"iana\",\n extensions: [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ibe-pkg-reply+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ibe-pp-data\": {\n source: \"iana\"\n },\n \"application/iges\": {\n source: \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/index\": {\n source: \"iana\"\n },\n \"application/index.cmd\": {\n source: \"iana\"\n },\n \"application/index.obj\": {\n source: \"iana\"\n },\n \"application/index.response\": {\n source: \"iana\"\n },\n \"application/index.vnd\": {\n source: \"iana\"\n },\n \"application/inkml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ink\", \"inkml\"]\n },\n \"application/iotp\": {\n source: \"iana\"\n },\n \"application/ipfix\": {\n source: \"iana\",\n extensions: [\"ipfix\"]\n },\n \"application/ipp\": {\n source: \"iana\"\n },\n \"application/isup\": {\n source: \"iana\"\n },\n \"application/its+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"its\"]\n },\n \"application/java-archive\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"jar\", \"war\", \"ear\"]\n },\n \"application/java-serialized-object\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"ser\"]\n },\n \"application/java-vm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"class\"]\n },\n \"application/javascript\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"js\", \"mjs\"]\n },\n \"application/jf2feed+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jose\": {\n source: \"iana\"\n },\n \"application/jose+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jrd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jscalendar+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"json\", \"map\"]\n },\n \"application/json-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/json-seq\": {\n source: \"iana\"\n },\n \"application/json5\": {\n extensions: [\"json5\"]\n },\n \"application/jsonml+json\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"jsonml\"]\n },\n \"application/jwk+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jwk-set+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/jwt\": {\n source: \"iana\"\n },\n \"application/kpml-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/kpml-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/ld+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lgr\"]\n },\n \"application/link-format\": {\n source: \"iana\"\n },\n \"application/load-control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/lost+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/lpf+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/lxf\": {\n source: \"iana\"\n },\n \"application/mac-binhex40\": {\n source: \"iana\",\n extensions: [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n source: \"apache\",\n extensions: [\"cpt\"]\n },\n \"application/macwriteii\": {\n source: \"iana\"\n },\n \"application/mads+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mads\"]\n },\n \"application/manifest+json\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"webmanifest\"]\n },\n \"application/marc\": {\n source: \"iana\",\n extensions: [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mrcx\"]\n },\n \"application/mathematica\": {\n source: \"iana\",\n extensions: [\"ma\", \"nb\", \"mb\"]\n },\n \"application/mathml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mathml-presentation+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-deregister+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-envelope+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-msk+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-msk-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-protection-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-reception-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-register+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-register-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-schedule+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbms-user-service-description+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mbox\": {\n source: \"iana\",\n extensions: [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpf\"]\n },\n \"application/media_control+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mediaservercontrol+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/metalink+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"meta4\"]\n },\n \"application/mets+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mets\"]\n },\n \"application/mf4\": {\n source: \"iana\"\n },\n \"application/mikey\": {\n source: \"iana\"\n },\n \"application/mipc\": {\n source: \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n source: \"iana\"\n },\n \"application/mmt-aei+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"musd\"]\n },\n \"application/mods+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mods\"]\n },\n \"application/moss-keys\": {\n source: \"iana\"\n },\n \"application/moss-signature\": {\n source: \"iana\"\n },\n \"application/mosskey-data\": {\n source: \"iana\"\n },\n \"application/mosskey-request\": {\n source: \"iana\"\n },\n \"application/mp21\": {\n source: \"iana\",\n extensions: [\"m21\", \"mp21\"]\n },\n \"application/mp4\": {\n source: \"iana\",\n extensions: [\"mp4s\", \"m4p\"]\n },\n \"application/mpeg4-generic\": {\n source: \"iana\"\n },\n \"application/mpeg4-iod\": {\n source: \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n source: \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/mrb-publish+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/msc-ivr+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/msc-mixer+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/msword\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"doc\", \"dot\"]\n },\n \"application/mud+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/multipart-core\": {\n source: \"iana\"\n },\n \"application/mxf\": {\n source: \"iana\",\n extensions: [\"mxf\"]\n },\n \"application/n-quads\": {\n source: \"iana\",\n extensions: [\"nq\"]\n },\n \"application/n-triples\": {\n source: \"iana\",\n extensions: [\"nt\"]\n },\n \"application/nasdata\": {\n source: \"iana\"\n },\n \"application/news-checkgroups\": {\n source: \"iana\",\n charset: \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n source: \"iana\",\n charset: \"US-ASCII\"\n },\n \"application/news-transmission\": {\n source: \"iana\"\n },\n \"application/nlsml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/node\": {\n source: \"iana\",\n extensions: [\"cjs\"]\n },\n \"application/nss\": {\n source: \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n source: \"iana\"\n },\n \"application/oblivious-dns-message\": {\n source: \"iana\"\n },\n \"application/ocsp-request\": {\n source: \"iana\"\n },\n \"application/ocsp-response\": {\n source: \"iana\"\n },\n \"application/octet-stream\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"]\n },\n \"application/oda\": {\n source: \"iana\",\n extensions: [\"oda\"]\n },\n \"application/odm+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/odx\": {\n source: \"iana\"\n },\n \"application/oebps-package+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"opf\"]\n },\n \"application/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"omdoc\"]\n },\n \"application/onenote\": {\n source: \"apache\",\n extensions: [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/oscore\": {\n source: \"iana\"\n },\n \"application/oxps\": {\n source: \"iana\",\n extensions: [\"oxps\"]\n },\n \"application/p21\": {\n source: \"iana\"\n },\n \"application/p21+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/p2p-overlay+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"relo\"]\n },\n \"application/parityfec\": {\n source: \"iana\"\n },\n \"application/passport\": {\n source: \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xer\"]\n },\n \"application/pdf\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pdf\"]\n },\n \"application/pdx\": {\n source: \"iana\"\n },\n \"application/pem-certificate-chain\": {\n source: \"iana\"\n },\n \"application/pgp-encrypted\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pgp\"]\n },\n \"application/pgp-keys\": {\n source: \"iana\",\n extensions: [\"asc\"]\n },\n \"application/pgp-signature\": {\n source: \"iana\",\n extensions: [\"asc\", \"sig\"]\n },\n \"application/pics-rules\": {\n source: \"apache\",\n extensions: [\"prf\"]\n },\n \"application/pidf+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/pidf-diff+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/pkcs10\": {\n source: \"iana\",\n extensions: [\"p10\"]\n },\n \"application/pkcs12\": {\n source: \"iana\"\n },\n \"application/pkcs7-mime\": {\n source: \"iana\",\n extensions: [\"p7m\", \"p7c\"]\n },\n \"application/pkcs7-signature\": {\n source: \"iana\",\n extensions: [\"p7s\"]\n },\n \"application/pkcs8\": {\n source: \"iana\",\n extensions: [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n source: \"iana\"\n },\n \"application/pkix-attr-cert\": {\n source: \"iana\",\n extensions: [\"ac\"]\n },\n \"application/pkix-cert\": {\n source: \"iana\",\n extensions: [\"cer\"]\n },\n \"application/pkix-crl\": {\n source: \"iana\",\n extensions: [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n source: \"iana\",\n extensions: [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n source: \"iana\",\n extensions: [\"pki\"]\n },\n \"application/pls+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/postscript\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ai\", \"eps\", \"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/problem+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/problem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/provenance+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n source: \"iana\"\n },\n \"application/prs.cww\": {\n source: \"iana\",\n extensions: [\"cww\"]\n },\n \"application/prs.cyn\": {\n source: \"iana\",\n charset: \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/prs.nprend\": {\n source: \"iana\"\n },\n \"application/prs.plucker\": {\n source: \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n source: \"iana\"\n },\n \"application/prs.xsf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/pskc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/qsig\": {\n source: \"iana\"\n },\n \"application/raml+yaml\": {\n compressible: true,\n extensions: [\"raml\"]\n },\n \"application/raptorfec\": {\n source: \"iana\"\n },\n \"application/rdap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/rdf+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rdf\", \"owl\"]\n },\n \"application/reginfo+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n source: \"iana\",\n extensions: [\"rnc\"]\n },\n \"application/remote-printing\": {\n source: \"iana\"\n },\n \"application/reputon+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/resource-lists+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rld\"]\n },\n \"application/rfc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/riscos\": {\n source: \"iana\"\n },\n \"application/rlmi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/rls-services+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rs\"]\n },\n \"application/route-apd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sls\"]\n },\n \"application/route-usd+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n source: \"iana\",\n extensions: [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n source: \"iana\",\n extensions: [\"mft\"]\n },\n \"application/rpki-publication\": {\n source: \"iana\"\n },\n \"application/rpki-roa\": {\n source: \"iana\",\n extensions: [\"roa\"]\n },\n \"application/rpki-updown\": {\n source: \"iana\"\n },\n \"application/rsd+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"rsd\"]\n },\n \"application/rss+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"rss\"]\n },\n \"application/rtf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtf\"]\n },\n \"application/rtploopback\": {\n source: \"iana\"\n },\n \"application/rtx\": {\n source: \"iana\"\n },\n \"application/samlassertion+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/samlmetadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sarif+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sarif-external-properties+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sbe\": {\n source: \"iana\"\n },\n \"application/sbml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sbml\"]\n },\n \"application/scaip+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/scim+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/scvp-cv-request\": {\n source: \"iana\",\n extensions: [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n source: \"iana\",\n extensions: [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n source: \"iana\",\n extensions: [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n source: \"iana\",\n extensions: [\"spp\"]\n },\n \"application/sdp\": {\n source: \"iana\",\n extensions: [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n source: \"iana\"\n },\n \"application/senml+cbor\": {\n source: \"iana\"\n },\n \"application/senml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/senml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n source: \"iana\"\n },\n \"application/senml-etch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/senml-exi\": {\n source: \"iana\"\n },\n \"application/sensml+cbor\": {\n source: \"iana\"\n },\n \"application/sensml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sensml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n source: \"iana\"\n },\n \"application/sep+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sep-exi\": {\n source: \"iana\"\n },\n \"application/session-info\": {\n source: \"iana\"\n },\n \"application/set-payment\": {\n source: \"iana\"\n },\n \"application/set-payment-initiation\": {\n source: \"iana\",\n extensions: [\"setpay\"]\n },\n \"application/set-registration\": {\n source: \"iana\"\n },\n \"application/set-registration-initiation\": {\n source: \"iana\",\n extensions: [\"setreg\"]\n },\n \"application/sgml\": {\n source: \"iana\"\n },\n \"application/sgml-open-catalog\": {\n source: \"iana\"\n },\n \"application/shf+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"shf\"]\n },\n \"application/sieve\": {\n source: \"iana\",\n extensions: [\"siv\", \"sieve\"]\n },\n \"application/simple-filter+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/simple-message-summary\": {\n source: \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n source: \"iana\"\n },\n \"application/sipc\": {\n source: \"iana\"\n },\n \"application/slate\": {\n source: \"iana\"\n },\n \"application/smil\": {\n source: \"iana\"\n },\n \"application/smil+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"smi\", \"smil\"]\n },\n \"application/smpte336m\": {\n source: \"iana\"\n },\n \"application/soap+fastinfoset\": {\n source: \"iana\"\n },\n \"application/soap+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sparql-query\": {\n source: \"iana\",\n extensions: [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"srx\"]\n },\n \"application/spdx+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/spirits-event+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/sql\": {\n source: \"iana\"\n },\n \"application/srgs\": {\n source: \"iana\",\n extensions: [\"gram\"]\n },\n \"application/srgs+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"grxml\"]\n },\n \"application/sru+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sru\"]\n },\n \"application/ssdl+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ssml\"]\n },\n \"application/stix+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/swid+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n source: \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-community-update\": {\n source: \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-error\": {\n source: \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n source: \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n source: \"iana\"\n },\n \"application/tamp-status-query\": {\n source: \"iana\"\n },\n \"application/tamp-status-response\": {\n source: \"iana\"\n },\n \"application/tamp-update\": {\n source: \"iana\"\n },\n \"application/tamp-update-confirm\": {\n source: \"iana\"\n },\n \"application/tar\": {\n compressible: true\n },\n \"application/taxii+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/td+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/tei+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tei\", \"teicorpus\"]\n },\n \"application/tetra_isi\": {\n source: \"iana\"\n },\n \"application/thraud+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tfi\"]\n },\n \"application/timestamp-query\": {\n source: \"iana\"\n },\n \"application/timestamp-reply\": {\n source: \"iana\"\n },\n \"application/timestamped-data\": {\n source: \"iana\",\n extensions: [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n source: \"iana\"\n },\n \"application/tlsrpt+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/tnauthlist\": {\n source: \"iana\"\n },\n \"application/token-introspection+jwt\": {\n source: \"iana\"\n },\n \"application/toml\": {\n compressible: true,\n extensions: [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n source: \"iana\"\n },\n \"application/trig\": {\n source: \"iana\",\n extensions: [\"trig\"]\n },\n \"application/ttml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ttml\"]\n },\n \"application/tve-trigger\": {\n source: \"iana\"\n },\n \"application/tzif\": {\n source: \"iana\"\n },\n \"application/tzif-leap\": {\n source: \"iana\"\n },\n \"application/ubjson\": {\n compressible: false,\n extensions: [\"ubj\"]\n },\n \"application/ulpfec\": {\n source: \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/urc-ressheet+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vcard+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vcard+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vemmi\": {\n source: \"iana\"\n },\n \"application/vividence.scriptfile\": {\n source: \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.gtpc\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.ngap\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n source: \"iana\",\n extensions: [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n source: \"iana\",\n extensions: [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n source: \"iana\",\n extensions: [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.3gpp2.sms\": {\n source: \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n source: \"iana\",\n extensions: [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n source: \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n source: \"iana\",\n extensions: [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n source: \"iana\",\n extensions: [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n source: \"iana\",\n extensions: [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n source: \"iana\",\n extensions: [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n source: \"iana\",\n extensions: [\"atc\", \"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n source: \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n source: \"iana\",\n extensions: [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n source: \"iana\",\n extensions: [\"fxp\", \"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n source: \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n source: \"iana\",\n extensions: [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n source: \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n source: \"iana\"\n },\n \"application/vnd.age\": {\n source: \"iana\",\n extensions: [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n source: \"iana\"\n },\n \"application/vnd.ahead.space\": {\n source: \"iana\",\n extensions: [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n source: \"iana\",\n extensions: [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n source: \"iana\",\n extensions: [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.amazon.ebook\": {\n source: \"apache\",\n extensions: [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n source: \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n source: \"iana\",\n extensions: [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n source: \"iana\",\n extensions: [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.android.ota\": {\n source: \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"apk\"]\n },\n \"application/vnd.anki\": {\n source: \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n source: \"iana\",\n extensions: [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n source: \"apache\",\n extensions: [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n source: \"iana\",\n extensions: [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n source: \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n source: \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n source: \"iana\"\n },\n \"application/vnd.api+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.aplextor.warrp+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.apothekende.reservation+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.apple.installer+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n source: \"iana\",\n extensions: [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n source: \"iana\",\n extensions: [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n source: \"iana\",\n extensions: [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n source: \"iana\",\n extensions: [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n compressible: false,\n extensions: [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n source: \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n source: \"iana\",\n extensions: [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.artsquare\": {\n source: \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n source: \"iana\",\n extensions: [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n source: \"iana\",\n extensions: [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n source: \"iana\"\n },\n \"application/vnd.avalon+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.avistar+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n source: \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n source: \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.bekitzur-stech+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.bint.med-content\": {\n source: \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n source: \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n source: \"iana\",\n extensions: [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n source: \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n source: \"iana\"\n },\n \"application/vnd.bmi\": {\n source: \"iana\",\n extensions: [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n source: \"iana\"\n },\n \"application/vnd.bpf3\": {\n source: \"iana\"\n },\n \"application/vnd.businessobjects\": {\n source: \"iana\",\n extensions: [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cab-jscript\": {\n source: \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n source: \"iana\"\n },\n \"application/vnd.canon-lips\": {\n source: \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n source: \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n source: \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n source: \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n source: \"iana\",\n extensions: [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n source: \"iana\"\n },\n \"application/vnd.cinderella\": {\n source: \"iana\",\n extensions: [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n source: \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"csl\"]\n },\n \"application/vnd.claymore\": {\n source: \"iana\",\n extensions: [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n source: \"iana\",\n extensions: [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n source: \"iana\",\n extensions: [\"c4g\", \"c4d\", \"c4f\", \"c4p\", \"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n source: \"iana\",\n extensions: [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n source: \"iana\",\n extensions: [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n source: \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n source: \"iana\"\n },\n \"application/vnd.collection+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.collection.doc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.collection.next+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.comicbook+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.comicbook-rar\": {\n source: \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n source: \"iana\"\n },\n \"application/vnd.commonspace\": {\n source: \"iana\",\n extensions: [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n source: \"iana\",\n extensions: [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cosmocaller\": {\n source: \"iana\",\n extensions: [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n source: \"iana\",\n extensions: [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n source: \"iana\",\n extensions: [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n source: \"iana\",\n extensions: [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n source: \"iana\",\n extensions: [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n source: \"iana\",\n extensions: [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.crypto-shade-file\": {\n source: \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n source: \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n source: \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n source: \"iana\",\n extensions: [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cups-pdf\": {\n source: \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n source: \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n source: \"iana\",\n extensions: [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n source: \"iana\"\n },\n \"application/vnd.cups-raw\": {\n source: \"iana\"\n },\n \"application/vnd.curl\": {\n source: \"iana\"\n },\n \"application/vnd.curl.car\": {\n source: \"apache\",\n extensions: [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n source: \"apache\",\n extensions: [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cybank\": {\n source: \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.cyclonedx+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.d3m-dataset\": {\n source: \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n source: \"iana\"\n },\n \"application/vnd.dart\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n source: \"iana\",\n extensions: [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dataresource+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dbf\": {\n source: \"iana\",\n extensions: [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n source: \"iana\"\n },\n \"application/vnd.dece.data\": {\n source: \"iana\",\n extensions: [\"uvf\", \"uvvf\", \"uvd\", \"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uvt\", \"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n source: \"iana\",\n extensions: [\"uvx\", \"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n source: \"iana\",\n extensions: [\"uvz\", \"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n source: \"iana\",\n extensions: [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n source: \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n source: \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dna\": {\n source: \"iana\",\n extensions: [\"dna\"]\n },\n \"application/vnd.document+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dolby.mlp\": {\n source: \"apache\",\n extensions: [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n source: \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n source: \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n source: \"iana\"\n },\n \"application/vnd.dpgraph\": {\n source: \"iana\",\n extensions: [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n source: \"iana\",\n extensions: [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ds-keypoint\": {\n source: \"apache\",\n extensions: [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n source: \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n source: \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n source: \"iana\",\n extensions: [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.dvbj\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.dvb.pfr\": {\n source: \"iana\"\n },\n \"application/vnd.dvb.service\": {\n source: \"iana\",\n extensions: [\"svc\"]\n },\n \"application/vnd.dxr\": {\n source: \"iana\"\n },\n \"application/vnd.dynageo\": {\n source: \"iana\",\n extensions: [\"geo\"]\n },\n \"application/vnd.dzr\": {\n source: \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n source: \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n source: \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n source: \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ecowin.chart\": {\n source: \"iana\",\n extensions: [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n source: \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n source: \"iana\"\n },\n \"application/vnd.efi.img\": {\n source: \"iana\"\n },\n \"application/vnd.efi.iso\": {\n source: \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.enliven\": {\n source: \"iana\",\n extensions: [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n source: \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.epson.esf\": {\n source: \"iana\",\n extensions: [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n source: \"iana\",\n extensions: [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n source: \"iana\",\n extensions: [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n source: \"iana\",\n extensions: [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n source: \"iana\",\n extensions: [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n source: \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.eszigno3+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"es3\", \"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.etsi.cug+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.mcid+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.mheg5\": {\n source: \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.pstn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.sci+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.simservs+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.timestamp-token\": {\n source: \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.etsi.tsl.der\": {\n source: \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.eudora.data\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n source: \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n source: \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.exstream-package\": {\n source: \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n source: \"iana\",\n extensions: [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n source: \"iana\",\n extensions: [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n source: \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.fastcopy-disk-image\": {\n source: \"iana\"\n },\n \"application/vnd.fdf\": {\n source: \"iana\",\n extensions: [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n source: \"iana\",\n extensions: [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n source: \"iana\",\n extensions: [\"seed\", \"dataless\"]\n },\n \"application/vnd.ffsns\": {\n source: \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.filmit.zfc\": {\n source: \"iana\"\n },\n \"application/vnd.fints\": {\n source: \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n source: \"iana\"\n },\n \"application/vnd.flographit\": {\n source: \"iana\",\n extensions: [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n source: \"iana\",\n extensions: [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n source: \"iana\"\n },\n \"application/vnd.framemaker\": {\n source: \"iana\",\n extensions: [\"fm\", \"frame\", \"maker\", \"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n source: \"iana\",\n extensions: [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n source: \"iana\",\n extensions: [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n source: \"iana\",\n extensions: [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n source: \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.fujitsu.oasys\": {\n source: \"iana\",\n extensions: [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n source: \"iana\",\n extensions: [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n source: \"iana\",\n extensions: [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n source: \"iana\",\n extensions: [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n source: \"iana\",\n extensions: [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n source: \"iana\",\n extensions: [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n source: \"iana\",\n extensions: [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n source: \"iana\",\n extensions: [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n source: \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n source: \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n source: \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.futoin+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.fuzzysheet\": {\n source: \"iana\",\n extensions: [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n source: \"iana\",\n extensions: [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geo+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geocube+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.geogebra.file\": {\n source: \"iana\",\n extensions: [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n source: \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n source: \"iana\",\n extensions: [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n source: \"iana\",\n extensions: [\"gex\", \"gre\"]\n },\n \"application/vnd.geonext\": {\n source: \"iana\",\n extensions: [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n source: \"iana\",\n extensions: [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n source: \"iana\",\n extensions: [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n source: \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n source: \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n source: \"iana\"\n },\n \"application/vnd.gmx\": {\n source: \"iana\",\n extensions: [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n compressible: false,\n extensions: [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n compressible: false,\n extensions: [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n compressible: false,\n extensions: [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.grafeq\": {\n source: \"iana\",\n extensions: [\"gqf\", \"gqs\"]\n },\n \"application/vnd.gridmp\": {\n source: \"iana\"\n },\n \"application/vnd.groove-account\": {\n source: \"iana\",\n extensions: [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n source: \"iana\",\n extensions: [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n source: \"iana\",\n extensions: [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n source: \"iana\",\n extensions: [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n source: \"iana\",\n extensions: [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n source: \"iana\",\n extensions: [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n source: \"iana\",\n extensions: [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hal+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n source: \"iana\",\n extensions: [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hcl-bireports\": {\n source: \"iana\"\n },\n \"application/vnd.hdt\": {\n source: \"iana\"\n },\n \"application/vnd.heroku+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hhe.lesson-player\": {\n source: \"iana\",\n extensions: [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.hl7v2+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.hp-hpgl\": {\n source: \"iana\",\n extensions: [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n source: \"iana\",\n extensions: [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n source: \"iana\",\n extensions: [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n source: \"iana\",\n extensions: [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n source: \"iana\",\n extensions: [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n source: \"iana\",\n extensions: [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n source: \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n source: \"iana\",\n extensions: [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hyper-item+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hyperdrive+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.hzn-3d-crossword\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n source: \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n source: \"iana\",\n extensions: [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n source: \"iana\",\n extensions: [\"afp\", \"listafp\", \"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n source: \"iana\",\n extensions: [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n source: \"iana\",\n extensions: [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n source: \"iana\",\n extensions: [\"icc\", \"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n source: \"iana\"\n },\n \"application/vnd.igloader\": {\n source: \"iana\",\n extensions: [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.imagemeter.image+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.immervision-ivp\": {\n source: \"iana\",\n extensions: [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n source: \"iana\",\n extensions: [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n source: \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n source: \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n source: \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.informix-visionary\": {\n source: \"iana\"\n },\n \"application/vnd.infotech.project\": {\n source: \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.innopath.wamp.notification\": {\n source: \"iana\"\n },\n \"application/vnd.insors.igm\": {\n source: \"iana\",\n extensions: [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n source: \"iana\",\n extensions: [\"xpw\", \"xpx\"]\n },\n \"application/vnd.intergeo\": {\n source: \"iana\",\n extensions: [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n source: \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n source: \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n source: \"iana\",\n extensions: [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n source: \"iana\",\n extensions: [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n source: \"iana\",\n extensions: [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n source: \"iana\",\n extensions: [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n source: \"iana\",\n extensions: [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.jam\": {\n source: \"iana\",\n extensions: [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n source: \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n source: \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n source: \"iana\",\n extensions: [\"rms\"]\n },\n \"application/vnd.jisp\": {\n source: \"iana\",\n extensions: [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n source: \"iana\",\n extensions: [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n source: \"iana\"\n },\n \"application/vnd.kahootz\": {\n source: \"iana\",\n extensions: [\"ktz\", \"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n source: \"iana\",\n extensions: [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n source: \"iana\",\n extensions: [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n source: \"iana\",\n extensions: [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n source: \"iana\",\n extensions: [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n source: \"iana\",\n extensions: [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n source: \"iana\",\n extensions: [\"kpr\", \"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n source: \"iana\",\n extensions: [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n source: \"iana\",\n extensions: [\"kwd\", \"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n source: \"iana\",\n extensions: [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n source: \"iana\",\n extensions: [\"kia\"]\n },\n \"application/vnd.kinar\": {\n source: \"iana\",\n extensions: [\"kne\", \"knp\"]\n },\n \"application/vnd.koan\": {\n source: \"iana\",\n extensions: [\"skp\", \"skd\", \"skt\", \"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n source: \"iana\",\n extensions: [\"sse\"]\n },\n \"application/vnd.las\": {\n source: \"iana\"\n },\n \"application/vnd.las.las+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.las.las+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n source: \"iana\"\n },\n \"application/vnd.leap+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.liberty-request+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n source: \"iana\",\n extensions: [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.loom\": {\n source: \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n source: \"iana\",\n extensions: [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n source: \"iana\",\n extensions: [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n source: \"iana\",\n extensions: [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n source: \"iana\",\n extensions: [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n source: \"iana\",\n extensions: [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n source: \"iana\",\n extensions: [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n source: \"iana\",\n extensions: [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n source: \"iana\",\n extensions: [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n source: \"iana\",\n extensions: [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n source: \"iana\"\n },\n \"application/vnd.mason+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n source: \"iana\",\n compressible: false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n source: \"iana\"\n },\n \"application/vnd.mcd\": {\n source: \"iana\",\n extensions: [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n source: \"iana\",\n extensions: [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n source: \"iana\",\n extensions: [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n source: \"iana\"\n },\n \"application/vnd.mfer\": {\n source: \"iana\",\n extensions: [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n source: \"iana\",\n extensions: [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.micrografx.flo\": {\n source: \"iana\",\n extensions: [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n source: \"iana\",\n extensions: [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n source: \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n source: \"iana\"\n },\n \"application/vnd.miele+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.mif\": {\n source: \"iana\",\n extensions: [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n source: \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n source: \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n source: \"iana\",\n extensions: [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n source: \"iana\",\n extensions: [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n source: \"iana\",\n extensions: [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n source: \"iana\",\n extensions: [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n source: \"iana\",\n extensions: [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n source: \"iana\",\n extensions: [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n source: \"iana\",\n extensions: [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n source: \"iana\",\n extensions: [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n source: \"iana\",\n extensions: [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n source: \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n source: \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n source: \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n source: \"iana\",\n extensions: [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n source: \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n source: \"iana\",\n extensions: [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n source: \"apache\"\n },\n \"application/vnd.ms-excel\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xls\", \"xlm\", \"xla\", \"xlc\", \"xlt\", \"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n source: \"iana\",\n extensions: [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n source: \"iana\",\n extensions: [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n source: \"iana\",\n extensions: [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-officetheme\": {\n source: \"iana\",\n extensions: [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n source: \"apache\",\n compressible: true\n },\n \"application/vnd.ms-outlook\": {\n compressible: false,\n extensions: [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n source: \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n source: \"apache\",\n extensions: [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n source: \"apache\",\n extensions: [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-powerpoint\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ppt\", \"pps\", \"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n source: \"apache\",\n compressible: true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ms-project\": {\n source: \"iana\",\n extensions: [\"mpp\", \"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n source: \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n source: \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n source: \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n source: \"iana\",\n extensions: [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n source: \"iana\",\n extensions: [\"wps\", \"wks\", \"wcm\", \"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n source: \"iana\",\n extensions: [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n source: \"iana\"\n },\n \"application/vnd.mseq\": {\n source: \"iana\",\n extensions: [\"mseq\"]\n },\n \"application/vnd.msign\": {\n source: \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n source: \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n source: \"iana\"\n },\n \"application/vnd.music-niff\": {\n source: \"iana\"\n },\n \"application/vnd.musician\": {\n source: \"iana\",\n extensions: [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n source: \"iana\",\n extensions: [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n source: \"iana\",\n extensions: [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.ncd.control\": {\n source: \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n source: \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nebumind.line\": {\n source: \"iana\"\n },\n \"application/vnd.nervana\": {\n source: \"iana\"\n },\n \"application/vnd.netfpx\": {\n source: \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n source: \"iana\",\n extensions: [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n source: \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n source: \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n source: \"iana\"\n },\n \"application/vnd.nitf\": {\n source: \"iana\",\n extensions: [\"ntf\", \"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n source: \"iana\",\n extensions: [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n source: \"iana\",\n extensions: [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n source: \"iana\",\n extensions: [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n source: \"iana\",\n extensions: [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n source: \"iana\",\n extensions: [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.nokia.radio-preset\": {\n source: \"iana\",\n extensions: [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n source: \"iana\",\n extensions: [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n source: \"iana\",\n extensions: [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n source: \"iana\",\n extensions: [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n source: \"iana\",\n extensions: [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n source: \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n source: \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n source: \"iana\",\n extensions: [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n source: \"iana\",\n extensions: [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n source: \"iana\",\n extensions: [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n source: \"iana\",\n extensions: [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n source: \"iana\",\n extensions: [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n source: \"iana\",\n extensions: [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n source: \"iana\",\n extensions: [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n source: \"iana\",\n extensions: [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n source: \"iana\",\n extensions: [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n source: \"iana\",\n extensions: [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n source: \"iana\",\n extensions: [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n source: \"iana\",\n extensions: [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n source: \"iana\",\n extensions: [\"oth\"]\n },\n \"application/vnd.obn\": {\n source: \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oftn.l10n+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n source: \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.pae.gem\": {\n source: \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.olpc-sugar\": {\n source: \"iana\",\n extensions: [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n source: \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n source: \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n source: \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.bcast.stkm\": {\n source: \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.dcd\": {\n source: \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n source: \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n source: \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n source: \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.push\": {\n source: \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.omads-email+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omads-file+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omads-folder+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.omaloc-supl-init\": {\n source: \"iana\"\n },\n \"application/vnd.onepager\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertat\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n source: \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n source: \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n source: \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n source: \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n source: \"apache\",\n extensions: [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n source: \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n source: \"iana\",\n extensions: [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n source: \"iana\",\n extensions: [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n source: \"iana\",\n extensions: [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n source: \"iana\",\n extensions: [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n source: \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n source: \"iana\",\n extensions: [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oracle.resource+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.orange.indata\": {\n source: \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n source: \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n source: \"iana\",\n extensions: [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n source: \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n source: \"iana\",\n extensions: [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n source: \"iana\",\n extensions: [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.oxli.countgraph\": {\n source: \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.palm\": {\n source: \"iana\",\n extensions: [\"pdb\", \"pqa\", \"oprc\"]\n },\n \"application/vnd.panoply\": {\n source: \"iana\"\n },\n \"application/vnd.paos.xml\": {\n source: \"iana\"\n },\n \"application/vnd.patentdive\": {\n source: \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n source: \"iana\"\n },\n \"application/vnd.pawaafile\": {\n source: \"iana\",\n extensions: [\"paw\"]\n },\n \"application/vnd.pcos\": {\n source: \"iana\"\n },\n \"application/vnd.pg.format\": {\n source: \"iana\",\n extensions: [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n source: \"iana\",\n extensions: [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n source: \"iana\"\n },\n \"application/vnd.picsel\": {\n source: \"iana\",\n extensions: [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n source: \"iana\",\n extensions: [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.pocketlearn\": {\n source: \"iana\",\n extensions: [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n source: \"iana\",\n extensions: [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n source: \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n source: \"iana\"\n },\n \"application/vnd.preminet\": {\n source: \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n source: \"iana\",\n extensions: [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n source: \"iana\",\n extensions: [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n source: \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n source: \"iana\",\n extensions: [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n source: \"iana\",\n extensions: [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n source: \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n source: \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n source: \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n source: \"iana\",\n extensions: [\"qxd\", \"qxt\", \"qwd\", \"qwt\", \"qxl\", \"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n source: \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.rainstor.data\": {\n source: \"iana\"\n },\n \"application/vnd.rapid\": {\n source: \"iana\"\n },\n \"application/vnd.rar\": {\n source: \"iana\",\n extensions: [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n source: \"iana\",\n extensions: [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n source: \"iana\",\n extensions: [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n source: \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n source: \"iana\"\n },\n \"application/vnd.restful+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.rig.cryptonote\": {\n source: \"iana\",\n extensions: [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n source: \"apache\",\n extensions: [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n source: \"apache\",\n extensions: [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n source: \"apache\",\n extensions: [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n source: \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n source: \"iana\"\n },\n \"application/vnd.s3sms\": {\n source: \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n source: \"iana\",\n extensions: [\"st\"]\n },\n \"application/vnd.sar\": {\n source: \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n source: \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n source: \"iana\"\n },\n \"application/vnd.scribus\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.net\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n source: \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n source: \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n source: \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n source: \"iana\"\n },\n \"application/vnd.seemail\": {\n source: \"iana\",\n extensions: [\"see\"]\n },\n \"application/vnd.seis+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.sema\": {\n source: \"iana\",\n extensions: [\"sema\"]\n },\n \"application/vnd.semd\": {\n source: \"iana\",\n extensions: [\"semd\"]\n },\n \"application/vnd.semf\": {\n source: \"iana\",\n extensions: [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n source: \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n source: \"iana\",\n extensions: [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n source: \"iana\",\n extensions: [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n source: \"iana\",\n extensions: [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n source: \"iana\",\n extensions: [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.shopkick+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.shp\": {\n source: \"iana\"\n },\n \"application/vnd.shx\": {\n source: \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n source: \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n source: \"iana\",\n extensions: [\"twd\", \"twds\"]\n },\n \"application/vnd.siren+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.smaf\": {\n source: \"iana\",\n extensions: [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n source: \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n source: \"iana\",\n extensions: [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n source: \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n source: \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"sdkm\", \"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n source: \"iana\",\n extensions: [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n source: \"iana\",\n extensions: [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n source: \"iana\"\n },\n \"application/vnd.sss-cod\": {\n source: \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n source: \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n source: \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n source: \"apache\",\n extensions: [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n source: \"apache\",\n extensions: [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n source: \"apache\",\n extensions: [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n source: \"apache\",\n extensions: [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n source: \"apache\",\n extensions: [\"sdw\", \"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n source: \"apache\",\n extensions: [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n source: \"iana\",\n extensions: [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n source: \"iana\",\n extensions: [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n source: \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n source: \"apache\",\n extensions: [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n source: \"apache\",\n extensions: [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n source: \"apache\",\n extensions: [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n source: \"apache\",\n extensions: [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n source: \"apache\",\n extensions: [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n source: \"apache\",\n extensions: [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n source: \"apache\",\n extensions: [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n source: \"apache\",\n extensions: [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n source: \"apache\",\n extensions: [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n source: \"apache\",\n extensions: [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n source: \"iana\",\n extensions: [\"sus\", \"susp\"]\n },\n \"application/vnd.svd\": {\n source: \"iana\",\n extensions: [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n source: \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.syft+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.symbian.install\": {\n source: \"apache\",\n extensions: [\"sis\", \"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true\n },\n \"application/vnd.syncml.ds.notification\": {\n source: \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tao.intent-module-archive\": {\n source: \"iana\",\n extensions: [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n source: \"iana\",\n extensions: [\"pcap\", \"cap\", \"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.tml\": {\n source: \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n source: \"iana\",\n extensions: [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n source: \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n source: \"iana\",\n extensions: [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n source: \"iana\",\n extensions: [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n source: \"iana\",\n extensions: [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n source: \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n source: \"iana\"\n },\n \"application/vnd.ufdl\": {\n source: \"iana\",\n extensions: [\"ufd\", \"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n source: \"iana\",\n extensions: [\"utz\"]\n },\n \"application/vnd.umajin\": {\n source: \"iana\",\n extensions: [\"umj\"]\n },\n \"application/vnd.unity\": {\n source: \"iana\",\n extensions: [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n source: \"iana\"\n },\n \"application/vnd.uri-map\": {\n source: \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n source: \"iana\"\n },\n \"application/vnd.vcx\": {\n source: \"iana\",\n extensions: [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n source: \"iana\"\n },\n \"application/vnd.vectorworks\": {\n source: \"iana\"\n },\n \"application/vnd.vel+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.verimatrix.vcas\": {\n source: \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.veryant.thin\": {\n source: \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n source: \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n source: \"iana\"\n },\n \"application/vnd.visio\": {\n source: \"iana\",\n extensions: [\"vsd\", \"vst\", \"vss\", \"vsw\"]\n },\n \"application/vnd.visionary\": {\n source: \"iana\",\n extensions: [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n source: \"iana\"\n },\n \"application/vnd.vsf\": {\n source: \"iana\",\n extensions: [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n source: \"iana\"\n },\n \"application/vnd.wap.slc\": {\n source: \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n source: \"iana\",\n extensions: [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n source: \"iana\",\n extensions: [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n source: \"iana\",\n extensions: [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n source: \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n source: \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n source: \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n source: \"iana\"\n },\n \"application/vnd.wmc\": {\n source: \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n source: \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n source: \"iana\",\n extensions: [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n source: \"iana\",\n extensions: [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n source: \"iana\",\n extensions: [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n source: \"iana\"\n },\n \"application/vnd.wt.stf\": {\n source: \"iana\",\n extensions: [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n source: \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.wv.ssp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xacml+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xara\": {\n source: \"iana\",\n extensions: [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n source: \"iana\",\n extensions: [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n source: \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vnd.xmpie.cpkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n source: \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n source: \"iana\",\n extensions: [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n source: \"iana\",\n extensions: [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n source: \"iana\",\n extensions: [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n source: \"iana\",\n extensions: [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n source: \"iana\",\n extensions: [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n source: \"iana\",\n extensions: [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n source: \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n source: \"iana\"\n },\n \"application/vnd.yaoweme\": {\n source: \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n source: \"iana\",\n extensions: [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n source: \"iana\"\n },\n \"application/vnd.zul\": {\n source: \"iana\",\n extensions: [\"zir\", \"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/vq-rtcpxr\": {\n source: \"iana\"\n },\n \"application/wasm\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wif\"]\n },\n \"application/webpush-options+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/whoispp-query\": {\n source: \"iana\"\n },\n \"application/whoispp-response\": {\n source: \"iana\"\n },\n \"application/widget\": {\n source: \"iana\",\n extensions: [\"wgt\"]\n },\n \"application/winhlp\": {\n source: \"apache\",\n extensions: [\"hlp\"]\n },\n \"application/wita\": {\n source: \"iana\"\n },\n \"application/wordperfect5.1\": {\n source: \"iana\"\n },\n \"application/wsdl+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"7z\"]\n },\n \"application/x-abiword\": {\n source: \"apache\",\n extensions: [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n source: \"apache\",\n extensions: [\"ace\"]\n },\n \"application/x-amf\": {\n source: \"apache\"\n },\n \"application/x-apple-diskimage\": {\n source: \"apache\",\n extensions: [\"dmg\"]\n },\n \"application/x-arj\": {\n compressible: false,\n extensions: [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n source: \"apache\",\n extensions: [\"aab\", \"x32\", \"u32\", \"vox\"]\n },\n \"application/x-authorware-map\": {\n source: \"apache\",\n extensions: [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n source: \"apache\",\n extensions: [\"aas\"]\n },\n \"application/x-bcpio\": {\n source: \"apache\",\n extensions: [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n compressible: false,\n extensions: [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n source: \"apache\",\n extensions: [\"torrent\"]\n },\n \"application/x-blorb\": {\n source: \"apache\",\n extensions: [\"blb\", \"blorb\"]\n },\n \"application/x-bzip\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"bz\"]\n },\n \"application/x-bzip2\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"bz2\", \"boz\"]\n },\n \"application/x-cbr\": {\n source: \"apache\",\n extensions: [\"cbr\", \"cba\", \"cbt\", \"cbz\", \"cb7\"]\n },\n \"application/x-cdlink\": {\n source: \"apache\",\n extensions: [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n source: \"apache\",\n extensions: [\"cfs\"]\n },\n \"application/x-chat\": {\n source: \"apache\",\n extensions: [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n source: \"apache\",\n extensions: [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n extensions: [\"crx\"]\n },\n \"application/x-cocoa\": {\n source: \"nginx\",\n extensions: [\"cco\"]\n },\n \"application/x-compress\": {\n source: \"apache\"\n },\n \"application/x-conference\": {\n source: \"apache\",\n extensions: [\"nsc\"]\n },\n \"application/x-cpio\": {\n source: \"apache\",\n extensions: [\"cpio\"]\n },\n \"application/x-csh\": {\n source: \"apache\",\n extensions: [\"csh\"]\n },\n \"application/x-deb\": {\n compressible: false\n },\n \"application/x-debian-package\": {\n source: \"apache\",\n extensions: [\"deb\", \"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n source: \"apache\",\n extensions: [\"dgc\"]\n },\n \"application/x-director\": {\n source: \"apache\",\n extensions: [\"dir\", \"dcr\", \"dxr\", \"cst\", \"cct\", \"cxt\", \"w3d\", \"fgd\", \"swa\"]\n },\n \"application/x-doom\": {\n source: \"apache\",\n extensions: [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"res\"]\n },\n \"application/x-dvi\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"dvi\"]\n },\n \"application/x-envoy\": {\n source: \"apache\",\n extensions: [\"evy\"]\n },\n \"application/x-eva\": {\n source: \"apache\",\n extensions: [\"eva\"]\n },\n \"application/x-font-bdf\": {\n source: \"apache\",\n extensions: [\"bdf\"]\n },\n \"application/x-font-dos\": {\n source: \"apache\"\n },\n \"application/x-font-framemaker\": {\n source: \"apache\"\n },\n \"application/x-font-ghostscript\": {\n source: \"apache\",\n extensions: [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n source: \"apache\"\n },\n \"application/x-font-linux-psf\": {\n source: \"apache\",\n extensions: [\"psf\"]\n },\n \"application/x-font-pcf\": {\n source: \"apache\",\n extensions: [\"pcf\"]\n },\n \"application/x-font-snf\": {\n source: \"apache\",\n extensions: [\"snf\"]\n },\n \"application/x-font-speedo\": {\n source: \"apache\"\n },\n \"application/x-font-sunos-news\": {\n source: \"apache\"\n },\n \"application/x-font-type1\": {\n source: \"apache\",\n extensions: [\"pfa\", \"pfb\", \"pfm\", \"afm\"]\n },\n \"application/x-font-vfont\": {\n source: \"apache\"\n },\n \"application/x-freearc\": {\n source: \"apache\",\n extensions: [\"arc\"]\n },\n \"application/x-futuresplash\": {\n source: \"apache\",\n extensions: [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n source: \"apache\",\n extensions: [\"gca\"]\n },\n \"application/x-glulx\": {\n source: \"apache\",\n extensions: [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n source: \"apache\",\n extensions: [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n source: \"apache\",\n extensions: [\"gramps\"]\n },\n \"application/x-gtar\": {\n source: \"apache\",\n extensions: [\"gtar\"]\n },\n \"application/x-gzip\": {\n source: \"apache\"\n },\n \"application/x-hdf\": {\n source: \"apache\",\n extensions: [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n compressible: true,\n extensions: [\"php\"]\n },\n \"application/x-install-instructions\": {\n source: \"apache\",\n extensions: [\"install\"]\n },\n \"application/x-iso9660-image\": {\n source: \"apache\",\n extensions: [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n extensions: [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n extensions: [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n extensions: [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n source: \"nginx\",\n extensions: [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"jnlp\"]\n },\n \"application/x-javascript\": {\n compressible: true\n },\n \"application/x-keepass2\": {\n extensions: [\"kdbx\"]\n },\n \"application/x-latex\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n extensions: [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n source: \"apache\",\n extensions: [\"lzh\", \"lha\"]\n },\n \"application/x-makeself\": {\n source: \"nginx\",\n extensions: [\"run\"]\n },\n \"application/x-mie\": {\n source: \"apache\",\n extensions: [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n source: \"apache\",\n extensions: [\"prc\", \"mobi\"]\n },\n \"application/x-mpegurl\": {\n compressible: false\n },\n \"application/x-ms-application\": {\n source: \"apache\",\n extensions: [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n source: \"apache\",\n extensions: [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n source: \"apache\",\n extensions: [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n source: \"apache\",\n extensions: [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n source: \"apache\",\n extensions: [\"xbap\"]\n },\n \"application/x-msaccess\": {\n source: \"apache\",\n extensions: [\"mdb\"]\n },\n \"application/x-msbinder\": {\n source: \"apache\",\n extensions: [\"obd\"]\n },\n \"application/x-mscardfile\": {\n source: \"apache\",\n extensions: [\"crd\"]\n },\n \"application/x-msclip\": {\n source: \"apache\",\n extensions: [\"clp\"]\n },\n \"application/x-msdos-program\": {\n extensions: [\"exe\"]\n },\n \"application/x-msdownload\": {\n source: \"apache\",\n extensions: [\"exe\", \"dll\", \"com\", \"bat\", \"msi\"]\n },\n \"application/x-msmediaview\": {\n source: \"apache\",\n extensions: [\"mvb\", \"m13\", \"m14\"]\n },\n \"application/x-msmetafile\": {\n source: \"apache\",\n extensions: [\"wmf\", \"wmz\", \"emf\", \"emz\"]\n },\n \"application/x-msmoney\": {\n source: \"apache\",\n extensions: [\"mny\"]\n },\n \"application/x-mspublisher\": {\n source: \"apache\",\n extensions: [\"pub\"]\n },\n \"application/x-msschedule\": {\n source: \"apache\",\n extensions: [\"scd\"]\n },\n \"application/x-msterminal\": {\n source: \"apache\",\n extensions: [\"trm\"]\n },\n \"application/x-mswrite\": {\n source: \"apache\",\n extensions: [\"wri\"]\n },\n \"application/x-netcdf\": {\n source: \"apache\",\n extensions: [\"nc\", \"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n compressible: true,\n extensions: [\"pac\"]\n },\n \"application/x-nzb\": {\n source: \"apache\",\n extensions: [\"nzb\"]\n },\n \"application/x-perl\": {\n source: \"nginx\",\n extensions: [\"pl\", \"pm\"]\n },\n \"application/x-pilot\": {\n source: \"nginx\",\n extensions: [\"prc\", \"pdb\"]\n },\n \"application/x-pkcs12\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"p12\", \"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n source: \"apache\",\n extensions: [\"p7b\", \"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n source: \"apache\",\n extensions: [\"p7r\"]\n },\n \"application/x-pki-message\": {\n source: \"iana\"\n },\n \"application/x-rar-compressed\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n source: \"nginx\",\n extensions: [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n source: \"apache\",\n extensions: [\"ris\"]\n },\n \"application/x-sea\": {\n source: \"nginx\",\n extensions: [\"sea\"]\n },\n \"application/x-sh\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"sh\"]\n },\n \"application/x-shar\": {\n source: \"apache\",\n extensions: [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n source: \"apache\",\n extensions: [\"xap\"]\n },\n \"application/x-sql\": {\n source: \"apache\",\n extensions: [\"sql\"]\n },\n \"application/x-stuffit\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"sit\"]\n },\n \"application/x-stuffitx\": {\n source: \"apache\",\n extensions: [\"sitx\"]\n },\n \"application/x-subrip\": {\n source: \"apache\",\n extensions: [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n source: \"apache\",\n extensions: [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n source: \"apache\",\n extensions: [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n source: \"apache\",\n extensions: [\"t3\"]\n },\n \"application/x-tads\": {\n source: \"apache\",\n extensions: [\"gam\"]\n },\n \"application/x-tar\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"tar\"]\n },\n \"application/x-tcl\": {\n source: \"apache\",\n extensions: [\"tcl\", \"tk\"]\n },\n \"application/x-tex\": {\n source: \"apache\",\n extensions: [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n source: \"apache\",\n extensions: [\"tfm\"]\n },\n \"application/x-texinfo\": {\n source: \"apache\",\n extensions: [\"texinfo\", \"texi\"]\n },\n \"application/x-tgif\": {\n source: \"apache\",\n extensions: [\"obj\"]\n },\n \"application/x-ustar\": {\n source: \"apache\",\n extensions: [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n compressible: true,\n extensions: [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n compressible: true,\n extensions: [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n compressible: true,\n extensions: [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n compressible: true,\n extensions: [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n compressible: false,\n extensions: [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n compressible: true,\n extensions: [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n compressible: true,\n extensions: [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n compressible: true,\n extensions: [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n source: \"apache\",\n extensions: [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n compressible: true,\n extensions: [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n source: \"iana\",\n compressible: true\n },\n \"application/x-x509-ca-cert\": {\n source: \"iana\",\n extensions: [\"der\", \"crt\", \"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n source: \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n source: \"iana\"\n },\n \"application/x-xfig\": {\n source: \"apache\",\n extensions: [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"xpi\"]\n },\n \"application/x-xz\": {\n source: \"apache\",\n extensions: [\"xz\"]\n },\n \"application/x-zmachine\": {\n source: \"apache\",\n extensions: [\"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\"]\n },\n \"application/x400-bp\": {\n source: \"iana\"\n },\n \"application/xacml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xaml+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xcap-ns+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xcon-conference-info-diff+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xenc+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xhtml\", \"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n source: \"apache\",\n compressible: true\n },\n \"application/xliff+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xlf\"]\n },\n \"application/xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xml\", \"xsl\", \"xsd\", \"rng\"]\n },\n \"application/xml-dtd\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n source: \"iana\"\n },\n \"application/xml-patch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xmpp+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/xop+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xop\"]\n },\n \"application/xproc+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xpl\"]\n },\n \"application/xslt+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xsl\", \"xslt\"]\n },\n \"application/xspf+xml\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"xspf\"]\n },\n \"application/xv+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"]\n },\n \"application/yang\": {\n source: \"iana\",\n extensions: [\"yang\"]\n },\n \"application/yang-data+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-data+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-patch+json\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yang-patch+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"application/yin+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"yin\"]\n },\n \"application/zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"zip\"]\n },\n \"application/zlib\": {\n source: \"iana\"\n },\n \"application/zstd\": {\n source: \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"audio/32kadpcm\": {\n source: \"iana\"\n },\n \"audio/3gpp\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n source: \"iana\"\n },\n \"audio/aac\": {\n source: \"iana\"\n },\n \"audio/ac3\": {\n source: \"iana\"\n },\n \"audio/adpcm\": {\n source: \"apache\",\n extensions: [\"adp\"]\n },\n \"audio/amr\": {\n source: \"iana\",\n extensions: [\"amr\"]\n },\n \"audio/amr-wb\": {\n source: \"iana\"\n },\n \"audio/amr-wb+\": {\n source: \"iana\"\n },\n \"audio/aptx\": {\n source: \"iana\"\n },\n \"audio/asc\": {\n source: \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n source: \"iana\"\n },\n \"audio/atrac-x\": {\n source: \"iana\"\n },\n \"audio/atrac3\": {\n source: \"iana\"\n },\n \"audio/basic\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"au\", \"snd\"]\n },\n \"audio/bv16\": {\n source: \"iana\"\n },\n \"audio/bv32\": {\n source: \"iana\"\n },\n \"audio/clearmode\": {\n source: \"iana\"\n },\n \"audio/cn\": {\n source: \"iana\"\n },\n \"audio/dat12\": {\n source: \"iana\"\n },\n \"audio/dls\": {\n source: \"iana\"\n },\n \"audio/dsr-es201108\": {\n source: \"iana\"\n },\n \"audio/dsr-es202050\": {\n source: \"iana\"\n },\n \"audio/dsr-es202211\": {\n source: \"iana\"\n },\n \"audio/dsr-es202212\": {\n source: \"iana\"\n },\n \"audio/dv\": {\n source: \"iana\"\n },\n \"audio/dvi4\": {\n source: \"iana\"\n },\n \"audio/eac3\": {\n source: \"iana\"\n },\n \"audio/encaprtp\": {\n source: \"iana\"\n },\n \"audio/evrc\": {\n source: \"iana\"\n },\n \"audio/evrc-qcp\": {\n source: \"iana\"\n },\n \"audio/evrc0\": {\n source: \"iana\"\n },\n \"audio/evrc1\": {\n source: \"iana\"\n },\n \"audio/evrcb\": {\n source: \"iana\"\n },\n \"audio/evrcb0\": {\n source: \"iana\"\n },\n \"audio/evrcb1\": {\n source: \"iana\"\n },\n \"audio/evrcnw\": {\n source: \"iana\"\n },\n \"audio/evrcnw0\": {\n source: \"iana\"\n },\n \"audio/evrcnw1\": {\n source: \"iana\"\n },\n \"audio/evrcwb\": {\n source: \"iana\"\n },\n \"audio/evrcwb0\": {\n source: \"iana\"\n },\n \"audio/evrcwb1\": {\n source: \"iana\"\n },\n \"audio/evs\": {\n source: \"iana\"\n },\n \"audio/flexfec\": {\n source: \"iana\"\n },\n \"audio/fwdred\": {\n source: \"iana\"\n },\n \"audio/g711-0\": {\n source: \"iana\"\n },\n \"audio/g719\": {\n source: \"iana\"\n },\n \"audio/g722\": {\n source: \"iana\"\n },\n \"audio/g7221\": {\n source: \"iana\"\n },\n \"audio/g723\": {\n source: \"iana\"\n },\n \"audio/g726-16\": {\n source: \"iana\"\n },\n \"audio/g726-24\": {\n source: \"iana\"\n },\n \"audio/g726-32\": {\n source: \"iana\"\n },\n \"audio/g726-40\": {\n source: \"iana\"\n },\n \"audio/g728\": {\n source: \"iana\"\n },\n \"audio/g729\": {\n source: \"iana\"\n },\n \"audio/g7291\": {\n source: \"iana\"\n },\n \"audio/g729d\": {\n source: \"iana\"\n },\n \"audio/g729e\": {\n source: \"iana\"\n },\n \"audio/gsm\": {\n source: \"iana\"\n },\n \"audio/gsm-efr\": {\n source: \"iana\"\n },\n \"audio/gsm-hr-08\": {\n source: \"iana\"\n },\n \"audio/ilbc\": {\n source: \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n source: \"iana\"\n },\n \"audio/isac\": {\n source: \"apache\"\n },\n \"audio/l16\": {\n source: \"iana\"\n },\n \"audio/l20\": {\n source: \"iana\"\n },\n \"audio/l24\": {\n source: \"iana\",\n compressible: false\n },\n \"audio/l8\": {\n source: \"iana\"\n },\n \"audio/lpc\": {\n source: \"iana\"\n },\n \"audio/melp\": {\n source: \"iana\"\n },\n \"audio/melp1200\": {\n source: \"iana\"\n },\n \"audio/melp2400\": {\n source: \"iana\"\n },\n \"audio/melp600\": {\n source: \"iana\"\n },\n \"audio/mhas\": {\n source: \"iana\"\n },\n \"audio/midi\": {\n source: \"apache\",\n extensions: [\"mid\", \"midi\", \"kar\", \"rmi\"]\n },\n \"audio/mobile-xmf\": {\n source: \"iana\",\n extensions: [\"mxmf\"]\n },\n \"audio/mp3\": {\n compressible: false,\n extensions: [\"mp3\"]\n },\n \"audio/mp4\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"m4a\", \"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n source: \"iana\"\n },\n \"audio/mpa\": {\n source: \"iana\"\n },\n \"audio/mpa-robust\": {\n source: \"iana\"\n },\n \"audio/mpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n source: \"iana\"\n },\n \"audio/musepack\": {\n source: \"apache\"\n },\n \"audio/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"oga\", \"ogg\", \"spx\", \"opus\"]\n },\n \"audio/opus\": {\n source: \"iana\"\n },\n \"audio/parityfec\": {\n source: \"iana\"\n },\n \"audio/pcma\": {\n source: \"iana\"\n },\n \"audio/pcma-wb\": {\n source: \"iana\"\n },\n \"audio/pcmu\": {\n source: \"iana\"\n },\n \"audio/pcmu-wb\": {\n source: \"iana\"\n },\n \"audio/prs.sid\": {\n source: \"iana\"\n },\n \"audio/qcelp\": {\n source: \"iana\"\n },\n \"audio/raptorfec\": {\n source: \"iana\"\n },\n \"audio/red\": {\n source: \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"audio/rtp-midi\": {\n source: \"iana\"\n },\n \"audio/rtploopback\": {\n source: \"iana\"\n },\n \"audio/rtx\": {\n source: \"iana\"\n },\n \"audio/s3m\": {\n source: \"apache\",\n extensions: [\"s3m\"]\n },\n \"audio/scip\": {\n source: \"iana\"\n },\n \"audio/silk\": {\n source: \"apache\",\n extensions: [\"sil\"]\n },\n \"audio/smv\": {\n source: \"iana\"\n },\n \"audio/smv-qcp\": {\n source: \"iana\"\n },\n \"audio/smv0\": {\n source: \"iana\"\n },\n \"audio/sofa\": {\n source: \"iana\"\n },\n \"audio/sp-midi\": {\n source: \"iana\"\n },\n \"audio/speex\": {\n source: \"iana\"\n },\n \"audio/t140c\": {\n source: \"iana\"\n },\n \"audio/t38\": {\n source: \"iana\"\n },\n \"audio/telephone-event\": {\n source: \"iana\"\n },\n \"audio/tetra_acelp\": {\n source: \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n source: \"iana\"\n },\n \"audio/tone\": {\n source: \"iana\"\n },\n \"audio/tsvcis\": {\n source: \"iana\"\n },\n \"audio/uemclip\": {\n source: \"iana\"\n },\n \"audio/ulpfec\": {\n source: \"iana\"\n },\n \"audio/usac\": {\n source: \"iana\"\n },\n \"audio/vdvi\": {\n source: \"iana\"\n },\n \"audio/vmr-wb\": {\n source: \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n source: \"iana\"\n },\n \"audio/vnd.4sb\": {\n source: \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n source: \"iana\"\n },\n \"audio/vnd.celp\": {\n source: \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n source: \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n source: \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n source: \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n source: \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n source: \"iana\",\n extensions: [\"uva\", \"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n source: \"iana\",\n extensions: [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n source: \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n source: \"iana\"\n },\n \"audio/vnd.dra\": {\n source: \"iana\",\n extensions: [\"dra\"]\n },\n \"audio/vnd.dts\": {\n source: \"iana\",\n extensions: [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n source: \"iana\",\n extensions: [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n source: \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n source: \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n source: \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n source: \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n source: \"iana\",\n extensions: [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n source: \"iana\",\n extensions: [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n source: \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n source: \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n source: \"iana\",\n extensions: [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n source: \"iana\",\n extensions: [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n source: \"iana\",\n extensions: [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n source: \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n source: \"iana\"\n },\n \"audio/vnd.qcelp\": {\n source: \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n source: \"iana\"\n },\n \"audio/vnd.rip\": {\n source: \"iana\",\n extensions: [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n compressible: false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n source: \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n source: \"iana\"\n },\n \"audio/vnd.wave\": {\n compressible: false\n },\n \"audio/vorbis\": {\n source: \"iana\",\n compressible: false\n },\n \"audio/vorbis-config\": {\n source: \"iana\"\n },\n \"audio/wav\": {\n compressible: false,\n extensions: [\"wav\"]\n },\n \"audio/wave\": {\n compressible: false,\n extensions: [\"wav\"]\n },\n \"audio/webm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"weba\"]\n },\n \"audio/x-aac\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"aac\"]\n },\n \"audio/x-aiff\": {\n source: \"apache\",\n extensions: [\"aif\", \"aiff\", \"aifc\"]\n },\n \"audio/x-caf\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"caf\"]\n },\n \"audio/x-flac\": {\n source: \"apache\",\n extensions: [\"flac\"]\n },\n \"audio/x-m4a\": {\n source: \"nginx\",\n extensions: [\"m4a\"]\n },\n \"audio/x-matroska\": {\n source: \"apache\",\n extensions: [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n source: \"apache\",\n extensions: [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n source: \"apache\",\n extensions: [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n source: \"apache\",\n extensions: [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n source: \"apache\",\n extensions: [\"ram\", \"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n source: \"apache\",\n extensions: [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n source: \"nginx\",\n extensions: [\"ra\"]\n },\n \"audio/x-tta\": {\n source: \"apache\"\n },\n \"audio/x-wav\": {\n source: \"apache\",\n extensions: [\"wav\"]\n },\n \"audio/xm\": {\n source: \"apache\",\n extensions: [\"xm\"]\n },\n \"chemical/x-cdx\": {\n source: \"apache\",\n extensions: [\"cdx\"]\n },\n \"chemical/x-cif\": {\n source: \"apache\",\n extensions: [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n source: \"apache\",\n extensions: [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n source: \"apache\",\n extensions: [\"cml\"]\n },\n \"chemical/x-csml\": {\n source: \"apache\",\n extensions: [\"csml\"]\n },\n \"chemical/x-pdb\": {\n source: \"apache\"\n },\n \"chemical/x-xyz\": {\n source: \"apache\",\n extensions: [\"xyz\"]\n },\n \"font/collection\": {\n source: \"iana\",\n extensions: [\"ttc\"]\n },\n \"font/otf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"otf\"]\n },\n \"font/sfnt\": {\n source: \"iana\"\n },\n \"font/ttf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ttf\"]\n },\n \"font/woff\": {\n source: \"iana\",\n extensions: [\"woff\"]\n },\n \"font/woff2\": {\n source: \"iana\",\n extensions: [\"woff2\"]\n },\n \"image/aces\": {\n source: \"iana\",\n extensions: [\"exr\"]\n },\n \"image/apng\": {\n compressible: false,\n extensions: [\"apng\"]\n },\n \"image/avci\": {\n source: \"iana\",\n extensions: [\"avci\"]\n },\n \"image/avcs\": {\n source: \"iana\",\n extensions: [\"avcs\"]\n },\n \"image/avif\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"avif\"]\n },\n \"image/bmp\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"bmp\"]\n },\n \"image/cgm\": {\n source: \"iana\",\n extensions: [\"cgm\"]\n },\n \"image/dicom-rle\": {\n source: \"iana\",\n extensions: [\"drle\"]\n },\n \"image/emf\": {\n source: \"iana\",\n extensions: [\"emf\"]\n },\n \"image/fits\": {\n source: \"iana\",\n extensions: [\"fits\"]\n },\n \"image/g3fax\": {\n source: \"iana\",\n extensions: [\"g3\"]\n },\n \"image/gif\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"gif\"]\n },\n \"image/heic\": {\n source: \"iana\",\n extensions: [\"heic\"]\n },\n \"image/heic-sequence\": {\n source: \"iana\",\n extensions: [\"heics\"]\n },\n \"image/heif\": {\n source: \"iana\",\n extensions: [\"heif\"]\n },\n \"image/heif-sequence\": {\n source: \"iana\",\n extensions: [\"heifs\"]\n },\n \"image/hej2k\": {\n source: \"iana\",\n extensions: [\"hej2\"]\n },\n \"image/hsj2\": {\n source: \"iana\",\n extensions: [\"hsj2\"]\n },\n \"image/ief\": {\n source: \"iana\",\n extensions: [\"ief\"]\n },\n \"image/jls\": {\n source: \"iana\",\n extensions: [\"jls\"]\n },\n \"image/jp2\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jp2\", \"jpg2\"]\n },\n \"image/jpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpeg\", \"jpg\", \"jpe\"]\n },\n \"image/jph\": {\n source: \"iana\",\n extensions: [\"jph\"]\n },\n \"image/jphc\": {\n source: \"iana\",\n extensions: [\"jhc\"]\n },\n \"image/jpm\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpm\"]\n },\n \"image/jpx\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"jpx\", \"jpf\"]\n },\n \"image/jxr\": {\n source: \"iana\",\n extensions: [\"jxr\"]\n },\n \"image/jxra\": {\n source: \"iana\",\n extensions: [\"jxra\"]\n },\n \"image/jxrs\": {\n source: \"iana\",\n extensions: [\"jxrs\"]\n },\n \"image/jxs\": {\n source: \"iana\",\n extensions: [\"jxs\"]\n },\n \"image/jxsc\": {\n source: \"iana\",\n extensions: [\"jxsc\"]\n },\n \"image/jxsi\": {\n source: \"iana\",\n extensions: [\"jxsi\"]\n },\n \"image/jxss\": {\n source: \"iana\",\n extensions: [\"jxss\"]\n },\n \"image/ktx\": {\n source: \"iana\",\n extensions: [\"ktx\"]\n },\n \"image/ktx2\": {\n source: \"iana\",\n extensions: [\"ktx2\"]\n },\n \"image/naplps\": {\n source: \"iana\"\n },\n \"image/pjpeg\": {\n compressible: false\n },\n \"image/png\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"png\"]\n },\n \"image/prs.btif\": {\n source: \"iana\",\n extensions: [\"btif\"]\n },\n \"image/prs.pti\": {\n source: \"iana\",\n extensions: [\"pti\"]\n },\n \"image/pwg-raster\": {\n source: \"iana\"\n },\n \"image/sgi\": {\n source: \"apache\",\n extensions: [\"sgi\"]\n },\n \"image/svg+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"svg\", \"svgz\"]\n },\n \"image/t38\": {\n source: \"iana\",\n extensions: [\"t38\"]\n },\n \"image/tiff\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"tif\", \"tiff\"]\n },\n \"image/tiff-fx\": {\n source: \"iana\",\n extensions: [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n source: \"iana\",\n extensions: [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n source: \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n source: \"iana\",\n extensions: [\"uvi\", \"uvvi\", \"uvg\", \"uvvg\"]\n },\n \"image/vnd.djvu\": {\n source: \"iana\",\n extensions: [\"djvu\", \"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n source: \"iana\",\n extensions: [\"sub\"]\n },\n \"image/vnd.dwg\": {\n source: \"iana\",\n extensions: [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n source: \"iana\",\n extensions: [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n source: \"iana\",\n extensions: [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n source: \"iana\",\n extensions: [\"fpx\"]\n },\n \"image/vnd.fst\": {\n source: \"iana\",\n extensions: [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n source: \"iana\",\n extensions: [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n source: \"iana\",\n extensions: [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n source: \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"ico\"]\n },\n \"image/vnd.mix\": {\n source: \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n source: \"iana\"\n },\n \"image/vnd.ms-dds\": {\n compressible: true,\n extensions: [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n source: \"iana\",\n extensions: [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n source: \"apache\",\n extensions: [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n source: \"iana\",\n extensions: [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n source: \"iana\",\n extensions: [\"b16\"]\n },\n \"image/vnd.radiance\": {\n source: \"iana\"\n },\n \"image/vnd.sealed.png\": {\n source: \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n source: \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n source: \"iana\"\n },\n \"image/vnd.svf\": {\n source: \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n source: \"iana\",\n extensions: [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n source: \"iana\",\n extensions: [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n source: \"iana\",\n extensions: [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n source: \"iana\",\n extensions: [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n source: \"iana\",\n extensions: [\"pcx\"]\n },\n \"image/webp\": {\n source: \"apache\",\n extensions: [\"webp\"]\n },\n \"image/wmf\": {\n source: \"iana\",\n extensions: [\"wmf\"]\n },\n \"image/x-3ds\": {\n source: \"apache\",\n extensions: [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n source: \"apache\",\n extensions: [\"ras\"]\n },\n \"image/x-cmx\": {\n source: \"apache\",\n extensions: [\"cmx\"]\n },\n \"image/x-freehand\": {\n source: \"apache\",\n extensions: [\"fh\", \"fhc\", \"fh4\", \"fh5\", \"fh7\"]\n },\n \"image/x-icon\": {\n source: \"apache\",\n compressible: true,\n extensions: [\"ico\"]\n },\n \"image/x-jng\": {\n source: \"nginx\",\n extensions: [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n source: \"apache\",\n extensions: [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n source: \"nginx\",\n compressible: true,\n extensions: [\"bmp\"]\n },\n \"image/x-pcx\": {\n source: \"apache\",\n extensions: [\"pcx\"]\n },\n \"image/x-pict\": {\n source: \"apache\",\n extensions: [\"pic\", \"pct\"]\n },\n \"image/x-portable-anymap\": {\n source: \"apache\",\n extensions: [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n source: \"apache\",\n extensions: [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n source: \"apache\",\n extensions: [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n source: \"apache\",\n extensions: [\"ppm\"]\n },\n \"image/x-rgb\": {\n source: \"apache\",\n extensions: [\"rgb\"]\n },\n \"image/x-tga\": {\n source: \"apache\",\n extensions: [\"tga\"]\n },\n \"image/x-xbitmap\": {\n source: \"apache\",\n extensions: [\"xbm\"]\n },\n \"image/x-xcf\": {\n compressible: false\n },\n \"image/x-xpixmap\": {\n source: \"apache\",\n extensions: [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n source: \"apache\",\n extensions: [\"xwd\"]\n },\n \"message/cpim\": {\n source: \"iana\"\n },\n \"message/delivery-status\": {\n source: \"iana\"\n },\n \"message/disposition-notification\": {\n source: \"iana\",\n extensions: [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n source: \"iana\"\n },\n \"message/feedback-report\": {\n source: \"iana\"\n },\n \"message/global\": {\n source: \"iana\",\n extensions: [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n source: \"iana\",\n extensions: [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n source: \"iana\",\n extensions: [\"u8mdn\"]\n },\n \"message/global-headers\": {\n source: \"iana\",\n extensions: [\"u8hdr\"]\n },\n \"message/http\": {\n source: \"iana\",\n compressible: false\n },\n \"message/imdn+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"message/news\": {\n source: \"iana\"\n },\n \"message/partial\": {\n source: \"iana\",\n compressible: false\n },\n \"message/rfc822\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"eml\", \"mime\"]\n },\n \"message/s-http\": {\n source: \"iana\"\n },\n \"message/sip\": {\n source: \"iana\"\n },\n \"message/sipfrag\": {\n source: \"iana\"\n },\n \"message/tracking-status\": {\n source: \"iana\"\n },\n \"message/vnd.si.simp\": {\n source: \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n source: \"iana\",\n extensions: [\"wsc\"]\n },\n \"model/3mf\": {\n source: \"iana\",\n extensions: [\"3mf\"]\n },\n \"model/e57\": {\n source: \"iana\"\n },\n \"model/gltf+json\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"gltf\"]\n },\n \"model/gltf-binary\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"glb\"]\n },\n \"model/iges\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"igs\", \"iges\"]\n },\n \"model/mesh\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"msh\", \"mesh\", \"silo\"]\n },\n \"model/mtl\": {\n source: \"iana\",\n extensions: [\"mtl\"]\n },\n \"model/obj\": {\n source: \"iana\",\n extensions: [\"obj\"]\n },\n \"model/step\": {\n source: \"iana\"\n },\n \"model/step+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"stpx\"]\n },\n \"model/step+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"stpxz\"]\n },\n \"model/stl\": {\n source: \"iana\",\n extensions: [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"dae\"]\n },\n \"model/vnd.dwf\": {\n source: \"iana\",\n extensions: [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n source: \"iana\"\n },\n \"model/vnd.gdl\": {\n source: \"iana\",\n extensions: [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n source: \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n source: \"iana\"\n },\n \"model/vnd.gtw\": {\n source: \"iana\",\n extensions: [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n source: \"iana\",\n compressible: true\n },\n \"model/vnd.mts\": {\n source: \"iana\",\n extensions: [\"mts\"]\n },\n \"model/vnd.opengex\": {\n source: \"iana\",\n extensions: [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n source: \"iana\",\n extensions: [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n source: \"iana\",\n extensions: [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n source: \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n source: \"iana\"\n },\n \"model/vnd.sap.vds\": {\n source: \"iana\",\n extensions: [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n source: \"iana\",\n extensions: [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n source: \"iana\",\n extensions: [\"vtu\"]\n },\n \"model/vrml\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"wrl\", \"vrml\"]\n },\n \"model/x3d+binary\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"x3db\", \"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n source: \"iana\",\n extensions: [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"x3dv\", \"x3dvz\"]\n },\n \"model/x3d+xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"x3d\", \"x3dz\"]\n },\n \"model/x3d-vrml\": {\n source: \"iana\",\n extensions: [\"x3dv\"]\n },\n \"multipart/alternative\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/appledouble\": {\n source: \"iana\"\n },\n \"multipart/byteranges\": {\n source: \"iana\"\n },\n \"multipart/digest\": {\n source: \"iana\"\n },\n \"multipart/encrypted\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/form-data\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/header-set\": {\n source: \"iana\"\n },\n \"multipart/mixed\": {\n source: \"iana\"\n },\n \"multipart/multilingual\": {\n source: \"iana\"\n },\n \"multipart/parallel\": {\n source: \"iana\"\n },\n \"multipart/related\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/report\": {\n source: \"iana\"\n },\n \"multipart/signed\": {\n source: \"iana\",\n compressible: false\n },\n \"multipart/vnd.bint.med-plus\": {\n source: \"iana\"\n },\n \"multipart/voice-message\": {\n source: \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n source: \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"text/cache-manifest\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"appcache\", \"manifest\"]\n },\n \"text/calendar\": {\n source: \"iana\",\n extensions: [\"ics\", \"ifb\"]\n },\n \"text/calender\": {\n compressible: true\n },\n \"text/cmd\": {\n compressible: true\n },\n \"text/coffeescript\": {\n extensions: [\"coffee\", \"litcoffee\"]\n },\n \"text/cql\": {\n source: \"iana\"\n },\n \"text/cql-expression\": {\n source: \"iana\"\n },\n \"text/cql-identifier\": {\n source: \"iana\"\n },\n \"text/css\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"css\"]\n },\n \"text/csv\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"csv\"]\n },\n \"text/csv-schema\": {\n source: \"iana\"\n },\n \"text/directory\": {\n source: \"iana\"\n },\n \"text/dns\": {\n source: \"iana\"\n },\n \"text/ecmascript\": {\n source: \"iana\"\n },\n \"text/encaprtp\": {\n source: \"iana\"\n },\n \"text/enriched\": {\n source: \"iana\"\n },\n \"text/fhirpath\": {\n source: \"iana\"\n },\n \"text/flexfec\": {\n source: \"iana\"\n },\n \"text/fwdred\": {\n source: \"iana\"\n },\n \"text/gff3\": {\n source: \"iana\"\n },\n \"text/grammar-ref-list\": {\n source: \"iana\"\n },\n \"text/html\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"html\", \"htm\", \"shtml\"]\n },\n \"text/jade\": {\n extensions: [\"jade\"]\n },\n \"text/javascript\": {\n source: \"iana\",\n compressible: true\n },\n \"text/jcr-cnd\": {\n source: \"iana\"\n },\n \"text/jsx\": {\n compressible: true,\n extensions: [\"jsx\"]\n },\n \"text/less\": {\n compressible: true,\n extensions: [\"less\"]\n },\n \"text/markdown\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"markdown\", \"md\"]\n },\n \"text/mathml\": {\n source: \"nginx\",\n extensions: [\"mml\"]\n },\n \"text/mdx\": {\n compressible: true,\n extensions: [\"mdx\"]\n },\n \"text/mizar\": {\n source: \"iana\"\n },\n \"text/n3\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"n3\"]\n },\n \"text/parameters\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/parityfec\": {\n source: \"iana\"\n },\n \"text/plain\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"]\n },\n \"text/provenance-notation\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n source: \"iana\"\n },\n \"text/prs.lines.tag\": {\n source: \"iana\",\n extensions: [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n source: \"iana\"\n },\n \"text/raptorfec\": {\n source: \"iana\"\n },\n \"text/red\": {\n source: \"iana\"\n },\n \"text/rfc822-headers\": {\n source: \"iana\"\n },\n \"text/richtext\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtx\"]\n },\n \"text/rtf\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"text/rtploopback\": {\n source: \"iana\"\n },\n \"text/rtx\": {\n source: \"iana\"\n },\n \"text/sgml\": {\n source: \"iana\",\n extensions: [\"sgml\", \"sgm\"]\n },\n \"text/shaclc\": {\n source: \"iana\"\n },\n \"text/shex\": {\n source: \"iana\",\n extensions: [\"shex\"]\n },\n \"text/slim\": {\n extensions: [\"slim\", \"slm\"]\n },\n \"text/spdx\": {\n source: \"iana\",\n extensions: [\"spdx\"]\n },\n \"text/strings\": {\n source: \"iana\"\n },\n \"text/stylus\": {\n extensions: [\"stylus\", \"styl\"]\n },\n \"text/t140\": {\n source: \"iana\"\n },\n \"text/tab-separated-values\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"tsv\"]\n },\n \"text/troff\": {\n source: \"iana\",\n extensions: [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"]\n },\n \"text/turtle\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"ttl\"]\n },\n \"text/ulpfec\": {\n source: \"iana\"\n },\n \"text/uri-list\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"uri\", \"uris\", \"urls\"]\n },\n \"text/vcard\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"vcard\"]\n },\n \"text/vnd.a\": {\n source: \"iana\"\n },\n \"text/vnd.abc\": {\n source: \"iana\"\n },\n \"text/vnd.ascii-art\": {\n source: \"iana\"\n },\n \"text/vnd.curl\": {\n source: \"iana\",\n extensions: [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n source: \"apache\",\n extensions: [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n source: \"apache\",\n extensions: [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n source: \"apache\",\n extensions: [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n source: \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n source: \"iana\",\n extensions: [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n source: \"iana\",\n extensions: [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n source: \"iana\"\n },\n \"text/vnd.fly\": {\n source: \"iana\",\n extensions: [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n source: \"iana\",\n extensions: [\"flx\"]\n },\n \"text/vnd.gml\": {\n source: \"iana\"\n },\n \"text/vnd.graphviz\": {\n source: \"iana\",\n extensions: [\"gv\"]\n },\n \"text/vnd.hans\": {\n source: \"iana\"\n },\n \"text/vnd.hgl\": {\n source: \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n source: \"iana\",\n extensions: [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n source: \"iana\",\n extensions: [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n source: \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n source: \"iana\"\n },\n \"text/vnd.latex-z\": {\n source: \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n source: \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n source: \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n source: \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n source: \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n source: \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n source: \"iana\"\n },\n \"text/vnd.sosi\": {\n source: \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n source: \"iana\",\n charset: \"UTF-8\",\n extensions: [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n source: \"iana\",\n charset: \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n source: \"iana\"\n },\n \"text/vnd.wap.sl\": {\n source: \"iana\"\n },\n \"text/vnd.wap.wml\": {\n source: \"iana\",\n extensions: [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n source: \"iana\",\n extensions: [\"wmls\"]\n },\n \"text/vtt\": {\n source: \"iana\",\n charset: \"UTF-8\",\n compressible: true,\n extensions: [\"vtt\"]\n },\n \"text/x-asm\": {\n source: \"apache\",\n extensions: [\"s\", \"asm\"]\n },\n \"text/x-c\": {\n source: \"apache\",\n extensions: [\"c\", \"cc\", \"cxx\", \"cpp\", \"h\", \"hh\", \"dic\"]\n },\n \"text/x-component\": {\n source: \"nginx\",\n extensions: [\"htc\"]\n },\n \"text/x-fortran\": {\n source: \"apache\",\n extensions: [\"f\", \"for\", \"f77\", \"f90\"]\n },\n \"text/x-gwt-rpc\": {\n compressible: true\n },\n \"text/x-handlebars-template\": {\n extensions: [\"hbs\"]\n },\n \"text/x-java-source\": {\n source: \"apache\",\n extensions: [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n compressible: true\n },\n \"text/x-lua\": {\n extensions: [\"lua\"]\n },\n \"text/x-markdown\": {\n compressible: true,\n extensions: [\"mkd\"]\n },\n \"text/x-nfo\": {\n source: \"apache\",\n extensions: [\"nfo\"]\n },\n \"text/x-opml\": {\n source: \"apache\",\n extensions: [\"opml\"]\n },\n \"text/x-org\": {\n compressible: true,\n extensions: [\"org\"]\n },\n \"text/x-pascal\": {\n source: \"apache\",\n extensions: [\"p\", \"pas\"]\n },\n \"text/x-processing\": {\n compressible: true,\n extensions: [\"pde\"]\n },\n \"text/x-sass\": {\n extensions: [\"sass\"]\n },\n \"text/x-scss\": {\n extensions: [\"scss\"]\n },\n \"text/x-setext\": {\n source: \"apache\",\n extensions: [\"etx\"]\n },\n \"text/x-sfv\": {\n source: \"apache\",\n extensions: [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n compressible: true,\n extensions: [\"ymp\"]\n },\n \"text/x-uuencode\": {\n source: \"apache\",\n extensions: [\"uu\"]\n },\n \"text/x-vcalendar\": {\n source: \"apache\",\n extensions: [\"vcs\"]\n },\n \"text/x-vcard\": {\n source: \"apache\",\n extensions: [\"vcf\"]\n },\n \"text/xml\": {\n source: \"iana\",\n compressible: true,\n extensions: [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n source: \"iana\"\n },\n \"text/yaml\": {\n compressible: true,\n extensions: [\"yaml\", \"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n source: \"iana\"\n },\n \"video/3gpp\": {\n source: \"iana\",\n extensions: [\"3gp\", \"3gpp\"]\n },\n \"video/3gpp-tt\": {\n source: \"iana\"\n },\n \"video/3gpp2\": {\n source: \"iana\",\n extensions: [\"3g2\"]\n },\n \"video/av1\": {\n source: \"iana\"\n },\n \"video/bmpeg\": {\n source: \"iana\"\n },\n \"video/bt656\": {\n source: \"iana\"\n },\n \"video/celb\": {\n source: \"iana\"\n },\n \"video/dv\": {\n source: \"iana\"\n },\n \"video/encaprtp\": {\n source: \"iana\"\n },\n \"video/ffv1\": {\n source: \"iana\"\n },\n \"video/flexfec\": {\n source: \"iana\"\n },\n \"video/h261\": {\n source: \"iana\",\n extensions: [\"h261\"]\n },\n \"video/h263\": {\n source: \"iana\",\n extensions: [\"h263\"]\n },\n \"video/h263-1998\": {\n source: \"iana\"\n },\n \"video/h263-2000\": {\n source: \"iana\"\n },\n \"video/h264\": {\n source: \"iana\",\n extensions: [\"h264\"]\n },\n \"video/h264-rcdo\": {\n source: \"iana\"\n },\n \"video/h264-svc\": {\n source: \"iana\"\n },\n \"video/h265\": {\n source: \"iana\"\n },\n \"video/iso.segment\": {\n source: \"iana\",\n extensions: [\"m4s\"]\n },\n \"video/jpeg\": {\n source: \"iana\",\n extensions: [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n source: \"iana\"\n },\n \"video/jpm\": {\n source: \"apache\",\n extensions: [\"jpm\", \"jpgm\"]\n },\n \"video/jxsv\": {\n source: \"iana\"\n },\n \"video/mj2\": {\n source: \"iana\",\n extensions: [\"mj2\", \"mjp2\"]\n },\n \"video/mp1s\": {\n source: \"iana\"\n },\n \"video/mp2p\": {\n source: \"iana\"\n },\n \"video/mp2t\": {\n source: \"iana\",\n extensions: [\"ts\"]\n },\n \"video/mp4\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mp4\", \"mp4v\", \"mpg4\"]\n },\n \"video/mp4v-es\": {\n source: \"iana\"\n },\n \"video/mpeg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"]\n },\n \"video/mpeg4-generic\": {\n source: \"iana\"\n },\n \"video/mpv\": {\n source: \"iana\"\n },\n \"video/nv\": {\n source: \"iana\"\n },\n \"video/ogg\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"ogv\"]\n },\n \"video/parityfec\": {\n source: \"iana\"\n },\n \"video/pointer\": {\n source: \"iana\"\n },\n \"video/quicktime\": {\n source: \"iana\",\n compressible: false,\n extensions: [\"qt\", \"mov\"]\n },\n \"video/raptorfec\": {\n source: \"iana\"\n },\n \"video/raw\": {\n source: \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n source: \"iana\"\n },\n \"video/rtploopback\": {\n source: \"iana\"\n },\n \"video/rtx\": {\n source: \"iana\"\n },\n \"video/scip\": {\n source: \"iana\"\n },\n \"video/smpte291\": {\n source: \"iana\"\n },\n \"video/smpte292m\": {\n source: \"iana\"\n },\n \"video/ulpfec\": {\n source: \"iana\"\n },\n \"video/vc1\": {\n source: \"iana\"\n },\n \"video/vc2\": {\n source: \"iana\"\n },\n \"video/vnd.cctv\": {\n source: \"iana\"\n },\n \"video/vnd.dece.hd\": {\n source: \"iana\",\n extensions: [\"uvh\", \"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n source: \"iana\",\n extensions: [\"uvm\", \"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n source: \"iana\"\n },\n \"video/vnd.dece.pd\": {\n source: \"iana\",\n extensions: [\"uvp\", \"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n source: \"iana\",\n extensions: [\"uvs\", \"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n source: \"iana\",\n extensions: [\"uvv\", \"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n source: \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n source: \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n source: \"iana\"\n },\n \"video/vnd.dvb.file\": {\n source: \"iana\",\n extensions: [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n source: \"iana\",\n extensions: [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n source: \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n source: \"iana\"\n },\n \"video/vnd.motorola.video\": {\n source: \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n source: \"iana\"\n },\n \"video/vnd.mpegurl\": {\n source: \"iana\",\n extensions: [\"mxu\", \"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n source: \"iana\",\n extensions: [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n source: \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n source: \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n source: \"iana\"\n },\n \"video/vnd.objectvideo\": {\n source: \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n source: \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n source: \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n source: \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n source: \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n source: \"iana\",\n extensions: [\"uvu\", \"uvvu\"]\n },\n \"video/vnd.vivo\": {\n source: \"iana\",\n extensions: [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n source: \"iana\"\n },\n \"video/vp8\": {\n source: \"iana\"\n },\n \"video/vp9\": {\n source: \"iana\"\n },\n \"video/webm\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"webm\"]\n },\n \"video/x-f4v\": {\n source: \"apache\",\n extensions: [\"f4v\"]\n },\n \"video/x-fli\": {\n source: \"apache\",\n extensions: [\"fli\"]\n },\n \"video/x-flv\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"flv\"]\n },\n \"video/x-m4v\": {\n source: \"apache\",\n extensions: [\"m4v\"]\n },\n \"video/x-matroska\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"mkv\", \"mk3d\", \"mks\"]\n },\n \"video/x-mng\": {\n source: \"apache\",\n extensions: [\"mng\"]\n },\n \"video/x-ms-asf\": {\n source: \"apache\",\n extensions: [\"asf\", \"asx\"]\n },\n \"video/x-ms-vob\": {\n source: \"apache\",\n extensions: [\"vob\"]\n },\n \"video/x-ms-wm\": {\n source: \"apache\",\n extensions: [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n source: \"apache\",\n compressible: false,\n extensions: [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n source: \"apache\",\n extensions: [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n source: \"apache\",\n extensions: [\"wvx\"]\n },\n \"video/x-msvideo\": {\n source: \"apache\",\n extensions: [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n source: \"apache\",\n extensions: [\"movie\"]\n },\n \"video/x-smv\": {\n source: \"apache\",\n extensions: [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n source: \"apache\",\n extensions: [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n compressible: true\n },\n \"x-shader/x-vertex\": {\n compressible: true\n }\n };\n }\n});\n\n// node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js\nvar require_mime_db = __commonJS({\n \"node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js\"(exports, module2) {\n module2.exports = require_db();\n }\n});\n\n// src/lib/main.ts\nvar main_exports = {};\n__export(main_exports, {\n PreviewController: () => PreviewController,\n getExtension: () => getExtension,\n joinFilepath: () => joinFilepath,\n normalizeFilepath: () => normalizeFilepath\n});\nmodule.exports = __toCommonJS(main_exports);\n\n// src/preview/relay/constants.ts\nvar CHANNEL_NAME = \"$CSB_RELAY\";\n\n// src/lib/mime.ts\nvar import_mime_db = __toESM(require_mime_db());\nvar extensionMap = /* @__PURE__ */ new Map();\nvar entries = Object.entries(import_mime_db.default);\nfor (const [mimetype, entry] of entries) {\n const extensions = entry.extensions;\n if (extensions?.length) {\n for (const ext of extensions) {\n extensionMap.set(ext, mimetype);\n }\n }\n}\nvar EXTENSIONS_MAP = extensionMap;\n\n// src/lib/utils.ts\nvar counter = 0;\nfunction generateRandomId() {\n const now = Date.now();\n const randomNumber = Math.round(Math.random() * 1e4);\n const count = counter += 1;\n return (+`${now}${randomNumber}${count}`).toString(16);\n}\n\n// src/lib/main.ts\nfunction normalizeFilepath(filepath) {\n const split = filepath.split(\"/\").filter(Boolean);\n const normalized = split.join(\"/\");\n return \"/\" + normalized;\n}\nfunction joinFilepath(filepath, addition) {\n return normalizeFilepath(filepath + \"/\" + addition);\n}\nfunction getExtension(filepath) {\n const parts = filepath.split(\".\");\n if (parts.length <= 1) {\n return \"\";\n } else {\n const ext = parts[parts.length - 1];\n return ext;\n }\n}\nvar PreviewController = class {\n constructor(options) {\n this.initPromise = null;\n this.baseUrl = new URL(options.baseUrl);\n this.getFileContent = options.getFileContent;\n this.indexFiles = options.indexFiles ?? [\"index.html\", \"index.html\"];\n }\n async getIndexAtPath(filepath) {\n for (const index of this.indexFiles) {\n try {\n const content = await this.getFileContent(\n joinFilepath(filepath, index)\n );\n return content;\n } catch (err) {\n }\n }\n throw new Error(\"No index file not found\");\n }\n async handleWorkerRequest(request) {\n if (!this.initPromise) {\n throw new Error(\"Init promise is null\");\n }\n const [previewRoot, port] = await this.initPromise;\n try {\n const filepath = normalizeFilepath(\n new URL(request.url, previewRoot).pathname\n );\n let body = null;\n const headers = {};\n try {\n body = await this.getFileContent(filepath);\n } catch (err) {\n }\n if (body == null) {\n body = await this.getIndexAtPath(filepath);\n headers[\"Content-Type\"] = \"text/html; charset=utf-8\";\n }\n if (body == null) {\n throw new Error(\"File not found\");\n }\n if (!headers[\"Content-Type\"]) {\n const extension = getExtension(filepath);\n const foundMimetype = EXTENSIONS_MAP.get(extension);\n if (foundMimetype) {\n headers[\"Content-Type\"] = foundMimetype;\n }\n }\n const responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers,\n status: 200,\n body\n };\n port.postMessage(responseMessage);\n } catch (err) {\n const responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: {\n [\"Content-Type\"]: \"text/html; charset=utf-8\"\n },\n status: 404,\n body: \"File not found\"\n };\n port.postMessage(responseMessage);\n }\n }\n getRelayUrl(previewUrl) {\n const relayUrl = new URL(previewUrl);\n relayUrl.pathname = \"/__csb_relay/\";\n return relayUrl.toString();\n }\n async _initPreview() {\n const id = generateRandomId();\n const previewUrl = new URL(this.baseUrl);\n previewUrl.hostname = id + \"-\" + previewUrl.hostname;\n previewUrl.pathname = \"/\";\n const relayUrl = this.getRelayUrl(previewUrl.toString());\n const iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"src\", relayUrl.toString());\n iframe.style.display = \"none\";\n document.body.appendChild(iframe);\n const channel = new MessageChannel();\n const iframeContentWindow = iframe.contentWindow;\n if (!iframeContentWindow) {\n throw new Error(\"Could not get iframe contentWindow\");\n }\n return new Promise((resolve) => {\n const port = channel.port1;\n port.onmessage = (evt) => {\n if (typeof evt.data === \"object\" && evt.data.$channel === CHANNEL_NAME) {\n switch (evt.data.$type) {\n case \"preview/ready\":\n resolve([previewUrl.toString(), port, iframe]);\n break;\n case \"preview/request\":\n this.handleWorkerRequest(evt.data);\n break;\n }\n }\n };\n iframe.onload = () => {\n const initMsg = {\n $channel: CHANNEL_NAME,\n $type: \"preview/init\"\n };\n iframeContentWindow.postMessage(initMsg, \"*\", [channel.port2]);\n };\n });\n }\n /**\n * Initialize a preview and return the url at which the preview is being served\n **/\n initPreview() {\n if (!this.initPromise) {\n this.initPromise = this._initPreview();\n }\n return this.initPromise.then((v) => v[0]);\n }\n destroy() {\n if (this.initPromise) {\n const p = this.initPromise;\n p.then((val) => {\n val[1].close();\n const url = this.getRelayUrl(val[0]);\n const foundElements = document.body.querySelectorAll(`src=\"${url}\"`);\n foundElements.forEach((el) => el.remove());\n });\n this.initPromise = null;\n }\n }\n};\n/*! Bundled license information:\n\nmime-db/index.js:\n (*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n *)\n*/\n","import { g as __extends, _ as __awaiter, a as __generator } from './utils-52664384.mjs';\nimport { PreviewController } from 'static-browser-server';\nimport { E as EventEmitter, c as consoleHook, g as generateRandomId, f as fromBundlerFilesToFS } from './consoleHook-59e792cb.mjs';\nimport { S as SandpackClient } from './base-80a1f760.mjs';\nimport 'outvariant';\nimport 'dequal';\n\nvar insertHtmlAfterRegex = function (regex, content, insertable) {\n var match = regex.exec(content);\n if (match && match.length >= 1) {\n var offset = match.index + match[0].length;\n var prefix = content.substring(0, offset);\n var suffix = content.substring(offset);\n return prefix + insertable + suffix;\n }\n};\nvar readBuffer = function (content) {\n if (typeof content === \"string\") {\n return content;\n }\n else {\n return new TextDecoder().decode(content);\n }\n};\nvar validateHtml = function (content) {\n // Make it a string\n var contentString = readBuffer(content);\n var domParser = new DOMParser();\n var doc = domParser.parseFromString(contentString, \"text/html\");\n if (!doc.documentElement.getAttribute(\"lang\")) {\n doc.documentElement.setAttribute(\"lang\", \"en\");\n }\n var html = doc.documentElement.outerHTML;\n return \"\\n\".concat(html);\n};\n\nvar SandpackStatic = /** @class */ (function (_super) {\n __extends(SandpackStatic, _super);\n function SandpackStatic(selector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n var _a;\n var _this = _super.call(this, selector, sandboxSetup, options) || this;\n _this.files = new Map();\n _this.status = \"initializing\";\n _this.emitter = new EventEmitter();\n _this.previewController = new PreviewController({\n baseUrl: (_a = options.bundlerURL) !== null && _a !== void 0 ? _a : \"https://preview.sandpack-static-server.codesandbox.io\",\n // filepath is always normalized to start with / and not end with a slash\n getFileContent: function (filepath) {\n var content = _this.files.get(filepath);\n if (!content) {\n throw new Error(\"File not found\");\n }\n if (filepath.endsWith(\".html\") || filepath.endsWith(\".htm\")) {\n try {\n content = validateHtml(content);\n content = _this.injectProtocolScript(content);\n content = _this.injectExternalResources(content, options.externalResources);\n content = _this.injectScriptIntoHead(content, {\n script: consoleHook,\n scope: { channelId: generateRandomId() },\n });\n }\n catch (err) {\n console.error(\"Runtime injection failed\", err);\n }\n }\n return content;\n },\n });\n if (typeof selector === \"string\") {\n _this.selector = selector;\n var element = document.querySelector(selector);\n _this.element = element;\n _this.iframe = document.createElement(\"iframe\");\n }\n else {\n _this.element = selector;\n _this.iframe = selector;\n }\n if (!_this.iframe.getAttribute(\"sandbox\")) {\n _this.iframe.setAttribute(\"sandbox\", \"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-downloads allow-pointer-lock\");\n _this.iframe.setAttribute(\"allow\", \"accelerometer; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; clipboard-read; clipboard-write; xr-spatial-tracking;\");\n }\n _this.eventListener = _this.eventListener.bind(_this);\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", _this.eventListener);\n }\n // Dispatch very first compile action\n _this.updateSandbox();\n return _this;\n }\n SandpackStatic.prototype.injectContentIntoHead = function (content, contentToInsert) {\n var _a;\n // Make it a string\n content = readBuffer(content);\n // Inject script\n content =\n (_a = insertHtmlAfterRegex(/]*>/g, content, \"\\n\" + contentToInsert)) !== null && _a !== void 0 ? _a : contentToInsert + \"\\n\" + content;\n return content;\n };\n SandpackStatic.prototype.injectProtocolScript = function (content) {\n var scriptToInsert = \"\";\n return this.injectContentIntoHead(content, scriptToInsert);\n };\n SandpackStatic.prototype.injectExternalResources = function (content, externalResources) {\n if (externalResources === void 0) { externalResources = []; }\n var tagsToInsert = externalResources\n .map(function (resource) {\n var match = resource.match(/\\.([^.]*)$/);\n var fileType = match === null || match === void 0 ? void 0 : match[1];\n if (fileType === \"css\" || resource.includes(\"fonts.googleapis\")) {\n return \"\");\n }\n if (fileType === \"js\") {\n return \"\");\n }\n throw new Error(\"Unable to determine file type for external resource: \".concat(resource));\n })\n .join(\"\\n\");\n return this.injectContentIntoHead(content, tagsToInsert);\n };\n SandpackStatic.prototype.injectScriptIntoHead = function (content, opts) {\n var script = opts.script, _a = opts.scope, scope = _a === void 0 ? {} : _a;\n var scriptToInsert = \"\\n \\n \").trim();\n return this.injectContentIntoHead(content, scriptToInsert);\n };\n SandpackStatic.prototype.updateSandbox = function (setup, _isInitializationCompile) {\n if (setup === void 0) { setup = this.sandboxSetup; }\n var modules = fromBundlerFilesToFS(setup.files);\n /**\n * Pass init files to the bundler\n */\n this.dispatch({\n codesandbox: true,\n modules: modules,\n template: setup.template,\n type: \"compile\",\n });\n };\n SandpackStatic.prototype.compile = function (files) {\n return __awaiter(this, void 0, void 0, function () {\n var previewUrl;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.files = new Map(Object.entries(files));\n return [4 /*yield*/, this.previewController.initPreview()];\n case 1:\n previewUrl = _a.sent();\n this.iframe.setAttribute(\"src\", previewUrl);\n this.status = \"done\";\n this.dispatch({ type: \"done\", compilatonError: false });\n this.dispatch({\n type: \"urlchange\",\n url: previewUrl,\n back: false,\n forward: false,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n // Handles message windows coming from iframes\n SandpackStatic.prototype.eventListener = function (evt) {\n // skip events originating from different iframes\n if (evt.source !== this.iframe.contentWindow) {\n return;\n }\n var message = evt.data;\n if (!message.codesandbox) {\n return;\n }\n this.dispatch(message);\n };\n /**\n * Bundler communication\n */\n SandpackStatic.prototype.dispatch = function (message) {\n var _a;\n switch (message.type) {\n case \"compile\":\n this.compile(message.modules);\n break;\n default:\n (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, \"*\");\n this.emitter.dispatch(message);\n }\n };\n SandpackStatic.prototype.listen = function (listener) {\n return this.emitter.listener(listener);\n };\n SandpackStatic.prototype.destroy = function () {\n this.emitter.cleanup();\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"message\", this.eventListener);\n }\n };\n return SandpackStatic;\n}(SandpackClient));\n\nexport { SandpackStatic };\n"],"names":["__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJS","cb","mod","__export","target","all","name","__copyProps","to","from","except","desc","key","__toESM","isNodeMode","__toCommonJS","require_db","exports","module2","require_mime_db","main_exports","PreviewController","getExtension","joinFilepath","normalizeFilepath","main","CHANNEL_NAME","import_mime_db","extensionMap","entries","mimetype","entry","extensions","ext","EXTENSIONS_MAP","counter","generateRandomId","now","randomNumber","count","filepath","addition","parts","options","index","request","previewRoot","port","body","headers","extension","foundMimetype","responseMessage","previewUrl","relayUrl","id","iframe","channel","iframeContentWindow","resolve","evt","initMsg","v","val","url","el","insertHtmlAfterRegex","regex","content","insertable","match","offset","prefix","suffix","readBuffer","validateHtml","contentString","domParser","doc","html","SandpackStatic","_super","__extends","selector","sandboxSetup","_a","_this","EventEmitter","consoleHook","err","element","contentToInsert","scriptToInsert","externalResources","tagsToInsert","resource","fileType","opts","script","scope","setup","_isInitializationCompile","modules","fromBundlerFilesToFS","files","__awaiter","__generator","message","listener","SandpackClient"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/index-DWtymVMa.js b/massgen/frontend/web/static/assets/index-B6KXrLmj.js similarity index 99% rename from massgen/frontend/web/static/assets/index-DWtymVMa.js rename to massgen/frontend/web/static/assets/index-B6KXrLmj.js index db7dad40d..4d39674a7 100644 --- a/massgen/frontend/web/static/assets/index-DWtymVMa.js +++ b/massgen/frontend/web/static/assets/index-B6KXrLmj.js @@ -1,7 +1,7 @@ -import{aK as C,aD as E,aE as z,aF as q,at as M,aG as x,aL as D,ar as W,aM as P,aN as N,aH as F,aO as g,aP as A}from"./index-yx4Z55Qu.js";import{S as $}from"./base-80a1f760-Byw-bEXF.js";const B={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/ace+json":{source:"iana",compressible:!0},"application/ace-groupcomm+cbor":{source:"iana"},"application/ace-trl+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/aif+cbor":{source:"iana"},"application/aif+json":{source:"iana",compressible:!0},"application/alto-cdni+json":{source:"iana",compressible:!0},"application/alto-cdnifilter+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-propmap+json":{source:"iana",compressible:!0},"application/alto-propmapparams+json":{source:"iana",compressible:!0},"application/alto-tips+json":{source:"iana",compressible:!0},"application/alto-tipsparams+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/appinstaller":{compressible:!1,extensions:["appinstaller"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/appx":{compressible:!1,extensions:["appx"]},"application/appxbundle":{compressible:!1,extensions:["appxbundle"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/automationml-aml+xml":{source:"iana",compressible:!0,extensions:["aml"]},"application/automationml-amlx+zip":{source:"iana",compressible:!1,extensions:["amlx"]},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/bufr":{source:"iana"},"application/c2pa":{source:"iana"},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/ce+cbor":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/cid-edhoc+cbor-seq":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/city+json-seq":{source:"iana"},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-eap":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/concise-problem-details+cbor":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cose-x509":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwl":{source:"iana",extensions:["cwl"]},"application/cwl+json":{source:"iana",compressible:!0},"application/cwl+yaml":{source:"iana"},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana",extensions:["dcm"]},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dpop+jwt":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/eat+cwt":{source:"iana"},"application/eat+jwt":{source:"iana"},"application/eat-bun+cbor":{source:"iana"},"application/eat-bun+json":{source:"iana",compressible:!0},"application/eat-ucs+cbor":{source:"iana"},"application/eat-ucs+json":{source:"iana",compressible:!0},"application/ecmascript":{source:"apache",compressible:!0,extensions:["ecma"]},"application/edhoc+cbor-seq":{source:"iana"},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.legacyesn+json":{source:"iana",compressible:!0},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/entity-statement+jwt":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdf":{source:"iana",extensions:["fdf"]},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geopose+json":{source:"iana",compressible:!0},"application/geoxacml+json":{source:"iana",compressible:!0},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gnap-binding-jws":{source:"iana"},"application/gnap-binding-jwsd":{source:"iana"},"application/gnap-binding-rotation-jws":{source:"iana"},"application/gnap-binding-rotation-jwsd":{source:"iana"},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/grib":{source:"iana"},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"iana",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"apache",charset:"UTF-8",compressible:!0,extensions:["js"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/jscontact+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jsonpath":{source:"iana"},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwk-set+jwt":{source:"iana"},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/linkset":{source:"iana"},"application/linkset+json":{source:"iana",compressible:!0},"application/load-control+xml":{source:"iana",compressible:!0},"application/logout+jwt":{source:"iana"},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4","mpg4","mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msix":{compressible:!1,extensions:["msix"]},"application/msixbundle":{compressible:!1,extensions:["msixbundle"]},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!0,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/ohttp-keys":{source:"iana"},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["sig","asc"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/private-token-issuer-directory":{source:"iana"},"application/private-token-request":{source:"iana"},"application/private-token-response":{source:"iana"},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/provided-claims+jwt":{source:"iana"},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.implied-document+xml":{source:"iana",compressible:!0},"application/prs.implied-executable":{source:"iana"},"application/prs.implied-object+json":{source:"iana",compressible:!0},"application/prs.implied-object+json-seq":{source:"iana"},"application/prs.implied-object+yaml":{source:"iana"},"application/prs.implied-structure":{source:"iana"},"application/prs.mayfile":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.vcfbzip2":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0,extensions:["xsf"]},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"apache"},"application/reputon+json":{source:"iana",compressible:!0},"application/resolve-response+jwt":{source:"iana"},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-checklist":{source:"iana"},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-signed-tal":{source:"iana"},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"apache"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana",extensions:["sql"]},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/sslkeylogfile":{source:"iana"},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/st2110-41":{source:"iana"},"application/stix+json":{source:"iana",compressible:!0},"application/stratum":{source:"iana"},"application/swid+cbor":{source:"iana"},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tm+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/toc+cbor":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{source:"iana",compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/trust-chain+json":{source:"iana",compressible:!0},"application/trust-mark+jwt":{source:"iana"},"application/trust-mark-delegation+jwt":{source:"iana"},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/uccs+cbor":{source:"iana"},"application/ujcs+json":{source:"iana",compressible:!0},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vc":{source:"iana"},"application/vc+cose":{source:"iana"},"application/vc+jwt":{source:"iana"},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.1ob":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3a+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ach+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc8+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.5gsa2x":{source:"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gsv2x":{source:"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.crs+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.current-location-discovery+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.pinapp-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.seal-group-doc+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-network-qos-management-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-ue-config-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-unicast-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-user-profile-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.v2x":{source:"iana"},"application/vnd.3gpp.vae-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acm.addressxfer+json":{source:"iana",compressible:!0},"application/vnd.acm.chatbot+json":{source:"iana",compressible:!0},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"apache",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"apache"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.parquet":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.apexlang":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"apache"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autodesk.fbx":{extensions:["fbx"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.belightsoft.lhzd+zip":{source:"iana",compressible:!1},"application/vnd.belightsoft.lhzl+zip":{source:"iana",compressible:!1},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.bzip3":{source:"iana"},"application/vnd.c3voc.schedule+xml":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.cncf.helm.chart.content.v1.tar+gzip":{source:"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{source:"iana"},"application/vnd.cncf.helm.config.v1+json":{source:"iana",compressible:!0},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datalog":{source:"iana"},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.dcmp+xml":{source:"iana",compressible:!0,extensions:["dcmp"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.eln+zip":{source:"iana",compressible:!1},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.erofs":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"apache",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{source:"iana",charset:"XML-BASED",compressible:!0},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.freelog.comic":{source:"iana"},"application/vnd.frogans.fnc":{source:"apache",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"apache",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.ga4gh.passport+jwt":{source:"iana"},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.genozip":{source:"iana"},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.gentoo.catmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.ebuild":{source:"iana"},"application/vnd.gentoo.eclass":{source:"iana"},"application/vnd.gentoo.gpkg":{source:"iana"},"application/vnd.gentoo.manifest":{source:"iana"},"application/vnd.gentoo.pkgmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.xpak":{source:"iana"},"application/vnd.geo+json":{source:"apache",compressible:!0},"application/vnd.geocube+xml":{source:"apache",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.pinboard":{source:"iana"},"application/vnd.geogebra.slides":{source:"iana",extensions:["ggs"]},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.gnu.taler.exchange+json":{source:"iana",compressible:!0},"application/vnd.gnu.taler.merchant+json":{source:"iana",compressible:!0},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.drawing":{compressible:!1,extensions:["gdraw"]},"application/vnd.google-apps.drive-sdk":{compressible:!1},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{compressible:!1},"application/vnd.google-apps.form":{compressible:!1,extensions:["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{compressible:!1,extensions:["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{compressible:!1,extensions:["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.script":{compressible:!1,extensions:["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{compressible:!1,extensions:["gsite"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"apache",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0,extensions:["xdcf"]},"application/vnd.gpxsee.map+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.hsl":{source:"iana"},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"apache"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"apache",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"apache"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.ipfs.ipns-record":{source:"iana"},"application/vnd.ipld.car":{source:"iana"},"application/vnd.ipld.dag-cbor":{source:"iana"},"application/vnd.ipld.dag-json":{source:"iana"},"application/vnd.ipld.raw":{source:"iana"},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kdl":{source:"iana"},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.keyman.kmp+zip":{source:"iana",compressible:!1},"application/vnd.keyman.kmx":{source:"iana"},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.ldev.productlicensing":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.mdl":{source:"iana"},"application/vnd.mdl-mbsdf":{source:"iana"},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.medicalholodeck.recordxr":{source:"iana"},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mermaid":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.modl":{source:"iana"},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-visio.viewer":{extensions:["vdx"]},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msgpack":{source:"iana"},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+cbor":{source:"iana"},"application/vnd.nato.bindingdataobject+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+xml":{source:"iana",compressible:!0,extensions:["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{source:"iana",compressible:!1},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"apache",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oai.workflows":{source:"iana"},"application/vnd.oai.workflows+json":{source:"iana",compressible:!0},"application/vnd.oai.workflows+yaml":{source:"iana"},"application/vnd.oasis.opendocument.base":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"apache",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-master-template":{source:"iana"},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.onvif.metadata":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openvpi.dspx+json":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.procrate.brushset":{extensions:["brushset"]},"application/vnd.procreate.brush":{extensions:["brush"]},"application/vnd.procreate.dream":{extensions:["drm"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.pt.mundusmundi":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0,extensions:["xhtm"]},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.relpipe":{source:"iana"},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.sketchometry":{source:"iana"},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.smintio.portals.archive":{source:"iana"},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sybyl.mol2":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uic.osdm+json":{source:"iana",compressible:!0},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml","uo"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.veraison.tsm-report+cbor":{source:"iana"},"application/vnd.veraison.tsm-report+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw","vsdx","vtx"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vocalshaper.vsp4":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.wasmflow.wafl":{source:"iana"},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordlift":{source:"iana"},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xarin.cpj":{source:"iana"},"application/vnd.xecrets-encrypted":{source:"iana"},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/voucher-jws+json":{source:"iana",compressible:!0},"application/vp":{source:"iana"},"application/vp+cose":{source:"iana"},"application/vp+jwt":{source:"iana"},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blender":{extensions:["blend"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-compressed":{extensions:["rar"]},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-ipynb+json":{compressible:!0,extensions:["ipynb"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zip-compressed":{extensions:["zip"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xfdf":{source:"iana",extensions:["xfdf"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yaml":{source:"iana"},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+cbor":{source:"iana"},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yang-sid+json":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zip+dotlottie":{extensions:["lottie"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana",extensions:["adts","aac"]},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flac":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/matroska":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/midi-clip":{source:"iana"},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a","m4b"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"apache"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{source:"iana",compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp","dib"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/dpx":{source:"iana",extensions:["dpx"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/j2c":{source:"iana"},"image/jaii":{source:"iana",extensions:["jaii"]},"image/jais":{source:"iana",extensions:["jais"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpg","jpeg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm","jpgm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxl":{source:"iana",extensions:["jxl"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1,extensions:["jfif"]},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif","btf"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.clip":{source:"iana"},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"iana",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-adobe-dng":{extensions:["dng"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-emf":{source:"iana"},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-wmf":{source:"iana"},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/bhttp":{source:"iana"},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/mls":{source:"iana"},"message/news":{source:"apache"},"message/ohttp-req":{source:"iana"},"message/ohttp-res":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime","mht","mhtml"]},"message/s-http":{source:"apache"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"apache"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/jt":{source:"iana",extensions:["jt"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/prc":{source:"iana",extensions:["prc"]},"model/step":{source:"iana",extensions:["step","stp","stpnc","p21","210"]},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/u3d":{source:"iana",extensions:["u3d"]},"model/vnd.bary":{source:"iana",extensions:["bary"]},"model/vnd.cld":{source:"iana",extensions:["cld"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana",extensions:["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usda":{source:"iana",extensions:["usda"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"apache"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/hl7v2":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["md","markdown"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/prs.texi":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.exchangeable":{source:"iana"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"apache"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.vcf":{source:"iana"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vnd.zoo.kcl":{source:"iana"},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/wgsl":{source:"iana",extensions:["wgsl"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/evc":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/h266":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/lottie+json":{source:"iana",compressible:!0},"video/matroska":{source:"iana"},"video/matroska-3d":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts","m2t","m2ts","mts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.planar":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"apache"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}};/*! +import{aK as C,aD as E,aE as z,aF as q,at as M,aG as x,aL as D,ar as W,aM as P,aN as N,aH as F,aO as g,aP as A}from"./index-DbSnkTMx.js";import{S as $}from"./base-80a1f760-CNB8plsN.js";const B={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/ace+json":{source:"iana",compressible:!0},"application/ace-groupcomm+cbor":{source:"iana"},"application/ace-trl+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/aif+cbor":{source:"iana"},"application/aif+json":{source:"iana",compressible:!0},"application/alto-cdni+json":{source:"iana",compressible:!0},"application/alto-cdnifilter+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-propmap+json":{source:"iana",compressible:!0},"application/alto-propmapparams+json":{source:"iana",compressible:!0},"application/alto-tips+json":{source:"iana",compressible:!0},"application/alto-tipsparams+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/appinstaller":{compressible:!1,extensions:["appinstaller"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/appx":{compressible:!1,extensions:["appx"]},"application/appxbundle":{compressible:!1,extensions:["appxbundle"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/automationml-aml+xml":{source:"iana",compressible:!0,extensions:["aml"]},"application/automationml-amlx+zip":{source:"iana",compressible:!1,extensions:["amlx"]},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/bufr":{source:"iana"},"application/c2pa":{source:"iana"},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/ce+cbor":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/cid-edhoc+cbor-seq":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/city+json-seq":{source:"iana"},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-eap":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/concise-problem-details+cbor":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cose-x509":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwl":{source:"iana",extensions:["cwl"]},"application/cwl+json":{source:"iana",compressible:!0},"application/cwl+yaml":{source:"iana"},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana",extensions:["dcm"]},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dpop+jwt":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/eat+cwt":{source:"iana"},"application/eat+jwt":{source:"iana"},"application/eat-bun+cbor":{source:"iana"},"application/eat-bun+json":{source:"iana",compressible:!0},"application/eat-ucs+cbor":{source:"iana"},"application/eat-ucs+json":{source:"iana",compressible:!0},"application/ecmascript":{source:"apache",compressible:!0,extensions:["ecma"]},"application/edhoc+cbor-seq":{source:"iana"},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.legacyesn+json":{source:"iana",compressible:!0},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/entity-statement+jwt":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdf":{source:"iana",extensions:["fdf"]},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geopose+json":{source:"iana",compressible:!0},"application/geoxacml+json":{source:"iana",compressible:!0},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gnap-binding-jws":{source:"iana"},"application/gnap-binding-jwsd":{source:"iana"},"application/gnap-binding-rotation-jws":{source:"iana"},"application/gnap-binding-rotation-jwsd":{source:"iana"},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/grib":{source:"iana"},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"iana",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"apache",charset:"UTF-8",compressible:!0,extensions:["js"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/jscontact+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jsonpath":{source:"iana"},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwk-set+jwt":{source:"iana"},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/linkset":{source:"iana"},"application/linkset+json":{source:"iana",compressible:!0},"application/load-control+xml":{source:"iana",compressible:!0},"application/logout+jwt":{source:"iana"},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4","mpg4","mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msix":{compressible:!1,extensions:["msix"]},"application/msixbundle":{compressible:!1,extensions:["msixbundle"]},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!0,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/ohttp-keys":{source:"iana"},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["sig","asc"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/private-token-issuer-directory":{source:"iana"},"application/private-token-request":{source:"iana"},"application/private-token-response":{source:"iana"},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/provided-claims+jwt":{source:"iana"},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.implied-document+xml":{source:"iana",compressible:!0},"application/prs.implied-executable":{source:"iana"},"application/prs.implied-object+json":{source:"iana",compressible:!0},"application/prs.implied-object+json-seq":{source:"iana"},"application/prs.implied-object+yaml":{source:"iana"},"application/prs.implied-structure":{source:"iana"},"application/prs.mayfile":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.vcfbzip2":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0,extensions:["xsf"]},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"apache"},"application/reputon+json":{source:"iana",compressible:!0},"application/resolve-response+jwt":{source:"iana"},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-checklist":{source:"iana"},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-signed-tal":{source:"iana"},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"apache"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana",extensions:["sql"]},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/sslkeylogfile":{source:"iana"},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/st2110-41":{source:"iana"},"application/stix+json":{source:"iana",compressible:!0},"application/stratum":{source:"iana"},"application/swid+cbor":{source:"iana"},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tm+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/toc+cbor":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{source:"iana",compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/trust-chain+json":{source:"iana",compressible:!0},"application/trust-mark+jwt":{source:"iana"},"application/trust-mark-delegation+jwt":{source:"iana"},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/uccs+cbor":{source:"iana"},"application/ujcs+json":{source:"iana",compressible:!0},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vc":{source:"iana"},"application/vc+cose":{source:"iana"},"application/vc+jwt":{source:"iana"},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.1ob":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3a+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ach+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc8+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.5gsa2x":{source:"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gsv2x":{source:"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.crs+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.current-location-discovery+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.pinapp-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.seal-group-doc+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-network-qos-management-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-ue-config-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-unicast-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-user-profile-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.v2x":{source:"iana"},"application/vnd.3gpp.vae-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acm.addressxfer+json":{source:"iana",compressible:!0},"application/vnd.acm.chatbot+json":{source:"iana",compressible:!0},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"apache",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"apache"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.parquet":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.apexlang":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"apache"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autodesk.fbx":{extensions:["fbx"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.belightsoft.lhzd+zip":{source:"iana",compressible:!1},"application/vnd.belightsoft.lhzl+zip":{source:"iana",compressible:!1},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.bzip3":{source:"iana"},"application/vnd.c3voc.schedule+xml":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.cncf.helm.chart.content.v1.tar+gzip":{source:"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{source:"iana"},"application/vnd.cncf.helm.config.v1+json":{source:"iana",compressible:!0},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datalog":{source:"iana"},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.dcmp+xml":{source:"iana",compressible:!0,extensions:["dcmp"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.eln+zip":{source:"iana",compressible:!1},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.erofs":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"apache",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{source:"iana",charset:"XML-BASED",compressible:!0},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.freelog.comic":{source:"iana"},"application/vnd.frogans.fnc":{source:"apache",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"apache",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.ga4gh.passport+jwt":{source:"iana"},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.genozip":{source:"iana"},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.gentoo.catmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.ebuild":{source:"iana"},"application/vnd.gentoo.eclass":{source:"iana"},"application/vnd.gentoo.gpkg":{source:"iana"},"application/vnd.gentoo.manifest":{source:"iana"},"application/vnd.gentoo.pkgmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.xpak":{source:"iana"},"application/vnd.geo+json":{source:"apache",compressible:!0},"application/vnd.geocube+xml":{source:"apache",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.pinboard":{source:"iana"},"application/vnd.geogebra.slides":{source:"iana",extensions:["ggs"]},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.gnu.taler.exchange+json":{source:"iana",compressible:!0},"application/vnd.gnu.taler.merchant+json":{source:"iana",compressible:!0},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.drawing":{compressible:!1,extensions:["gdraw"]},"application/vnd.google-apps.drive-sdk":{compressible:!1},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{compressible:!1},"application/vnd.google-apps.form":{compressible:!1,extensions:["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{compressible:!1,extensions:["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{compressible:!1,extensions:["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.script":{compressible:!1,extensions:["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{compressible:!1,extensions:["gsite"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"apache",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0,extensions:["xdcf"]},"application/vnd.gpxsee.map+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.hsl":{source:"iana"},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"apache"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"apache",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"apache"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.ipfs.ipns-record":{source:"iana"},"application/vnd.ipld.car":{source:"iana"},"application/vnd.ipld.dag-cbor":{source:"iana"},"application/vnd.ipld.dag-json":{source:"iana"},"application/vnd.ipld.raw":{source:"iana"},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kdl":{source:"iana"},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.keyman.kmp+zip":{source:"iana",compressible:!1},"application/vnd.keyman.kmx":{source:"iana"},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.ldev.productlicensing":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.mdl":{source:"iana"},"application/vnd.mdl-mbsdf":{source:"iana"},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.medicalholodeck.recordxr":{source:"iana"},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mermaid":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.modl":{source:"iana"},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-visio.viewer":{extensions:["vdx"]},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msgpack":{source:"iana"},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+cbor":{source:"iana"},"application/vnd.nato.bindingdataobject+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+xml":{source:"iana",compressible:!0,extensions:["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{source:"iana",compressible:!1},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"apache",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oai.workflows":{source:"iana"},"application/vnd.oai.workflows+json":{source:"iana",compressible:!0},"application/vnd.oai.workflows+yaml":{source:"iana"},"application/vnd.oasis.opendocument.base":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"apache",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-master-template":{source:"iana"},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.onvif.metadata":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openvpi.dspx+json":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.procrate.brushset":{extensions:["brushset"]},"application/vnd.procreate.brush":{extensions:["brush"]},"application/vnd.procreate.dream":{extensions:["drm"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.pt.mundusmundi":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0,extensions:["xhtm"]},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.relpipe":{source:"iana"},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.sketchometry":{source:"iana"},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.smintio.portals.archive":{source:"iana"},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sybyl.mol2":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uic.osdm+json":{source:"iana",compressible:!0},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml","uo"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.veraison.tsm-report+cbor":{source:"iana"},"application/vnd.veraison.tsm-report+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw","vsdx","vtx"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vocalshaper.vsp4":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.wasmflow.wafl":{source:"iana"},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordlift":{source:"iana"},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xarin.cpj":{source:"iana"},"application/vnd.xecrets-encrypted":{source:"iana"},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/voucher-jws+json":{source:"iana",compressible:!0},"application/vp":{source:"iana"},"application/vp+cose":{source:"iana"},"application/vp+jwt":{source:"iana"},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blender":{extensions:["blend"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-compressed":{extensions:["rar"]},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-ipynb+json":{compressible:!0,extensions:["ipynb"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zip-compressed":{extensions:["zip"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xfdf":{source:"iana",extensions:["xfdf"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yaml":{source:"iana"},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+cbor":{source:"iana"},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yang-sid+json":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zip+dotlottie":{extensions:["lottie"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana",extensions:["adts","aac"]},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flac":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/matroska":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/midi-clip":{source:"iana"},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a","m4b"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"apache"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{source:"iana",compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp","dib"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/dpx":{source:"iana",extensions:["dpx"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/j2c":{source:"iana"},"image/jaii":{source:"iana",extensions:["jaii"]},"image/jais":{source:"iana",extensions:["jais"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpg","jpeg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm","jpgm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxl":{source:"iana",extensions:["jxl"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1,extensions:["jfif"]},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif","btf"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.clip":{source:"iana"},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"iana",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-adobe-dng":{extensions:["dng"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-emf":{source:"iana"},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-wmf":{source:"iana"},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/bhttp":{source:"iana"},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/mls":{source:"iana"},"message/news":{source:"apache"},"message/ohttp-req":{source:"iana"},"message/ohttp-res":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime","mht","mhtml"]},"message/s-http":{source:"apache"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"apache"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/jt":{source:"iana",extensions:["jt"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/prc":{source:"iana",extensions:["prc"]},"model/step":{source:"iana",extensions:["step","stp","stpnc","p21","210"]},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/u3d":{source:"iana",extensions:["u3d"]},"model/vnd.bary":{source:"iana",extensions:["bary"]},"model/vnd.cld":{source:"iana",extensions:["cld"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana",extensions:["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usda":{source:"iana",extensions:["usda"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"apache"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/hl7v2":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["md","markdown"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/prs.texi":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.exchangeable":{source:"iana"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"apache"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.vcf":{source:"iana"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vnd.zoo.kcl":{source:"iana"},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/wgsl":{source:"iana",extensions:["wgsl"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/evc":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/h266":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/lottie+json":{source:"iana",compressible:!0},"video/matroska":{source:"iana"},"video/matroska-3d":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts","m2t","m2ts","mts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.planar":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"apache"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}};/*! * mime-db * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */var w,U;function H(){return U||(U=1,w=B),w}var J=H();const X=C(J);var G=(function(){function r(o,e,n){var s=this;this.type=o,this.handleMessage=e,this.protocol=n,this._disposeMessageListener=this.protocol.channelListen(function(a){return z(s,void 0,void 0,function(){var i,c,l,p,l;return q(this,function(u){switch(u.label){case 0:if(!(a.type===this.getTypeId()&&a.method))return[3,4];i=a,u.label=1;case 1:return u.trys.push([1,3,,4]),[4,this.handleMessage(i)];case 2:return c=u.sent(),l={type:this.getTypeId(),msgId:i.msgId,result:c},this.protocol.dispatch(l),[3,4];case 3:return p=u.sent(),l={type:this.getTypeId(),msgId:i.msgId,error:{message:p.message}},this.protocol.dispatch(l),[3,4];case 4:return[2]}})})})}return r.prototype.getTypeId=function(){return"protocol-".concat(this.type)},r.prototype.dispose=function(){this._disposeMessageListener()},r})(),Y=(function(){function r(o,e){this.globalListeners={},this.globalListenersCount=0,this.channelListeners={},this.channelListenersCount=0,this.channelId=Math.floor(Math.random()*1e6),this.frameWindow=o.contentWindow,this.origin=e,this.globalListeners=[],this.channelListeners=[],this.eventListener=this.eventListener.bind(this),typeof window<"u"&&window.addEventListener("message",this.eventListener)}return r.prototype.cleanup=function(){window.removeEventListener("message",this.eventListener),this.globalListeners={},this.channelListeners={},this.globalListenersCount=0,this.channelListenersCount=0},r.prototype.register=function(){this.frameWindow&&this.frameWindow.postMessage({type:"register-frame",origin:document.location.origin,id:this.channelId},this.origin)},r.prototype.dispatch=function(o){this.frameWindow&&this.frameWindow.postMessage(x({$id:this.channelId,codesandbox:!0},o),this.origin)},r.prototype.globalListen=function(o){var e=this;if(typeof o!="function")return function(){};var n=this.globalListenersCount;return this.globalListeners[n]=o,this.globalListenersCount++,function(){delete e.globalListeners[n]}},r.prototype.channelListen=function(o){var e=this;if(typeof o!="function")return function(){};var n=this.channelListenersCount;return this.channelListeners[n]=o,this.channelListenersCount++,function(){delete e.channelListeners[n]}},r.prototype.eventListener=function(o){if(o.source===this.frameWindow){var e=o.data;e.codesandbox&&(Object.values(this.globalListeners).forEach(function(n){return n(e)}),e.$id===this.channelId&&Object.values(this.channelListeners).forEach(function(n){return n(e)}))}},r})(),R=new Map,K=Object.entries(X);for(var k=0,T=K;k-1}))return"adonis";var l=["nuxt","nuxt-edge","nuxt-ts","nuxt-ts-edge","nuxt3"];if(i.some(function(t){return l.indexOf(t)>-1}))return"nuxt";if(i.indexOf("next")>-1)return"next";var u=["apollo-server","apollo-server-express","apollo-server-hapi","apollo-server-koa","apollo-server-lambda","apollo-server-micro"];if(i.some(function(t){return u.indexOf(t)>-1}))return"apollo";if(i.indexOf("mdx-deck")>-1)return"mdx-deck";if(i.indexOf("gridsome")>-1)return"gridsome";if(i.indexOf("vuepress")>-1)return"vuepress";if(i.indexOf("ember-cli")>-1)return"ember";if(i.indexOf("sapper")>-1)return"sapper";if(i.indexOf("gatsby")>-1)return"gatsby";if(i.indexOf("quasar")>-1)return"quasar";if(i.indexOf("@docusaurus/core")>-1)return"docusaurus";if(i.indexOf("remix")>-1)return"remix";if(i.indexOf("astro")>-1)return"node";if(c.some(function(t){return t.endsWith(".re")}))return"reason";var v=["parcel-bundler","parcel"];if(i.some(function(t){return v.indexOf(t)>-1}))return"parcel";var d=["@dojo/core","@dojo/framework"];if(i.some(function(t){return d.indexOf(t)>-1}))return"@dojo/cli-create-app";if(i.indexOf("@nestjs/core")>-1||i.indexOf("@nestjs/common")>-1)return"nest";if(i.indexOf("react-styleguidist")>-1)return"styleguidist";if(i.indexOf("react-scripts")>-1)return"create-react-app";if(i.indexOf("react-scripts-ts")>-1)return"create-react-app-typescript";if(i.indexOf("@angular/core")>-1)return"angular-cli";if(i.indexOf("preact-cli")>-1)return"preact-cli";if(i.indexOf("@sveltech/routify")>-1||i.indexOf("@roxi/routify")>-1||i.indexOf("vite")>-1||i.indexOf("@frontity/core")>-1)return"node";if(i.indexOf("svelte")>-1)return"svelte";if(i.indexOf("vue")>-1)return"vue-cli";if(i.indexOf("cx")>-1)return"cxjs";var m=["express","koa","nodemon","ts-node","@tensorflow/tfjs-node","webpack-dev-server","snowpack"];if(i.some(function(t){return m.indexOf(t)>-1})||Object.keys(n).length>=aa)return"node"}function ia(r){var o=r.split(".");if(o.length<=1)return"";var e=o[o.length-1];return e}var y,L="-{{suffix}}",na="https://".concat((y="2.19.8")===null||y===void 0?void 0:y.replace(/\./g,"-")).concat(L,"-sandpack.codesandbox.io/"),ca=(function(r){E(o,r);function o(e,n,s){s===void 0&&(s={});var a=r.call(this,e,n,s)||this;if(a.getTranspilerContext=function(){return new Promise(function(c){var p=a.listen(function(l){l.type==="transpiler-context"&&(c(l.data),p())});a.dispatch({type:"get-transpiler-context"})})},a.getTranspiledFiles=function(){return new Promise(function(c){var p=a.listen(function(l){l.type==="all-modules"&&(c(l.data),p())});a.dispatch({type:"get-modules"})})},a.bundlerURL=a.createBundlerURL(),a.bundlerState=void 0,a.errors=[],a.status="initializing",typeof e=="string"){a.selector=e;var i=document.querySelector(e);F(i,"The element '".concat(e,"' was not found")),a.element=i,a.iframe=document.createElement("iframe"),a.initializeElement()}else a.element=e,a.iframe=e;return a.iframe.getAttribute("sandbox")||(a.iframe.setAttribute("sandbox","allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-downloads allow-pointer-lock"),a.iframe.setAttribute("allow","accelerometer; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; clipboard-read; clipboard-write; xr-spatial-tracking;")),a.setLocationURLIntoIFrame(),a.iframeProtocol=new Y(a.iframe,a.bundlerURL),a.unsubscribeGlobalListener=a.iframeProtocol.globalListen(function(c){c.type!=="initialized"||!a.iframe.contentWindow||(a.iframeProtocol.register(),a.options.fileResolver&&(a.fileResolverProtocol=new G("fs",function(p){return z(a,void 0,void 0,function(){return q(this,function(l){if(p.method==="isFile")return[2,this.options.fileResolver.isFile(p.params[0])];if(p.method==="readFile")return[2,this.options.fileResolver.readFile(p.params[0])];throw new Error("Method not supported")})})},a.iframeProtocol)),a.updateSandbox(a.sandboxSetup,!0))}),a.unsubscribeChannelListener=a.iframeProtocol.channelListen(function(c){switch(c.type){case"start":{a.errors=[];break}case"status":{a.status=c.status;break}case"action":{c.action==="show-error"&&(a.errors=g(g([],a.errors,!0),[A(c)],!1));break}case"done":{a.status="done";break}case"state":{a.bundlerState=c.state;break}}}),s.experimental_enableServiceWorker&&a.serviceWorkerHandshake(),a}return o.prototype.createBundlerURL=function(){var e,n=this.options.bundlerURL||na;if(this.options.bundlerURL)return n;if(this.options.teamId&&(n=n.replace("https://","https://"+this.options.teamId+"-")+"?cache=".concat(Date.now())),this.options.experimental_enableServiceWorker){var s=[];s.push(Math.random().toString(36).slice(4)),n=n.replace(L,"-".concat((e=this.options.experimental_stableServiceWorkerId)!==null&&e!==void 0?e:s.join("-")))}else n=n.replace(L,"");return n},o.prototype.serviceWorkerHandshake=function(){var e=this,n=new MessageChannel,s=this.iframe.contentWindow;if(!s)throw new Error("Could not get iframe contentWindow");var a=n.port1;a.onmessage=function(c){if(typeof c.data=="object"&&c.data.$channel===f)switch(c.data.$type){case"preview/ready":break;case"preview/request":e.handleWorkerRequest(c.data,a);break}};var i=function(){var c={$channel:f,$type:"preview/init"};s.postMessage(c,"*",[n.port2]),e.iframe.removeEventListener("load",i)};this.iframe.addEventListener("load",i)},o.prototype.handleWorkerRequest=function(e,n){return z(this,void 0,void 0,function(){var s,a,i,c,p,l,u,v,d,m,t;return q(this,function(b){switch(b.label){case 0:s=function(){var h={$channel:f,$type:"preview/response",id:e.id,headers:{"Content-Type":"text/html; charset=utf-8"},status:404,body:"File not found"};n.postMessage(h)},b.label=1;case 1:return b.trys.push([1,4,,5]),a=new URL(e.url,this.bundlerURL).pathname,i={},c=this.getFiles(),p=c[a],p?[3,3]:[4,this.getTranspiledFiles()];case 2:if(l=b.sent(),p=l.find(function(h){return h.path.endsWith(a)}),!p)return s(),[2];b.label=3;case 3:return u=p.code,i["Content-Type"]||(v=ia(a),d=Z.get(v),d&&(i["Content-Type"]=d)),m={$channel:f,$type:"preview/response",id:e.id,headers:i,status:200,body:u},n.postMessage(m),[3,5];case 4:return t=b.sent(),console.error(t),s(),[3,5];case 5:return[2]}})})},o.prototype.setLocationURLIntoIFrame=function(){var e,n=this.options.startRoute?new URL(this.options.startRoute,this.bundlerURL).toString():this.bundlerURL;(e=this.iframe.contentWindow)===null||e===void 0||e.location.replace(n),this.iframe.src=n},o.prototype.destroy=function(){this.unsubscribeChannelListener(),this.unsubscribeGlobalListener(),this.iframeProtocol.cleanup()},o.prototype.updateOptions=function(e){M(this.options,e)||(this.options=e,this.updateSandbox())},o.prototype.updateSandbox=function(e,n){var s,a,i,c;e===void 0&&(e=this.sandboxSetup),this.sandboxSetup=x(x({},this.sandboxSetup),e);var p=this.getFiles(),l=Object.keys(p).reduce(function(d,m){var t;return x(x({},d),(t={},t[m]={code:p[m].code,path:m},t))},{}),u=JSON.parse(D(this.sandboxSetup.dependencies,this.sandboxSetup.devDependencies,this.sandboxSetup.entry));try{u=JSON.parse(p["/package.json"].code)}catch(d){console.error(W("could not parse package.json file: "+d.message))}var v=Object.keys(p).reduce(function(d,m){var t;return x(x({},d),(t={},t[m]={content:p[m].code,path:m},t))},{});this.dispatch(x(x({},this.options),{type:"compile",codesandbox:!0,version:3,isInitializationCompile:n,modules:l,reactDevTools:this.options.reactDevTools,externalResources:this.options.externalResources||[],hasFileResolver:!!this.options.fileResolver,disableDependencyPreprocessing:this.sandboxSetup.disableDependencyPreprocessing,experimental_enableServiceWorker:this.options.experimental_enableServiceWorker,template:this.sandboxSetup.template||ea(u,v),showOpenInCodeSandbox:(s=this.options.showOpenInCodeSandbox)!==null&&s!==void 0?s:!0,showErrorScreen:(a=this.options.showErrorScreen)!==null&&a!==void 0?a:!0,showLoadingScreen:(i=this.options.showLoadingScreen)!==null&&i!==void 0?i:!1,skipEval:this.options.skipEval||!1,clearConsoleDisabled:!this.options.clearConsoleOnFirstCompile,logLevel:(c=this.options.logLevel)!==null&&c!==void 0?c:P.Info,customNpmRegistries:this.options.customNpmRegistries,teamId:this.options.teamId,sandboxId:this.options.sandboxId}))},o.prototype.dispatch=function(e){e.type==="refresh"&&(this.setLocationURLIntoIFrame(),this.options.experimental_enableServiceWorker&&this.serviceWorkerHandshake()),this.iframeProtocol.dispatch(e)},o.prototype.listen=function(e){return this.iframeProtocol.channelListen(e)},o.prototype.getCodeSandboxURL=function(){var e=this.getFiles(),n=Object.keys(e).reduce(function(s,a){var i;return x(x({},s),(i={},i[a.replace("/","")]={content:e[a].code,isBinary:!1},i))},{});return fetch("https://codesandbox.io/api/v1/sandboxes/define?json=1",{method:"POST",body:JSON.stringify({files:n}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(s){return s.json()}).then(function(s){return{sandboxId:s.sandbox_id,editorUrl:"https://codesandbox.io/s/".concat(s.sandbox_id),embedUrl:"https://codesandbox.io/embed/".concat(s.sandbox_id)}})},o.prototype.getFiles=function(){var e=this.sandboxSetup;return e.files["/package.json"]===void 0?N(e.files,e.dependencies,e.devDependencies,e.entry):this.sandboxSetup.files},o.prototype.initializeElement=function(){this.iframe.style.border="0",this.iframe.style.width=this.options.width||"100%",this.iframe.style.height=this.options.height||"100%",this.iframe.style.overflow="hidden",F(this.element.parentNode,"The given iframe does not have a parent."),this.element.parentNode.replaceChild(this.iframe,this.element)},o})($);export{ca as SandpackRuntime}; -//# sourceMappingURL=index-DWtymVMa.js.map +//# sourceMappingURL=index-B6KXrLmj.js.map diff --git a/massgen/frontend/web/static/assets/index-DWtymVMa.js.map b/massgen/frontend/web/static/assets/index-B6KXrLmj.js.map similarity index 99% rename from massgen/frontend/web/static/assets/index-DWtymVMa.js.map rename to massgen/frontend/web/static/assets/index-B6KXrLmj.js.map index bb41284e0..2251695bd 100644 --- a/massgen/frontend/web/static/assets/index-DWtymVMa.js.map +++ b/massgen/frontend/web/static/assets/index-B6KXrLmj.js.map @@ -1 +1 @@ -{"version":3,"file":"index-DWtymVMa.js","sources":["../../../../../webui/node_modules/mime-db/index.js","../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/clients/runtime/index.mjs"],"sourcesContent":["/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","import { _ as __awaiter, a as __generator, h as __assign, i as __spreadArray, g as __extends, b as createPackageJSON, c as createError, S as SandpackLogLevel, d as addPackageJSONIfNeeded, n as nullthrows, e as extractErrorDetails } from '../../utils-52664384.mjs';\nimport { dequal } from 'dequal';\nimport { S as SandpackClient } from '../../base-80a1f760.mjs';\nimport mimeDB from 'mime-db';\nimport 'outvariant';\n\n/**\n * This file is a copy of the resolver from the `codesandbox-api` package.\n * We wanted to avoid to reference codesandbox-api because of the code that runs on load in the package.\n * The plan is to take some time and refactor codesandbox-api into what it was supposed to be in the first place,\n * an abstraction over the actions that can be dispatched between the bundler and the iframe.\n */\nvar Protocol = /** @class */ (function () {\n function Protocol(type, handleMessage, protocol) {\n var _this = this;\n this.type = type;\n this.handleMessage = handleMessage;\n this.protocol = protocol;\n this._disposeMessageListener = this.protocol.channelListen(function (msg) { return __awaiter(_this, void 0, void 0, function () {\n var message, result, response, err_1, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(msg.type === this.getTypeId() && msg.method)) return [3 /*break*/, 4];\n message = msg;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.handleMessage(message)];\n case 2:\n result = _a.sent();\n response = {\n type: this.getTypeId(),\n msgId: message.msgId,\n result: result,\n };\n this.protocol.dispatch(response);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n response = {\n type: this.getTypeId(),\n msgId: message.msgId,\n error: {\n message: err_1.message,\n },\n };\n this.protocol.dispatch(response);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); });\n }\n Protocol.prototype.getTypeId = function () {\n return \"protocol-\".concat(this.type);\n };\n Protocol.prototype.dispose = function () {\n this._disposeMessageListener();\n };\n return Protocol;\n}());\n\nvar IFrameProtocol = /** @class */ (function () {\n function IFrameProtocol(iframe, origin) {\n // React to messages from any iframe\n this.globalListeners = {};\n this.globalListenersCount = 0;\n // React to messages from the iframe owned by this instance\n this.channelListeners = {};\n this.channelListenersCount = 0;\n // Random number to identify this instance of the client when messages are coming from multiple iframes\n this.channelId = Math.floor(Math.random() * 1000000);\n this.frameWindow = iframe.contentWindow;\n this.origin = origin;\n this.globalListeners = [];\n this.channelListeners = [];\n this.eventListener = this.eventListener.bind(this);\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", this.eventListener);\n }\n }\n IFrameProtocol.prototype.cleanup = function () {\n window.removeEventListener(\"message\", this.eventListener);\n this.globalListeners = {};\n this.channelListeners = {};\n this.globalListenersCount = 0;\n this.channelListenersCount = 0;\n };\n // Sends the channelId and triggers an iframeHandshake promise to resolve,\n // so the iframe can start listening for messages (based on the id)\n IFrameProtocol.prototype.register = function () {\n if (!this.frameWindow) {\n return;\n }\n this.frameWindow.postMessage({\n type: \"register-frame\",\n origin: document.location.origin,\n id: this.channelId,\n }, this.origin);\n };\n // Messages are dispatched from the client directly to the instance iframe\n IFrameProtocol.prototype.dispatch = function (message) {\n if (!this.frameWindow) {\n return;\n }\n this.frameWindow.postMessage(__assign({ $id: this.channelId, codesandbox: true }, message), this.origin);\n };\n // Add a listener that is called on any message coming from an iframe in the page\n // This is needed for the `initialize` message which comes without a channelId\n IFrameProtocol.prototype.globalListen = function (listener) {\n var _this = this;\n if (typeof listener !== \"function\") {\n return function () {\n return;\n };\n }\n var listenerId = this.globalListenersCount;\n this.globalListeners[listenerId] = listener;\n this.globalListenersCount++;\n return function () {\n delete _this.globalListeners[listenerId];\n };\n };\n // Add a listener that is called on any message coming from an iframe with the instance channelId\n // All other messages (eg: from other iframes) are ignored\n IFrameProtocol.prototype.channelListen = function (listener) {\n var _this = this;\n if (typeof listener !== \"function\") {\n return function () {\n return;\n };\n }\n var listenerId = this.channelListenersCount;\n this.channelListeners[listenerId] = listener;\n this.channelListenersCount++;\n return function () {\n delete _this.channelListeners[listenerId];\n };\n };\n // Handles message windows coming from iframes\n IFrameProtocol.prototype.eventListener = function (evt) {\n // skip events originating from different iframes\n if (evt.source !== this.frameWindow) {\n return;\n }\n var message = evt.data;\n if (!message.codesandbox) {\n return;\n }\n Object.values(this.globalListeners).forEach(function (listener) {\n return listener(message);\n });\n if (message.$id !== this.channelId) {\n return;\n }\n Object.values(this.channelListeners).forEach(function (listener) {\n return listener(message);\n });\n };\n return IFrameProtocol;\n}());\n\nvar extensionMap = new Map();\nvar entries = Object.entries(mimeDB);\nfor (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a$1 = entries_1[_i], mimetype = _a$1[0], entry = _a$1[1];\n // eslint-disable-next-line\n // @ts-ignore\n if (!entry.extensions) {\n continue;\n }\n // eslint-disable-next-line\n // @ts-ignore\n var extensions = entry.extensions;\n if (extensions.length) {\n for (var _b = 0, extensions_1 = extensions; _b < extensions_1.length; _b++) {\n var ext = extensions_1[_b];\n extensionMap.set(ext, mimetype);\n }\n }\n}\nvar EXTENSIONS_MAP = extensionMap;\n\nvar CHANNEL_NAME = \"$CSB_RELAY\";\n\nvar MAX_CLIENT_DEPENDENCY_COUNT = 50;\nfunction getTemplate(pkg, \n/* eslint-disable @typescript-eslint/no-explicit-any */\nmodules) {\n if (!pkg) {\n return \"static\";\n }\n var _a = pkg.dependencies, dependencies = _a === void 0 ? {} : _a, _b = pkg.devDependencies, devDependencies = _b === void 0 ? {} : _b;\n var totalDependencies = __spreadArray(__spreadArray([], Object.keys(dependencies), true), Object.keys(devDependencies), true);\n var moduleNames = Object.keys(modules);\n var adonis = [\"@adonisjs/framework\", \"@adonisjs/core\"];\n if (totalDependencies.some(function (dep) { return adonis.indexOf(dep) > -1; })) {\n return \"adonis\";\n }\n var nuxt = [\"nuxt\", \"nuxt-edge\", \"nuxt-ts\", \"nuxt-ts-edge\", \"nuxt3\"];\n if (totalDependencies.some(function (dep) { return nuxt.indexOf(dep) > -1; })) {\n return \"nuxt\";\n }\n if (totalDependencies.indexOf(\"next\") > -1) {\n return \"next\";\n }\n var apollo = [\n \"apollo-server\",\n \"apollo-server-express\",\n \"apollo-server-hapi\",\n \"apollo-server-koa\",\n \"apollo-server-lambda\",\n \"apollo-server-micro\",\n ];\n if (totalDependencies.some(function (dep) { return apollo.indexOf(dep) > -1; })) {\n return \"apollo\";\n }\n if (totalDependencies.indexOf(\"mdx-deck\") > -1) {\n return \"mdx-deck\";\n }\n if (totalDependencies.indexOf(\"gridsome\") > -1) {\n return \"gridsome\";\n }\n if (totalDependencies.indexOf(\"vuepress\") > -1) {\n return \"vuepress\";\n }\n if (totalDependencies.indexOf(\"ember-cli\") > -1) {\n return \"ember\";\n }\n if (totalDependencies.indexOf(\"sapper\") > -1) {\n return \"sapper\";\n }\n if (totalDependencies.indexOf(\"gatsby\") > -1) {\n return \"gatsby\";\n }\n if (totalDependencies.indexOf(\"quasar\") > -1) {\n return \"quasar\";\n }\n if (totalDependencies.indexOf(\"@docusaurus/core\") > -1) {\n return \"docusaurus\";\n }\n if (totalDependencies.indexOf(\"remix\") > -1) {\n return \"remix\";\n }\n if (totalDependencies.indexOf(\"astro\") > -1) {\n return \"node\";\n }\n // CLIENT\n if (moduleNames.some(function (m) { return m.endsWith(\".re\"); })) {\n return \"reason\";\n }\n var parcel = [\"parcel-bundler\", \"parcel\"];\n if (totalDependencies.some(function (dep) { return parcel.indexOf(dep) > -1; })) {\n return \"parcel\";\n }\n var dojo = [\"@dojo/core\", \"@dojo/framework\"];\n if (totalDependencies.some(function (dep) { return dojo.indexOf(dep) > -1; })) {\n return \"@dojo/cli-create-app\";\n }\n if (totalDependencies.indexOf(\"@nestjs/core\") > -1 ||\n totalDependencies.indexOf(\"@nestjs/common\") > -1) {\n return \"nest\";\n }\n if (totalDependencies.indexOf(\"react-styleguidist\") > -1) {\n return \"styleguidist\";\n }\n if (totalDependencies.indexOf(\"react-scripts\") > -1) {\n return \"create-react-app\";\n }\n if (totalDependencies.indexOf(\"react-scripts-ts\") > -1) {\n return \"create-react-app-typescript\";\n }\n if (totalDependencies.indexOf(\"@angular/core\") > -1) {\n return \"angular-cli\";\n }\n if (totalDependencies.indexOf(\"preact-cli\") > -1) {\n return \"preact-cli\";\n }\n if (totalDependencies.indexOf(\"@sveltech/routify\") > -1 ||\n totalDependencies.indexOf(\"@roxi/routify\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"vite\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"@frontity/core\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"svelte\") > -1) {\n return \"svelte\";\n }\n if (totalDependencies.indexOf(\"vue\") > -1) {\n return \"vue-cli\";\n }\n if (totalDependencies.indexOf(\"cx\") > -1) {\n return \"cxjs\";\n }\n var nodeDeps = [\n \"express\",\n \"koa\",\n \"nodemon\",\n \"ts-node\",\n \"@tensorflow/tfjs-node\",\n \"webpack-dev-server\",\n \"snowpack\",\n ];\n if (totalDependencies.some(function (dep) { return nodeDeps.indexOf(dep) > -1; })) {\n return \"node\";\n }\n if (Object.keys(dependencies).length >= MAX_CLIENT_DEPENDENCY_COUNT) {\n // The dependencies are too much for client sandboxes to handle\n return \"node\";\n }\n return undefined;\n}\nfunction getExtension(filepath) {\n var parts = filepath.split(\".\");\n if (parts.length <= 1) {\n return \"\";\n }\n else {\n var ext = parts[parts.length - 1];\n return ext;\n }\n}\n\nvar _a;\nvar SUFFIX_PLACEHOLDER = \"-{{suffix}}\";\nvar BUNDLER_URL = \"https://\".concat((_a = \"2.19.8\") === null || _a === void 0 ? void 0 : _a.replace(/\\./g, \"-\")).concat(SUFFIX_PLACEHOLDER, \"-sandpack.codesandbox.io/\");\nvar SandpackRuntime = /** @class */ (function (_super) {\n __extends(SandpackRuntime, _super);\n function SandpackRuntime(selector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this, selector, sandboxSetup, options) || this;\n _this.getTranspilerContext = function () {\n return new Promise(function (resolve) {\n var unsubscribe = _this.listen(function (message) {\n if (message.type === \"transpiler-context\") {\n resolve(message.data);\n unsubscribe();\n }\n });\n _this.dispatch({ type: \"get-transpiler-context\" });\n });\n };\n _this.getTranspiledFiles = function () {\n return new Promise(function (resolve) {\n var unsubscribe = _this.listen(function (message) {\n if (message.type === \"all-modules\") {\n resolve(message.data);\n unsubscribe();\n }\n });\n _this.dispatch({ type: \"get-modules\" });\n });\n };\n _this.bundlerURL = _this.createBundlerURL();\n _this.bundlerState = undefined;\n _this.errors = [];\n _this.status = \"initializing\";\n if (typeof selector === \"string\") {\n _this.selector = selector;\n var element = document.querySelector(selector);\n nullthrows(element, \"The element '\".concat(selector, \"' was not found\"));\n _this.element = element;\n _this.iframe = document.createElement(\"iframe\");\n _this.initializeElement();\n }\n else {\n _this.element = selector;\n _this.iframe = selector;\n }\n if (!_this.iframe.getAttribute(\"sandbox\")) {\n _this.iframe.setAttribute(\"sandbox\", \"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-downloads allow-pointer-lock\");\n _this.iframe.setAttribute(\"allow\", \"accelerometer; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; clipboard-read; clipboard-write; xr-spatial-tracking;\");\n }\n _this.setLocationURLIntoIFrame();\n _this.iframeProtocol = new IFrameProtocol(_this.iframe, _this.bundlerURL);\n _this.unsubscribeGlobalListener = _this.iframeProtocol.globalListen(function (mes) {\n if (mes.type !== \"initialized\" || !_this.iframe.contentWindow) {\n return;\n }\n _this.iframeProtocol.register();\n if (_this.options.fileResolver) {\n _this.fileResolverProtocol = new Protocol(\"fs\", function (data) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (data.method === \"isFile\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [2 /*return*/, this.options.fileResolver.isFile(data.params[0])];\n }\n else if (data.method === \"readFile\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [2 /*return*/, this.options.fileResolver.readFile(data.params[0])];\n }\n else {\n throw new Error(\"Method not supported\");\n }\n });\n }); }, _this.iframeProtocol);\n }\n _this.updateSandbox(_this.sandboxSetup, true);\n });\n _this.unsubscribeChannelListener = _this.iframeProtocol.channelListen(function (mes) {\n switch (mes.type) {\n case \"start\": {\n _this.errors = [];\n break;\n }\n case \"status\": {\n _this.status = mes.status;\n break;\n }\n case \"action\": {\n if (mes.action === \"show-error\") {\n _this.errors = __spreadArray(__spreadArray([], _this.errors, true), [extractErrorDetails(mes)], false);\n }\n break;\n }\n case \"done\": {\n _this.status = \"done\";\n break;\n }\n case \"state\": {\n _this.bundlerState = mes.state;\n break;\n }\n }\n });\n if (options.experimental_enableServiceWorker) {\n _this.serviceWorkerHandshake();\n }\n return _this;\n }\n SandpackRuntime.prototype.createBundlerURL = function () {\n var _a;\n var bundlerURL = this.options.bundlerURL || BUNDLER_URL;\n // if it's a custom, skip the rest\n if (this.options.bundlerURL) {\n return bundlerURL;\n }\n if (this.options.teamId) {\n bundlerURL =\n bundlerURL.replace(\"https://\", \"https://\" + this.options.teamId + \"-\") +\n \"?cache=\".concat(Date.now());\n }\n if (this.options.experimental_enableServiceWorker) {\n var suffixes = [];\n suffixes.push(Math.random().toString(36).slice(4));\n bundlerURL = bundlerURL.replace(SUFFIX_PLACEHOLDER, \"-\".concat((_a = this.options.experimental_stableServiceWorkerId) !== null && _a !== void 0 ? _a : suffixes.join(\"-\")));\n }\n else {\n bundlerURL = bundlerURL.replace(SUFFIX_PLACEHOLDER, \"\");\n }\n return bundlerURL;\n };\n SandpackRuntime.prototype.serviceWorkerHandshake = function () {\n var _this = this;\n var channel = new MessageChannel();\n var iframeContentWindow = this.iframe.contentWindow;\n if (!iframeContentWindow) {\n throw new Error(\"Could not get iframe contentWindow\");\n }\n var port = channel.port1;\n port.onmessage = function (evt) {\n if (typeof evt.data === \"object\" && evt.data.$channel === CHANNEL_NAME) {\n switch (evt.data.$type) {\n case \"preview/ready\":\n // no op for now\n break;\n case \"preview/request\":\n _this.handleWorkerRequest(evt.data, port);\n break;\n }\n }\n };\n var sendMessage = function () {\n var initMsg = {\n $channel: CHANNEL_NAME,\n $type: \"preview/init\",\n };\n iframeContentWindow.postMessage(initMsg, \"*\", [channel.port2]);\n _this.iframe.removeEventListener(\"load\", sendMessage);\n };\n this.iframe.addEventListener(\"load\", sendMessage);\n };\n SandpackRuntime.prototype.handleWorkerRequest = function (request, port) {\n return __awaiter(this, void 0, void 0, function () {\n var notFound, filepath_1, headers, files, file, modulesFromManager, body, extension, foundMimetype, responseMessage, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n notFound = function () {\n var responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n },\n status: 404,\n body: \"File not found\",\n };\n port.postMessage(responseMessage);\n };\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, , 5]);\n filepath_1 = new URL(request.url, this.bundlerURL).pathname;\n headers = {};\n files = this.getFiles();\n file = files[filepath_1];\n if (!!file) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getTranspiledFiles()];\n case 2:\n modulesFromManager = _a.sent();\n file = modulesFromManager.find(function (item) {\n return item.path.endsWith(filepath_1);\n });\n if (!file) {\n notFound();\n return [2 /*return*/];\n }\n _a.label = 3;\n case 3:\n body = file.code;\n if (!headers[\"Content-Type\"]) {\n extension = getExtension(filepath_1);\n foundMimetype = EXTENSIONS_MAP.get(extension);\n if (foundMimetype) {\n headers[\"Content-Type\"] = foundMimetype;\n }\n }\n responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: headers,\n status: 200,\n body: body,\n };\n port.postMessage(responseMessage);\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n console.error(err_1);\n notFound();\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n SandpackRuntime.prototype.setLocationURLIntoIFrame = function () {\n var _a;\n var urlSource = this.options.startRoute\n ? new URL(this.options.startRoute, this.bundlerURL).toString()\n : this.bundlerURL;\n (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.location.replace(urlSource);\n this.iframe.src = urlSource;\n };\n SandpackRuntime.prototype.destroy = function () {\n this.unsubscribeChannelListener();\n this.unsubscribeGlobalListener();\n this.iframeProtocol.cleanup();\n };\n SandpackRuntime.prototype.updateOptions = function (options) {\n if (!dequal(this.options, options)) {\n this.options = options;\n this.updateSandbox();\n }\n };\n SandpackRuntime.prototype.updateSandbox = function (sandboxSetup, isInitializationCompile) {\n var _a, _b, _c, _d;\n if (sandboxSetup === void 0) { sandboxSetup = this.sandboxSetup; }\n this.sandboxSetup = __assign(__assign({}, this.sandboxSetup), sandboxSetup);\n var files = this.getFiles();\n var modules = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next] = {\n code: files[next].code,\n path: next,\n }, _a)));\n }, {});\n var packageJSON = JSON.parse(createPackageJSON(this.sandboxSetup.dependencies, this.sandboxSetup.devDependencies, this.sandboxSetup.entry));\n try {\n packageJSON = JSON.parse(files[\"/package.json\"].code);\n }\n catch (e) {\n console.error(createError(\"could not parse package.json file: \" + e.message));\n }\n // TODO move this to a common format\n var normalizedModules = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next] = {\n content: files[next].code,\n path: next,\n }, _a)));\n }, {});\n this.dispatch(__assign(__assign({}, this.options), { type: \"compile\", codesandbox: true, version: 3, isInitializationCompile: isInitializationCompile, modules: modules, reactDevTools: this.options.reactDevTools, externalResources: this.options.externalResources || [], hasFileResolver: Boolean(this.options.fileResolver), disableDependencyPreprocessing: this.sandboxSetup.disableDependencyPreprocessing, experimental_enableServiceWorker: this.options.experimental_enableServiceWorker, template: this.sandboxSetup.template ||\n getTemplate(packageJSON, normalizedModules), showOpenInCodeSandbox: (_a = this.options.showOpenInCodeSandbox) !== null && _a !== void 0 ? _a : true, showErrorScreen: (_b = this.options.showErrorScreen) !== null && _b !== void 0 ? _b : true, showLoadingScreen: (_c = this.options.showLoadingScreen) !== null && _c !== void 0 ? _c : false, skipEval: this.options.skipEval || false, clearConsoleDisabled: !this.options.clearConsoleOnFirstCompile, logLevel: (_d = this.options.logLevel) !== null && _d !== void 0 ? _d : SandpackLogLevel.Info, customNpmRegistries: this.options.customNpmRegistries, teamId: this.options.teamId, sandboxId: this.options.sandboxId }));\n };\n SandpackRuntime.prototype.dispatch = function (message) {\n /**\n * Intercept \"refresh\" dispatch: this will make sure\n * that the iframe is still in the location it's supposed to be.\n * External links inside the iframe will change the location and\n * prevent the user from navigating back.\n */\n if (message.type === \"refresh\") {\n this.setLocationURLIntoIFrame();\n if (this.options.experimental_enableServiceWorker) {\n this.serviceWorkerHandshake();\n }\n }\n this.iframeProtocol.dispatch(message);\n };\n SandpackRuntime.prototype.listen = function (listener) {\n return this.iframeProtocol.channelListen(listener);\n };\n /**\n * Get the URL of the contents of the current sandbox\n */\n SandpackRuntime.prototype.getCodeSandboxURL = function () {\n var files = this.getFiles();\n var paramFiles = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next.replace(\"/\", \"\")] = {\n content: files[next].code,\n isBinary: false,\n }, _a)));\n }, {});\n return fetch(\"https://codesandbox.io/api/v1/sandboxes/define?json=1\", {\n method: \"POST\",\n body: JSON.stringify({ files: paramFiles }),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n .then(function (x) { return x.json(); })\n .then(function (res) { return ({\n sandboxId: res.sandbox_id,\n editorUrl: \"https://codesandbox.io/s/\".concat(res.sandbox_id),\n embedUrl: \"https://codesandbox.io/embed/\".concat(res.sandbox_id),\n }); });\n };\n SandpackRuntime.prototype.getFiles = function () {\n var sandboxSetup = this.sandboxSetup;\n if (sandboxSetup.files[\"/package.json\"] === undefined) {\n return addPackageJSONIfNeeded(sandboxSetup.files, sandboxSetup.dependencies, sandboxSetup.devDependencies, sandboxSetup.entry);\n }\n return this.sandboxSetup.files;\n };\n SandpackRuntime.prototype.initializeElement = function () {\n this.iframe.style.border = \"0\";\n this.iframe.style.width = this.options.width || \"100%\";\n this.iframe.style.height = this.options.height || \"100%\";\n this.iframe.style.overflow = \"hidden\";\n nullthrows(this.element.parentNode, \"The given iframe does not have a parent.\");\n this.element.parentNode.replaceChild(this.iframe, this.element);\n };\n return SandpackRuntime;\n}(SandpackClient));\n\nexport { SandpackRuntime };\n"],"names":["mimeDb","require$$0","Protocol","type","handleMessage","protocol","_this","msg","__awaiter","message","result","response","err_1","__generator","_a","IFrameProtocol","iframe","origin","__assign","listener","listenerId","evt","extensionMap","entries","mimeDB","_i","entries_1","_a$1","mimetype","entry","extensions","_b","extensions_1","ext","EXTENSIONS_MAP","CHANNEL_NAME","MAX_CLIENT_DEPENDENCY_COUNT","getTemplate","pkg","modules","dependencies","devDependencies","totalDependencies","__spreadArray","moduleNames","adonis","dep","nuxt","apollo","m","parcel","dojo","nodeDeps","getExtension","filepath","parts","SUFFIX_PLACEHOLDER","BUNDLER_URL","SandpackRuntime","_super","__extends","selector","sandboxSetup","options","resolve","unsubscribe","element","nullthrows","mes","data","extractErrorDetails","bundlerURL","suffixes","channel","iframeContentWindow","port","sendMessage","initMsg","request","notFound","filepath_1","headers","files","file","modulesFromManager","body","extension","foundMimetype","responseMessage","item","urlSource","dequal","isInitializationCompile","_c","_d","prev","next","packageJSON","createPackageJSON","e","createError","normalizedModules","SandpackLogLevel","paramFiles","x","res","addPackageJSONIfNeeded","SandpackClient"],"mappings":";;;;;uCAWAA,EAAiBC,4BCCjB,IAAIC,GAA0B,UAAY,CACtC,SAASA,EAASC,EAAMC,EAAeC,EAAU,CAC7C,IAAIC,EAAQ,KACZ,KAAK,KAAOH,EACZ,KAAK,cAAgBC,EACrB,KAAK,SAAWC,EAChB,KAAK,wBAA0B,KAAK,SAAS,cAAc,SAAUE,EAAK,CAAE,OAAOC,EAAUF,EAAO,OAAQ,OAAQ,UAAY,CAC5H,IAAIG,EAASC,EAAQC,EAAUC,EAAOD,EACtC,OAAOE,EAAY,KAAM,SAAUC,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACD,GAAI,EAAEP,EAAI,OAAS,KAAK,UAAS,GAAMA,EAAI,QAAS,MAAO,CAAC,EAAa,CAAC,EAC1EE,EAAUF,EACVO,EAAG,MAAQ,EACf,IAAK,GACD,OAAAA,EAAG,KAAK,KAAK,CAAC,EAAG,EAAC,CAAI,CAAC,CAAC,EACjB,CAAC,EAAa,KAAK,cAAcL,CAAO,CAAC,EACpD,IAAK,GACD,OAAAC,EAASI,EAAG,KAAI,EAChBH,EAAW,CACP,KAAM,KAAK,UAAS,EACpB,MAAOF,EAAQ,MACf,OAAQC,CACpC,EACwB,KAAK,SAAS,SAASC,CAAQ,EACxB,CAAC,EAAa,CAAC,EAC1B,IAAK,GACD,OAAAC,EAAQE,EAAG,KAAI,EACfH,EAAW,CACP,KAAM,KAAK,UAAS,EACpB,MAAOF,EAAQ,MACf,MAAO,CACH,QAASG,EAAM,OAC/C,CACA,EACwB,KAAK,SAAS,SAASD,CAAQ,EACxB,CAAC,EAAa,CAAC,EAC1B,IAAK,GAAG,MAAO,CAAC,CAAC,CACrC,CACY,CAAC,CACL,CAAC,CAAG,CAAC,CACT,CACA,OAAAT,EAAS,UAAU,UAAY,UAAY,CACvC,MAAO,YAAY,OAAO,KAAK,IAAI,CACvC,EACAA,EAAS,UAAU,QAAU,UAAY,CACrC,KAAK,wBAAuB,CAChC,EACOA,CACX,KAEIa,GAAgC,UAAY,CAC5C,SAASA,EAAeC,EAAQC,EAAQ,CAEpC,KAAK,gBAAkB,CAAA,EACvB,KAAK,qBAAuB,EAE5B,KAAK,iBAAmB,CAAA,EACxB,KAAK,sBAAwB,EAE7B,KAAK,UAAY,KAAK,MAAM,KAAK,OAAM,EAAK,GAAO,EACnD,KAAK,YAAcD,EAAO,cAC1B,KAAK,OAASC,EACd,KAAK,gBAAkB,CAAA,EACvB,KAAK,iBAAmB,CAAA,EACxB,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EAC7C,OAAO,OAAW,KAClB,OAAO,iBAAiB,UAAW,KAAK,aAAa,CAE7D,CACA,OAAAF,EAAe,UAAU,QAAU,UAAY,CAC3C,OAAO,oBAAoB,UAAW,KAAK,aAAa,EACxD,KAAK,gBAAkB,CAAA,EACvB,KAAK,iBAAmB,CAAA,EACxB,KAAK,qBAAuB,EAC5B,KAAK,sBAAwB,CACjC,EAGAA,EAAe,UAAU,SAAW,UAAY,CACvC,KAAK,aAGV,KAAK,YAAY,YAAY,CACzB,KAAM,iBACN,OAAQ,SAAS,SAAS,OAC1B,GAAI,KAAK,SACrB,EAAW,KAAK,MAAM,CAClB,EAEAA,EAAe,UAAU,SAAW,SAAUN,EAAS,CAC9C,KAAK,aAGV,KAAK,YAAY,YAAYS,EAAS,CAAE,IAAK,KAAK,UAAW,YAAa,EAAI,EAAIT,CAAO,EAAG,KAAK,MAAM,CAC3G,EAGAM,EAAe,UAAU,aAAe,SAAUI,EAAU,CACxD,IAAIb,EAAQ,KACZ,GAAI,OAAOa,GAAa,WACpB,OAAO,UAAY,CAEnB,EAEJ,IAAIC,EAAa,KAAK,qBACtB,YAAK,gBAAgBA,CAAU,EAAID,EACnC,KAAK,uBACE,UAAY,CACf,OAAOb,EAAM,gBAAgBc,CAAU,CAC3C,CACJ,EAGAL,EAAe,UAAU,cAAgB,SAAUI,EAAU,CACzD,IAAIb,EAAQ,KACZ,GAAI,OAAOa,GAAa,WACpB,OAAO,UAAY,CAEnB,EAEJ,IAAIC,EAAa,KAAK,sBACtB,YAAK,iBAAiBA,CAAU,EAAID,EACpC,KAAK,wBACE,UAAY,CACf,OAAOb,EAAM,iBAAiBc,CAAU,CAC5C,CACJ,EAEAL,EAAe,UAAU,cAAgB,SAAUM,EAAK,CAEpD,GAAIA,EAAI,SAAW,KAAK,YAGxB,KAAIZ,EAAUY,EAAI,KACbZ,EAAQ,cAGb,OAAO,OAAO,KAAK,eAAe,EAAE,QAAQ,SAAUU,EAAU,CAC5D,OAAOA,EAASV,CAAO,CAC3B,CAAC,EACGA,EAAQ,MAAQ,KAAK,WAGzB,OAAO,OAAO,KAAK,gBAAgB,EAAE,QAAQ,SAAUU,EAAU,CAC7D,OAAOA,EAASV,CAAO,CAC3B,CAAC,GACL,EACOM,CACX,KAEIO,EAAe,IAAI,IACnBC,EAAU,OAAO,QAAQC,CAAM,EACnC,QAASC,EAAK,EAAGC,EAAYH,EAASE,EAAKC,EAAU,OAAQD,IAAM,CAC/D,IAAIE,EAAOD,EAAUD,CAAE,EAAGG,EAAWD,EAAK,CAAC,EAAGE,EAAQF,EAAK,CAAC,EAG5D,GAAKE,EAAM,WAKX,KAAIC,EAAaD,EAAM,WACvB,GAAIC,EAAW,OACX,QAASC,EAAK,EAAGC,EAAeF,EAAYC,EAAKC,EAAa,OAAQD,IAAM,CACxE,IAAIE,EAAMD,EAAaD,CAAE,EACzBT,EAAa,IAAIW,EAAKL,CAAQ,CAClC,EAER,CACA,IAAIM,EAAiBZ,EAEjBa,EAAe,aAEfC,GAA8B,GAClC,SAASC,GAAYC,EAErBC,EAAS,CACL,GAAI,CAACD,EACD,MAAO,SAEX,IAAIxB,EAAKwB,EAAI,aAAcE,EAAe1B,IAAO,OAAS,CAAA,EAAKA,EAAIiB,EAAKO,EAAI,gBAAiBG,EAAkBV,IAAO,OAAS,CAAA,EAAKA,EAChIW,EAAoBC,EAAcA,EAAc,CAAA,EAAI,OAAO,KAAKH,CAAY,EAAG,EAAI,EAAG,OAAO,KAAKC,CAAe,EAAG,EAAI,EACxHG,EAAc,OAAO,KAAKL,CAAO,EACjCM,EAAS,CAAC,sBAAuB,gBAAgB,EACrD,GAAIH,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOD,EAAO,QAAQC,CAAG,EAAI,EAAI,CAAC,EAC1E,MAAO,SAEX,IAAIC,EAAO,CAAC,OAAQ,YAAa,UAAW,eAAgB,OAAO,EACnE,GAAIL,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOC,EAAK,QAAQD,CAAG,EAAI,EAAI,CAAC,EACxE,MAAO,OAEX,GAAIJ,EAAkB,QAAQ,MAAM,EAAI,GACpC,MAAO,OAEX,IAAIM,EAAS,CACT,gBACA,wBACA,qBACA,oBACA,uBACA,qBACR,EACI,GAAIN,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOE,EAAO,QAAQF,CAAG,EAAI,EAAI,CAAC,EAC1E,MAAO,SAEX,GAAIJ,EAAkB,QAAQ,UAAU,EAAI,GACxC,MAAO,WAEX,GAAIA,EAAkB,QAAQ,UAAU,EAAI,GACxC,MAAO,WAEX,GAAIA,EAAkB,QAAQ,UAAU,EAAI,GACxC,MAAO,WAEX,GAAIA,EAAkB,QAAQ,WAAW,EAAI,GACzC,MAAO,QAEX,GAAIA,EAAkB,QAAQ,QAAQ,EAAI,GACtC,MAAO,SAEX,GAAIA,EAAkB,QAAQ,QAAQ,EAAI,GACtC,MAAO,SAEX,GAAIA,EAAkB,QAAQ,QAAQ,EAAI,GACtC,MAAO,SAEX,GAAIA,EAAkB,QAAQ,kBAAkB,EAAI,GAChD,MAAO,aAEX,GAAIA,EAAkB,QAAQ,OAAO,EAAI,GACrC,MAAO,QAEX,GAAIA,EAAkB,QAAQ,OAAO,EAAI,GACrC,MAAO,OAGX,GAAIE,EAAY,KAAK,SAAUK,EAAG,CAAE,OAAOA,EAAE,SAAS,KAAK,CAAG,CAAC,EAC3D,MAAO,SAEX,IAAIC,EAAS,CAAC,iBAAkB,QAAQ,EACxC,GAAIR,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOI,EAAO,QAAQJ,CAAG,EAAI,EAAI,CAAC,EAC1E,MAAO,SAEX,IAAIK,EAAO,CAAC,aAAc,iBAAiB,EAC3C,GAAIT,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOK,EAAK,QAAQL,CAAG,EAAI,EAAI,CAAC,EACxE,MAAO,uBAEX,GAAIJ,EAAkB,QAAQ,cAAc,EAAI,IAC5CA,EAAkB,QAAQ,gBAAgB,EAAI,GAC9C,MAAO,OAEX,GAAIA,EAAkB,QAAQ,oBAAoB,EAAI,GAClD,MAAO,eAEX,GAAIA,EAAkB,QAAQ,eAAe,EAAI,GAC7C,MAAO,mBAEX,GAAIA,EAAkB,QAAQ,kBAAkB,EAAI,GAChD,MAAO,8BAEX,GAAIA,EAAkB,QAAQ,eAAe,EAAI,GAC7C,MAAO,cAEX,GAAIA,EAAkB,QAAQ,YAAY,EAAI,GAC1C,MAAO,aASX,GAPIA,EAAkB,QAAQ,mBAAmB,EAAI,IACjDA,EAAkB,QAAQ,eAAe,EAAI,IAG7CA,EAAkB,QAAQ,MAAM,EAAI,IAGpCA,EAAkB,QAAQ,gBAAgB,EAAI,GAC9C,MAAO,OAEX,GAAIA,EAAkB,QAAQ,QAAQ,EAAI,GACtC,MAAO,SAEX,GAAIA,EAAkB,QAAQ,KAAK,EAAI,GACnC,MAAO,UAEX,GAAIA,EAAkB,QAAQ,IAAI,EAAI,GAClC,MAAO,OAEX,IAAIU,EAAW,CACX,UACA,MACA,UACA,UACA,wBACA,qBACA,UACR,EAII,GAHIV,EAAkB,KAAK,SAAUI,EAAK,CAAE,OAAOM,EAAS,QAAQN,CAAG,EAAI,EAAI,CAAC,GAG5E,OAAO,KAAKN,CAAY,EAAE,QAAUJ,GAEpC,MAAO,MAGf,CACA,SAASiB,GAAaC,EAAU,CAC5B,IAAIC,EAAQD,EAAS,MAAM,GAAG,EAC9B,GAAIC,EAAM,QAAU,EAChB,MAAO,GAGP,IAAItB,EAAMsB,EAAMA,EAAM,OAAS,CAAC,EAChC,OAAOtB,CAEf,CAEA,IAAInB,EACA0C,EAAqB,cACrBC,GAAc,WAAW,QAAQ3C,EAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAQ,MAAO,GAAG,CAAC,EAAE,OAAO0C,EAAoB,2BAA2B,EACnKE,IAAiC,SAAUC,EAAQ,CACnDC,EAAUF,EAAiBC,CAAM,EACjC,SAASD,EAAgBG,EAAUC,EAAcC,EAAS,CAClDA,IAAY,SAAUA,EAAU,CAAA,GACpC,IAAIzD,EAAQqD,EAAO,KAAK,KAAME,EAAUC,EAAcC,CAAO,GAAK,KA2BlE,GA1BAzD,EAAM,qBAAuB,UAAY,CACrC,OAAO,IAAI,QAAQ,SAAU0D,EAAS,CAClC,IAAIC,EAAc3D,EAAM,OAAO,SAAUG,EAAS,CAC1CA,EAAQ,OAAS,uBACjBuD,EAAQvD,EAAQ,IAAI,EACpBwD,EAAW,EAEnB,CAAC,EACD3D,EAAM,SAAS,CAAE,KAAM,wBAAwB,CAAE,CACrD,CAAC,CACL,EACAA,EAAM,mBAAqB,UAAY,CACnC,OAAO,IAAI,QAAQ,SAAU0D,EAAS,CAClC,IAAIC,EAAc3D,EAAM,OAAO,SAAUG,EAAS,CAC1CA,EAAQ,OAAS,gBACjBuD,EAAQvD,EAAQ,IAAI,EACpBwD,EAAW,EAEnB,CAAC,EACD3D,EAAM,SAAS,CAAE,KAAM,aAAa,CAAE,CAC1C,CAAC,CACL,EACAA,EAAM,WAAaA,EAAM,iBAAgB,EACzCA,EAAM,aAAe,OACrBA,EAAM,OAAS,CAAA,EACfA,EAAM,OAAS,eACX,OAAOuD,GAAa,SAAU,CAC9BvD,EAAM,SAAWuD,EACjB,IAAIK,EAAU,SAAS,cAAcL,CAAQ,EAC7CM,EAAWD,EAAS,gBAAgB,OAAOL,EAAU,iBAAiB,CAAC,EACvEvD,EAAM,QAAU4D,EAChB5D,EAAM,OAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAM,kBAAiB,CAC3B,MAEIA,EAAM,QAAUuD,EAChBvD,EAAM,OAASuD,EAEnB,OAAKvD,EAAM,OAAO,aAAa,SAAS,IACpCA,EAAM,OAAO,aAAa,UAAW,6HAA6H,EAClKA,EAAM,OAAO,aAAa,QAAS,8IAA8I,GAErLA,EAAM,yBAAwB,EAC9BA,EAAM,eAAiB,IAAIS,EAAeT,EAAM,OAAQA,EAAM,UAAU,EACxEA,EAAM,0BAA4BA,EAAM,eAAe,aAAa,SAAU8D,EAAK,CAC3EA,EAAI,OAAS,eAAiB,CAAC9D,EAAM,OAAO,gBAGhDA,EAAM,eAAe,SAAQ,EACzBA,EAAM,QAAQ,eACdA,EAAM,qBAAuB,IAAIJ,EAAS,KAAM,SAAUmE,EAAM,CAAE,OAAO7D,EAAUF,EAAO,OAAQ,OAAQ,UAAY,CAClH,OAAOO,EAAY,KAAM,SAAUC,EAAI,CACnC,GAAIuD,EAAK,SAAW,SAEhB,MAAO,CAAC,EAAc,KAAK,QAAQ,aAAa,OAAOA,EAAK,OAAO,CAAC,CAAC,CAAC,EAErE,GAAIA,EAAK,SAAW,WAErB,MAAO,CAAC,EAAc,KAAK,QAAQ,aAAa,SAASA,EAAK,OAAO,CAAC,CAAC,CAAC,EAGxE,MAAM,IAAI,MAAM,sBAAsB,CAE9C,CAAC,CACL,CAAC,CAAG,EAAG/D,EAAM,cAAc,GAE/BA,EAAM,cAAcA,EAAM,aAAc,EAAI,EAChD,CAAC,EACDA,EAAM,2BAA6BA,EAAM,eAAe,cAAc,SAAU8D,EAAK,CACjF,OAAQA,EAAI,KAAI,CACZ,IAAK,QAAS,CACV9D,EAAM,OAAS,CAAA,EACf,KACJ,CACA,IAAK,SAAU,CACXA,EAAM,OAAS8D,EAAI,OACnB,KACJ,CACA,IAAK,SAAU,CACPA,EAAI,SAAW,eACf9D,EAAM,OAASqC,EAAcA,EAAc,CAAA,EAAIrC,EAAM,OAAQ,EAAI,EAAG,CAACgE,EAAoBF,CAAG,CAAC,EAAG,EAAK,GAEzG,KACJ,CACA,IAAK,OAAQ,CACT9D,EAAM,OAAS,OACf,KACJ,CACA,IAAK,QAAS,CACVA,EAAM,aAAe8D,EAAI,MACzB,KACJ,CAChB,CACQ,CAAC,EACGL,EAAQ,kCACRzD,EAAM,uBAAsB,EAEzBA,CACX,CACA,OAAAoD,EAAgB,UAAU,iBAAmB,UAAY,CACrD,IAAI5C,EACAyD,EAAa,KAAK,QAAQ,YAAcd,GAE5C,GAAI,KAAK,QAAQ,WACb,OAAOc,EAOX,GALI,KAAK,QAAQ,SACbA,EACIA,EAAW,QAAQ,WAAY,WAAa,KAAK,QAAQ,OAAS,GAAG,EACjE,UAAU,OAAO,KAAK,KAAK,GAEnC,KAAK,QAAQ,iCAAkC,CAC/C,IAAIC,EAAW,CAAA,EACfA,EAAS,KAAK,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,EACjDD,EAAaA,EAAW,QAAQf,EAAoB,IAAI,QAAQ1C,EAAK,KAAK,QAAQ,sCAAwC,MAAQA,IAAO,OAASA,EAAK0D,EAAS,KAAK,GAAG,CAAC,CAAC,CAC9K,MAEID,EAAaA,EAAW,QAAQf,EAAoB,EAAE,EAE1D,OAAOe,CACX,EACAb,EAAgB,UAAU,uBAAyB,UAAY,CAC3D,IAAIpD,EAAQ,KACRmE,EAAU,IAAI,eACdC,EAAsB,KAAK,OAAO,cACtC,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,oCAAoC,EAExD,IAAIC,EAAOF,EAAQ,MACnBE,EAAK,UAAY,SAAUtD,EAAK,CAC5B,GAAI,OAAOA,EAAI,MAAS,UAAYA,EAAI,KAAK,WAAac,EACtD,OAAQd,EAAI,KAAK,MAAK,CAClB,IAAK,gBAED,MACJ,IAAK,kBACDf,EAAM,oBAAoBe,EAAI,KAAMsD,CAAI,EACxC,KACxB,CAEQ,EACA,IAAIC,EAAc,UAAY,CAC1B,IAAIC,EAAU,CACV,SAAU1C,EACV,MAAO,cACvB,EACYuC,EAAoB,YAAYG,EAAS,IAAK,CAACJ,EAAQ,KAAK,CAAC,EAC7DnE,EAAM,OAAO,oBAAoB,OAAQsE,CAAW,CACxD,EACA,KAAK,OAAO,iBAAiB,OAAQA,CAAW,CACpD,EACAlB,EAAgB,UAAU,oBAAsB,SAAUoB,EAASH,EAAM,CACrE,OAAOnE,EAAU,KAAM,OAAQ,OAAQ,UAAY,CAC/C,IAAIuE,EAAUC,EAAYC,EAASC,EAAOC,EAAMC,EAAoBC,EAAMC,EAAWC,EAAeC,EAAiB5E,EACrH,OAAOC,EAAY,KAAM,SAAUC,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACDiE,EAAW,UAAY,CACnB,IAAIS,EAAkB,CAClB,SAAUrD,EACV,MAAO,mBACP,GAAI2C,EAAQ,GACZ,QAAS,CACL,eAAgB,0BACpD,EACgC,OAAQ,IACR,KAAM,gBACtC,EAC4BH,EAAK,YAAYa,CAAe,CACpC,EACA1E,EAAG,MAAQ,EACf,IAAK,GAMD,OALAA,EAAG,KAAK,KAAK,CAAC,EAAG,EAAC,CAAI,CAAC,CAAC,EACxBkE,EAAa,IAAI,IAAIF,EAAQ,IAAK,KAAK,UAAU,EAAE,SACnDG,EAAU,CAAA,EACVC,EAAQ,KAAK,SAAQ,EACrBC,EAAOD,EAAMF,CAAU,EACjBG,EAAa,CAAC,EAAa,CAAC,EAC3B,CAAC,EAAa,KAAK,oBAAoB,EAClD,IAAK,GAKD,GAJAC,EAAqBtE,EAAG,KAAI,EAC5BqE,EAAOC,EAAmB,KAAK,SAAUK,EAAM,CAC3C,OAAOA,EAAK,KAAK,SAAST,CAAU,CACxC,CAAC,EACG,CAACG,EACD,OAAAJ,EAAQ,EACD,CAAC,CAAC,EAEbjE,EAAG,MAAQ,EACf,IAAK,GACD,OAAAuE,EAAOF,EAAK,KACPF,EAAQ,cAAc,IACvBK,EAAYjC,GAAa2B,CAAU,EACnCO,EAAgBrD,EAAe,IAAIoD,CAAS,EACxCC,IACAN,EAAQ,cAAc,EAAIM,IAGlCC,EAAkB,CACd,SAAUrD,EACV,MAAO,mBACP,GAAI2C,EAAQ,GACZ,QAASG,EACT,OAAQ,IACR,KAAMI,CAClC,EACwBV,EAAK,YAAYa,CAAe,EACzB,CAAC,EAAa,CAAC,EAC1B,IAAK,GACD,OAAA5E,EAAQE,EAAG,KAAI,EACf,QAAQ,MAAMF,CAAK,EACnBmE,EAAQ,EACD,CAAC,EAAa,CAAC,EAC1B,IAAK,GAAG,MAAO,CAAC,CAAC,CACrC,CACY,CAAC,CACL,CAAC,CACL,EACArB,EAAgB,UAAU,yBAA2B,UAAY,CAC7D,IAAI5C,EACA4E,EAAY,KAAK,QAAQ,WACvB,IAAI,IAAI,KAAK,QAAQ,WAAY,KAAK,UAAU,EAAE,SAAQ,EAC1D,KAAK,YACV5E,EAAK,KAAK,OAAO,iBAAmB,MAAQA,IAAO,QAAkBA,EAAG,SAAS,QAAQ4E,CAAS,EACnG,KAAK,OAAO,IAAMA,CACtB,EACAhC,EAAgB,UAAU,QAAU,UAAY,CAC5C,KAAK,2BAA0B,EAC/B,KAAK,0BAAyB,EAC9B,KAAK,eAAe,QAAO,CAC/B,EACAA,EAAgB,UAAU,cAAgB,SAAUK,EAAS,CACpD4B,EAAO,KAAK,QAAS5B,CAAO,IAC7B,KAAK,QAAUA,EACf,KAAK,cAAa,EAE1B,EACAL,EAAgB,UAAU,cAAgB,SAAUI,EAAc8B,EAAyB,CACvF,IAAI9E,EAAIiB,EAAI8D,EAAIC,EACZhC,IAAiB,SAAUA,EAAe,KAAK,cACnD,KAAK,aAAe5C,EAASA,EAAS,CAAA,EAAI,KAAK,YAAY,EAAG4C,CAAY,EAC1E,IAAIoB,EAAQ,KAAK,SAAQ,EACrB3C,EAAU,OAAO,KAAK2C,CAAK,EAAE,OAAO,SAAUa,EAAMC,EAAM,CAC1D,IAAIlF,EACJ,OAAQI,EAASA,EAAS,CAAA,EAAI6E,CAAI,GAAIjF,EAAK,CAAA,EAAIA,EAAGkF,CAAI,EAAI,CACtD,KAAMd,EAAMc,CAAI,EAAE,KAClB,KAAMA,CACtB,EAAelF,EAAE,CACT,EAAG,CAAA,CAAE,EACDmF,EAAc,KAAK,MAAMC,EAAkB,KAAK,aAAa,aAAc,KAAK,aAAa,gBAAiB,KAAK,aAAa,KAAK,CAAC,EAC1I,GAAI,CACAD,EAAc,KAAK,MAAMf,EAAM,eAAe,EAAE,IAAI,CACxD,OACOiB,EAAG,CACN,QAAQ,MAAMC,EAAY,sCAAwCD,EAAE,OAAO,CAAC,CAChF,CAEA,IAAIE,EAAoB,OAAO,KAAKnB,CAAK,EAAE,OAAO,SAAUa,EAAMC,EAAM,CACpE,IAAIlF,EACJ,OAAQI,EAASA,EAAS,CAAA,EAAI6E,CAAI,GAAIjF,EAAK,CAAA,EAAIA,EAAGkF,CAAI,EAAI,CACtD,QAASd,EAAMc,CAAI,EAAE,KACrB,KAAMA,CACtB,EAAelF,EAAE,CACT,EAAG,CAAA,CAAE,EACL,KAAK,SAASI,EAASA,EAAS,CAAA,EAAI,KAAK,OAAO,EAAG,CAAE,KAAM,UAAW,YAAa,GAAM,QAAS,EAAG,wBAAyB0E,EAAyB,QAASrD,EAAS,cAAe,KAAK,QAAQ,cAAe,kBAAmB,KAAK,QAAQ,mBAAqB,CAAA,EAAI,gBAAiB,EAAQ,KAAK,QAAQ,aAAe,+BAAgC,KAAK,aAAa,+BAAgC,iCAAkC,KAAK,QAAQ,iCAAkC,SAAU,KAAK,aAAa,UACzfF,GAAY4D,EAAaI,CAAiB,EAAG,uBAAwBvF,EAAK,KAAK,QAAQ,yBAA2B,MAAQA,IAAO,OAASA,EAAK,GAAM,iBAAkBiB,EAAK,KAAK,QAAQ,mBAAqB,MAAQA,IAAO,OAASA,EAAK,GAAM,mBAAoB8D,EAAK,KAAK,QAAQ,qBAAuB,MAAQA,IAAO,OAASA,EAAK,GAAO,SAAU,KAAK,QAAQ,UAAY,GAAO,qBAAsB,CAAC,KAAK,QAAQ,2BAA4B,UAAWC,EAAK,KAAK,QAAQ,YAAc,MAAQA,IAAO,OAASA,EAAKQ,EAAiB,KAAM,oBAAqB,KAAK,QAAQ,oBAAqB,OAAQ,KAAK,QAAQ,OAAQ,UAAW,KAAK,QAAQ,SAAS,CAAE,CAAC,CAC/pB,EACA5C,EAAgB,UAAU,SAAW,SAAUjD,EAAS,CAOhDA,EAAQ,OAAS,YACjB,KAAK,yBAAwB,EACzB,KAAK,QAAQ,kCACb,KAAK,uBAAsB,GAGnC,KAAK,eAAe,SAASA,CAAO,CACxC,EACAiD,EAAgB,UAAU,OAAS,SAAUvC,EAAU,CACnD,OAAO,KAAK,eAAe,cAAcA,CAAQ,CACrD,EAIAuC,EAAgB,UAAU,kBAAoB,UAAY,CACtD,IAAIwB,EAAQ,KAAK,SAAQ,EACrBqB,EAAa,OAAO,KAAKrB,CAAK,EAAE,OAAO,SAAUa,EAAMC,EAAM,CAC7D,IAAIlF,EACJ,OAAQI,EAASA,EAAS,GAAI6E,CAAI,GAAIjF,EAAK,GAAIA,EAAGkF,EAAK,QAAQ,IAAK,EAAE,CAAC,EAAI,CACvE,QAASd,EAAMc,CAAI,EAAE,KACrB,SAAU,EAC1B,EAAelF,EAAE,CACT,EAAG,CAAA,CAAE,EACL,OAAO,MAAM,wDAAyD,CAClE,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,MAAOyF,CAAU,CAAE,EAC1C,QAAS,CACL,OAAQ,mBACR,eAAgB,kBAChC,CACA,CAAS,EACI,KAAK,SAAUC,EAAG,CAAE,OAAOA,EAAE,KAAI,CAAI,CAAC,EACtC,KAAK,SAAUC,EAAK,CAAE,MAAQ,CAC/B,UAAWA,EAAI,WACf,UAAW,4BAA4B,OAAOA,EAAI,UAAU,EAC5D,SAAU,gCAAgC,OAAOA,EAAI,UAAU,CAC3E,CAAY,CAAC,CACT,EACA/C,EAAgB,UAAU,SAAW,UAAY,CAC7C,IAAII,EAAe,KAAK,aACxB,OAAIA,EAAa,MAAM,eAAe,IAAM,OACjC4C,EAAuB5C,EAAa,MAAOA,EAAa,aAAcA,EAAa,gBAAiBA,EAAa,KAAK,EAE1H,KAAK,aAAa,KAC7B,EACAJ,EAAgB,UAAU,kBAAoB,UAAY,CACtD,KAAK,OAAO,MAAM,OAAS,IAC3B,KAAK,OAAO,MAAM,MAAQ,KAAK,QAAQ,OAAS,OAChD,KAAK,OAAO,MAAM,OAAS,KAAK,QAAQ,QAAU,OAClD,KAAK,OAAO,MAAM,SAAW,SAC7BS,EAAW,KAAK,QAAQ,WAAY,0CAA0C,EAC9E,KAAK,QAAQ,WAAW,aAAa,KAAK,OAAQ,KAAK,OAAO,CAClE,EACOT,CACX,GAAEiD,CAAc","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"index-B6KXrLmj.js","sources":["../../../../../webui/node_modules/mime-db/index.js","../../../../../webui/node_modules/@codesandbox/sandpack-client/dist/clients/runtime/index.mjs"],"sourcesContent":["/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","import { _ as __awaiter, a as __generator, h as __assign, i as __spreadArray, g as __extends, b as createPackageJSON, c as createError, S as SandpackLogLevel, d as addPackageJSONIfNeeded, n as nullthrows, e as extractErrorDetails } from '../../utils-52664384.mjs';\nimport { dequal } from 'dequal';\nimport { S as SandpackClient } from '../../base-80a1f760.mjs';\nimport mimeDB from 'mime-db';\nimport 'outvariant';\n\n/**\n * This file is a copy of the resolver from the `codesandbox-api` package.\n * We wanted to avoid to reference codesandbox-api because of the code that runs on load in the package.\n * The plan is to take some time and refactor codesandbox-api into what it was supposed to be in the first place,\n * an abstraction over the actions that can be dispatched between the bundler and the iframe.\n */\nvar Protocol = /** @class */ (function () {\n function Protocol(type, handleMessage, protocol) {\n var _this = this;\n this.type = type;\n this.handleMessage = handleMessage;\n this.protocol = protocol;\n this._disposeMessageListener = this.protocol.channelListen(function (msg) { return __awaiter(_this, void 0, void 0, function () {\n var message, result, response, err_1, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(msg.type === this.getTypeId() && msg.method)) return [3 /*break*/, 4];\n message = msg;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.handleMessage(message)];\n case 2:\n result = _a.sent();\n response = {\n type: this.getTypeId(),\n msgId: message.msgId,\n result: result,\n };\n this.protocol.dispatch(response);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n response = {\n type: this.getTypeId(),\n msgId: message.msgId,\n error: {\n message: err_1.message,\n },\n };\n this.protocol.dispatch(response);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); });\n }\n Protocol.prototype.getTypeId = function () {\n return \"protocol-\".concat(this.type);\n };\n Protocol.prototype.dispose = function () {\n this._disposeMessageListener();\n };\n return Protocol;\n}());\n\nvar IFrameProtocol = /** @class */ (function () {\n function IFrameProtocol(iframe, origin) {\n // React to messages from any iframe\n this.globalListeners = {};\n this.globalListenersCount = 0;\n // React to messages from the iframe owned by this instance\n this.channelListeners = {};\n this.channelListenersCount = 0;\n // Random number to identify this instance of the client when messages are coming from multiple iframes\n this.channelId = Math.floor(Math.random() * 1000000);\n this.frameWindow = iframe.contentWindow;\n this.origin = origin;\n this.globalListeners = [];\n this.channelListeners = [];\n this.eventListener = this.eventListener.bind(this);\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", this.eventListener);\n }\n }\n IFrameProtocol.prototype.cleanup = function () {\n window.removeEventListener(\"message\", this.eventListener);\n this.globalListeners = {};\n this.channelListeners = {};\n this.globalListenersCount = 0;\n this.channelListenersCount = 0;\n };\n // Sends the channelId and triggers an iframeHandshake promise to resolve,\n // so the iframe can start listening for messages (based on the id)\n IFrameProtocol.prototype.register = function () {\n if (!this.frameWindow) {\n return;\n }\n this.frameWindow.postMessage({\n type: \"register-frame\",\n origin: document.location.origin,\n id: this.channelId,\n }, this.origin);\n };\n // Messages are dispatched from the client directly to the instance iframe\n IFrameProtocol.prototype.dispatch = function (message) {\n if (!this.frameWindow) {\n return;\n }\n this.frameWindow.postMessage(__assign({ $id: this.channelId, codesandbox: true }, message), this.origin);\n };\n // Add a listener that is called on any message coming from an iframe in the page\n // This is needed for the `initialize` message which comes without a channelId\n IFrameProtocol.prototype.globalListen = function (listener) {\n var _this = this;\n if (typeof listener !== \"function\") {\n return function () {\n return;\n };\n }\n var listenerId = this.globalListenersCount;\n this.globalListeners[listenerId] = listener;\n this.globalListenersCount++;\n return function () {\n delete _this.globalListeners[listenerId];\n };\n };\n // Add a listener that is called on any message coming from an iframe with the instance channelId\n // All other messages (eg: from other iframes) are ignored\n IFrameProtocol.prototype.channelListen = function (listener) {\n var _this = this;\n if (typeof listener !== \"function\") {\n return function () {\n return;\n };\n }\n var listenerId = this.channelListenersCount;\n this.channelListeners[listenerId] = listener;\n this.channelListenersCount++;\n return function () {\n delete _this.channelListeners[listenerId];\n };\n };\n // Handles message windows coming from iframes\n IFrameProtocol.prototype.eventListener = function (evt) {\n // skip events originating from different iframes\n if (evt.source !== this.frameWindow) {\n return;\n }\n var message = evt.data;\n if (!message.codesandbox) {\n return;\n }\n Object.values(this.globalListeners).forEach(function (listener) {\n return listener(message);\n });\n if (message.$id !== this.channelId) {\n return;\n }\n Object.values(this.channelListeners).forEach(function (listener) {\n return listener(message);\n });\n };\n return IFrameProtocol;\n}());\n\nvar extensionMap = new Map();\nvar entries = Object.entries(mimeDB);\nfor (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a$1 = entries_1[_i], mimetype = _a$1[0], entry = _a$1[1];\n // eslint-disable-next-line\n // @ts-ignore\n if (!entry.extensions) {\n continue;\n }\n // eslint-disable-next-line\n // @ts-ignore\n var extensions = entry.extensions;\n if (extensions.length) {\n for (var _b = 0, extensions_1 = extensions; _b < extensions_1.length; _b++) {\n var ext = extensions_1[_b];\n extensionMap.set(ext, mimetype);\n }\n }\n}\nvar EXTENSIONS_MAP = extensionMap;\n\nvar CHANNEL_NAME = \"$CSB_RELAY\";\n\nvar MAX_CLIENT_DEPENDENCY_COUNT = 50;\nfunction getTemplate(pkg, \n/* eslint-disable @typescript-eslint/no-explicit-any */\nmodules) {\n if (!pkg) {\n return \"static\";\n }\n var _a = pkg.dependencies, dependencies = _a === void 0 ? {} : _a, _b = pkg.devDependencies, devDependencies = _b === void 0 ? {} : _b;\n var totalDependencies = __spreadArray(__spreadArray([], Object.keys(dependencies), true), Object.keys(devDependencies), true);\n var moduleNames = Object.keys(modules);\n var adonis = [\"@adonisjs/framework\", \"@adonisjs/core\"];\n if (totalDependencies.some(function (dep) { return adonis.indexOf(dep) > -1; })) {\n return \"adonis\";\n }\n var nuxt = [\"nuxt\", \"nuxt-edge\", \"nuxt-ts\", \"nuxt-ts-edge\", \"nuxt3\"];\n if (totalDependencies.some(function (dep) { return nuxt.indexOf(dep) > -1; })) {\n return \"nuxt\";\n }\n if (totalDependencies.indexOf(\"next\") > -1) {\n return \"next\";\n }\n var apollo = [\n \"apollo-server\",\n \"apollo-server-express\",\n \"apollo-server-hapi\",\n \"apollo-server-koa\",\n \"apollo-server-lambda\",\n \"apollo-server-micro\",\n ];\n if (totalDependencies.some(function (dep) { return apollo.indexOf(dep) > -1; })) {\n return \"apollo\";\n }\n if (totalDependencies.indexOf(\"mdx-deck\") > -1) {\n return \"mdx-deck\";\n }\n if (totalDependencies.indexOf(\"gridsome\") > -1) {\n return \"gridsome\";\n }\n if (totalDependencies.indexOf(\"vuepress\") > -1) {\n return \"vuepress\";\n }\n if (totalDependencies.indexOf(\"ember-cli\") > -1) {\n return \"ember\";\n }\n if (totalDependencies.indexOf(\"sapper\") > -1) {\n return \"sapper\";\n }\n if (totalDependencies.indexOf(\"gatsby\") > -1) {\n return \"gatsby\";\n }\n if (totalDependencies.indexOf(\"quasar\") > -1) {\n return \"quasar\";\n }\n if (totalDependencies.indexOf(\"@docusaurus/core\") > -1) {\n return \"docusaurus\";\n }\n if (totalDependencies.indexOf(\"remix\") > -1) {\n return \"remix\";\n }\n if (totalDependencies.indexOf(\"astro\") > -1) {\n return \"node\";\n }\n // CLIENT\n if (moduleNames.some(function (m) { return m.endsWith(\".re\"); })) {\n return \"reason\";\n }\n var parcel = [\"parcel-bundler\", \"parcel\"];\n if (totalDependencies.some(function (dep) { return parcel.indexOf(dep) > -1; })) {\n return \"parcel\";\n }\n var dojo = [\"@dojo/core\", \"@dojo/framework\"];\n if (totalDependencies.some(function (dep) { return dojo.indexOf(dep) > -1; })) {\n return \"@dojo/cli-create-app\";\n }\n if (totalDependencies.indexOf(\"@nestjs/core\") > -1 ||\n totalDependencies.indexOf(\"@nestjs/common\") > -1) {\n return \"nest\";\n }\n if (totalDependencies.indexOf(\"react-styleguidist\") > -1) {\n return \"styleguidist\";\n }\n if (totalDependencies.indexOf(\"react-scripts\") > -1) {\n return \"create-react-app\";\n }\n if (totalDependencies.indexOf(\"react-scripts-ts\") > -1) {\n return \"create-react-app-typescript\";\n }\n if (totalDependencies.indexOf(\"@angular/core\") > -1) {\n return \"angular-cli\";\n }\n if (totalDependencies.indexOf(\"preact-cli\") > -1) {\n return \"preact-cli\";\n }\n if (totalDependencies.indexOf(\"@sveltech/routify\") > -1 ||\n totalDependencies.indexOf(\"@roxi/routify\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"vite\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"@frontity/core\") > -1) {\n return \"node\";\n }\n if (totalDependencies.indexOf(\"svelte\") > -1) {\n return \"svelte\";\n }\n if (totalDependencies.indexOf(\"vue\") > -1) {\n return \"vue-cli\";\n }\n if (totalDependencies.indexOf(\"cx\") > -1) {\n return \"cxjs\";\n }\n var nodeDeps = [\n \"express\",\n \"koa\",\n \"nodemon\",\n \"ts-node\",\n \"@tensorflow/tfjs-node\",\n \"webpack-dev-server\",\n \"snowpack\",\n ];\n if (totalDependencies.some(function (dep) { return nodeDeps.indexOf(dep) > -1; })) {\n return \"node\";\n }\n if (Object.keys(dependencies).length >= MAX_CLIENT_DEPENDENCY_COUNT) {\n // The dependencies are too much for client sandboxes to handle\n return \"node\";\n }\n return undefined;\n}\nfunction getExtension(filepath) {\n var parts = filepath.split(\".\");\n if (parts.length <= 1) {\n return \"\";\n }\n else {\n var ext = parts[parts.length - 1];\n return ext;\n }\n}\n\nvar _a;\nvar SUFFIX_PLACEHOLDER = \"-{{suffix}}\";\nvar BUNDLER_URL = \"https://\".concat((_a = \"2.19.8\") === null || _a === void 0 ? void 0 : _a.replace(/\\./g, \"-\")).concat(SUFFIX_PLACEHOLDER, \"-sandpack.codesandbox.io/\");\nvar SandpackRuntime = /** @class */ (function (_super) {\n __extends(SandpackRuntime, _super);\n function SandpackRuntime(selector, sandboxSetup, options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this, selector, sandboxSetup, options) || this;\n _this.getTranspilerContext = function () {\n return new Promise(function (resolve) {\n var unsubscribe = _this.listen(function (message) {\n if (message.type === \"transpiler-context\") {\n resolve(message.data);\n unsubscribe();\n }\n });\n _this.dispatch({ type: \"get-transpiler-context\" });\n });\n };\n _this.getTranspiledFiles = function () {\n return new Promise(function (resolve) {\n var unsubscribe = _this.listen(function (message) {\n if (message.type === \"all-modules\") {\n resolve(message.data);\n unsubscribe();\n }\n });\n _this.dispatch({ type: \"get-modules\" });\n });\n };\n _this.bundlerURL = _this.createBundlerURL();\n _this.bundlerState = undefined;\n _this.errors = [];\n _this.status = \"initializing\";\n if (typeof selector === \"string\") {\n _this.selector = selector;\n var element = document.querySelector(selector);\n nullthrows(element, \"The element '\".concat(selector, \"' was not found\"));\n _this.element = element;\n _this.iframe = document.createElement(\"iframe\");\n _this.initializeElement();\n }\n else {\n _this.element = selector;\n _this.iframe = selector;\n }\n if (!_this.iframe.getAttribute(\"sandbox\")) {\n _this.iframe.setAttribute(\"sandbox\", \"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-downloads allow-pointer-lock\");\n _this.iframe.setAttribute(\"allow\", \"accelerometer; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; clipboard-read; clipboard-write; xr-spatial-tracking;\");\n }\n _this.setLocationURLIntoIFrame();\n _this.iframeProtocol = new IFrameProtocol(_this.iframe, _this.bundlerURL);\n _this.unsubscribeGlobalListener = _this.iframeProtocol.globalListen(function (mes) {\n if (mes.type !== \"initialized\" || !_this.iframe.contentWindow) {\n return;\n }\n _this.iframeProtocol.register();\n if (_this.options.fileResolver) {\n _this.fileResolverProtocol = new Protocol(\"fs\", function (data) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (data.method === \"isFile\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [2 /*return*/, this.options.fileResolver.isFile(data.params[0])];\n }\n else if (data.method === \"readFile\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [2 /*return*/, this.options.fileResolver.readFile(data.params[0])];\n }\n else {\n throw new Error(\"Method not supported\");\n }\n });\n }); }, _this.iframeProtocol);\n }\n _this.updateSandbox(_this.sandboxSetup, true);\n });\n _this.unsubscribeChannelListener = _this.iframeProtocol.channelListen(function (mes) {\n switch (mes.type) {\n case \"start\": {\n _this.errors = [];\n break;\n }\n case \"status\": {\n _this.status = mes.status;\n break;\n }\n case \"action\": {\n if (mes.action === \"show-error\") {\n _this.errors = __spreadArray(__spreadArray([], _this.errors, true), [extractErrorDetails(mes)], false);\n }\n break;\n }\n case \"done\": {\n _this.status = \"done\";\n break;\n }\n case \"state\": {\n _this.bundlerState = mes.state;\n break;\n }\n }\n });\n if (options.experimental_enableServiceWorker) {\n _this.serviceWorkerHandshake();\n }\n return _this;\n }\n SandpackRuntime.prototype.createBundlerURL = function () {\n var _a;\n var bundlerURL = this.options.bundlerURL || BUNDLER_URL;\n // if it's a custom, skip the rest\n if (this.options.bundlerURL) {\n return bundlerURL;\n }\n if (this.options.teamId) {\n bundlerURL =\n bundlerURL.replace(\"https://\", \"https://\" + this.options.teamId + \"-\") +\n \"?cache=\".concat(Date.now());\n }\n if (this.options.experimental_enableServiceWorker) {\n var suffixes = [];\n suffixes.push(Math.random().toString(36).slice(4));\n bundlerURL = bundlerURL.replace(SUFFIX_PLACEHOLDER, \"-\".concat((_a = this.options.experimental_stableServiceWorkerId) !== null && _a !== void 0 ? _a : suffixes.join(\"-\")));\n }\n else {\n bundlerURL = bundlerURL.replace(SUFFIX_PLACEHOLDER, \"\");\n }\n return bundlerURL;\n };\n SandpackRuntime.prototype.serviceWorkerHandshake = function () {\n var _this = this;\n var channel = new MessageChannel();\n var iframeContentWindow = this.iframe.contentWindow;\n if (!iframeContentWindow) {\n throw new Error(\"Could not get iframe contentWindow\");\n }\n var port = channel.port1;\n port.onmessage = function (evt) {\n if (typeof evt.data === \"object\" && evt.data.$channel === CHANNEL_NAME) {\n switch (evt.data.$type) {\n case \"preview/ready\":\n // no op for now\n break;\n case \"preview/request\":\n _this.handleWorkerRequest(evt.data, port);\n break;\n }\n }\n };\n var sendMessage = function () {\n var initMsg = {\n $channel: CHANNEL_NAME,\n $type: \"preview/init\",\n };\n iframeContentWindow.postMessage(initMsg, \"*\", [channel.port2]);\n _this.iframe.removeEventListener(\"load\", sendMessage);\n };\n this.iframe.addEventListener(\"load\", sendMessage);\n };\n SandpackRuntime.prototype.handleWorkerRequest = function (request, port) {\n return __awaiter(this, void 0, void 0, function () {\n var notFound, filepath_1, headers, files, file, modulesFromManager, body, extension, foundMimetype, responseMessage, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n notFound = function () {\n var responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n },\n status: 404,\n body: \"File not found\",\n };\n port.postMessage(responseMessage);\n };\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, , 5]);\n filepath_1 = new URL(request.url, this.bundlerURL).pathname;\n headers = {};\n files = this.getFiles();\n file = files[filepath_1];\n if (!!file) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getTranspiledFiles()];\n case 2:\n modulesFromManager = _a.sent();\n file = modulesFromManager.find(function (item) {\n return item.path.endsWith(filepath_1);\n });\n if (!file) {\n notFound();\n return [2 /*return*/];\n }\n _a.label = 3;\n case 3:\n body = file.code;\n if (!headers[\"Content-Type\"]) {\n extension = getExtension(filepath_1);\n foundMimetype = EXTENSIONS_MAP.get(extension);\n if (foundMimetype) {\n headers[\"Content-Type\"] = foundMimetype;\n }\n }\n responseMessage = {\n $channel: CHANNEL_NAME,\n $type: \"preview/response\",\n id: request.id,\n headers: headers,\n status: 200,\n body: body,\n };\n port.postMessage(responseMessage);\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n console.error(err_1);\n notFound();\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n SandpackRuntime.prototype.setLocationURLIntoIFrame = function () {\n var _a;\n var urlSource = this.options.startRoute\n ? new URL(this.options.startRoute, this.bundlerURL).toString()\n : this.bundlerURL;\n (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.location.replace(urlSource);\n this.iframe.src = urlSource;\n };\n SandpackRuntime.prototype.destroy = function () {\n this.unsubscribeChannelListener();\n this.unsubscribeGlobalListener();\n this.iframeProtocol.cleanup();\n };\n SandpackRuntime.prototype.updateOptions = function (options) {\n if (!dequal(this.options, options)) {\n this.options = options;\n this.updateSandbox();\n }\n };\n SandpackRuntime.prototype.updateSandbox = function (sandboxSetup, isInitializationCompile) {\n var _a, _b, _c, _d;\n if (sandboxSetup === void 0) { sandboxSetup = this.sandboxSetup; }\n this.sandboxSetup = __assign(__assign({}, this.sandboxSetup), sandboxSetup);\n var files = this.getFiles();\n var modules = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next] = {\n code: files[next].code,\n path: next,\n }, _a)));\n }, {});\n var packageJSON = JSON.parse(createPackageJSON(this.sandboxSetup.dependencies, this.sandboxSetup.devDependencies, this.sandboxSetup.entry));\n try {\n packageJSON = JSON.parse(files[\"/package.json\"].code);\n }\n catch (e) {\n console.error(createError(\"could not parse package.json file: \" + e.message));\n }\n // TODO move this to a common format\n var normalizedModules = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next] = {\n content: files[next].code,\n path: next,\n }, _a)));\n }, {});\n this.dispatch(__assign(__assign({}, this.options), { type: \"compile\", codesandbox: true, version: 3, isInitializationCompile: isInitializationCompile, modules: modules, reactDevTools: this.options.reactDevTools, externalResources: this.options.externalResources || [], hasFileResolver: Boolean(this.options.fileResolver), disableDependencyPreprocessing: this.sandboxSetup.disableDependencyPreprocessing, experimental_enableServiceWorker: this.options.experimental_enableServiceWorker, template: this.sandboxSetup.template ||\n getTemplate(packageJSON, normalizedModules), showOpenInCodeSandbox: (_a = this.options.showOpenInCodeSandbox) !== null && _a !== void 0 ? _a : true, showErrorScreen: (_b = this.options.showErrorScreen) !== null && _b !== void 0 ? _b : true, showLoadingScreen: (_c = this.options.showLoadingScreen) !== null && _c !== void 0 ? _c : false, skipEval: this.options.skipEval || false, clearConsoleDisabled: !this.options.clearConsoleOnFirstCompile, logLevel: (_d = this.options.logLevel) !== null && _d !== void 0 ? _d : SandpackLogLevel.Info, customNpmRegistries: this.options.customNpmRegistries, teamId: this.options.teamId, sandboxId: this.options.sandboxId }));\n };\n SandpackRuntime.prototype.dispatch = function (message) {\n /**\n * Intercept \"refresh\" dispatch: this will make sure\n * that the iframe is still in the location it's supposed to be.\n * External links inside the iframe will change the location and\n * prevent the user from navigating back.\n */\n if (message.type === \"refresh\") {\n this.setLocationURLIntoIFrame();\n if (this.options.experimental_enableServiceWorker) {\n this.serviceWorkerHandshake();\n }\n }\n this.iframeProtocol.dispatch(message);\n };\n SandpackRuntime.prototype.listen = function (listener) {\n return this.iframeProtocol.channelListen(listener);\n };\n /**\n * Get the URL of the contents of the current sandbox\n */\n SandpackRuntime.prototype.getCodeSandboxURL = function () {\n var files = this.getFiles();\n var paramFiles = Object.keys(files).reduce(function (prev, next) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[next.replace(\"/\", \"\")] = {\n content: files[next].code,\n isBinary: false,\n }, _a)));\n }, {});\n return fetch(\"https://codesandbox.io/api/v1/sandboxes/define?json=1\", {\n method: \"POST\",\n body: JSON.stringify({ files: paramFiles }),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n .then(function (x) { return x.json(); })\n .then(function (res) { return ({\n sandboxId: res.sandbox_id,\n editorUrl: \"https://codesandbox.io/s/\".concat(res.sandbox_id),\n embedUrl: \"https://codesandbox.io/embed/\".concat(res.sandbox_id),\n }); });\n };\n SandpackRuntime.prototype.getFiles = function () {\n var sandboxSetup = this.sandboxSetup;\n if (sandboxSetup.files[\"/package.json\"] === undefined) {\n return addPackageJSONIfNeeded(sandboxSetup.files, sandboxSetup.dependencies, sandboxSetup.devDependencies, sandboxSetup.entry);\n }\n return this.sandboxSetup.files;\n };\n SandpackRuntime.prototype.initializeElement = function () {\n this.iframe.style.border = \"0\";\n this.iframe.style.width = this.options.width || \"100%\";\n this.iframe.style.height = this.options.height || \"100%\";\n this.iframe.style.overflow = \"hidden\";\n nullthrows(this.element.parentNode, \"The given iframe does not have a parent.\");\n this.element.parentNode.replaceChild(this.iframe, this.element);\n };\n return SandpackRuntime;\n}(SandpackClient));\n\nexport { SandpackRuntime };\n"],"names":["mimeDb","require$$0","Protocol","type","handleMessage","protocol","_this","msg","__awaiter","message","result","response","err_1","__generator","_a","IFrameProtocol","iframe","origin","__assign","listener","listenerId","evt","extensionMap","entries","mimeDB","_i","entries_1","_a$1","mimetype","entry","extensions","_b","extensions_1","ext","EXTENSIONS_MAP","CHANNEL_NAME","MAX_CLIENT_DEPENDENCY_COUNT","getTemplate","pkg","modules","dependencies","devDependencies","totalDependencies","__spreadArray","moduleNames","adonis","dep","nuxt","apollo","m","parcel","dojo","nodeDeps","getExtension","filepath","parts","SUFFIX_PLACEHOLDER","BUNDLER_URL","SandpackRuntime","_super","__extends","selector","sandboxSetup","options","resolve","unsubscribe","element","nullthrows","mes","data","extractErrorDetails","bundlerURL","suffixes","channel","iframeContentWindow","port","sendMessage","initMsg","request","notFound","filepath_1","headers","files","file","modulesFromManager","body","extension","foundMimetype","responseMessage","item","urlSource","dequal","isInitializationCompile","_c","_d","prev","next","packageJSON","createPackageJSON","e","createError","normalizedModules","SandpackLogLevel","paramFiles","x","res","addPackageJSONIfNeeded","SandpackClient"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/massgen/frontend/web/static/assets/index-yx4Z55Qu.js b/massgen/frontend/web/static/assets/index-DbSnkTMx.js similarity index 85% rename from massgen/frontend/web/static/assets/index-yx4Z55Qu.js rename to massgen/frontend/web/static/assets/index-DbSnkTMx.js index f77f96412..d772af61a 100644 --- a/massgen/frontend/web/static/assets/index-yx4Z55Qu.js +++ b/massgen/frontend/web/static/assets/index-DbSnkTMx.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/angular-html-LfdN0zeE.js","assets/html-C2L_23MC.js","assets/javascript-ySlJ1b_l.js","assets/css-BPhBrDlE.js","assets/angular-ts-CKsD7JZE.js","assets/scss-C31hgJw-.js","assets/apl-BBq3IX1j.js","assets/xml-e3z08dGr.js","assets/java-xI-RfyKK.js","assets/json-BQoSv7ci.js","assets/astro-CqkE3fuf.js","assets/typescript-Dj6nwHGl.js","assets/postcss-B3ZDOciz.js","assets/blade-a8OxSdnT.js","assets/sql-COK4E0Yg.js","assets/bsl-Dgyn0ogV.js","assets/sdbl-BLhTXw86.js","assets/cairo--RitsXJZ.js","assets/python-DhUJRlN_.js","assets/cobol-PTqiYgYu.js","assets/coffee-dyiR41kL.js","assets/cpp-BksuvNSY.js","assets/regexp-DWJ3fJO_.js","assets/glsl-DBO2IWDn.js","assets/c-C3t2pwGQ.js","assets/crystal-DtDmRg-F.js","assets/shellscript-atvbtKCR.js","assets/edge-D5gP-w-T.js","assets/html-derivative-CSfWNPLT.js","assets/elixir-CLiX3zqd.js","assets/elm-CmHSxxaM.js","assets/erb-BYTLMnw6.js","assets/ruby-DeZ3UC14.js","assets/haml-B2EZWmdv.js","assets/graphql-cDcHW_If.js","assets/jsx-BAng5TT0.js","assets/tsx-B6W0miNI.js","assets/lua-CvWAzNxB.js","assets/yaml-CVw76BM1.js","assets/fortran-fixed-form-TqA4NnZg.js","assets/fortran-free-form-DKXYxT9g.js","assets/fsharp-XplgxFYe.js","assets/markdown-UIAJJxZW.js","assets/gdresource-BHYsBjWJ.js","assets/gdshader-SKMF96pI.js","assets/gdscript-DfxzS6Rs.js","assets/git-commit-i4q6IMui.js","assets/diff-BgYniUM_.js","assets/git-rebase-B-v9cOL2.js","assets/glimmer-js-D-cwc0-E.js","assets/glimmer-ts-pgjy16dm.js","assets/hack-D1yCygmZ.js","assets/handlebars-BQGss363.js","assets/http-FRrOvY1W.js","assets/hxml-TIA70rKU.js","assets/haxe-C5wWYbrZ.js","assets/imba-bv_oIlVt.js","assets/jinja-DGy0s7-h.js","assets/jison-BqZprYcd.js","assets/julia-BBuGR-5E.js","assets/r-CwjWoCRV.js","assets/latex-C-cWTeAZ.js","assets/tex-rYs2v40G.js","assets/liquid-D3W5UaiH.js","assets/marko-z0MBrx5-.js","assets/less-BfCpw3nA.js","assets/mdc-DB_EDNY_.js","assets/nginx-D_VnBJ67.js","assets/nim-ZlGxZxc3.js","assets/perl-CHQXSrWU.js","assets/php-B5ebYQev.js","assets/pug-CM9l7STV.js","assets/qml-D8XfuvdV.js","assets/razor-CNLDkMZG.js","assets/csharp-D9R-vmeu.js","assets/rst-4NLicBqY.js","assets/cmake-DbXoA79R.js","assets/sas-BmTFh92c.js","assets/shaderlab-B7qAK45m.js","assets/hlsl-ifBTmRxC.js","assets/shellsession-C_rIy8kc.js","assets/soy-C-lX7w71.js","assets/sparql-bYkjHRlG.js","assets/turtle-BMR_PYu6.js","assets/stata-DorPZHa4.js","assets/svelte-MSaWC3Je.js","assets/templ-dwX3ZSMB.js","assets/go-B1SYOhNW.js","assets/ts-tags-CipyTH0X.js","assets/twig-NC5TFiHP.js","assets/vue-BuYVFjOK.js","assets/vue-html-xdeiXROB.js","assets/xsl-Dd0NUgwM.js","assets/dagre-6UL2VRFP-BTZbZ3_n.js","assets/graph-4lxArx4u.js","assets/_baseUniq-LXHsPSjj.js","assets/layout-C3hQsxO7.js","assets/min-DVxmWhZZ.js","assets/clone-DEFp9e4A.js","assets/cose-bilkent-S5V4N54A-m9SYVIAm.js","assets/cytoscape.esm-BQaXIfA_.js","assets/c4Diagram-YG6GDRKO-CiZrgHxU.js","assets/chunk-TZMSLE5B-C8IfDZlM.js","assets/flowDiagram-NV44I4VS-Cp4s3Hyk.js","assets/chunk-FMBD7UC4-LU2vPcC6.js","assets/chunk-55IACEB6-BCQD3dNT.js","assets/chunk-QN33PNHL-BF8yyMHO.js","assets/channel-5fWG1b_w.js","assets/erDiagram-Q2GNP2WA-CjHoERSg.js","assets/gitGraphDiagram-NY62KEGX-BzSroKjP.js","assets/chunk-4BX2VUAB-zPP-xzOW.js","assets/chunk-QZHKN3VN-unwNdMgy.js","assets/treemap-KMMF4GRG-DeY5gSJ9.js","assets/ganttDiagram-JELNMOA3-Q89hSTWi.js","assets/linear-gEIXbWvC.js","assets/init-Gi6I4Gst.js","assets/defaultLocale-C4B-KCzX.js","assets/infoDiagram-WHAUD3N6-DBY6QyWm.js","assets/pieDiagram-ADFJNKIX-DgEwNDEt.js","assets/arc-D5_FvRk_.js","assets/ordinal-Cboi1Yqb.js","assets/quadrantDiagram-AYHSOK5B-CBANFz8J.js","assets/xychartDiagram-PRI3JC2R-Ccp89lGd.js","assets/requirementDiagram-UZGBJVZJ-R4xBAT0M.js","assets/sequenceDiagram-WL72ISMW-kvsDGJrh.js","assets/classDiagram-2ON5EDUG-BpsTyZ4V.js","assets/chunk-B4BG7PRW-CuEEgxYu.js","assets/classDiagram-v2-WZHVMYZB-BpsTyZ4V.js","assets/stateDiagram-FKZM4ZOC-By01-tOV.js","assets/chunk-DI55MBZ5-CBue57Xd.js","assets/stateDiagram-v2-4FDKWEC3-wFOv_OaT.js","assets/journeyDiagram-XKPGCS4Q-CwhIkHh1.js","assets/timeline-definition-IT6M3QCI-BtA_nHuH.js","assets/mindmap-definition-VGOIOE7T-CfdD4C59.js","assets/kanban-definition-3W4ZIXB7-5XVtrdwC.js","assets/sankeyDiagram-TZEHDZUN-DRJzI-mU.js","assets/diagram-S2PKOQOG-BC61eUIc.js","assets/diagram-QEK2KX5R-BzZrhy2L.js","assets/blockDiagram-VD42YOAC-8CX8JZj7.js","assets/architectureDiagram-VXUJARFQ-DoviFfeW.js","assets/diagram-PSM6KHXK-BAtW2jSB.js","assets/index-l3yvhGKP.js","assets/base-80a1f760-Byw-bEXF.js","assets/consoleHook-59e792cb-BtJ0yZKI.js","assets/index-599aeaf7-DsfSQr-O.js","assets/index-DWtymVMa.js"])))=>i.map(i=>d[i]); -var aie=Object.defineProperty;var sie=(t,e,r)=>e in t?aie(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Me=(t,e,r)=>sie(t,typeof e!="symbol"?e+"":e,r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=r(i);fetch(i.href,a)}})();var Dc=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function kh(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function oie(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if(typeof e=="function"){var r=function n(){return this instanceof n?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}),r}var s_={exports:{}},Vp={},o_={exports:{}},cr={};/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/angular-html-LfdN0zeE.js","assets/html-C2L_23MC.js","assets/javascript-ySlJ1b_l.js","assets/css-BPhBrDlE.js","assets/angular-ts-CKsD7JZE.js","assets/scss-C31hgJw-.js","assets/apl-BBq3IX1j.js","assets/xml-e3z08dGr.js","assets/java-xI-RfyKK.js","assets/json-BQoSv7ci.js","assets/astro-CqkE3fuf.js","assets/typescript-Dj6nwHGl.js","assets/postcss-B3ZDOciz.js","assets/blade-a8OxSdnT.js","assets/sql-COK4E0Yg.js","assets/bsl-Dgyn0ogV.js","assets/sdbl-BLhTXw86.js","assets/cairo--RitsXJZ.js","assets/python-DhUJRlN_.js","assets/cobol-PTqiYgYu.js","assets/coffee-dyiR41kL.js","assets/cpp-BksuvNSY.js","assets/regexp-DWJ3fJO_.js","assets/glsl-DBO2IWDn.js","assets/c-C3t2pwGQ.js","assets/crystal-DtDmRg-F.js","assets/shellscript-atvbtKCR.js","assets/edge-D5gP-w-T.js","assets/html-derivative-CSfWNPLT.js","assets/elixir-CLiX3zqd.js","assets/elm-CmHSxxaM.js","assets/erb-BYTLMnw6.js","assets/ruby-DeZ3UC14.js","assets/haml-B2EZWmdv.js","assets/graphql-cDcHW_If.js","assets/jsx-BAng5TT0.js","assets/tsx-B6W0miNI.js","assets/lua-CvWAzNxB.js","assets/yaml-CVw76BM1.js","assets/fortran-fixed-form-TqA4NnZg.js","assets/fortran-free-form-DKXYxT9g.js","assets/fsharp-XplgxFYe.js","assets/markdown-UIAJJxZW.js","assets/gdresource-BHYsBjWJ.js","assets/gdshader-SKMF96pI.js","assets/gdscript-DfxzS6Rs.js","assets/git-commit-i4q6IMui.js","assets/diff-BgYniUM_.js","assets/git-rebase-B-v9cOL2.js","assets/glimmer-js-D-cwc0-E.js","assets/glimmer-ts-pgjy16dm.js","assets/hack-D1yCygmZ.js","assets/handlebars-BQGss363.js","assets/http-FRrOvY1W.js","assets/hxml-TIA70rKU.js","assets/haxe-C5wWYbrZ.js","assets/imba-bv_oIlVt.js","assets/jinja-DGy0s7-h.js","assets/jison-BqZprYcd.js","assets/julia-BBuGR-5E.js","assets/r-CwjWoCRV.js","assets/latex-C-cWTeAZ.js","assets/tex-rYs2v40G.js","assets/liquid-D3W5UaiH.js","assets/marko-z0MBrx5-.js","assets/less-BfCpw3nA.js","assets/mdc-DB_EDNY_.js","assets/nginx-D_VnBJ67.js","assets/nim-ZlGxZxc3.js","assets/perl-CHQXSrWU.js","assets/php-B5ebYQev.js","assets/pug-CM9l7STV.js","assets/qml-D8XfuvdV.js","assets/razor-CNLDkMZG.js","assets/csharp-D9R-vmeu.js","assets/rst-4NLicBqY.js","assets/cmake-DbXoA79R.js","assets/sas-BmTFh92c.js","assets/shaderlab-B7qAK45m.js","assets/hlsl-ifBTmRxC.js","assets/shellsession-C_rIy8kc.js","assets/soy-C-lX7w71.js","assets/sparql-bYkjHRlG.js","assets/turtle-BMR_PYu6.js","assets/stata-DorPZHa4.js","assets/svelte-MSaWC3Je.js","assets/templ-dwX3ZSMB.js","assets/go-B1SYOhNW.js","assets/ts-tags-CipyTH0X.js","assets/twig-NC5TFiHP.js","assets/vue-BuYVFjOK.js","assets/vue-html-xdeiXROB.js","assets/xsl-Dd0NUgwM.js","assets/dagre-6UL2VRFP-CF9gbs_G.js","assets/graph-ClFPgZSo.js","assets/_baseUniq-CR-Qd8A8.js","assets/layout-BnnDy5vP.js","assets/min-jMRXb9Wh.js","assets/clone-OwIowIht.js","assets/cose-bilkent-S5V4N54A-AeeFqK7R.js","assets/cytoscape.esm-BQaXIfA_.js","assets/c4Diagram-YG6GDRKO-_P4hKvfx.js","assets/chunk-TZMSLE5B-CD_nzC2y.js","assets/flowDiagram-NV44I4VS-twM9GedW.js","assets/chunk-FMBD7UC4-DgHqX2i6.js","assets/chunk-55IACEB6-Do1tLUXI.js","assets/chunk-QN33PNHL-Bl50RaE-.js","assets/channel-B_f67D__.js","assets/erDiagram-Q2GNP2WA-BhRn-28Q.js","assets/gitGraphDiagram-NY62KEGX-CkEH2745.js","assets/chunk-4BX2VUAB-PBVZf6Qi.js","assets/chunk-QZHKN3VN-C81fAOmv.js","assets/treemap-KMMF4GRG-DVJsp5UK.js","assets/ganttDiagram-JELNMOA3-OdbUz5AC.js","assets/linear-vOg2Esoh.js","assets/init-Gi6I4Gst.js","assets/defaultLocale-C4B-KCzX.js","assets/infoDiagram-WHAUD3N6-DH2Hg6N0.js","assets/pieDiagram-ADFJNKIX-bJlbeHO0.js","assets/arc-BofFEJ5q.js","assets/ordinal-Cboi1Yqb.js","assets/quadrantDiagram-AYHSOK5B-B0-ubiqb.js","assets/xychartDiagram-PRI3JC2R-BPByL22Q.js","assets/requirementDiagram-UZGBJVZJ-BdqhZHo5.js","assets/sequenceDiagram-WL72ISMW-C_LK9HjC.js","assets/classDiagram-2ON5EDUG-hvWxBdVY.js","assets/chunk-B4BG7PRW-CEAtt3i9.js","assets/classDiagram-v2-WZHVMYZB-hvWxBdVY.js","assets/stateDiagram-FKZM4ZOC-Df5QS7sL.js","assets/chunk-DI55MBZ5-DM-WLRaf.js","assets/stateDiagram-v2-4FDKWEC3-Cg7NaLjv.js","assets/journeyDiagram-XKPGCS4Q-DJCsF-Wa.js","assets/timeline-definition-IT6M3QCI-COSK_iIx.js","assets/mindmap-definition-VGOIOE7T-DMcUG3Lh.js","assets/kanban-definition-3W4ZIXB7-BOB9QaC1.js","assets/sankeyDiagram-TZEHDZUN-BVTgxwsP.js","assets/diagram-S2PKOQOG-Cv1vwD4q.js","assets/diagram-QEK2KX5R-CTDcm0Uh.js","assets/blockDiagram-VD42YOAC-BaEv4oIa.js","assets/architectureDiagram-VXUJARFQ-CSLO5JFe.js","assets/diagram-PSM6KHXK-DQIU_Et_.js","assets/index-hjv8wOnm.js","assets/base-80a1f760-CNB8plsN.js","assets/consoleHook-59e792cb-CpqUu8vm.js","assets/index-599aeaf7-DH1qEGyX.js","assets/index-B6KXrLmj.js"])))=>i.map(i=>d[i]); +var sie=Object.defineProperty;var oie=(t,e,r)=>e in t?sie(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Me=(t,e,r)=>oie(t,typeof e!="symbol"?e+"":e,r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=r(i);fetch(i.href,a)}})();var Dc=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function kh(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function lie(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if(typeof e=="function"){var r=function n(){return this instanceof n?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}),r}var s_={exports:{}},Vp={},o_={exports:{}},cr={};/** * @license React * react.production.min.js * @@ -7,7 +7,7 @@ var aie=Object.defineProperty;var sie=(t,e,r)=>e in t?aie(t,e,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var d6;function lie(){if(d6)return cr;d6=1;var t=Symbol.for("react.element"),e=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),a=Symbol.for("react.provider"),s=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),c=Symbol.for("react.memo"),u=Symbol.for("react.lazy"),h=Symbol.iterator;function d(L){return L===null||typeof L!="object"?null:(L=h&&L[h]||L["@@iterator"],typeof L=="function"?L:null)}var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,m={};function v(L,R,W){this.props=L,this.context=R,this.refs=m,this.updater=W||f}v.prototype.isReactComponent={},v.prototype.setState=function(L,R){if(typeof L!="object"&&typeof L!="function"&&L!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,L,R,"setState")},v.prototype.forceUpdate=function(L){this.updater.enqueueForceUpdate(this,L,"forceUpdate")};function b(){}b.prototype=v.prototype;function w(L,R,W){this.props=L,this.context=R,this.refs=m,this.updater=W||f}var O=w.prototype=new b;O.constructor=w,g(O,v.prototype),O.isPureReactComponent=!0;var S=Array.isArray,T=Object.prototype.hasOwnProperty,_={current:null},C={key:!0,ref:!0,__self:!0,__source:!0};function D(L,R,W){var G,Y={},J=null,ce=null;if(R!=null)for(G in R.ref!==void 0&&(ce=R.ref),R.key!==void 0&&(J=""+R.key),R)T.call(R,G)&&!C.hasOwnProperty(G)&&(Y[G]=R[G]);var ae=arguments.length-2;if(ae===1)Y.children=W;else if(1e in t?aie(t,e,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var p6;function cie(){if(p6)return Vp;p6=1;var t=O3(),e=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,i=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function s(o,l,c){var u,h={},d=null,f=null;c!==void 0&&(d=""+c),l.key!==void 0&&(d=""+l.key),l.ref!==void 0&&(f=l.ref);for(u in l)n.call(l,u)&&!a.hasOwnProperty(u)&&(h[u]=l[u]);if(o&&o.defaultProps)for(u in l=o.defaultProps,l)h[u]===void 0&&(h[u]=l[u]);return{$$typeof:e,type:o,key:d,ref:f,props:h,_owner:i.current}}return Vp.Fragment=r,Vp.jsx=s,Vp.jsxs=s,Vp}var g6;function uie(){return g6||(g6=1,s_.exports=cie()),s_.exports}var x=uie(),U=O3();const Cd=kh(U);var T1={},l_={exports:{}},ba={},c_={exports:{}},u_={};/** + */var p6;function uie(){if(p6)return Vp;p6=1;var t=O3(),e=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,i=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function s(o,l,c){var u,h={},d=null,f=null;c!==void 0&&(d=""+c),l.key!==void 0&&(d=""+l.key),l.ref!==void 0&&(f=l.ref);for(u in l)n.call(l,u)&&!a.hasOwnProperty(u)&&(h[u]=l[u]);if(o&&o.defaultProps)for(u in l=o.defaultProps,l)h[u]===void 0&&(h[u]=l[u]);return{$$typeof:e,type:o,key:d,ref:f,props:h,_owner:i.current}}return Vp.Fragment=r,Vp.jsx=s,Vp.jsxs=s,Vp}var g6;function hie(){return g6||(g6=1,s_.exports=uie()),s_.exports}var x=hie(),U=O3();const Cd=kh(U);var T1={},l_={exports:{}},ba={},c_={exports:{}},u_={};/** * @license React * scheduler.production.min.js * @@ -23,7 +23,7 @@ var aie=Object.defineProperty;var sie=(t,e,r)=>e in t?aie(t,e,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var m6;function hie(){return m6||(m6=1,(function(t){function e(Z,H){var re=Z.length;Z.push(H);e:for(;0>>1,R=Z[L];if(0>>1;Li(Y,re))Ji(ce,Y)?(Z[L]=ce,Z[J]=re,L=J):(Z[L]=Y,Z[G]=re,L=G);else if(Ji(ce,re))Z[L]=ce,Z[J]=re,L=J;else break e}}return H}function i(Z,H){var re=Z.sortIndex-H.sortIndex;return re!==0?re:Z.id-H.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var l=[],c=[],u=1,h=null,d=3,f=!1,g=!1,m=!1,v=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function O(Z){for(var H=r(c);H!==null;){if(H.callback===null)n(c);else if(H.startTime<=Z)n(c),H.sortIndex=H.expirationTime,e(l,H);else break;H=r(c)}}function S(Z){if(m=!1,O(Z),!g)if(r(l)!==null)g=!0,j(T);else{var H=r(c);H!==null&&z(S,H.startTime-Z)}}function T(Z,H){g=!1,m&&(m=!1,b(D),D=-1),f=!0;var re=d;try{for(O(H),h=r(l);h!==null&&(!(h.expirationTime>H)||Z&&!M());){var L=h.callback;if(typeof L=="function"){h.callback=null,d=h.priorityLevel;var R=L(h.expirationTime<=H);H=t.unstable_now(),typeof R=="function"?h.callback=R:h===r(l)&&n(l),O(H)}else n(l);h=r(l)}if(h!==null)var W=!0;else{var G=r(c);G!==null&&z(S,G.startTime-H),W=!1}return W}finally{h=null,d=re,f=!1}}var _=!1,C=null,D=-1,A=5,I=-1;function M(){return!(t.unstable_now()-IZ||125L?(Z.sortIndex=re,e(c,Z),r(l)===null&&Z===r(c)&&(m?(b(D),D=-1):m=!0,z(S,re-L))):(Z.sortIndex=R,e(l,Z),g||f||(g=!0,j(T))),Z},t.unstable_shouldYield=M,t.unstable_wrapCallback=function(Z){var H=d;return function(){var re=d;d=H;try{return Z.apply(this,arguments)}finally{d=re}}}})(u_)),u_}var x6;function die(){return x6||(x6=1,c_.exports=hie()),c_.exports}/** + */var m6;function die(){return m6||(m6=1,(function(t){function e(Z,H){var re=Z.length;Z.push(H);e:for(;0>>1,R=Z[L];if(0>>1;Li(Y,re))Ji(ce,Y)?(Z[L]=ce,Z[J]=re,L=J):(Z[L]=Y,Z[G]=re,L=G);else if(Ji(ce,re))Z[L]=ce,Z[J]=re,L=J;else break e}}return H}function i(Z,H){var re=Z.sortIndex-H.sortIndex;return re!==0?re:Z.id-H.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var l=[],c=[],u=1,h=null,d=3,f=!1,g=!1,m=!1,v=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function O(Z){for(var H=r(c);H!==null;){if(H.callback===null)n(c);else if(H.startTime<=Z)n(c),H.sortIndex=H.expirationTime,e(l,H);else break;H=r(c)}}function S(Z){if(m=!1,O(Z),!g)if(r(l)!==null)g=!0,j(T);else{var H=r(c);H!==null&&z(S,H.startTime-Z)}}function T(Z,H){g=!1,m&&(m=!1,b(D),D=-1),f=!0;var re=d;try{for(O(H),h=r(l);h!==null&&(!(h.expirationTime>H)||Z&&!M());){var L=h.callback;if(typeof L=="function"){h.callback=null,d=h.priorityLevel;var R=L(h.expirationTime<=H);H=t.unstable_now(),typeof R=="function"?h.callback=R:h===r(l)&&n(l),O(H)}else n(l);h=r(l)}if(h!==null)var W=!0;else{var G=r(c);G!==null&&z(S,G.startTime-H),W=!1}return W}finally{h=null,d=re,f=!1}}var _=!1,C=null,D=-1,A=5,I=-1;function M(){return!(t.unstable_now()-IZ||125L?(Z.sortIndex=re,e(c,Z),r(l)===null&&Z===r(c)&&(m?(b(D),D=-1):m=!0,z(S,re-L))):(Z.sortIndex=R,e(l,Z),g||f||(g=!0,j(T))),Z},t.unstable_shouldYield=M,t.unstable_wrapCallback=function(Z){var H=d;return function(){var re=d;d=H;try{return Z.apply(this,arguments)}finally{d=re}}}})(u_)),u_}var x6;function fie(){return x6||(x6=1,c_.exports=die()),c_.exports}/** * @license React * react-dom.production.min.js * @@ -31,14 +31,14 @@ var aie=Object.defineProperty;var sie=(t,e,r)=>e in t?aie(t,e,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var y6;function fie(){if(y6)return ba;y6=1;var t=O3(),e=die();function r(p){for(var y="https://reactjs.org/docs/error-decoder.html?invariant="+p,k=1;k"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),l=Object.prototype.hasOwnProperty,c=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,u={},h={};function d(p){return l.call(h,p)?!0:l.call(u,p)?!1:c.test(p)?h[p]=!0:(u[p]=!0,!1)}function f(p,y,k,E){if(k!==null&&k.type===0)return!1;switch(typeof y){case"function":case"symbol":return!0;case"boolean":return E?!1:k!==null?!k.acceptsBooleans:(p=p.toLowerCase().slice(0,5),p!=="data-"&&p!=="aria-");default:return!1}}function g(p,y,k,E){if(y===null||typeof y>"u"||f(p,y,k,E))return!0;if(E)return!1;if(k!==null)switch(k.type){case 3:return!y;case 4:return y===!1;case 5:return isNaN(y);case 6:return isNaN(y)||1>y}return!1}function m(p,y,k,E,F,q,ne){this.acceptsBooleans=y===2||y===3||y===4,this.attributeName=E,this.attributeNamespace=F,this.mustUseProperty=k,this.propertyName=p,this.type=y,this.sanitizeURL=q,this.removeEmptyString=ne}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(p){v[p]=new m(p,0,!1,p,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(p){var y=p[0];v[y]=new m(y,1,!1,p[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(p){v[p]=new m(p,2,!1,p.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(p){v[p]=new m(p,2,!1,p,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(p){v[p]=new m(p,3,!1,p.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(p){v[p]=new m(p,3,!0,p,null,!1,!1)}),["capture","download"].forEach(function(p){v[p]=new m(p,4,!1,p,null,!1,!1)}),["cols","rows","size","span"].forEach(function(p){v[p]=new m(p,6,!1,p,null,!1,!1)}),["rowSpan","start"].forEach(function(p){v[p]=new m(p,5,!1,p.toLowerCase(),null,!1,!1)});var b=/[\-:]([a-z])/g;function w(p){return p[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(p){v[p]=new m(p,1,!1,p.toLowerCase(),null,!1,!1)}),v.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(p){v[p]=new m(p,1,!1,p.toLowerCase(),null,!0,!0)});function O(p,y,k,E){var F=v.hasOwnProperty(y)?v[y]:null;(F!==null?F.type!==0:E||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),l=Object.prototype.hasOwnProperty,c=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,u={},h={};function d(p){return l.call(h,p)?!0:l.call(u,p)?!1:c.test(p)?h[p]=!0:(u[p]=!0,!1)}function f(p,y,k,E){if(k!==null&&k.type===0)return!1;switch(typeof y){case"function":case"symbol":return!0;case"boolean":return E?!1:k!==null?!k.acceptsBooleans:(p=p.toLowerCase().slice(0,5),p!=="data-"&&p!=="aria-");default:return!1}}function g(p,y,k,E){if(y===null||typeof y>"u"||f(p,y,k,E))return!0;if(E)return!1;if(k!==null)switch(k.type){case 3:return!y;case 4:return y===!1;case 5:return isNaN(y);case 6:return isNaN(y)||1>y}return!1}function m(p,y,k,E,F,q,ne){this.acceptsBooleans=y===2||y===3||y===4,this.attributeName=E,this.attributeNamespace=F,this.mustUseProperty=k,this.propertyName=p,this.type=y,this.sanitizeURL=q,this.removeEmptyString=ne}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(p){v[p]=new m(p,0,!1,p,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(p){var y=p[0];v[y]=new m(y,1,!1,p[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(p){v[p]=new m(p,2,!1,p.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(p){v[p]=new m(p,2,!1,p,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(p){v[p]=new m(p,3,!1,p.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(p){v[p]=new m(p,3,!0,p,null,!1,!1)}),["capture","download"].forEach(function(p){v[p]=new m(p,4,!1,p,null,!1,!1)}),["cols","rows","size","span"].forEach(function(p){v[p]=new m(p,6,!1,p,null,!1,!1)}),["rowSpan","start"].forEach(function(p){v[p]=new m(p,5,!1,p.toLowerCase(),null,!1,!1)});var b=/[\-:]([a-z])/g;function w(p){return p[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(p){var y=p.replace(b,w);v[y]=new m(y,1,!1,p,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(p){v[p]=new m(p,1,!1,p.toLowerCase(),null,!1,!1)}),v.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(p){v[p]=new m(p,1,!1,p.toLowerCase(),null,!0,!0)});function O(p,y,k,E){var F=v.hasOwnProperty(y)?v[y]:null;(F!==null?F.type!==0:E||!(2we||F[ne]!==q[we]){var Pe=` -`+F[ne].replace(" at new "," at ");return p.displayName&&Pe.includes("")&&(Pe=Pe.replace("",p.displayName)),Pe}while(1<=ne&&0<=we);break}}}finally{W=!1,Error.prepareStackTrace=k}return(p=p?p.displayName||p.name:"")?R(p):""}function Y(p){switch(p.tag){case 5:return R(p.type);case 16:return R("Lazy");case 13:return R("Suspense");case 19:return R("SuspenseList");case 0:case 2:case 15:return p=G(p.type,!1),p;case 11:return p=G(p.type.render,!1),p;case 1:return p=G(p.type,!0),p;default:return""}}function J(p){if(p==null)return null;if(typeof p=="function")return p.displayName||p.name||null;if(typeof p=="string")return p;switch(p){case C:return"Fragment";case _:return"Portal";case A:return"Profiler";case D:return"StrictMode";case B:return"Suspense";case P:return"SuspenseList"}if(typeof p=="object")switch(p.$$typeof){case M:return(p.displayName||"Context")+".Consumer";case I:return(p._context.displayName||"Context")+".Provider";case N:var y=p.render;return p=p.displayName,p||(p=y.displayName||y.name||"",p=p!==""?"ForwardRef("+p+")":"ForwardRef"),p;case V:return y=p.displayName||null,y!==null?y:J(p.type)||"Memo";case j:y=p._payload,p=p._init;try{return J(p(y))}catch{}}return null}function ce(p){var y=p.type;switch(p.tag){case 24:return"Cache";case 9:return(y.displayName||"Context")+".Consumer";case 10:return(y._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return p=y.render,p=p.displayName||p.name||"",y.displayName||(p!==""?"ForwardRef("+p+")":"ForwardRef");case 7:return"Fragment";case 5:return y;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return J(y);case 8:return y===D?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof y=="function")return y.displayName||y.name||null;if(typeof y=="string")return y}return null}function ae(p){switch(typeof p){case"boolean":case"number":case"string":case"undefined":return p;case"object":return p;default:return""}}function ke(p){var y=p.type;return(p=p.nodeName)&&p.toLowerCase()==="input"&&(y==="checkbox"||y==="radio")}function Te(p){var y=ke(p)?"checked":"value",k=Object.getOwnPropertyDescriptor(p.constructor.prototype,y),E=""+p[y];if(!p.hasOwnProperty(y)&&typeof k<"u"&&typeof k.get=="function"&&typeof k.set=="function"){var F=k.get,q=k.set;return Object.defineProperty(p,y,{configurable:!0,get:function(){return F.call(this)},set:function(ne){E=""+ne,q.call(this,ne)}}),Object.defineProperty(p,y,{enumerable:k.enumerable}),{getValue:function(){return E},setValue:function(ne){E=""+ne},stopTracking:function(){p._valueTracker=null,delete p[y]}}}}function qe(p){p._valueTracker||(p._valueTracker=Te(p))}function de(p){if(!p)return!1;var y=p._valueTracker;if(!y)return!0;var k=y.getValue(),E="";return p&&(E=ke(p)?p.checked?"true":"false":p.value),p=E,p!==k?(y.setValue(p),!0):!1}function ft(p){if(p=p||(typeof document<"u"?document:void 0),typeof p>"u")return null;try{return p.activeElement||p.body}catch{return p.body}}function Q(p,y){var k=y.checked;return re({},y,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:k??p._wrapperState.initialChecked})}function Oe(p,y){var k=y.defaultValue==null?"":y.defaultValue,E=y.checked!=null?y.checked:y.defaultChecked;k=ae(y.value!=null?y.value:k),p._wrapperState={initialChecked:E,initialValue:k,controlled:y.type==="checkbox"||y.type==="radio"?y.checked!=null:y.value!=null}}function le(p,y){y=y.checked,y!=null&&O(p,"checked",y,!1)}function ee(p,y){le(p,y);var k=ae(y.value),E=y.type;if(k!=null)E==="number"?(k===0&&p.value===""||p.value!=k)&&(p.value=""+k):p.value!==""+k&&(p.value=""+k);else if(E==="submit"||E==="reset"){p.removeAttribute("value");return}y.hasOwnProperty("value")?ye(p,y.type,k):y.hasOwnProperty("defaultValue")&&ye(p,y.type,ae(y.defaultValue)),y.checked==null&&y.defaultChecked!=null&&(p.defaultChecked=!!y.defaultChecked)}function ie(p,y,k){if(y.hasOwnProperty("value")||y.hasOwnProperty("defaultValue")){var E=y.type;if(!(E!=="submit"&&E!=="reset"||y.value!==void 0&&y.value!==null))return;y=""+p._wrapperState.initialValue,k||y===p.value||(p.value=y),p.defaultValue=y}k=p.name,k!==""&&(p.name=""),p.defaultChecked=!!p._wrapperState.initialChecked,k!==""&&(p.name=k)}function ye(p,y,k){(y!=="number"||ft(p.ownerDocument)!==p)&&(k==null?p.defaultValue=""+p._wrapperState.initialValue:p.defaultValue!==""+k&&(p.defaultValue=""+k))}var Fe=Array.isArray;function Ee(p,y,k,E){if(p=p.options,y){y={};for(var F=0;F"+y.valueOf().toString()+"",y=ut.firstChild;p.firstChild;)p.removeChild(p.firstChild);for(;y.firstChild;)p.appendChild(y.firstChild)}});function it(p,y){if(y){var k=p.firstChild;if(k&&k===p.lastChild&&k.nodeType===3){k.nodeValue=y;return}}p.textContent=y}var Ve={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},at=["Webkit","ms","Moz","O"];Object.keys(Ve).forEach(function(p){at.forEach(function(y){y=y+p.charAt(0).toUpperCase()+p.substring(1),Ve[y]=Ve[p]})});function _e(p,y,k){return y==null||typeof y=="boolean"||y===""?"":k||typeof y!="number"||y===0||Ve.hasOwnProperty(p)&&Ve[p]?(""+y).trim():y+"px"}function Xe(p,y){p=p.style;for(var k in y)if(y.hasOwnProperty(k)){var E=k.indexOf("--")===0,F=_e(k,y[k],E);k==="float"&&(k="cssFloat"),E?p.setProperty(k,F):p[k]=F}}var st=re({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xt(p,y){if(y){if(st[p]&&(y.children!=null||y.dangerouslySetInnerHTML!=null))throw Error(r(137,p));if(y.dangerouslySetInnerHTML!=null){if(y.children!=null)throw Error(r(60));if(typeof y.dangerouslySetInnerHTML!="object"||!("__html"in y.dangerouslySetInnerHTML))throw Error(r(61))}if(y.style!=null&&typeof y.style!="object")throw Error(r(62))}}function Qt(p,y){if(p.indexOf("-")===-1)return typeof y.is=="string";switch(p){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var zt=null;function wt(p){return p=p.target||p.srcElement||window,p.correspondingUseElement&&(p=p.correspondingUseElement),p.nodeType===3?p.parentNode:p}var pr=null,rr=null,te=null;function oe(p){if(p=Ap(p)){if(typeof pr!="function")throw Error(r(280));var y=p.stateNode;y&&(y=Ux(y),pr(p.stateNode,p.type,y))}}function Se(p){rr?te?te.push(p):te=[p]:rr=p}function Qe(){if(rr){var p=rr,y=te;if(te=rr=null,oe(p),y)for(p=0;p>>=0,p===0?32:31-(wre(p)/Ore|0)|0}var kx=64,_x=4194304;function dp(p){switch(p&-p){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return p&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return p&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return p}}function Sx(p,y){var k=p.pendingLanes;if(k===0)return 0;var E=0,F=p.suspendedLanes,q=p.pingedLanes,ne=k&268435455;if(ne!==0){var we=ne&~F;we!==0?E=dp(we):(q&=ne,q!==0&&(E=dp(q)))}else ne=k&~F,ne!==0?E=dp(ne):q!==0&&(E=dp(q));if(E===0)return 0;if(y!==0&&y!==E&&(y&F)===0&&(F=E&-E,q=y&-y,F>=q||F===16&&(q&4194240)!==0))return y;if((E&4)!==0&&(E|=k&16),y=p.entangledLanes,y!==0)for(p=p.entanglements,y&=E;0k;k++)y.push(p);return y}function fp(p,y,k){p.pendingLanes|=y,y!==536870912&&(p.suspendedLanes=0,p.pingedLanes=0),p=p.eventTimes,y=31-vn(y),p[y]=k}function Tre(p,y){var k=p.pendingLanes&~y;p.pendingLanes=y,p.suspendedLanes=0,p.pingedLanes=0,p.expiredLanes&=y,p.mutableReadLanes&=y,p.entangledLanes&=y,y=p.entanglements;var E=p.eventTimes;for(p=p.expirationTimes;0=wp),aP=" ",sP=!1;function oP(p,y){switch(p){case"keyup":return ene.indexOf(y.keyCode)!==-1;case"keydown":return y.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function lP(p){return p=p.detail,typeof p=="object"&&"data"in p?p.data:null}var Hh=!1;function rne(p,y){switch(p){case"compositionend":return lP(y);case"keypress":return y.which!==32?null:(sP=!0,aP);case"textInput":return p=y.data,p===aP&&sP?null:p;default:return null}}function nne(p,y){if(Hh)return p==="compositionend"||!BO&&oP(p,y)?(p=JN(),Ax=FO=Kl=null,Hh=!1,p):null;switch(p){case"paste":return null;case"keypress":if(!(y.ctrlKey||y.altKey||y.metaKey)||y.ctrlKey&&y.altKey){if(y.char&&1=y)return{node:k,offset:y-p};p=E}e:{for(;k;){if(k.nextSibling){k=k.nextSibling;break e}k=k.parentNode}k=void 0}k=gP(k)}}function xP(p,y){return p&&y?p===y?!0:p&&p.nodeType===3?!1:y&&y.nodeType===3?xP(p,y.parentNode):"contains"in p?p.contains(y):p.compareDocumentPosition?!!(p.compareDocumentPosition(y)&16):!1:!1}function yP(){for(var p=window,y=ft();y instanceof p.HTMLIFrameElement;){try{var k=typeof y.contentWindow.location.href=="string"}catch{k=!1}if(k)p=y.contentWindow;else break;y=ft(p.document)}return y}function WO(p){var y=p&&p.nodeName&&p.nodeName.toLowerCase();return y&&(y==="input"&&(p.type==="text"||p.type==="search"||p.type==="tel"||p.type==="url"||p.type==="password")||y==="textarea"||p.contentEditable==="true")}function dne(p){var y=yP(),k=p.focusedElem,E=p.selectionRange;if(y!==k&&k&&k.ownerDocument&&xP(k.ownerDocument.documentElement,k)){if(E!==null&&WO(k)){if(y=E.start,p=E.end,p===void 0&&(p=y),"selectionStart"in k)k.selectionStart=y,k.selectionEnd=Math.min(p,k.value.length);else if(p=(y=k.ownerDocument||document)&&y.defaultView||window,p.getSelection){p=p.getSelection();var F=k.textContent.length,q=Math.min(E.start,F);E=E.end===void 0?q:Math.min(E.end,F),!p.extend&&q>E&&(F=E,E=q,q=F),F=mP(k,q);var ne=mP(k,E);F&&ne&&(p.rangeCount!==1||p.anchorNode!==F.node||p.anchorOffset!==F.offset||p.focusNode!==ne.node||p.focusOffset!==ne.offset)&&(y=y.createRange(),y.setStart(F.node,F.offset),p.removeAllRanges(),q>E?(p.addRange(y),p.extend(ne.node,ne.offset)):(y.setEnd(ne.node,ne.offset),p.addRange(y)))}}for(y=[],p=k;p=p.parentNode;)p.nodeType===1&&y.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof k.focus=="function"&&k.focus(),k=0;k=document.documentMode,Gh=null,zO=null,Sp=null,VO=!1;function vP(p,y,k){var E=k.window===k?k.document:k.nodeType===9?k:k.ownerDocument;VO||Gh==null||Gh!==ft(E)||(E=Gh,"selectionStart"in E&&WO(E)?E={start:E.selectionStart,end:E.selectionEnd}:(E=(E.ownerDocument&&E.ownerDocument.defaultView||window).getSelection(),E={anchorNode:E.anchorNode,anchorOffset:E.anchorOffset,focusNode:E.focusNode,focusOffset:E.focusOffset}),Sp&&_p(Sp,E)||(Sp=E,E=Ix(zO,"onSelect"),0td||(p.current=nk[td],nk[td]=null,td--)}function zr(p,y){td++,nk[td]=p.current,p.current=y}var rc={},bi=tc(rc),ga=tc(!1),hu=rc;function rd(p,y){var k=p.type.contextTypes;if(!k)return rc;var E=p.stateNode;if(E&&E.__reactInternalMemoizedUnmaskedChildContext===y)return E.__reactInternalMemoizedMaskedChildContext;var F={},q;for(q in k)F[q]=y[q];return E&&(p=p.stateNode,p.__reactInternalMemoizedUnmaskedChildContext=y,p.__reactInternalMemoizedMaskedChildContext=F),F}function ma(p){return p=p.childContextTypes,p!=null}function Qx(){en(ga),en(bi)}function FP(p,y,k){if(bi.current!==rc)throw Error(r(168));zr(bi,y),zr(ga,k)}function LP(p,y,k){var E=p.stateNode;if(y=y.childContextTypes,typeof E.getChildContext!="function")return k;E=E.getChildContext();for(var F in E)if(!(F in y))throw Error(r(108,ce(p)||"Unknown",F));return re({},k,E)}function Wx(p){return p=(p=p.stateNode)&&p.__reactInternalMemoizedMergedChildContext||rc,hu=bi.current,zr(bi,p),zr(ga,ga.current),!0}function MP(p,y,k){var E=p.stateNode;if(!E)throw Error(r(169));k?(p=LP(p,y,hu),E.__reactInternalMemoizedMergedChildContext=p,en(ga),en(bi),zr(bi,p)):en(ga),zr(ga,k)}var al=null,zx=!1,ik=!1;function $P(p){al===null?al=[p]:al.push(p)}function _ne(p){zx=!0,$P(p)}function nc(){if(!ik&&al!==null){ik=!0;var p=0,y=Rr;try{var k=al;for(Rr=1;p>=ne,F-=ne,sl=1<<32-vn(y)+F|k<er?(ei=Ht,Ht=null):ei=Ht.sibling;var _r=ot(Ue,Ht,ze[er],gt);if(_r===null){Ht===null&&(Ht=ei);break}p&&Ht&&_r.alternate===null&&y(Ue,Ht),Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r,Ht=ei}if(er===ze.length)return k(Ue,Ht),nn&&fu(Ue,er),It;if(Ht===null){for(;erer?(ei=Ht,Ht=null):ei=Ht.sibling;var dc=ot(Ue,Ht,_r.value,gt);if(dc===null){Ht===null&&(Ht=ei);break}p&&Ht&&dc.alternate===null&&y(Ue,Ht),Re=q(dc,Re,er),Zt===null?It=dc:Zt.sibling=dc,Zt=dc,Ht=ei}if(_r.done)return k(Ue,Ht),nn&&fu(Ue,er),It;if(Ht===null){for(;!_r.done;er++,_r=ze.next())_r=ht(Ue,_r.value,gt),_r!==null&&(Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r);return nn&&fu(Ue,er),It}for(Ht=E(Ue,Ht);!_r.done;er++,_r=ze.next())_r=_t(Ht,Ue,er,_r.value,gt),_r!==null&&(p&&_r.alternate!==null&&Ht.delete(_r.key===null?er:_r.key),Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r);return p&&Ht.forEach(function(iie){return y(Ue,iie)}),nn&&fu(Ue,er),It}function bn(Ue,Re,ze,gt){if(typeof ze=="object"&&ze!==null&&ze.type===C&&ze.key===null&&(ze=ze.props.children),typeof ze=="object"&&ze!==null){switch(ze.$$typeof){case T:e:{for(var It=ze.key,Zt=Re;Zt!==null;){if(Zt.key===It){if(It=ze.type,It===C){if(Zt.tag===7){k(Ue,Zt.sibling),Re=F(Zt,ze.props.children),Re.return=Ue,Ue=Re;break e}}else if(Zt.elementType===It||typeof It=="object"&&It!==null&&It.$$typeof===j&&WP(It)===Zt.type){k(Ue,Zt.sibling),Re=F(Zt,ze.props),Re.ref=Np(Ue,Zt,ze),Re.return=Ue,Ue=Re;break e}k(Ue,Zt);break}else y(Ue,Zt);Zt=Zt.sibling}ze.type===C?(Re=wu(ze.props.children,Ue.mode,gt,ze.key),Re.return=Ue,Ue=Re):(gt=y1(ze.type,ze.key,ze.props,null,Ue.mode,gt),gt.ref=Np(Ue,Re,ze),gt.return=Ue,Ue=gt)}return ne(Ue);case _:e:{for(Zt=ze.key;Re!==null;){if(Re.key===Zt)if(Re.tag===4&&Re.stateNode.containerInfo===ze.containerInfo&&Re.stateNode.implementation===ze.implementation){k(Ue,Re.sibling),Re=F(Re,ze.children||[]),Re.return=Ue,Ue=Re;break e}else{k(Ue,Re);break}else y(Ue,Re);Re=Re.sibling}Re=t_(ze,Ue.mode,gt),Re.return=Ue,Ue=Re}return ne(Ue);case j:return Zt=ze._init,bn(Ue,Re,Zt(ze._payload),gt)}if(Fe(ze))return Nt(Ue,Re,ze,gt);if(H(ze))return Mt(Ue,Re,ze,gt);Zx(Ue,ze)}return typeof ze=="string"&&ze!==""||typeof ze=="number"?(ze=""+ze,Re!==null&&Re.tag===6?(k(Ue,Re.sibling),Re=F(Re,ze),Re.return=Ue,Ue=Re):(k(Ue,Re),Re=e_(ze,Ue.mode,gt),Re.return=Ue,Ue=Re),ne(Ue)):k(Ue,Re)}return bn}var sd=zP(!0),VP=zP(!1),Hx=tc(null),Gx=null,od=null,uk=null;function hk(){uk=od=Gx=null}function dk(p){var y=Hx.current;en(Hx),p._currentValue=y}function fk(p,y,k){for(;p!==null;){var E=p.alternate;if((p.childLanes&y)!==y?(p.childLanes|=y,E!==null&&(E.childLanes|=y)):E!==null&&(E.childLanes&y)!==y&&(E.childLanes|=y),p===k)break;p=p.return}}function ld(p,y){Gx=p,uk=od=null,p=p.dependencies,p!==null&&p.firstContext!==null&&((p.lanes&y)!==0&&(xa=!0),p.firstContext=null)}function as(p){var y=p._currentValue;if(uk!==p)if(p={context:p,memoizedValue:y,next:null},od===null){if(Gx===null)throw Error(r(308));od=p,Gx.dependencies={lanes:0,firstContext:p}}else od=od.next=p;return y}var pu=null;function pk(p){pu===null?pu=[p]:pu.push(p)}function qP(p,y,k,E){var F=y.interleaved;return F===null?(k.next=k,pk(y)):(k.next=F.next,F.next=k),y.interleaved=k,ll(p,E)}function ll(p,y){p.lanes|=y;var k=p.alternate;for(k!==null&&(k.lanes|=y),k=p,p=p.return;p!==null;)p.childLanes|=y,k=p.alternate,k!==null&&(k.childLanes|=y),k=p,p=p.return;return k.tag===3?k.stateNode:null}var ic=!1;function gk(p){p.updateQueue={baseState:p.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function XP(p,y){p=p.updateQueue,y.updateQueue===p&&(y.updateQueue={baseState:p.baseState,firstBaseUpdate:p.firstBaseUpdate,lastBaseUpdate:p.lastBaseUpdate,shared:p.shared,effects:p.effects})}function cl(p,y){return{eventTime:p,lane:y,tag:0,payload:null,callback:null,next:null}}function ac(p,y,k){var E=p.updateQueue;if(E===null)return null;if(E=E.shared,(br&2)!==0){var F=E.pending;return F===null?y.next=y:(y.next=F.next,F.next=y),E.pending=y,ll(p,k)}return F=E.interleaved,F===null?(y.next=y,pk(E)):(y.next=F.next,F.next=y),E.interleaved=y,ll(p,k)}function Yx(p,y,k){if(y=y.updateQueue,y!==null&&(y=y.shared,(k&4194240)!==0)){var E=y.lanes;E&=p.pendingLanes,k|=E,y.lanes=k,DO(p,k)}}function ZP(p,y){var k=p.updateQueue,E=p.alternate;if(E!==null&&(E=E.updateQueue,k===E)){var F=null,q=null;if(k=k.firstBaseUpdate,k!==null){do{var ne={eventTime:k.eventTime,lane:k.lane,tag:k.tag,payload:k.payload,callback:k.callback,next:null};q===null?F=q=ne:q=q.next=ne,k=k.next}while(k!==null);q===null?F=q=y:q=q.next=y}else F=q=y;k={baseState:E.baseState,firstBaseUpdate:F,lastBaseUpdate:q,shared:E.shared,effects:E.effects},p.updateQueue=k;return}p=k.lastBaseUpdate,p===null?k.firstBaseUpdate=y:p.next=y,k.lastBaseUpdate=y}function Kx(p,y,k,E){var F=p.updateQueue;ic=!1;var q=F.firstBaseUpdate,ne=F.lastBaseUpdate,we=F.shared.pending;if(we!==null){F.shared.pending=null;var Pe=we,Ze=Pe.next;Pe.next=null,ne===null?q=Ze:ne.next=Ze,ne=Pe;var ct=p.alternate;ct!==null&&(ct=ct.updateQueue,we=ct.lastBaseUpdate,we!==ne&&(we===null?ct.firstBaseUpdate=Ze:we.next=Ze,ct.lastBaseUpdate=Pe))}if(q!==null){var ht=F.baseState;ne=0,ct=Ze=Pe=null,we=q;do{var ot=we.lane,_t=we.eventTime;if((E&ot)===ot){ct!==null&&(ct=ct.next={eventTime:_t,lane:0,tag:we.tag,payload:we.payload,callback:we.callback,next:null});e:{var Nt=p,Mt=we;switch(ot=y,_t=k,Mt.tag){case 1:if(Nt=Mt.payload,typeof Nt=="function"){ht=Nt.call(_t,ht,ot);break e}ht=Nt;break e;case 3:Nt.flags=Nt.flags&-65537|128;case 0:if(Nt=Mt.payload,ot=typeof Nt=="function"?Nt.call(_t,ht,ot):Nt,ot==null)break e;ht=re({},ht,ot);break e;case 2:ic=!0}}we.callback!==null&&we.lane!==0&&(p.flags|=64,ot=F.effects,ot===null?F.effects=[we]:ot.push(we))}else _t={eventTime:_t,lane:ot,tag:we.tag,payload:we.payload,callback:we.callback,next:null},ct===null?(Ze=ct=_t,Pe=ht):ct=ct.next=_t,ne|=ot;if(we=we.next,we===null){if(we=F.shared.pending,we===null)break;ot=we,we=ot.next,ot.next=null,F.lastBaseUpdate=ot,F.shared.pending=null}}while(!0);if(ct===null&&(Pe=ht),F.baseState=Pe,F.firstBaseUpdate=Ze,F.lastBaseUpdate=ct,y=F.shared.interleaved,y!==null){F=y;do ne|=F.lane,F=F.next;while(F!==y)}else q===null&&(F.shared.lanes=0);xu|=ne,p.lanes=ne,p.memoizedState=ht}}function HP(p,y,k){if(p=y.effects,y.effects=null,p!==null)for(y=0;yk?k:4,p(!0);var E=bk.transition;bk.transition={};try{p(!1),y()}finally{Rr=k,bk.transition=E}}function p8(){return ss().memoizedState}function Ene(p,y,k){var E=cc(p);if(k={lane:E,action:k,hasEagerState:!1,eagerState:null,next:null},g8(p))m8(y,k);else if(k=qP(p,y,k,E),k!==null){var F=Hi();js(k,p,E,F),x8(k,y,E)}}function Dne(p,y,k){var E=cc(p),F={lane:E,action:k,hasEagerState:!1,eagerState:null,next:null};if(g8(p))m8(y,F);else{var q=p.alternate;if(p.lanes===0&&(q===null||q.lanes===0)&&(q=y.lastRenderedReducer,q!==null))try{var ne=y.lastRenderedState,we=q(ne,k);if(F.hasEagerState=!0,F.eagerState=we,Fs(we,ne)){var Pe=y.interleaved;Pe===null?(F.next=F,pk(y)):(F.next=Pe.next,Pe.next=F),y.interleaved=F;return}}catch{}finally{}k=qP(p,y,F,E),k!==null&&(F=Hi(),js(k,p,E,F),x8(k,y,E))}}function g8(p){var y=p.alternate;return p===un||y!==null&&y===un}function m8(p,y){Lp=t1=!0;var k=p.pending;k===null?y.next=y:(y.next=k.next,k.next=y),p.pending=y}function x8(p,y,k){if((k&4194240)!==0){var E=y.lanes;E&=p.pendingLanes,k|=E,y.lanes=k,DO(p,k)}}var i1={readContext:as,useCallback:wi,useContext:wi,useEffect:wi,useImperativeHandle:wi,useInsertionEffect:wi,useLayoutEffect:wi,useMemo:wi,useReducer:wi,useRef:wi,useState:wi,useDebugValue:wi,useDeferredValue:wi,useTransition:wi,useMutableSource:wi,useSyncExternalStore:wi,useId:wi,unstable_isNewReconciler:!1},Ane={readContext:as,useCallback:function(p,y){return bo().memoizedState=[p,y===void 0?null:y],p},useContext:as,useEffect:s8,useImperativeHandle:function(p,y,k){return k=k!=null?k.concat([p]):null,r1(4194308,4,c8.bind(null,y,p),k)},useLayoutEffect:function(p,y){return r1(4194308,4,p,y)},useInsertionEffect:function(p,y){return r1(4,2,p,y)},useMemo:function(p,y){var k=bo();return y=y===void 0?null:y,p=p(),k.memoizedState=[p,y],p},useReducer:function(p,y,k){var E=bo();return y=k!==void 0?k(y):y,E.memoizedState=E.baseState=y,p={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:p,lastRenderedState:y},E.queue=p,p=p.dispatch=Ene.bind(null,un,p),[E.memoizedState,p]},useRef:function(p){var y=bo();return p={current:p},y.memoizedState=p},useState:i8,useDebugValue:Ck,useDeferredValue:function(p){return bo().memoizedState=p},useTransition:function(){var p=i8(!1),y=p[0];return p=Cne.bind(null,p[1]),bo().memoizedState=p,[y,p]},useMutableSource:function(){},useSyncExternalStore:function(p,y,k){var E=un,F=bo();if(nn){if(k===void 0)throw Error(r(407));k=k()}else{if(k=y(),Jn===null)throw Error(r(349));(mu&30)!==0||JP(E,y,k)}F.memoizedState=k;var q={value:k,getSnapshot:y};return F.queue=q,s8(t8.bind(null,E,q,p),[p]),E.flags|=2048,Ip(9,e8.bind(null,E,q,k,y),void 0,null),k},useId:function(){var p=bo(),y=Jn.identifierPrefix;if(nn){var k=ol,E=sl;k=(E&~(1<<32-vn(E)-1)).toString(32)+k,y=":"+y+"R"+k,k=Mp++,0")&&(Pe=Pe.replace("",p.displayName)),Pe}while(1<=ne&&0<=we);break}}}finally{W=!1,Error.prepareStackTrace=k}return(p=p?p.displayName||p.name:"")?R(p):""}function Y(p){switch(p.tag){case 5:return R(p.type);case 16:return R("Lazy");case 13:return R("Suspense");case 19:return R("SuspenseList");case 0:case 2:case 15:return p=G(p.type,!1),p;case 11:return p=G(p.type.render,!1),p;case 1:return p=G(p.type,!0),p;default:return""}}function J(p){if(p==null)return null;if(typeof p=="function")return p.displayName||p.name||null;if(typeof p=="string")return p;switch(p){case C:return"Fragment";case _:return"Portal";case A:return"Profiler";case D:return"StrictMode";case B:return"Suspense";case P:return"SuspenseList"}if(typeof p=="object")switch(p.$$typeof){case M:return(p.displayName||"Context")+".Consumer";case I:return(p._context.displayName||"Context")+".Provider";case N:var y=p.render;return p=p.displayName,p||(p=y.displayName||y.name||"",p=p!==""?"ForwardRef("+p+")":"ForwardRef"),p;case V:return y=p.displayName||null,y!==null?y:J(p.type)||"Memo";case j:y=p._payload,p=p._init;try{return J(p(y))}catch{}}return null}function ce(p){var y=p.type;switch(p.tag){case 24:return"Cache";case 9:return(y.displayName||"Context")+".Consumer";case 10:return(y._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return p=y.render,p=p.displayName||p.name||"",y.displayName||(p!==""?"ForwardRef("+p+")":"ForwardRef");case 7:return"Fragment";case 5:return y;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return J(y);case 8:return y===D?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof y=="function")return y.displayName||y.name||null;if(typeof y=="string")return y}return null}function ae(p){switch(typeof p){case"boolean":case"number":case"string":case"undefined":return p;case"object":return p;default:return""}}function ke(p){var y=p.type;return(p=p.nodeName)&&p.toLowerCase()==="input"&&(y==="checkbox"||y==="radio")}function Te(p){var y=ke(p)?"checked":"value",k=Object.getOwnPropertyDescriptor(p.constructor.prototype,y),E=""+p[y];if(!p.hasOwnProperty(y)&&typeof k<"u"&&typeof k.get=="function"&&typeof k.set=="function"){var F=k.get,q=k.set;return Object.defineProperty(p,y,{configurable:!0,get:function(){return F.call(this)},set:function(ne){E=""+ne,q.call(this,ne)}}),Object.defineProperty(p,y,{enumerable:k.enumerable}),{getValue:function(){return E},setValue:function(ne){E=""+ne},stopTracking:function(){p._valueTracker=null,delete p[y]}}}}function qe(p){p._valueTracker||(p._valueTracker=Te(p))}function de(p){if(!p)return!1;var y=p._valueTracker;if(!y)return!0;var k=y.getValue(),E="";return p&&(E=ke(p)?p.checked?"true":"false":p.value),p=E,p!==k?(y.setValue(p),!0):!1}function ft(p){if(p=p||(typeof document<"u"?document:void 0),typeof p>"u")return null;try{return p.activeElement||p.body}catch{return p.body}}function Q(p,y){var k=y.checked;return re({},y,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:k??p._wrapperState.initialChecked})}function Oe(p,y){var k=y.defaultValue==null?"":y.defaultValue,E=y.checked!=null?y.checked:y.defaultChecked;k=ae(y.value!=null?y.value:k),p._wrapperState={initialChecked:E,initialValue:k,controlled:y.type==="checkbox"||y.type==="radio"?y.checked!=null:y.value!=null}}function le(p,y){y=y.checked,y!=null&&O(p,"checked",y,!1)}function ee(p,y){le(p,y);var k=ae(y.value),E=y.type;if(k!=null)E==="number"?(k===0&&p.value===""||p.value!=k)&&(p.value=""+k):p.value!==""+k&&(p.value=""+k);else if(E==="submit"||E==="reset"){p.removeAttribute("value");return}y.hasOwnProperty("value")?ye(p,y.type,k):y.hasOwnProperty("defaultValue")&&ye(p,y.type,ae(y.defaultValue)),y.checked==null&&y.defaultChecked!=null&&(p.defaultChecked=!!y.defaultChecked)}function ie(p,y,k){if(y.hasOwnProperty("value")||y.hasOwnProperty("defaultValue")){var E=y.type;if(!(E!=="submit"&&E!=="reset"||y.value!==void 0&&y.value!==null))return;y=""+p._wrapperState.initialValue,k||y===p.value||(p.value=y),p.defaultValue=y}k=p.name,k!==""&&(p.name=""),p.defaultChecked=!!p._wrapperState.initialChecked,k!==""&&(p.name=k)}function ye(p,y,k){(y!=="number"||ft(p.ownerDocument)!==p)&&(k==null?p.defaultValue=""+p._wrapperState.initialValue:p.defaultValue!==""+k&&(p.defaultValue=""+k))}var Fe=Array.isArray;function Ee(p,y,k,E){if(p=p.options,y){y={};for(var F=0;F"+y.valueOf().toString()+"",y=ut.firstChild;p.firstChild;)p.removeChild(p.firstChild);for(;y.firstChild;)p.appendChild(y.firstChild)}});function it(p,y){if(y){var k=p.firstChild;if(k&&k===p.lastChild&&k.nodeType===3){k.nodeValue=y;return}}p.textContent=y}var Ve={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},at=["Webkit","ms","Moz","O"];Object.keys(Ve).forEach(function(p){at.forEach(function(y){y=y+p.charAt(0).toUpperCase()+p.substring(1),Ve[y]=Ve[p]})});function _e(p,y,k){return y==null||typeof y=="boolean"||y===""?"":k||typeof y!="number"||y===0||Ve.hasOwnProperty(p)&&Ve[p]?(""+y).trim():y+"px"}function Xe(p,y){p=p.style;for(var k in y)if(y.hasOwnProperty(k)){var E=k.indexOf("--")===0,F=_e(k,y[k],E);k==="float"&&(k="cssFloat"),E?p.setProperty(k,F):p[k]=F}}var st=re({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xt(p,y){if(y){if(st[p]&&(y.children!=null||y.dangerouslySetInnerHTML!=null))throw Error(r(137,p));if(y.dangerouslySetInnerHTML!=null){if(y.children!=null)throw Error(r(60));if(typeof y.dangerouslySetInnerHTML!="object"||!("__html"in y.dangerouslySetInnerHTML))throw Error(r(61))}if(y.style!=null&&typeof y.style!="object")throw Error(r(62))}}function Qt(p,y){if(p.indexOf("-")===-1)return typeof y.is=="string";switch(p){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var zt=null;function wt(p){return p=p.target||p.srcElement||window,p.correspondingUseElement&&(p=p.correspondingUseElement),p.nodeType===3?p.parentNode:p}var pr=null,rr=null,te=null;function oe(p){if(p=Ap(p)){if(typeof pr!="function")throw Error(r(280));var y=p.stateNode;y&&(y=Ux(y),pr(p.stateNode,p.type,y))}}function Se(p){rr?te?te.push(p):te=[p]:rr=p}function Qe(){if(rr){var p=rr,y=te;if(te=rr=null,oe(p),y)for(p=0;p>>=0,p===0?32:31-(Ore(p)/kre|0)|0}var kx=64,_x=4194304;function dp(p){switch(p&-p){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return p&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return p&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return p}}function Sx(p,y){var k=p.pendingLanes;if(k===0)return 0;var E=0,F=p.suspendedLanes,q=p.pingedLanes,ne=k&268435455;if(ne!==0){var we=ne&~F;we!==0?E=dp(we):(q&=ne,q!==0&&(E=dp(q)))}else ne=k&~F,ne!==0?E=dp(ne):q!==0&&(E=dp(q));if(E===0)return 0;if(y!==0&&y!==E&&(y&F)===0&&(F=E&-E,q=y&-y,F>=q||F===16&&(q&4194240)!==0))return y;if((E&4)!==0&&(E|=k&16),y=p.entangledLanes,y!==0)for(p=p.entanglements,y&=E;0k;k++)y.push(p);return y}function fp(p,y,k){p.pendingLanes|=y,y!==536870912&&(p.suspendedLanes=0,p.pingedLanes=0),p=p.eventTimes,y=31-vn(y),p[y]=k}function Cre(p,y){var k=p.pendingLanes&~y;p.pendingLanes=y,p.suspendedLanes=0,p.pingedLanes=0,p.expiredLanes&=y,p.mutableReadLanes&=y,p.entangledLanes&=y,y=p.entanglements;var E=p.eventTimes;for(p=p.expirationTimes;0=wp),aP=" ",sP=!1;function oP(p,y){switch(p){case"keyup":return tne.indexOf(y.keyCode)!==-1;case"keydown":return y.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function lP(p){return p=p.detail,typeof p=="object"&&"data"in p?p.data:null}var Hh=!1;function nne(p,y){switch(p){case"compositionend":return lP(y);case"keypress":return y.which!==32?null:(sP=!0,aP);case"textInput":return p=y.data,p===aP&&sP?null:p;default:return null}}function ine(p,y){if(Hh)return p==="compositionend"||!BO&&oP(p,y)?(p=JN(),Ax=FO=Kl=null,Hh=!1,p):null;switch(p){case"paste":return null;case"keypress":if(!(y.ctrlKey||y.altKey||y.metaKey)||y.ctrlKey&&y.altKey){if(y.char&&1=y)return{node:k,offset:y-p};p=E}e:{for(;k;){if(k.nextSibling){k=k.nextSibling;break e}k=k.parentNode}k=void 0}k=gP(k)}}function xP(p,y){return p&&y?p===y?!0:p&&p.nodeType===3?!1:y&&y.nodeType===3?xP(p,y.parentNode):"contains"in p?p.contains(y):p.compareDocumentPosition?!!(p.compareDocumentPosition(y)&16):!1:!1}function yP(){for(var p=window,y=ft();y instanceof p.HTMLIFrameElement;){try{var k=typeof y.contentWindow.location.href=="string"}catch{k=!1}if(k)p=y.contentWindow;else break;y=ft(p.document)}return y}function WO(p){var y=p&&p.nodeName&&p.nodeName.toLowerCase();return y&&(y==="input"&&(p.type==="text"||p.type==="search"||p.type==="tel"||p.type==="url"||p.type==="password")||y==="textarea"||p.contentEditable==="true")}function fne(p){var y=yP(),k=p.focusedElem,E=p.selectionRange;if(y!==k&&k&&k.ownerDocument&&xP(k.ownerDocument.documentElement,k)){if(E!==null&&WO(k)){if(y=E.start,p=E.end,p===void 0&&(p=y),"selectionStart"in k)k.selectionStart=y,k.selectionEnd=Math.min(p,k.value.length);else if(p=(y=k.ownerDocument||document)&&y.defaultView||window,p.getSelection){p=p.getSelection();var F=k.textContent.length,q=Math.min(E.start,F);E=E.end===void 0?q:Math.min(E.end,F),!p.extend&&q>E&&(F=E,E=q,q=F),F=mP(k,q);var ne=mP(k,E);F&&ne&&(p.rangeCount!==1||p.anchorNode!==F.node||p.anchorOffset!==F.offset||p.focusNode!==ne.node||p.focusOffset!==ne.offset)&&(y=y.createRange(),y.setStart(F.node,F.offset),p.removeAllRanges(),q>E?(p.addRange(y),p.extend(ne.node,ne.offset)):(y.setEnd(ne.node,ne.offset),p.addRange(y)))}}for(y=[],p=k;p=p.parentNode;)p.nodeType===1&&y.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof k.focus=="function"&&k.focus(),k=0;k=document.documentMode,Gh=null,zO=null,Sp=null,VO=!1;function vP(p,y,k){var E=k.window===k?k.document:k.nodeType===9?k:k.ownerDocument;VO||Gh==null||Gh!==ft(E)||(E=Gh,"selectionStart"in E&&WO(E)?E={start:E.selectionStart,end:E.selectionEnd}:(E=(E.ownerDocument&&E.ownerDocument.defaultView||window).getSelection(),E={anchorNode:E.anchorNode,anchorOffset:E.anchorOffset,focusNode:E.focusNode,focusOffset:E.focusOffset}),Sp&&_p(Sp,E)||(Sp=E,E=Ix(zO,"onSelect"),0td||(p.current=nk[td],nk[td]=null,td--)}function zr(p,y){td++,nk[td]=p.current,p.current=y}var rc={},bi=tc(rc),ga=tc(!1),hu=rc;function rd(p,y){var k=p.type.contextTypes;if(!k)return rc;var E=p.stateNode;if(E&&E.__reactInternalMemoizedUnmaskedChildContext===y)return E.__reactInternalMemoizedMaskedChildContext;var F={},q;for(q in k)F[q]=y[q];return E&&(p=p.stateNode,p.__reactInternalMemoizedUnmaskedChildContext=y,p.__reactInternalMemoizedMaskedChildContext=F),F}function ma(p){return p=p.childContextTypes,p!=null}function Qx(){en(ga),en(bi)}function FP(p,y,k){if(bi.current!==rc)throw Error(r(168));zr(bi,y),zr(ga,k)}function LP(p,y,k){var E=p.stateNode;if(y=y.childContextTypes,typeof E.getChildContext!="function")return k;E=E.getChildContext();for(var F in E)if(!(F in y))throw Error(r(108,ce(p)||"Unknown",F));return re({},k,E)}function Wx(p){return p=(p=p.stateNode)&&p.__reactInternalMemoizedMergedChildContext||rc,hu=bi.current,zr(bi,p),zr(ga,ga.current),!0}function MP(p,y,k){var E=p.stateNode;if(!E)throw Error(r(169));k?(p=LP(p,y,hu),E.__reactInternalMemoizedMergedChildContext=p,en(ga),en(bi),zr(bi,p)):en(ga),zr(ga,k)}var al=null,zx=!1,ik=!1;function $P(p){al===null?al=[p]:al.push(p)}function Sne(p){zx=!0,$P(p)}function nc(){if(!ik&&al!==null){ik=!0;var p=0,y=Rr;try{var k=al;for(Rr=1;p>=ne,F-=ne,sl=1<<32-vn(y)+F|k<er?(ei=Ht,Ht=null):ei=Ht.sibling;var _r=ot(Ue,Ht,ze[er],gt);if(_r===null){Ht===null&&(Ht=ei);break}p&&Ht&&_r.alternate===null&&y(Ue,Ht),Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r,Ht=ei}if(er===ze.length)return k(Ue,Ht),nn&&fu(Ue,er),It;if(Ht===null){for(;erer?(ei=Ht,Ht=null):ei=Ht.sibling;var dc=ot(Ue,Ht,_r.value,gt);if(dc===null){Ht===null&&(Ht=ei);break}p&&Ht&&dc.alternate===null&&y(Ue,Ht),Re=q(dc,Re,er),Zt===null?It=dc:Zt.sibling=dc,Zt=dc,Ht=ei}if(_r.done)return k(Ue,Ht),nn&&fu(Ue,er),It;if(Ht===null){for(;!_r.done;er++,_r=ze.next())_r=ht(Ue,_r.value,gt),_r!==null&&(Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r);return nn&&fu(Ue,er),It}for(Ht=E(Ue,Ht);!_r.done;er++,_r=ze.next())_r=_t(Ht,Ue,er,_r.value,gt),_r!==null&&(p&&_r.alternate!==null&&Ht.delete(_r.key===null?er:_r.key),Re=q(_r,Re,er),Zt===null?It=_r:Zt.sibling=_r,Zt=_r);return p&&Ht.forEach(function(aie){return y(Ue,aie)}),nn&&fu(Ue,er),It}function bn(Ue,Re,ze,gt){if(typeof ze=="object"&&ze!==null&&ze.type===C&&ze.key===null&&(ze=ze.props.children),typeof ze=="object"&&ze!==null){switch(ze.$$typeof){case T:e:{for(var It=ze.key,Zt=Re;Zt!==null;){if(Zt.key===It){if(It=ze.type,It===C){if(Zt.tag===7){k(Ue,Zt.sibling),Re=F(Zt,ze.props.children),Re.return=Ue,Ue=Re;break e}}else if(Zt.elementType===It||typeof It=="object"&&It!==null&&It.$$typeof===j&&WP(It)===Zt.type){k(Ue,Zt.sibling),Re=F(Zt,ze.props),Re.ref=Np(Ue,Zt,ze),Re.return=Ue,Ue=Re;break e}k(Ue,Zt);break}else y(Ue,Zt);Zt=Zt.sibling}ze.type===C?(Re=wu(ze.props.children,Ue.mode,gt,ze.key),Re.return=Ue,Ue=Re):(gt=y1(ze.type,ze.key,ze.props,null,Ue.mode,gt),gt.ref=Np(Ue,Re,ze),gt.return=Ue,Ue=gt)}return ne(Ue);case _:e:{for(Zt=ze.key;Re!==null;){if(Re.key===Zt)if(Re.tag===4&&Re.stateNode.containerInfo===ze.containerInfo&&Re.stateNode.implementation===ze.implementation){k(Ue,Re.sibling),Re=F(Re,ze.children||[]),Re.return=Ue,Ue=Re;break e}else{k(Ue,Re);break}else y(Ue,Re);Re=Re.sibling}Re=t_(ze,Ue.mode,gt),Re.return=Ue,Ue=Re}return ne(Ue);case j:return Zt=ze._init,bn(Ue,Re,Zt(ze._payload),gt)}if(Fe(ze))return Nt(Ue,Re,ze,gt);if(H(ze))return Mt(Ue,Re,ze,gt);Zx(Ue,ze)}return typeof ze=="string"&&ze!==""||typeof ze=="number"?(ze=""+ze,Re!==null&&Re.tag===6?(k(Ue,Re.sibling),Re=F(Re,ze),Re.return=Ue,Ue=Re):(k(Ue,Re),Re=e_(ze,Ue.mode,gt),Re.return=Ue,Ue=Re),ne(Ue)):k(Ue,Re)}return bn}var sd=zP(!0),VP=zP(!1),Hx=tc(null),Gx=null,od=null,uk=null;function hk(){uk=od=Gx=null}function dk(p){var y=Hx.current;en(Hx),p._currentValue=y}function fk(p,y,k){for(;p!==null;){var E=p.alternate;if((p.childLanes&y)!==y?(p.childLanes|=y,E!==null&&(E.childLanes|=y)):E!==null&&(E.childLanes&y)!==y&&(E.childLanes|=y),p===k)break;p=p.return}}function ld(p,y){Gx=p,uk=od=null,p=p.dependencies,p!==null&&p.firstContext!==null&&((p.lanes&y)!==0&&(xa=!0),p.firstContext=null)}function as(p){var y=p._currentValue;if(uk!==p)if(p={context:p,memoizedValue:y,next:null},od===null){if(Gx===null)throw Error(r(308));od=p,Gx.dependencies={lanes:0,firstContext:p}}else od=od.next=p;return y}var pu=null;function pk(p){pu===null?pu=[p]:pu.push(p)}function qP(p,y,k,E){var F=y.interleaved;return F===null?(k.next=k,pk(y)):(k.next=F.next,F.next=k),y.interleaved=k,ll(p,E)}function ll(p,y){p.lanes|=y;var k=p.alternate;for(k!==null&&(k.lanes|=y),k=p,p=p.return;p!==null;)p.childLanes|=y,k=p.alternate,k!==null&&(k.childLanes|=y),k=p,p=p.return;return k.tag===3?k.stateNode:null}var ic=!1;function gk(p){p.updateQueue={baseState:p.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function XP(p,y){p=p.updateQueue,y.updateQueue===p&&(y.updateQueue={baseState:p.baseState,firstBaseUpdate:p.firstBaseUpdate,lastBaseUpdate:p.lastBaseUpdate,shared:p.shared,effects:p.effects})}function cl(p,y){return{eventTime:p,lane:y,tag:0,payload:null,callback:null,next:null}}function ac(p,y,k){var E=p.updateQueue;if(E===null)return null;if(E=E.shared,(br&2)!==0){var F=E.pending;return F===null?y.next=y:(y.next=F.next,F.next=y),E.pending=y,ll(p,k)}return F=E.interleaved,F===null?(y.next=y,pk(E)):(y.next=F.next,F.next=y),E.interleaved=y,ll(p,k)}function Yx(p,y,k){if(y=y.updateQueue,y!==null&&(y=y.shared,(k&4194240)!==0)){var E=y.lanes;E&=p.pendingLanes,k|=E,y.lanes=k,DO(p,k)}}function ZP(p,y){var k=p.updateQueue,E=p.alternate;if(E!==null&&(E=E.updateQueue,k===E)){var F=null,q=null;if(k=k.firstBaseUpdate,k!==null){do{var ne={eventTime:k.eventTime,lane:k.lane,tag:k.tag,payload:k.payload,callback:k.callback,next:null};q===null?F=q=ne:q=q.next=ne,k=k.next}while(k!==null);q===null?F=q=y:q=q.next=y}else F=q=y;k={baseState:E.baseState,firstBaseUpdate:F,lastBaseUpdate:q,shared:E.shared,effects:E.effects},p.updateQueue=k;return}p=k.lastBaseUpdate,p===null?k.firstBaseUpdate=y:p.next=y,k.lastBaseUpdate=y}function Kx(p,y,k,E){var F=p.updateQueue;ic=!1;var q=F.firstBaseUpdate,ne=F.lastBaseUpdate,we=F.shared.pending;if(we!==null){F.shared.pending=null;var Pe=we,Ze=Pe.next;Pe.next=null,ne===null?q=Ze:ne.next=Ze,ne=Pe;var ct=p.alternate;ct!==null&&(ct=ct.updateQueue,we=ct.lastBaseUpdate,we!==ne&&(we===null?ct.firstBaseUpdate=Ze:we.next=Ze,ct.lastBaseUpdate=Pe))}if(q!==null){var ht=F.baseState;ne=0,ct=Ze=Pe=null,we=q;do{var ot=we.lane,_t=we.eventTime;if((E&ot)===ot){ct!==null&&(ct=ct.next={eventTime:_t,lane:0,tag:we.tag,payload:we.payload,callback:we.callback,next:null});e:{var Nt=p,Mt=we;switch(ot=y,_t=k,Mt.tag){case 1:if(Nt=Mt.payload,typeof Nt=="function"){ht=Nt.call(_t,ht,ot);break e}ht=Nt;break e;case 3:Nt.flags=Nt.flags&-65537|128;case 0:if(Nt=Mt.payload,ot=typeof Nt=="function"?Nt.call(_t,ht,ot):Nt,ot==null)break e;ht=re({},ht,ot);break e;case 2:ic=!0}}we.callback!==null&&we.lane!==0&&(p.flags|=64,ot=F.effects,ot===null?F.effects=[we]:ot.push(we))}else _t={eventTime:_t,lane:ot,tag:we.tag,payload:we.payload,callback:we.callback,next:null},ct===null?(Ze=ct=_t,Pe=ht):ct=ct.next=_t,ne|=ot;if(we=we.next,we===null){if(we=F.shared.pending,we===null)break;ot=we,we=ot.next,ot.next=null,F.lastBaseUpdate=ot,F.shared.pending=null}}while(!0);if(ct===null&&(Pe=ht),F.baseState=Pe,F.firstBaseUpdate=Ze,F.lastBaseUpdate=ct,y=F.shared.interleaved,y!==null){F=y;do ne|=F.lane,F=F.next;while(F!==y)}else q===null&&(F.shared.lanes=0);xu|=ne,p.lanes=ne,p.memoizedState=ht}}function HP(p,y,k){if(p=y.effects,y.effects=null,p!==null)for(y=0;yk?k:4,p(!0);var E=bk.transition;bk.transition={};try{p(!1),y()}finally{Rr=k,bk.transition=E}}function p8(){return ss().memoizedState}function Dne(p,y,k){var E=cc(p);if(k={lane:E,action:k,hasEagerState:!1,eagerState:null,next:null},g8(p))m8(y,k);else if(k=qP(p,y,k,E),k!==null){var F=Hi();js(k,p,E,F),x8(k,y,E)}}function Ane(p,y,k){var E=cc(p),F={lane:E,action:k,hasEagerState:!1,eagerState:null,next:null};if(g8(p))m8(y,F);else{var q=p.alternate;if(p.lanes===0&&(q===null||q.lanes===0)&&(q=y.lastRenderedReducer,q!==null))try{var ne=y.lastRenderedState,we=q(ne,k);if(F.hasEagerState=!0,F.eagerState=we,Fs(we,ne)){var Pe=y.interleaved;Pe===null?(F.next=F,pk(y)):(F.next=Pe.next,Pe.next=F),y.interleaved=F;return}}catch{}finally{}k=qP(p,y,F,E),k!==null&&(F=Hi(),js(k,p,E,F),x8(k,y,E))}}function g8(p){var y=p.alternate;return p===un||y!==null&&y===un}function m8(p,y){Lp=t1=!0;var k=p.pending;k===null?y.next=y:(y.next=k.next,k.next=y),p.pending=y}function x8(p,y,k){if((k&4194240)!==0){var E=y.lanes;E&=p.pendingLanes,k|=E,y.lanes=k,DO(p,k)}}var i1={readContext:as,useCallback:wi,useContext:wi,useEffect:wi,useImperativeHandle:wi,useInsertionEffect:wi,useLayoutEffect:wi,useMemo:wi,useReducer:wi,useRef:wi,useState:wi,useDebugValue:wi,useDeferredValue:wi,useTransition:wi,useMutableSource:wi,useSyncExternalStore:wi,useId:wi,unstable_isNewReconciler:!1},Nne={readContext:as,useCallback:function(p,y){return bo().memoizedState=[p,y===void 0?null:y],p},useContext:as,useEffect:s8,useImperativeHandle:function(p,y,k){return k=k!=null?k.concat([p]):null,r1(4194308,4,c8.bind(null,y,p),k)},useLayoutEffect:function(p,y){return r1(4194308,4,p,y)},useInsertionEffect:function(p,y){return r1(4,2,p,y)},useMemo:function(p,y){var k=bo();return y=y===void 0?null:y,p=p(),k.memoizedState=[p,y],p},useReducer:function(p,y,k){var E=bo();return y=k!==void 0?k(y):y,E.memoizedState=E.baseState=y,p={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:p,lastRenderedState:y},E.queue=p,p=p.dispatch=Dne.bind(null,un,p),[E.memoizedState,p]},useRef:function(p){var y=bo();return p={current:p},y.memoizedState=p},useState:i8,useDebugValue:Ck,useDeferredValue:function(p){return bo().memoizedState=p},useTransition:function(){var p=i8(!1),y=p[0];return p=Ene.bind(null,p[1]),bo().memoizedState=p,[y,p]},useMutableSource:function(){},useSyncExternalStore:function(p,y,k){var E=un,F=bo();if(nn){if(k===void 0)throw Error(r(407));k=k()}else{if(k=y(),Jn===null)throw Error(r(349));(mu&30)!==0||JP(E,y,k)}F.memoizedState=k;var q={value:k,getSnapshot:y};return F.queue=q,s8(t8.bind(null,E,q,p),[p]),E.flags|=2048,Ip(9,e8.bind(null,E,q,k,y),void 0,null),k},useId:function(){var p=bo(),y=Jn.identifierPrefix;if(nn){var k=ol,E=sl;k=(E&~(1<<32-vn(E)-1)).toString(32)+k,y=":"+y+"R"+k,k=Mp++,0<\/script>",p=p.removeChild(p.firstChild)):typeof E.is=="string"?p=ne.createElement(k,{is:E.is}):(p=ne.createElement(k),k==="select"&&(ne=p,E.multiple?ne.multiple=!0:E.size&&(ne.size=E.size))):p=ne.createElementNS(p,k),p[yo]=y,p[Dp]=E,$8(p,y,!1,!1),y.stateNode=p;e:{switch(ne=Qt(k,E),k){case"dialog":Jr("cancel",p),Jr("close",p),F=E;break;case"iframe":case"object":case"embed":Jr("load",p),F=E;break;case"video":case"audio":for(F=0;Ffd&&(y.flags|=128,E=!0,jp(q,!1),y.lanes=4194304)}else{if(!E)if(p=Jx(ne),p!==null){if(y.flags|=128,E=!0,k=p.updateQueue,k!==null&&(y.updateQueue=k,y.flags|=4),jp(q,!0),q.tail===null&&q.tailMode==="hidden"&&!ne.alternate&&!nn)return Oi(y),null}else 2*nt()-q.renderingStartTime>fd&&k!==1073741824&&(y.flags|=128,E=!0,jp(q,!1),y.lanes=4194304);q.isBackwards?(ne.sibling=y.child,y.child=ne):(k=q.last,k!==null?k.sibling=ne:y.child=ne,q.last=ne)}return q.tail!==null?(y=q.tail,q.rendering=y,q.tail=y.sibling,q.renderingStartTime=nt(),y.sibling=null,k=cn.current,zr(cn,E?k&1|2:k&1),y):(Oi(y),null);case 22:case 23:return Yk(),E=y.memoizedState!==null,p!==null&&p.memoizedState!==null!==E&&(y.flags|=8192),E&&(y.mode&1)!==0?(ja&1073741824)!==0&&(Oi(y),y.subtreeFlags&6&&(y.flags|=8192)):Oi(y),null;case 24:return null;case 25:return null}throw Error(r(156,y.tag))}function Ine(p,y){switch(sk(y),y.tag){case 1:return ma(y.type)&&Qx(),p=y.flags,p&65536?(y.flags=p&-65537|128,y):null;case 3:return cd(),en(ga),en(bi),vk(),p=y.flags,(p&65536)!==0&&(p&128)===0?(y.flags=p&-65537|128,y):null;case 5:return xk(y),null;case 13:if(en(cn),p=y.memoizedState,p!==null&&p.dehydrated!==null){if(y.alternate===null)throw Error(r(340));ad()}return p=y.flags,p&65536?(y.flags=p&-65537|128,y):null;case 19:return en(cn),null;case 4:return cd(),null;case 10:return dk(y.type._context),null;case 22:case 23:return Yk(),null;case 24:return null;default:return null}}var l1=!1,ki=!1,jne=typeof WeakSet=="function"?WeakSet:Set,Ct=null;function hd(p,y){var k=p.ref;if(k!==null)if(typeof k=="function")try{k(null)}catch(E){fn(p,y,E)}else k.current=null}function jk(p,y,k){try{k()}catch(E){fn(p,y,E)}}var B8=!1;function Bne(p,y){if(YO=Ex,p=yP(),WO(p)){if("selectionStart"in p)var k={start:p.selectionStart,end:p.selectionEnd};else e:{k=(k=p.ownerDocument)&&k.defaultView||window;var E=k.getSelection&&k.getSelection();if(E&&E.rangeCount!==0){k=E.anchorNode;var F=E.anchorOffset,q=E.focusNode;E=E.focusOffset;try{k.nodeType,q.nodeType}catch{k=null;break e}var ne=0,we=-1,Pe=-1,Ze=0,ct=0,ht=p,ot=null;t:for(;;){for(var _t;ht!==k||F!==0&&ht.nodeType!==3||(we=ne+F),ht!==q||E!==0&&ht.nodeType!==3||(Pe=ne+E),ht.nodeType===3&&(ne+=ht.nodeValue.length),(_t=ht.firstChild)!==null;)ot=ht,ht=_t;for(;;){if(ht===p)break t;if(ot===k&&++Ze===F&&(we=ne),ot===q&&++ct===E&&(Pe=ne),(_t=ht.nextSibling)!==null)break;ht=ot,ot=ht.parentNode}ht=_t}k=we===-1||Pe===-1?null:{start:we,end:Pe}}else k=null}k=k||{start:0,end:0}}else k=null;for(KO={focusedElem:p,selectionRange:k},Ex=!1,Ct=y;Ct!==null;)if(y=Ct,p=y.child,(y.subtreeFlags&1028)!==0&&p!==null)p.return=y,Ct=p;else for(;Ct!==null;){y=Ct;try{var Nt=y.alternate;if((y.flags&1024)!==0)switch(y.tag){case 0:case 11:case 15:break;case 1:if(Nt!==null){var Mt=Nt.memoizedProps,bn=Nt.memoizedState,Ue=y.stateNode,Re=Ue.getSnapshotBeforeUpdate(y.elementType===y.type?Mt:Ms(y.type,Mt),bn);Ue.__reactInternalSnapshotBeforeUpdate=Re}break;case 3:var ze=y.stateNode.containerInfo;ze.nodeType===1?ze.textContent="":ze.nodeType===9&&ze.documentElement&&ze.removeChild(ze.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(gt){fn(y,y.return,gt)}if(p=y.sibling,p!==null){p.return=y.return,Ct=p;break}Ct=y.return}return Nt=B8,B8=!1,Nt}function Bp(p,y,k){var E=y.updateQueue;if(E=E!==null?E.lastEffect:null,E!==null){var F=E=E.next;do{if((F.tag&p)===p){var q=F.destroy;F.destroy=void 0,q!==void 0&&jk(y,k,q)}F=F.next}while(F!==E)}}function c1(p,y){if(y=y.updateQueue,y=y!==null?y.lastEffect:null,y!==null){var k=y=y.next;do{if((k.tag&p)===p){var E=k.create;k.destroy=E()}k=k.next}while(k!==y)}}function Bk(p){var y=p.ref;if(y!==null){var k=p.stateNode;switch(p.tag){case 5:p=k;break;default:p=k}typeof y=="function"?y(p):y.current=p}}function U8(p){var y=p.alternate;y!==null&&(p.alternate=null,U8(y)),p.child=null,p.deletions=null,p.sibling=null,p.tag===5&&(y=p.stateNode,y!==null&&(delete y[yo],delete y[Dp],delete y[rk],delete y[One],delete y[kne])),p.stateNode=null,p.return=null,p.dependencies=null,p.memoizedProps=null,p.memoizedState=null,p.pendingProps=null,p.stateNode=null,p.updateQueue=null}function Q8(p){return p.tag===5||p.tag===3||p.tag===4}function W8(p){e:for(;;){for(;p.sibling===null;){if(p.return===null||Q8(p.return))return null;p=p.return}for(p.sibling.return=p.return,p=p.sibling;p.tag!==5&&p.tag!==6&&p.tag!==18;){if(p.flags&2||p.child===null||p.tag===4)continue e;p.child.return=p,p=p.child}if(!(p.flags&2))return p.stateNode}}function Uk(p,y,k){var E=p.tag;if(E===5||E===6)p=p.stateNode,y?k.nodeType===8?k.parentNode.insertBefore(p,y):k.insertBefore(p,y):(k.nodeType===8?(y=k.parentNode,y.insertBefore(p,k)):(y=k,y.appendChild(p)),k=k._reactRootContainer,k!=null||y.onclick!==null||(y.onclick=Bx));else if(E!==4&&(p=p.child,p!==null))for(Uk(p,y,k),p=p.sibling;p!==null;)Uk(p,y,k),p=p.sibling}function Qk(p,y,k){var E=p.tag;if(E===5||E===6)p=p.stateNode,y?k.insertBefore(p,y):k.appendChild(p);else if(E!==4&&(p=p.child,p!==null))for(Qk(p,y,k),p=p.sibling;p!==null;)Qk(p,y,k),p=p.sibling}var li=null,$s=!1;function sc(p,y,k){for(k=k.child;k!==null;)z8(p,y,k),k=k.sibling}function z8(p,y,k){if(yn&&typeof yn.onCommitFiberUnmount=="function")try{yn.onCommitFiberUnmount(La,k)}catch{}switch(k.tag){case 5:ki||hd(k,y);case 6:var E=li,F=$s;li=null,sc(p,y,k),li=E,$s=F,li!==null&&($s?(p=li,k=k.stateNode,p.nodeType===8?p.parentNode.removeChild(k):p.removeChild(k)):li.removeChild(k.stateNode));break;case 18:li!==null&&($s?(p=li,k=k.stateNode,p.nodeType===8?tk(p.parentNode,k):p.nodeType===1&&tk(p,k),yp(p)):tk(li,k.stateNode));break;case 4:E=li,F=$s,li=k.stateNode.containerInfo,$s=!0,sc(p,y,k),li=E,$s=F;break;case 0:case 11:case 14:case 15:if(!ki&&(E=k.updateQueue,E!==null&&(E=E.lastEffect,E!==null))){F=E=E.next;do{var q=F,ne=q.destroy;q=q.tag,ne!==void 0&&((q&2)!==0||(q&4)!==0)&&jk(k,y,ne),F=F.next}while(F!==E)}sc(p,y,k);break;case 1:if(!ki&&(hd(k,y),E=k.stateNode,typeof E.componentWillUnmount=="function"))try{E.props=k.memoizedProps,E.state=k.memoizedState,E.componentWillUnmount()}catch(we){fn(k,y,we)}sc(p,y,k);break;case 21:sc(p,y,k);break;case 22:k.mode&1?(ki=(E=ki)||k.memoizedState!==null,sc(p,y,k),ki=E):sc(p,y,k);break;default:sc(p,y,k)}}function V8(p){var y=p.updateQueue;if(y!==null){p.updateQueue=null;var k=p.stateNode;k===null&&(k=p.stateNode=new jne),y.forEach(function(E){var F=Hne.bind(null,p,E);k.has(E)||(k.add(E),E.then(F,F))})}}function Is(p,y){var k=y.deletions;if(k!==null)for(var E=0;EF&&(F=ne),E&=~q}if(E=F,E=nt()-E,E=(120>E?120:480>E?480:1080>E?1080:1920>E?1920:3e3>E?3e3:4320>E?4320:1960*Qne(E/1960))-E,10p?16:p,lc===null)var E=!1;else{if(p=lc,lc=null,p1=0,(br&6)!==0)throw Error(r(331));var F=br;for(br|=4,Ct=p.current;Ct!==null;){var q=Ct,ne=q.child;if((Ct.flags&16)!==0){var we=q.deletions;if(we!==null){for(var Pe=0;Pent()-Vk?vu(p,0):zk|=k),va(p,y)}function i6(p,y){y===0&&((p.mode&1)===0?y=1:(y=_x,_x<<=1,(_x&130023424)===0&&(_x=4194304)));var k=Hi();p=ll(p,y),p!==null&&(fp(p,y,k),va(p,k))}function Zne(p){var y=p.memoizedState,k=0;y!==null&&(k=y.retryLane),i6(p,k)}function Hne(p,y){var k=0;switch(p.tag){case 13:var E=p.stateNode,F=p.memoizedState;F!==null&&(k=F.retryLane);break;case 19:E=p.stateNode;break;default:throw Error(r(314))}E!==null&&E.delete(y),i6(p,k)}var a6;a6=function(p,y,k){if(p!==null)if(p.memoizedProps!==y.pendingProps||ga.current)xa=!0;else{if((p.lanes&k)===0&&(y.flags&128)===0)return xa=!1,Mne(p,y,k);xa=(p.flags&131072)!==0}else xa=!1,nn&&(y.flags&1048576)!==0&&IP(y,qx,y.index);switch(y.lanes=0,y.tag){case 2:var E=y.type;o1(p,y),p=y.pendingProps;var F=rd(y,bi.current);ld(y,k),F=Ok(null,y,E,p,F,k);var q=kk();return y.flags|=1,typeof F=="object"&&F!==null&&typeof F.render=="function"&&F.$$typeof===void 0?(y.tag=1,y.memoizedState=null,y.updateQueue=null,ma(E)?(q=!0,Wx(y)):q=!1,y.memoizedState=F.state!==null&&F.state!==void 0?F.state:null,gk(y),F.updater=a1,y.stateNode=F,F._reactInternals=y,Dk(y,E,p,k),y=Rk(null,y,E,!0,q,k)):(y.tag=0,nn&&q&&ak(y),Zi(null,y,F,k),y=y.child),y;case 16:E=y.elementType;e:{switch(o1(p,y),p=y.pendingProps,F=E._init,E=F(E._payload),y.type=E,F=y.tag=Yne(E),p=Ms(E,p),F){case 0:y=Pk(null,y,E,p,k);break e;case 1:y=N8(null,y,E,p,k);break e;case 11:y=T8(null,y,E,p,k);break e;case 14:y=C8(null,y,E,Ms(E.type,p),k);break e}throw Error(r(306,E,""))}return y;case 0:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),Pk(p,y,E,F,k);case 1:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),N8(p,y,E,F,k);case 3:e:{if(P8(y),p===null)throw Error(r(387));E=y.pendingProps,q=y.memoizedState,F=q.element,XP(p,y),Kx(y,E,null,k);var ne=y.memoizedState;if(E=ne.element,q.isDehydrated)if(q={element:E,isDehydrated:!1,cache:ne.cache,pendingSuspenseBoundaries:ne.pendingSuspenseBoundaries,transitions:ne.transitions},y.updateQueue.baseState=q,y.memoizedState=q,y.flags&256){F=ud(Error(r(423)),y),y=R8(p,y,E,k,F);break e}else if(E!==F){F=ud(Error(r(424)),y),y=R8(p,y,E,k,F);break e}else for(Ia=ec(y.stateNode.containerInfo.firstChild),$a=y,nn=!0,Ls=null,k=VP(y,null,E,k),y.child=k;k;)k.flags=k.flags&-3|4096,k=k.sibling;else{if(ad(),E===F){y=ul(p,y,k);break e}Zi(p,y,E,k)}y=y.child}return y;case 5:return GP(y),p===null&&lk(y),E=y.type,F=y.pendingProps,q=p!==null?p.memoizedProps:null,ne=F.children,JO(E,F)?ne=null:q!==null&&JO(E,q)&&(y.flags|=32),A8(p,y),Zi(p,y,ne,k),y.child;case 6:return p===null&&lk(y),null;case 13:return F8(p,y,k);case 4:return mk(y,y.stateNode.containerInfo),E=y.pendingProps,p===null?y.child=sd(y,null,E,k):Zi(p,y,E,k),y.child;case 11:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),T8(p,y,E,F,k);case 7:return Zi(p,y,y.pendingProps,k),y.child;case 8:return Zi(p,y,y.pendingProps.children,k),y.child;case 12:return Zi(p,y,y.pendingProps.children,k),y.child;case 10:e:{if(E=y.type._context,F=y.pendingProps,q=y.memoizedProps,ne=F.value,zr(Hx,E._currentValue),E._currentValue=ne,q!==null)if(Fs(q.value,ne)){if(q.children===F.children&&!ga.current){y=ul(p,y,k);break e}}else for(q=y.child,q!==null&&(q.return=y);q!==null;){var we=q.dependencies;if(we!==null){ne=q.child;for(var Pe=we.firstContext;Pe!==null;){if(Pe.context===E){if(q.tag===1){Pe=cl(-1,k&-k),Pe.tag=2;var Ze=q.updateQueue;if(Ze!==null){Ze=Ze.shared;var ct=Ze.pending;ct===null?Pe.next=Pe:(Pe.next=ct.next,ct.next=Pe),Ze.pending=Pe}}q.lanes|=k,Pe=q.alternate,Pe!==null&&(Pe.lanes|=k),fk(q.return,k,y),we.lanes|=k;break}Pe=Pe.next}}else if(q.tag===10)ne=q.type===y.type?null:q.child;else if(q.tag===18){if(ne=q.return,ne===null)throw Error(r(341));ne.lanes|=k,we=ne.alternate,we!==null&&(we.lanes|=k),fk(ne,k,y),ne=q.sibling}else ne=q.child;if(ne!==null)ne.return=q;else for(ne=q;ne!==null;){if(ne===y){ne=null;break}if(q=ne.sibling,q!==null){q.return=ne.return,ne=q;break}ne=ne.return}q=ne}Zi(p,y,F.children,k),y=y.child}return y;case 9:return F=y.type,E=y.pendingProps.children,ld(y,k),F=as(F),E=E(F),y.flags|=1,Zi(p,y,E,k),y.child;case 14:return E=y.type,F=Ms(E,y.pendingProps),F=Ms(E.type,F),C8(p,y,E,F,k);case 15:return E8(p,y,y.type,y.pendingProps,k);case 17:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),o1(p,y),y.tag=1,ma(E)?(p=!0,Wx(y)):p=!1,ld(y,k),v8(y,E,F),Dk(y,E,F,k),Rk(null,y,E,!0,p,k);case 19:return M8(p,y,k);case 22:return D8(p,y,k)}throw Error(r(156,y.tag))};function s6(p,y){return pe(p,y)}function Gne(p,y,k,E){this.tag=p,this.key=k,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=y,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=E,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ls(p,y,k,E){return new Gne(p,y,k,E)}function Jk(p){return p=p.prototype,!(!p||!p.isReactComponent)}function Yne(p){if(typeof p=="function")return Jk(p)?1:0;if(p!=null){if(p=p.$$typeof,p===N)return 11;if(p===V)return 14}return 2}function hc(p,y){var k=p.alternate;return k===null?(k=ls(p.tag,y,p.key,p.mode),k.elementType=p.elementType,k.type=p.type,k.stateNode=p.stateNode,k.alternate=p,p.alternate=k):(k.pendingProps=y,k.type=p.type,k.flags=0,k.subtreeFlags=0,k.deletions=null),k.flags=p.flags&14680064,k.childLanes=p.childLanes,k.lanes=p.lanes,k.child=p.child,k.memoizedProps=p.memoizedProps,k.memoizedState=p.memoizedState,k.updateQueue=p.updateQueue,y=p.dependencies,k.dependencies=y===null?null:{lanes:y.lanes,firstContext:y.firstContext},k.sibling=p.sibling,k.index=p.index,k.ref=p.ref,k}function y1(p,y,k,E,F,q){var ne=2;if(E=p,typeof p=="function")Jk(p)&&(ne=1);else if(typeof p=="string")ne=5;else e:switch(p){case C:return wu(k.children,F,q,y);case D:ne=8,F|=8;break;case A:return p=ls(12,k,y,F|2),p.elementType=A,p.lanes=q,p;case B:return p=ls(13,k,y,F),p.elementType=B,p.lanes=q,p;case P:return p=ls(19,k,y,F),p.elementType=P,p.lanes=q,p;case z:return v1(k,F,q,y);default:if(typeof p=="object"&&p!==null)switch(p.$$typeof){case I:ne=10;break e;case M:ne=9;break e;case N:ne=11;break e;case V:ne=14;break e;case j:ne=16,E=null;break e}throw Error(r(130,p==null?p:typeof p,""))}return y=ls(ne,k,y,F),y.elementType=p,y.type=E,y.lanes=q,y}function wu(p,y,k,E){return p=ls(7,p,E,y),p.lanes=k,p}function v1(p,y,k,E){return p=ls(22,p,E,y),p.elementType=z,p.lanes=k,p.stateNode={isHidden:!1},p}function e_(p,y,k){return p=ls(6,p,null,y),p.lanes=k,p}function t_(p,y,k){return y=ls(4,p.children!==null?p.children:[],p.key,y),y.lanes=k,y.stateNode={containerInfo:p.containerInfo,pendingChildren:null,implementation:p.implementation},y}function Kne(p,y,k,E,F){this.tag=y,this.containerInfo=p,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=EO(0),this.expirationTimes=EO(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=EO(0),this.identifierPrefix=E,this.onRecoverableError=F,this.mutableSourceEagerHydrationData=null}function r_(p,y,k,E,F,q,ne,we,Pe){return p=new Kne(p,y,k,we,Pe),y===1?(y=1,q===!0&&(y|=8)):y=0,q=ls(3,null,null,y),p.current=q,q.stateNode=p,q.memoizedState={element:E,isDehydrated:k,cache:null,transitions:null,pendingSuspenseBoundaries:null},gk(q),p}function Jne(p,y,k){var E=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),l_.exports=fie(),l_.exports}var b6;function gie(){if(b6)return T1;b6=1;var t=pie();return T1.createRoot=t.createRoot,T1.hydrateRoot=t.hydrateRoot,T1}var mie=gie();const xie=kh(mie),k3=U.createContext({});function Im(t){const e=U.useRef(null);return e.current===null&&(e.current=t()),e.current}const U2=U.createContext(null),Q2=U.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});class yie extends U.Component{getSnapshotBeforeUpdate(e){const r=this.props.childRef.current;if(r&&e.isPresent&&!this.props.isPresent){const n=this.props.sizeRef.current;n.height=r.offsetHeight||0,n.width=r.offsetWidth||0,n.top=r.offsetTop,n.left=r.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function vie({children:t,isPresent:e}){const r=U.useId(),n=U.useRef(null),i=U.useRef({width:0,height:0,top:0,left:0}),{nonce:a}=U.useContext(Q2);return U.useInsertionEffect(()=>{const{width:s,height:o,top:l,left:c}=i.current;if(e||!n.current||!s||!o)return;n.current.dataset.motionPopId=r;const u=document.createElement("style");return a&&(u.nonce=a),document.head.appendChild(u),u.sheet&&u.sheet.insertRule(` +`+q.stack}return{value:p,source:y,stack:F,digest:null}}function Ak(p,y,k){return{value:p,source:null,stack:k??null,digest:y??null}}function Nk(p,y){try{console.error(y.value)}catch(k){setTimeout(function(){throw k})}}var Fne=typeof WeakMap=="function"?WeakMap:Map;function w8(p,y,k){k=cl(-1,k),k.tag=3,k.payload={element:null};var E=y.value;return k.callback=function(){d1||(d1=!0,qk=E),Nk(p,y)},k}function O8(p,y,k){k=cl(-1,k),k.tag=3;var E=p.type.getDerivedStateFromError;if(typeof E=="function"){var F=y.value;k.payload=function(){return E(F)},k.callback=function(){Nk(p,y)}}var q=p.stateNode;return q!==null&&typeof q.componentDidCatch=="function"&&(k.callback=function(){Nk(p,y),typeof E!="function"&&(oc===null?oc=new Set([this]):oc.add(this));var ne=y.stack;this.componentDidCatch(y.value,{componentStack:ne!==null?ne:""})}),k}function k8(p,y,k){var E=p.pingCache;if(E===null){E=p.pingCache=new Fne;var F=new Set;E.set(y,F)}else F=E.get(y),F===void 0&&(F=new Set,E.set(y,F));F.has(k)||(F.add(k),p=Zne.bind(null,p,y,k),y.then(p,p))}function _8(p){do{var y;if((y=p.tag===13)&&(y=p.memoizedState,y=y!==null?y.dehydrated!==null:!0),y)return p;p=p.return}while(p!==null);return null}function S8(p,y,k,E,F){return(p.mode&1)===0?(p===y?p.flags|=65536:(p.flags|=128,k.flags|=131072,k.flags&=-52805,k.tag===1&&(k.alternate===null?k.tag=17:(y=cl(-1,1),y.tag=2,ac(k,y,1))),k.lanes|=1),p):(p.flags|=65536,p.lanes=F,p)}var Lne=S.ReactCurrentOwner,xa=!1;function Zi(p,y,k,E){y.child=p===null?VP(y,null,k,E):sd(y,p.child,k,E)}function T8(p,y,k,E,F){k=k.render;var q=y.ref;return ld(y,F),E=Ok(p,y,k,E,q,F),k=kk(),p!==null&&!xa?(y.updateQueue=p.updateQueue,y.flags&=-2053,p.lanes&=~F,ul(p,y,F)):(nn&&k&&ak(y),y.flags|=1,Zi(p,y,E,F),y.child)}function C8(p,y,k,E,F){if(p===null){var q=k.type;return typeof q=="function"&&!Jk(q)&&q.defaultProps===void 0&&k.compare===null&&k.defaultProps===void 0?(y.tag=15,y.type=q,E8(p,y,q,E,F)):(p=y1(k.type,null,E,y,y.mode,F),p.ref=y.ref,p.return=y,y.child=p)}if(q=p.child,(p.lanes&F)===0){var ne=q.memoizedProps;if(k=k.compare,k=k!==null?k:_p,k(ne,E)&&p.ref===y.ref)return ul(p,y,F)}return y.flags|=1,p=hc(q,E),p.ref=y.ref,p.return=y,y.child=p}function E8(p,y,k,E,F){if(p!==null){var q=p.memoizedProps;if(_p(q,E)&&p.ref===y.ref)if(xa=!1,y.pendingProps=E=q,(p.lanes&F)!==0)(p.flags&131072)!==0&&(xa=!0);else return y.lanes=p.lanes,ul(p,y,F)}return Pk(p,y,k,E,F)}function D8(p,y,k){var E=y.pendingProps,F=E.children,q=p!==null?p.memoizedState:null;if(E.mode==="hidden")if((y.mode&1)===0)y.memoizedState={baseLanes:0,cachePool:null,transitions:null},zr(dd,ja),ja|=k;else{if((k&1073741824)===0)return p=q!==null?q.baseLanes|k:k,y.lanes=y.childLanes=1073741824,y.memoizedState={baseLanes:p,cachePool:null,transitions:null},y.updateQueue=null,zr(dd,ja),ja|=p,null;y.memoizedState={baseLanes:0,cachePool:null,transitions:null},E=q!==null?q.baseLanes:k,zr(dd,ja),ja|=E}else q!==null?(E=q.baseLanes|k,y.memoizedState=null):E=k,zr(dd,ja),ja|=E;return Zi(p,y,F,k),y.child}function A8(p,y){var k=y.ref;(p===null&&k!==null||p!==null&&p.ref!==k)&&(y.flags|=512,y.flags|=2097152)}function Pk(p,y,k,E,F){var q=ma(k)?hu:bi.current;return q=rd(y,q),ld(y,F),k=Ok(p,y,k,E,q,F),E=kk(),p!==null&&!xa?(y.updateQueue=p.updateQueue,y.flags&=-2053,p.lanes&=~F,ul(p,y,F)):(nn&&E&&ak(y),y.flags|=1,Zi(p,y,k,F),y.child)}function N8(p,y,k,E,F){if(ma(k)){var q=!0;Wx(y)}else q=!1;if(ld(y,F),y.stateNode===null)o1(p,y),v8(y,k,E),Dk(y,k,E,F),E=!0;else if(p===null){var ne=y.stateNode,we=y.memoizedProps;ne.props=we;var Pe=ne.context,Ze=k.contextType;typeof Ze=="object"&&Ze!==null?Ze=as(Ze):(Ze=ma(k)?hu:bi.current,Ze=rd(y,Ze));var ct=k.getDerivedStateFromProps,ht=typeof ct=="function"||typeof ne.getSnapshotBeforeUpdate=="function";ht||typeof ne.UNSAFE_componentWillReceiveProps!="function"&&typeof ne.componentWillReceiveProps!="function"||(we!==E||Pe!==Ze)&&b8(y,ne,E,Ze),ic=!1;var ot=y.memoizedState;ne.state=ot,Kx(y,E,ne,F),Pe=y.memoizedState,we!==E||ot!==Pe||ga.current||ic?(typeof ct=="function"&&(Ek(y,k,ct,E),Pe=y.memoizedState),(we=ic||y8(y,k,we,E,ot,Pe,Ze))?(ht||typeof ne.UNSAFE_componentWillMount!="function"&&typeof ne.componentWillMount!="function"||(typeof ne.componentWillMount=="function"&&ne.componentWillMount(),typeof ne.UNSAFE_componentWillMount=="function"&&ne.UNSAFE_componentWillMount()),typeof ne.componentDidMount=="function"&&(y.flags|=4194308)):(typeof ne.componentDidMount=="function"&&(y.flags|=4194308),y.memoizedProps=E,y.memoizedState=Pe),ne.props=E,ne.state=Pe,ne.context=Ze,E=we):(typeof ne.componentDidMount=="function"&&(y.flags|=4194308),E=!1)}else{ne=y.stateNode,XP(p,y),we=y.memoizedProps,Ze=y.type===y.elementType?we:Ms(y.type,we),ne.props=Ze,ht=y.pendingProps,ot=ne.context,Pe=k.contextType,typeof Pe=="object"&&Pe!==null?Pe=as(Pe):(Pe=ma(k)?hu:bi.current,Pe=rd(y,Pe));var _t=k.getDerivedStateFromProps;(ct=typeof _t=="function"||typeof ne.getSnapshotBeforeUpdate=="function")||typeof ne.UNSAFE_componentWillReceiveProps!="function"&&typeof ne.componentWillReceiveProps!="function"||(we!==ht||ot!==Pe)&&b8(y,ne,E,Pe),ic=!1,ot=y.memoizedState,ne.state=ot,Kx(y,E,ne,F);var Nt=y.memoizedState;we!==ht||ot!==Nt||ga.current||ic?(typeof _t=="function"&&(Ek(y,k,_t,E),Nt=y.memoizedState),(Ze=ic||y8(y,k,Ze,E,ot,Nt,Pe)||!1)?(ct||typeof ne.UNSAFE_componentWillUpdate!="function"&&typeof ne.componentWillUpdate!="function"||(typeof ne.componentWillUpdate=="function"&&ne.componentWillUpdate(E,Nt,Pe),typeof ne.UNSAFE_componentWillUpdate=="function"&&ne.UNSAFE_componentWillUpdate(E,Nt,Pe)),typeof ne.componentDidUpdate=="function"&&(y.flags|=4),typeof ne.getSnapshotBeforeUpdate=="function"&&(y.flags|=1024)):(typeof ne.componentDidUpdate!="function"||we===p.memoizedProps&&ot===p.memoizedState||(y.flags|=4),typeof ne.getSnapshotBeforeUpdate!="function"||we===p.memoizedProps&&ot===p.memoizedState||(y.flags|=1024),y.memoizedProps=E,y.memoizedState=Nt),ne.props=E,ne.state=Nt,ne.context=Pe,E=Ze):(typeof ne.componentDidUpdate!="function"||we===p.memoizedProps&&ot===p.memoizedState||(y.flags|=4),typeof ne.getSnapshotBeforeUpdate!="function"||we===p.memoizedProps&&ot===p.memoizedState||(y.flags|=1024),E=!1)}return Rk(p,y,k,E,q,F)}function Rk(p,y,k,E,F,q){A8(p,y);var ne=(y.flags&128)!==0;if(!E&&!ne)return F&&MP(y,k,!1),ul(p,y,q);E=y.stateNode,Lne.current=y;var we=ne&&typeof k.getDerivedStateFromError!="function"?null:E.render();return y.flags|=1,p!==null&&ne?(y.child=sd(y,p.child,null,q),y.child=sd(y,null,we,q)):Zi(p,y,we,q),y.memoizedState=E.state,F&&MP(y,k,!0),y.child}function P8(p){var y=p.stateNode;y.pendingContext?FP(p,y.pendingContext,y.pendingContext!==y.context):y.context&&FP(p,y.context,!1),mk(p,y.containerInfo)}function R8(p,y,k,E,F){return ad(),ck(F),y.flags|=256,Zi(p,y,k,E),y.child}var Fk={dehydrated:null,treeContext:null,retryLane:0};function Lk(p){return{baseLanes:p,cachePool:null,transitions:null}}function F8(p,y,k){var E=y.pendingProps,F=cn.current,q=!1,ne=(y.flags&128)!==0,we;if((we=ne)||(we=p!==null&&p.memoizedState===null?!1:(F&2)!==0),we?(q=!0,y.flags&=-129):(p===null||p.memoizedState!==null)&&(F|=1),zr(cn,F&1),p===null)return lk(y),p=y.memoizedState,p!==null&&(p=p.dehydrated,p!==null)?((y.mode&1)===0?y.lanes=1:p.data==="$!"?y.lanes=8:y.lanes=1073741824,null):(ne=E.children,p=E.fallback,q?(E=y.mode,q=y.child,ne={mode:"hidden",children:ne},(E&1)===0&&q!==null?(q.childLanes=0,q.pendingProps=ne):q=v1(ne,E,0,null),p=wu(p,E,k,null),q.return=y,p.return=y,q.sibling=p,y.child=q,y.child.memoizedState=Lk(k),y.memoizedState=Fk,p):Mk(y,ne));if(F=p.memoizedState,F!==null&&(we=F.dehydrated,we!==null))return Mne(p,y,ne,E,we,F,k);if(q){q=E.fallback,ne=y.mode,F=p.child,we=F.sibling;var Pe={mode:"hidden",children:E.children};return(ne&1)===0&&y.child!==F?(E=y.child,E.childLanes=0,E.pendingProps=Pe,y.deletions=null):(E=hc(F,Pe),E.subtreeFlags=F.subtreeFlags&14680064),we!==null?q=hc(we,q):(q=wu(q,ne,k,null),q.flags|=2),q.return=y,E.return=y,E.sibling=q,y.child=E,E=q,q=y.child,ne=p.child.memoizedState,ne=ne===null?Lk(k):{baseLanes:ne.baseLanes|k,cachePool:null,transitions:ne.transitions},q.memoizedState=ne,q.childLanes=p.childLanes&~k,y.memoizedState=Fk,E}return q=p.child,p=q.sibling,E=hc(q,{mode:"visible",children:E.children}),(y.mode&1)===0&&(E.lanes=k),E.return=y,E.sibling=null,p!==null&&(k=y.deletions,k===null?(y.deletions=[p],y.flags|=16):k.push(p)),y.child=E,y.memoizedState=null,E}function Mk(p,y){return y=v1({mode:"visible",children:y},p.mode,0,null),y.return=p,p.child=y}function s1(p,y,k,E){return E!==null&&ck(E),sd(y,p.child,null,k),p=Mk(y,y.pendingProps.children),p.flags|=2,y.memoizedState=null,p}function Mne(p,y,k,E,F,q,ne){if(k)return y.flags&256?(y.flags&=-257,E=Ak(Error(r(422))),s1(p,y,ne,E)):y.memoizedState!==null?(y.child=p.child,y.flags|=128,null):(q=E.fallback,F=y.mode,E=v1({mode:"visible",children:E.children},F,0,null),q=wu(q,F,ne,null),q.flags|=2,E.return=y,q.return=y,E.sibling=q,y.child=E,(y.mode&1)!==0&&sd(y,p.child,null,ne),y.child.memoizedState=Lk(ne),y.memoizedState=Fk,q);if((y.mode&1)===0)return s1(p,y,ne,null);if(F.data==="$!"){if(E=F.nextSibling&&F.nextSibling.dataset,E)var we=E.dgst;return E=we,q=Error(r(419)),E=Ak(q,E,void 0),s1(p,y,ne,E)}if(we=(ne&p.childLanes)!==0,xa||we){if(E=Jn,E!==null){switch(ne&-ne){case 4:F=2;break;case 16:F=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:F=32;break;case 536870912:F=268435456;break;default:F=0}F=(F&(E.suspendedLanes|ne))!==0?0:F,F!==0&&F!==q.retryLane&&(q.retryLane=F,ll(p,F),js(E,p,F,-1))}return Kk(),E=Ak(Error(r(421))),s1(p,y,ne,E)}return F.data==="$?"?(y.flags|=128,y.child=p.child,y=Hne.bind(null,p),F._reactRetry=y,null):(p=q.treeContext,Ia=ec(F.nextSibling),$a=y,nn=!0,Ls=null,p!==null&&(ns[is++]=sl,ns[is++]=ol,ns[is++]=du,sl=p.id,ol=p.overflow,du=y),y=Mk(y,E.children),y.flags|=4096,y)}function L8(p,y,k){p.lanes|=y;var E=p.alternate;E!==null&&(E.lanes|=y),fk(p.return,y,k)}function $k(p,y,k,E,F){var q=p.memoizedState;q===null?p.memoizedState={isBackwards:y,rendering:null,renderingStartTime:0,last:E,tail:k,tailMode:F}:(q.isBackwards=y,q.rendering=null,q.renderingStartTime=0,q.last=E,q.tail=k,q.tailMode=F)}function M8(p,y,k){var E=y.pendingProps,F=E.revealOrder,q=E.tail;if(Zi(p,y,E.children,k),E=cn.current,(E&2)!==0)E=E&1|2,y.flags|=128;else{if(p!==null&&(p.flags&128)!==0)e:for(p=y.child;p!==null;){if(p.tag===13)p.memoizedState!==null&&L8(p,k,y);else if(p.tag===19)L8(p,k,y);else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===y)break e;for(;p.sibling===null;){if(p.return===null||p.return===y)break e;p=p.return}p.sibling.return=p.return,p=p.sibling}E&=1}if(zr(cn,E),(y.mode&1)===0)y.memoizedState=null;else switch(F){case"forwards":for(k=y.child,F=null;k!==null;)p=k.alternate,p!==null&&Jx(p)===null&&(F=k),k=k.sibling;k=F,k===null?(F=y.child,y.child=null):(F=k.sibling,k.sibling=null),$k(y,!1,F,k,q);break;case"backwards":for(k=null,F=y.child,y.child=null;F!==null;){if(p=F.alternate,p!==null&&Jx(p)===null){y.child=F;break}p=F.sibling,F.sibling=k,k=F,F=p}$k(y,!0,k,null,q);break;case"together":$k(y,!1,null,null,void 0);break;default:y.memoizedState=null}return y.child}function o1(p,y){(y.mode&1)===0&&p!==null&&(p.alternate=null,y.alternate=null,y.flags|=2)}function ul(p,y,k){if(p!==null&&(y.dependencies=p.dependencies),xu|=y.lanes,(k&y.childLanes)===0)return null;if(p!==null&&y.child!==p.child)throw Error(r(153));if(y.child!==null){for(p=y.child,k=hc(p,p.pendingProps),y.child=k,k.return=y;p.sibling!==null;)p=p.sibling,k=k.sibling=hc(p,p.pendingProps),k.return=y;k.sibling=null}return y.child}function $ne(p,y,k){switch(y.tag){case 3:P8(y),ad();break;case 5:GP(y);break;case 1:ma(y.type)&&Wx(y);break;case 4:mk(y,y.stateNode.containerInfo);break;case 10:var E=y.type._context,F=y.memoizedProps.value;zr(Hx,E._currentValue),E._currentValue=F;break;case 13:if(E=y.memoizedState,E!==null)return E.dehydrated!==null?(zr(cn,cn.current&1),y.flags|=128,null):(k&y.child.childLanes)!==0?F8(p,y,k):(zr(cn,cn.current&1),p=ul(p,y,k),p!==null?p.sibling:null);zr(cn,cn.current&1);break;case 19:if(E=(k&y.childLanes)!==0,(p.flags&128)!==0){if(E)return M8(p,y,k);y.flags|=128}if(F=y.memoizedState,F!==null&&(F.rendering=null,F.tail=null,F.lastEffect=null),zr(cn,cn.current),E)break;return null;case 22:case 23:return y.lanes=0,D8(p,y,k)}return ul(p,y,k)}var $8,Ik,I8,j8;$8=function(p,y){for(var k=y.child;k!==null;){if(k.tag===5||k.tag===6)p.appendChild(k.stateNode);else if(k.tag!==4&&k.child!==null){k.child.return=k,k=k.child;continue}if(k===y)break;for(;k.sibling===null;){if(k.return===null||k.return===y)return;k=k.return}k.sibling.return=k.return,k=k.sibling}},Ik=function(){},I8=function(p,y,k,E){var F=p.memoizedProps;if(F!==E){p=y.stateNode,gu(vo.current);var q=null;switch(k){case"input":F=Q(p,F),E=Q(p,E),q=[];break;case"select":F=re({},F,{value:void 0}),E=re({},E,{value:void 0}),q=[];break;case"textarea":F=be(p,F),E=be(p,E),q=[];break;default:typeof F.onClick!="function"&&typeof E.onClick=="function"&&(p.onclick=Bx)}xt(k,E);var ne;k=null;for(Ze in F)if(!E.hasOwnProperty(Ze)&&F.hasOwnProperty(Ze)&&F[Ze]!=null)if(Ze==="style"){var we=F[Ze];for(ne in we)we.hasOwnProperty(ne)&&(k||(k={}),k[ne]="")}else Ze!=="dangerouslySetInnerHTML"&&Ze!=="children"&&Ze!=="suppressContentEditableWarning"&&Ze!=="suppressHydrationWarning"&&Ze!=="autoFocus"&&(i.hasOwnProperty(Ze)?q||(q=[]):(q=q||[]).push(Ze,null));for(Ze in E){var Pe=E[Ze];if(we=F!=null?F[Ze]:void 0,E.hasOwnProperty(Ze)&&Pe!==we&&(Pe!=null||we!=null))if(Ze==="style")if(we){for(ne in we)!we.hasOwnProperty(ne)||Pe&&Pe.hasOwnProperty(ne)||(k||(k={}),k[ne]="");for(ne in Pe)Pe.hasOwnProperty(ne)&&we[ne]!==Pe[ne]&&(k||(k={}),k[ne]=Pe[ne])}else k||(q||(q=[]),q.push(Ze,k)),k=Pe;else Ze==="dangerouslySetInnerHTML"?(Pe=Pe?Pe.__html:void 0,we=we?we.__html:void 0,Pe!=null&&we!==Pe&&(q=q||[]).push(Ze,Pe)):Ze==="children"?typeof Pe!="string"&&typeof Pe!="number"||(q=q||[]).push(Ze,""+Pe):Ze!=="suppressContentEditableWarning"&&Ze!=="suppressHydrationWarning"&&(i.hasOwnProperty(Ze)?(Pe!=null&&Ze==="onScroll"&&Jr("scroll",p),q||we===Pe||(q=[])):(q=q||[]).push(Ze,Pe))}k&&(q=q||[]).push("style",k);var Ze=q;(y.updateQueue=Ze)&&(y.flags|=4)}},j8=function(p,y,k,E){k!==E&&(y.flags|=4)};function jp(p,y){if(!nn)switch(p.tailMode){case"hidden":y=p.tail;for(var k=null;y!==null;)y.alternate!==null&&(k=y),y=y.sibling;k===null?p.tail=null:k.sibling=null;break;case"collapsed":k=p.tail;for(var E=null;k!==null;)k.alternate!==null&&(E=k),k=k.sibling;E===null?y||p.tail===null?p.tail=null:p.tail.sibling=null:E.sibling=null}}function Oi(p){var y=p.alternate!==null&&p.alternate.child===p.child,k=0,E=0;if(y)for(var F=p.child;F!==null;)k|=F.lanes|F.childLanes,E|=F.subtreeFlags&14680064,E|=F.flags&14680064,F.return=p,F=F.sibling;else for(F=p.child;F!==null;)k|=F.lanes|F.childLanes,E|=F.subtreeFlags,E|=F.flags,F.return=p,F=F.sibling;return p.subtreeFlags|=E,p.childLanes=k,y}function Ine(p,y,k){var E=y.pendingProps;switch(sk(y),y.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Oi(y),null;case 1:return ma(y.type)&&Qx(),Oi(y),null;case 3:return E=y.stateNode,cd(),en(ga),en(bi),vk(),E.pendingContext&&(E.context=E.pendingContext,E.pendingContext=null),(p===null||p.child===null)&&(Xx(y)?y.flags|=4:p===null||p.memoizedState.isDehydrated&&(y.flags&256)===0||(y.flags|=1024,Ls!==null&&(Hk(Ls),Ls=null))),Ik(p,y),Oi(y),null;case 5:xk(y);var F=gu(Fp.current);if(k=y.type,p!==null&&y.stateNode!=null)I8(p,y,k,E,F),p.ref!==y.ref&&(y.flags|=512,y.flags|=2097152);else{if(!E){if(y.stateNode===null)throw Error(r(166));return Oi(y),null}if(p=gu(vo.current),Xx(y)){E=y.stateNode,k=y.type;var q=y.memoizedProps;switch(E[yo]=y,E[Dp]=q,p=(y.mode&1)!==0,k){case"dialog":Jr("cancel",E),Jr("close",E);break;case"iframe":case"object":case"embed":Jr("load",E);break;case"video":case"audio":for(F=0;F<\/script>",p=p.removeChild(p.firstChild)):typeof E.is=="string"?p=ne.createElement(k,{is:E.is}):(p=ne.createElement(k),k==="select"&&(ne=p,E.multiple?ne.multiple=!0:E.size&&(ne.size=E.size))):p=ne.createElementNS(p,k),p[yo]=y,p[Dp]=E,$8(p,y,!1,!1),y.stateNode=p;e:{switch(ne=Qt(k,E),k){case"dialog":Jr("cancel",p),Jr("close",p),F=E;break;case"iframe":case"object":case"embed":Jr("load",p),F=E;break;case"video":case"audio":for(F=0;Ffd&&(y.flags|=128,E=!0,jp(q,!1),y.lanes=4194304)}else{if(!E)if(p=Jx(ne),p!==null){if(y.flags|=128,E=!0,k=p.updateQueue,k!==null&&(y.updateQueue=k,y.flags|=4),jp(q,!0),q.tail===null&&q.tailMode==="hidden"&&!ne.alternate&&!nn)return Oi(y),null}else 2*nt()-q.renderingStartTime>fd&&k!==1073741824&&(y.flags|=128,E=!0,jp(q,!1),y.lanes=4194304);q.isBackwards?(ne.sibling=y.child,y.child=ne):(k=q.last,k!==null?k.sibling=ne:y.child=ne,q.last=ne)}return q.tail!==null?(y=q.tail,q.rendering=y,q.tail=y.sibling,q.renderingStartTime=nt(),y.sibling=null,k=cn.current,zr(cn,E?k&1|2:k&1),y):(Oi(y),null);case 22:case 23:return Yk(),E=y.memoizedState!==null,p!==null&&p.memoizedState!==null!==E&&(y.flags|=8192),E&&(y.mode&1)!==0?(ja&1073741824)!==0&&(Oi(y),y.subtreeFlags&6&&(y.flags|=8192)):Oi(y),null;case 24:return null;case 25:return null}throw Error(r(156,y.tag))}function jne(p,y){switch(sk(y),y.tag){case 1:return ma(y.type)&&Qx(),p=y.flags,p&65536?(y.flags=p&-65537|128,y):null;case 3:return cd(),en(ga),en(bi),vk(),p=y.flags,(p&65536)!==0&&(p&128)===0?(y.flags=p&-65537|128,y):null;case 5:return xk(y),null;case 13:if(en(cn),p=y.memoizedState,p!==null&&p.dehydrated!==null){if(y.alternate===null)throw Error(r(340));ad()}return p=y.flags,p&65536?(y.flags=p&-65537|128,y):null;case 19:return en(cn),null;case 4:return cd(),null;case 10:return dk(y.type._context),null;case 22:case 23:return Yk(),null;case 24:return null;default:return null}}var l1=!1,ki=!1,Bne=typeof WeakSet=="function"?WeakSet:Set,Ct=null;function hd(p,y){var k=p.ref;if(k!==null)if(typeof k=="function")try{k(null)}catch(E){fn(p,y,E)}else k.current=null}function jk(p,y,k){try{k()}catch(E){fn(p,y,E)}}var B8=!1;function Une(p,y){if(YO=Ex,p=yP(),WO(p)){if("selectionStart"in p)var k={start:p.selectionStart,end:p.selectionEnd};else e:{k=(k=p.ownerDocument)&&k.defaultView||window;var E=k.getSelection&&k.getSelection();if(E&&E.rangeCount!==0){k=E.anchorNode;var F=E.anchorOffset,q=E.focusNode;E=E.focusOffset;try{k.nodeType,q.nodeType}catch{k=null;break e}var ne=0,we=-1,Pe=-1,Ze=0,ct=0,ht=p,ot=null;t:for(;;){for(var _t;ht!==k||F!==0&&ht.nodeType!==3||(we=ne+F),ht!==q||E!==0&&ht.nodeType!==3||(Pe=ne+E),ht.nodeType===3&&(ne+=ht.nodeValue.length),(_t=ht.firstChild)!==null;)ot=ht,ht=_t;for(;;){if(ht===p)break t;if(ot===k&&++Ze===F&&(we=ne),ot===q&&++ct===E&&(Pe=ne),(_t=ht.nextSibling)!==null)break;ht=ot,ot=ht.parentNode}ht=_t}k=we===-1||Pe===-1?null:{start:we,end:Pe}}else k=null}k=k||{start:0,end:0}}else k=null;for(KO={focusedElem:p,selectionRange:k},Ex=!1,Ct=y;Ct!==null;)if(y=Ct,p=y.child,(y.subtreeFlags&1028)!==0&&p!==null)p.return=y,Ct=p;else for(;Ct!==null;){y=Ct;try{var Nt=y.alternate;if((y.flags&1024)!==0)switch(y.tag){case 0:case 11:case 15:break;case 1:if(Nt!==null){var Mt=Nt.memoizedProps,bn=Nt.memoizedState,Ue=y.stateNode,Re=Ue.getSnapshotBeforeUpdate(y.elementType===y.type?Mt:Ms(y.type,Mt),bn);Ue.__reactInternalSnapshotBeforeUpdate=Re}break;case 3:var ze=y.stateNode.containerInfo;ze.nodeType===1?ze.textContent="":ze.nodeType===9&&ze.documentElement&&ze.removeChild(ze.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(gt){fn(y,y.return,gt)}if(p=y.sibling,p!==null){p.return=y.return,Ct=p;break}Ct=y.return}return Nt=B8,B8=!1,Nt}function Bp(p,y,k){var E=y.updateQueue;if(E=E!==null?E.lastEffect:null,E!==null){var F=E=E.next;do{if((F.tag&p)===p){var q=F.destroy;F.destroy=void 0,q!==void 0&&jk(y,k,q)}F=F.next}while(F!==E)}}function c1(p,y){if(y=y.updateQueue,y=y!==null?y.lastEffect:null,y!==null){var k=y=y.next;do{if((k.tag&p)===p){var E=k.create;k.destroy=E()}k=k.next}while(k!==y)}}function Bk(p){var y=p.ref;if(y!==null){var k=p.stateNode;switch(p.tag){case 5:p=k;break;default:p=k}typeof y=="function"?y(p):y.current=p}}function U8(p){var y=p.alternate;y!==null&&(p.alternate=null,U8(y)),p.child=null,p.deletions=null,p.sibling=null,p.tag===5&&(y=p.stateNode,y!==null&&(delete y[yo],delete y[Dp],delete y[rk],delete y[kne],delete y[_ne])),p.stateNode=null,p.return=null,p.dependencies=null,p.memoizedProps=null,p.memoizedState=null,p.pendingProps=null,p.stateNode=null,p.updateQueue=null}function Q8(p){return p.tag===5||p.tag===3||p.tag===4}function W8(p){e:for(;;){for(;p.sibling===null;){if(p.return===null||Q8(p.return))return null;p=p.return}for(p.sibling.return=p.return,p=p.sibling;p.tag!==5&&p.tag!==6&&p.tag!==18;){if(p.flags&2||p.child===null||p.tag===4)continue e;p.child.return=p,p=p.child}if(!(p.flags&2))return p.stateNode}}function Uk(p,y,k){var E=p.tag;if(E===5||E===6)p=p.stateNode,y?k.nodeType===8?k.parentNode.insertBefore(p,y):k.insertBefore(p,y):(k.nodeType===8?(y=k.parentNode,y.insertBefore(p,k)):(y=k,y.appendChild(p)),k=k._reactRootContainer,k!=null||y.onclick!==null||(y.onclick=Bx));else if(E!==4&&(p=p.child,p!==null))for(Uk(p,y,k),p=p.sibling;p!==null;)Uk(p,y,k),p=p.sibling}function Qk(p,y,k){var E=p.tag;if(E===5||E===6)p=p.stateNode,y?k.insertBefore(p,y):k.appendChild(p);else if(E!==4&&(p=p.child,p!==null))for(Qk(p,y,k),p=p.sibling;p!==null;)Qk(p,y,k),p=p.sibling}var li=null,$s=!1;function sc(p,y,k){for(k=k.child;k!==null;)z8(p,y,k),k=k.sibling}function z8(p,y,k){if(yn&&typeof yn.onCommitFiberUnmount=="function")try{yn.onCommitFiberUnmount(La,k)}catch{}switch(k.tag){case 5:ki||hd(k,y);case 6:var E=li,F=$s;li=null,sc(p,y,k),li=E,$s=F,li!==null&&($s?(p=li,k=k.stateNode,p.nodeType===8?p.parentNode.removeChild(k):p.removeChild(k)):li.removeChild(k.stateNode));break;case 18:li!==null&&($s?(p=li,k=k.stateNode,p.nodeType===8?tk(p.parentNode,k):p.nodeType===1&&tk(p,k),yp(p)):tk(li,k.stateNode));break;case 4:E=li,F=$s,li=k.stateNode.containerInfo,$s=!0,sc(p,y,k),li=E,$s=F;break;case 0:case 11:case 14:case 15:if(!ki&&(E=k.updateQueue,E!==null&&(E=E.lastEffect,E!==null))){F=E=E.next;do{var q=F,ne=q.destroy;q=q.tag,ne!==void 0&&((q&2)!==0||(q&4)!==0)&&jk(k,y,ne),F=F.next}while(F!==E)}sc(p,y,k);break;case 1:if(!ki&&(hd(k,y),E=k.stateNode,typeof E.componentWillUnmount=="function"))try{E.props=k.memoizedProps,E.state=k.memoizedState,E.componentWillUnmount()}catch(we){fn(k,y,we)}sc(p,y,k);break;case 21:sc(p,y,k);break;case 22:k.mode&1?(ki=(E=ki)||k.memoizedState!==null,sc(p,y,k),ki=E):sc(p,y,k);break;default:sc(p,y,k)}}function V8(p){var y=p.updateQueue;if(y!==null){p.updateQueue=null;var k=p.stateNode;k===null&&(k=p.stateNode=new Bne),y.forEach(function(E){var F=Gne.bind(null,p,E);k.has(E)||(k.add(E),E.then(F,F))})}}function Is(p,y){var k=y.deletions;if(k!==null)for(var E=0;EF&&(F=ne),E&=~q}if(E=F,E=nt()-E,E=(120>E?120:480>E?480:1080>E?1080:1920>E?1920:3e3>E?3e3:4320>E?4320:1960*Wne(E/1960))-E,10p?16:p,lc===null)var E=!1;else{if(p=lc,lc=null,p1=0,(br&6)!==0)throw Error(r(331));var F=br;for(br|=4,Ct=p.current;Ct!==null;){var q=Ct,ne=q.child;if((Ct.flags&16)!==0){var we=q.deletions;if(we!==null){for(var Pe=0;Pent()-Vk?vu(p,0):zk|=k),va(p,y)}function i6(p,y){y===0&&((p.mode&1)===0?y=1:(y=_x,_x<<=1,(_x&130023424)===0&&(_x=4194304)));var k=Hi();p=ll(p,y),p!==null&&(fp(p,y,k),va(p,k))}function Hne(p){var y=p.memoizedState,k=0;y!==null&&(k=y.retryLane),i6(p,k)}function Gne(p,y){var k=0;switch(p.tag){case 13:var E=p.stateNode,F=p.memoizedState;F!==null&&(k=F.retryLane);break;case 19:E=p.stateNode;break;default:throw Error(r(314))}E!==null&&E.delete(y),i6(p,k)}var a6;a6=function(p,y,k){if(p!==null)if(p.memoizedProps!==y.pendingProps||ga.current)xa=!0;else{if((p.lanes&k)===0&&(y.flags&128)===0)return xa=!1,$ne(p,y,k);xa=(p.flags&131072)!==0}else xa=!1,nn&&(y.flags&1048576)!==0&&IP(y,qx,y.index);switch(y.lanes=0,y.tag){case 2:var E=y.type;o1(p,y),p=y.pendingProps;var F=rd(y,bi.current);ld(y,k),F=Ok(null,y,E,p,F,k);var q=kk();return y.flags|=1,typeof F=="object"&&F!==null&&typeof F.render=="function"&&F.$$typeof===void 0?(y.tag=1,y.memoizedState=null,y.updateQueue=null,ma(E)?(q=!0,Wx(y)):q=!1,y.memoizedState=F.state!==null&&F.state!==void 0?F.state:null,gk(y),F.updater=a1,y.stateNode=F,F._reactInternals=y,Dk(y,E,p,k),y=Rk(null,y,E,!0,q,k)):(y.tag=0,nn&&q&&ak(y),Zi(null,y,F,k),y=y.child),y;case 16:E=y.elementType;e:{switch(o1(p,y),p=y.pendingProps,F=E._init,E=F(E._payload),y.type=E,F=y.tag=Kne(E),p=Ms(E,p),F){case 0:y=Pk(null,y,E,p,k);break e;case 1:y=N8(null,y,E,p,k);break e;case 11:y=T8(null,y,E,p,k);break e;case 14:y=C8(null,y,E,Ms(E.type,p),k);break e}throw Error(r(306,E,""))}return y;case 0:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),Pk(p,y,E,F,k);case 1:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),N8(p,y,E,F,k);case 3:e:{if(P8(y),p===null)throw Error(r(387));E=y.pendingProps,q=y.memoizedState,F=q.element,XP(p,y),Kx(y,E,null,k);var ne=y.memoizedState;if(E=ne.element,q.isDehydrated)if(q={element:E,isDehydrated:!1,cache:ne.cache,pendingSuspenseBoundaries:ne.pendingSuspenseBoundaries,transitions:ne.transitions},y.updateQueue.baseState=q,y.memoizedState=q,y.flags&256){F=ud(Error(r(423)),y),y=R8(p,y,E,k,F);break e}else if(E!==F){F=ud(Error(r(424)),y),y=R8(p,y,E,k,F);break e}else for(Ia=ec(y.stateNode.containerInfo.firstChild),$a=y,nn=!0,Ls=null,k=VP(y,null,E,k),y.child=k;k;)k.flags=k.flags&-3|4096,k=k.sibling;else{if(ad(),E===F){y=ul(p,y,k);break e}Zi(p,y,E,k)}y=y.child}return y;case 5:return GP(y),p===null&&lk(y),E=y.type,F=y.pendingProps,q=p!==null?p.memoizedProps:null,ne=F.children,JO(E,F)?ne=null:q!==null&&JO(E,q)&&(y.flags|=32),A8(p,y),Zi(p,y,ne,k),y.child;case 6:return p===null&&lk(y),null;case 13:return F8(p,y,k);case 4:return mk(y,y.stateNode.containerInfo),E=y.pendingProps,p===null?y.child=sd(y,null,E,k):Zi(p,y,E,k),y.child;case 11:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),T8(p,y,E,F,k);case 7:return Zi(p,y,y.pendingProps,k),y.child;case 8:return Zi(p,y,y.pendingProps.children,k),y.child;case 12:return Zi(p,y,y.pendingProps.children,k),y.child;case 10:e:{if(E=y.type._context,F=y.pendingProps,q=y.memoizedProps,ne=F.value,zr(Hx,E._currentValue),E._currentValue=ne,q!==null)if(Fs(q.value,ne)){if(q.children===F.children&&!ga.current){y=ul(p,y,k);break e}}else for(q=y.child,q!==null&&(q.return=y);q!==null;){var we=q.dependencies;if(we!==null){ne=q.child;for(var Pe=we.firstContext;Pe!==null;){if(Pe.context===E){if(q.tag===1){Pe=cl(-1,k&-k),Pe.tag=2;var Ze=q.updateQueue;if(Ze!==null){Ze=Ze.shared;var ct=Ze.pending;ct===null?Pe.next=Pe:(Pe.next=ct.next,ct.next=Pe),Ze.pending=Pe}}q.lanes|=k,Pe=q.alternate,Pe!==null&&(Pe.lanes|=k),fk(q.return,k,y),we.lanes|=k;break}Pe=Pe.next}}else if(q.tag===10)ne=q.type===y.type?null:q.child;else if(q.tag===18){if(ne=q.return,ne===null)throw Error(r(341));ne.lanes|=k,we=ne.alternate,we!==null&&(we.lanes|=k),fk(ne,k,y),ne=q.sibling}else ne=q.child;if(ne!==null)ne.return=q;else for(ne=q;ne!==null;){if(ne===y){ne=null;break}if(q=ne.sibling,q!==null){q.return=ne.return,ne=q;break}ne=ne.return}q=ne}Zi(p,y,F.children,k),y=y.child}return y;case 9:return F=y.type,E=y.pendingProps.children,ld(y,k),F=as(F),E=E(F),y.flags|=1,Zi(p,y,E,k),y.child;case 14:return E=y.type,F=Ms(E,y.pendingProps),F=Ms(E.type,F),C8(p,y,E,F,k);case 15:return E8(p,y,y.type,y.pendingProps,k);case 17:return E=y.type,F=y.pendingProps,F=y.elementType===E?F:Ms(E,F),o1(p,y),y.tag=1,ma(E)?(p=!0,Wx(y)):p=!1,ld(y,k),v8(y,E,F),Dk(y,E,F,k),Rk(null,y,E,!0,p,k);case 19:return M8(p,y,k);case 22:return D8(p,y,k)}throw Error(r(156,y.tag))};function s6(p,y){return pe(p,y)}function Yne(p,y,k,E){this.tag=p,this.key=k,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=y,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=E,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ls(p,y,k,E){return new Yne(p,y,k,E)}function Jk(p){return p=p.prototype,!(!p||!p.isReactComponent)}function Kne(p){if(typeof p=="function")return Jk(p)?1:0;if(p!=null){if(p=p.$$typeof,p===N)return 11;if(p===V)return 14}return 2}function hc(p,y){var k=p.alternate;return k===null?(k=ls(p.tag,y,p.key,p.mode),k.elementType=p.elementType,k.type=p.type,k.stateNode=p.stateNode,k.alternate=p,p.alternate=k):(k.pendingProps=y,k.type=p.type,k.flags=0,k.subtreeFlags=0,k.deletions=null),k.flags=p.flags&14680064,k.childLanes=p.childLanes,k.lanes=p.lanes,k.child=p.child,k.memoizedProps=p.memoizedProps,k.memoizedState=p.memoizedState,k.updateQueue=p.updateQueue,y=p.dependencies,k.dependencies=y===null?null:{lanes:y.lanes,firstContext:y.firstContext},k.sibling=p.sibling,k.index=p.index,k.ref=p.ref,k}function y1(p,y,k,E,F,q){var ne=2;if(E=p,typeof p=="function")Jk(p)&&(ne=1);else if(typeof p=="string")ne=5;else e:switch(p){case C:return wu(k.children,F,q,y);case D:ne=8,F|=8;break;case A:return p=ls(12,k,y,F|2),p.elementType=A,p.lanes=q,p;case B:return p=ls(13,k,y,F),p.elementType=B,p.lanes=q,p;case P:return p=ls(19,k,y,F),p.elementType=P,p.lanes=q,p;case z:return v1(k,F,q,y);default:if(typeof p=="object"&&p!==null)switch(p.$$typeof){case I:ne=10;break e;case M:ne=9;break e;case N:ne=11;break e;case V:ne=14;break e;case j:ne=16,E=null;break e}throw Error(r(130,p==null?p:typeof p,""))}return y=ls(ne,k,y,F),y.elementType=p,y.type=E,y.lanes=q,y}function wu(p,y,k,E){return p=ls(7,p,E,y),p.lanes=k,p}function v1(p,y,k,E){return p=ls(22,p,E,y),p.elementType=z,p.lanes=k,p.stateNode={isHidden:!1},p}function e_(p,y,k){return p=ls(6,p,null,y),p.lanes=k,p}function t_(p,y,k){return y=ls(4,p.children!==null?p.children:[],p.key,y),y.lanes=k,y.stateNode={containerInfo:p.containerInfo,pendingChildren:null,implementation:p.implementation},y}function Jne(p,y,k,E,F){this.tag=y,this.containerInfo=p,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=EO(0),this.expirationTimes=EO(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=EO(0),this.identifierPrefix=E,this.onRecoverableError=F,this.mutableSourceEagerHydrationData=null}function r_(p,y,k,E,F,q,ne,we,Pe){return p=new Jne(p,y,k,we,Pe),y===1?(y=1,q===!0&&(y|=8)):y=0,q=ls(3,null,null,y),p.current=q,q.stateNode=p,q.memoizedState={element:E,isDehydrated:k,cache:null,transitions:null,pendingSuspenseBoundaries:null},gk(q),p}function eie(p,y,k){var E=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),l_.exports=pie(),l_.exports}var b6;function mie(){if(b6)return T1;b6=1;var t=gie();return T1.createRoot=t.createRoot,T1.hydrateRoot=t.hydrateRoot,T1}var xie=mie();const yie=kh(xie),k3=U.createContext({});function Im(t){const e=U.useRef(null);return e.current===null&&(e.current=t()),e.current}const U2=U.createContext(null),Q2=U.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});class vie extends U.Component{getSnapshotBeforeUpdate(e){const r=this.props.childRef.current;if(r&&e.isPresent&&!this.props.isPresent){const n=this.props.sizeRef.current;n.height=r.offsetHeight||0,n.width=r.offsetWidth||0,n.top=r.offsetTop,n.left=r.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function bie({children:t,isPresent:e}){const r=U.useId(),n=U.useRef(null),i=U.useRef({width:0,height:0,top:0,left:0}),{nonce:a}=U.useContext(Q2);return U.useInsertionEffect(()=>{const{width:s,height:o,top:l,left:c}=i.current;if(e||!n.current||!s||!o)return;n.current.dataset.motionPopId=r;const u=document.createElement("style");return a&&(u.nonce=a),document.head.appendChild(u),u.sheet&&u.sheet.insertRule(` [data-motion-pop-id="${r}"] { position: absolute !important; width: ${s}px !important; @@ -46,42 +46,42 @@ Error generating stack: `+q.message+` top: ${l}px !important; left: ${c}px !important; } - `),()=>{document.head.removeChild(u)}},[e]),x.jsx(yie,{isPresent:e,childRef:n,sizeRef:i,children:U.cloneElement(t,{ref:n})})}const bie=({children:t,initial:e,isPresent:r,onExitComplete:n,custom:i,presenceAffectsLayout:a,mode:s})=>{const o=Im(wie),l=U.useId(),c=U.useCallback(h=>{o.set(h,!0);for(const d of o.values())if(!d)return;n&&n()},[o,n]),u=U.useMemo(()=>({id:l,initial:e,isPresent:r,custom:i,onExitComplete:c,register:h=>(o.set(h,!1),()=>o.delete(h))}),a?[Math.random(),c]:[r,c]);return U.useMemo(()=>{o.forEach((h,d)=>o.set(d,!1))},[r]),U.useEffect(()=>{!r&&!o.size&&n&&n()},[r]),s==="popLayout"&&(t=x.jsx(vie,{isPresent:r,children:t})),x.jsx(U2.Provider,{value:u,children:t})};function wie(){return new Map}function f7(t=!0){const e=U.useContext(U2);if(e===null)return[!0,null];const{isPresent:r,onExitComplete:n,register:i}=e,a=U.useId();U.useEffect(()=>{t&&i(a)},[t]);const s=U.useCallback(()=>t&&n&&n(a),[a,n,t]);return!r&&n?[!1,s]:[!0]}const C1=t=>t.key||"";function w6(t){const e=[];return U.Children.forEach(t,r=>{U.isValidElement(r)&&e.push(r)}),e}const _3=typeof window<"u",S3=_3?U.useLayoutEffect:U.useEffect,Lr=({children:t,custom:e,initial:r=!0,onExitComplete:n,presenceAffectsLayout:i=!0,mode:a="sync",propagate:s=!1})=>{const[o,l]=f7(s),c=U.useMemo(()=>w6(t),[t]),u=s&&!o?[]:c.map(C1),h=U.useRef(!0),d=U.useRef(c),f=Im(()=>new Map),[g,m]=U.useState(c),[v,b]=U.useState(c);S3(()=>{h.current=!1,d.current=c;for(let S=0;S{const T=C1(S),_=s&&!o?!1:c===v||u.includes(T),C=()=>{if(f.has(T))f.set(T,!0);else return;let D=!0;f.forEach(A=>{A||(D=!1)}),D&&(O==null||O(),b(d.current),s&&(l==null||l()),n&&n())};return x.jsx(bie,{isPresent:_,initial:!h.current||r?void 0:!1,custom:_?void 0:e,presenceAffectsLayout:i,mode:a,onExitComplete:_?void 0:C,children:S},T)})})},Za=t=>t;let p7=Za;function T3(t){let e;return()=>(e===void 0&&(e=t()),e)}const pf=(t,e,r)=>{const n=e-t;return n===0?1:(r-t)/n},Cl=t=>t*1e3,El=t=>t/1e3,Oie={useManualTiming:!1};function kie(t){let e=new Set,r=new Set,n=!1,i=!1;const a=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function o(c){a.has(c)&&(l.schedule(c),t()),c(s)}const l={schedule:(c,u=!1,h=!1)=>{const f=h&&n?e:r;return u&&a.add(c),f.has(c)||f.add(c),c},cancel:c=>{r.delete(c),a.delete(c)},process:c=>{if(s=c,n){i=!0;return}n=!0,[e,r]=[r,e],e.forEach(o),e.clear(),n=!1,i&&(i=!1,l.process(c))}};return l}const E1=["read","resolveKeyframes","update","preRender","render","postRender"],_ie=40;function g7(t,e){let r=!1,n=!0;const i={delta:0,timestamp:0,isProcessing:!1},a=()=>r=!0,s=E1.reduce((b,w)=>(b[w]=kie(a),b),{}),{read:o,resolveKeyframes:l,update:c,preRender:u,render:h,postRender:d}=s,f=()=>{const b=performance.now();r=!1,i.delta=n?1e3/60:Math.max(Math.min(b-i.timestamp,_ie),1),i.timestamp=b,i.isProcessing=!0,o.process(i),l.process(i),c.process(i),u.process(i),h.process(i),d.process(i),i.isProcessing=!1,r&&e&&(n=!1,t(f))},g=()=>{r=!0,n=!0,i.isProcessing||t(f)};return{schedule:E1.reduce((b,w)=>{const O=s[w];return b[w]=(S,T=!1,_=!1)=>(r||g(),O.schedule(S,T,_)),b},{}),cancel:b=>{for(let w=0;wO6[t].some(r=>!!e[r])};function Sie(t){for(const e in t)gf[e]={...gf[e],...t[e]}}const Tie=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function Xv(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||Tie.has(t)}let x7=t=>!Xv(t);function Cie(t){t&&(x7=e=>e.startsWith("on")?!Xv(e):t(e))}try{Cie(require("@emotion/is-prop-valid").default)}catch{}function Eie(t,e,r){const n={};for(const i in t)i==="values"&&typeof t.values=="object"||(x7(i)||r===!0&&Xv(i)||!e&&!Xv(i)||t.draggable&&i.startsWith("onDrag"))&&(n[i]=t[i]);return n}function Die(t){if(typeof Proxy>"u")return t;const e=new Map,r=(...n)=>t(...n);return new Proxy(r,{get:(n,i)=>i==="create"?t:(e.has(i)||e.set(i,t(i)),e.get(i))})}const W2=U.createContext({});function Mg(t){return typeof t=="string"||Array.isArray(t)}function z2(t){return t!==null&&typeof t=="object"&&typeof t.start=="function"}const C3=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],E3=["initial",...C3];function V2(t){return z2(t.animate)||E3.some(e=>Mg(t[e]))}function y7(t){return!!(V2(t)||t.variants)}function Aie(t,e){if(V2(t)){const{initial:r,animate:n}=t;return{initial:r===!1||Mg(r)?r:void 0,animate:Mg(n)?n:void 0}}return t.inherit!==!1?e:{}}function Nie(t){const{initial:e,animate:r}=Aie(t,U.useContext(W2));return U.useMemo(()=>({initial:e,animate:r}),[k6(e),k6(r)])}function k6(t){return Array.isArray(t)?t.join(" "):t}const Pie=Symbol.for("motionComponentSymbol");function Ed(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function Rie(t,e,r){return U.useCallback(n=>{n&&t.onMount&&t.onMount(n),e&&(n?e.mount(n):e.unmount()),r&&(typeof r=="function"?r(n):Ed(r)&&(r.current=n))},[e])}const D3=t=>t.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),Fie="framerAppearId",v7="data-"+D3(Fie),{schedule:A3}=g7(queueMicrotask,!1),b7=U.createContext({});function Lie(t,e,r,n,i){var a,s;const{visualElement:o}=U.useContext(W2),l=U.useContext(m7),c=U.useContext(U2),u=U.useContext(Q2).reducedMotion,h=U.useRef(null);n=n||l.renderer,!h.current&&n&&(h.current=n(t,{visualState:e,parent:o,props:r,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u}));const d=h.current,f=U.useContext(b7);d&&!d.projection&&i&&(d.type==="html"||d.type==="svg")&&Mie(h.current,r,i,f);const g=U.useRef(!1);U.useInsertionEffect(()=>{d&&g.current&&d.update(r,c)});const m=r[v7],v=U.useRef(!!m&&!(!((a=window.MotionHandoffIsComplete)===null||a===void 0)&&a.call(window,m))&&((s=window.MotionHasOptimisedAnimation)===null||s===void 0?void 0:s.call(window,m)));return S3(()=>{d&&(g.current=!0,window.MotionIsMounted=!0,d.updateFeatures(),A3.render(d.render),v.current&&d.animationState&&d.animationState.animateChanges())}),U.useEffect(()=>{d&&(!v.current&&d.animationState&&d.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{var b;(b=window.MotionHandoffMarkAsComplete)===null||b===void 0||b.call(window,m)}),v.current=!1))}),d}function Mie(t,e,r,n){const{layoutId:i,layout:a,drag:s,dragConstraints:o,layoutScroll:l,layoutRoot:c}=e;t.projection=new r(t.latestValues,e["data-framer-portal-id"]?void 0:w7(t.parent)),t.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!s||o&&Ed(o),visualElement:t,animationType:typeof a=="string"?a:"both",initialPromotionConfig:n,layoutScroll:l,layoutRoot:c})}function w7(t){if(t)return t.options.allowProjection!==!1?t.projection:w7(t.parent)}function $ie({preloadedFeatures:t,createVisualElement:e,useRender:r,useVisualState:n,Component:i}){var a,s;t&&Sie(t);function o(c,u){let h;const d={...U.useContext(Q2),...c,layoutId:Iie(c)},{isStatic:f}=d,g=Nie(c),m=n(c,f);if(!f&&_3){jie();const v=Bie(d);h=v.MeasureLayout,g.visualElement=Lie(i,m,d,e,v.ProjectionNode)}return x.jsxs(W2.Provider,{value:g,children:[h&&g.visualElement?x.jsx(h,{visualElement:g.visualElement,...d}):null,r(i,c,Rie(m,g.visualElement,u),m,f,g.visualElement)]})}o.displayName=`motion.${typeof i=="string"?i:`create(${(s=(a=i.displayName)!==null&&a!==void 0?a:i.name)!==null&&s!==void 0?s:""})`}`;const l=U.forwardRef(o);return l[Pie]=i,l}function Iie({layoutId:t}){const e=U.useContext(k3).id;return e&&t!==void 0?e+"-"+t:t}function jie(t,e){U.useContext(m7).strict}function Bie(t){const{drag:e,layout:r}=gf;if(!e&&!r)return{};const n={...e,...r};return{MeasureLayout:e!=null&&e.isEnabled(t)||r!=null&&r.isEnabled(t)?n.MeasureLayout:void 0,ProjectionNode:n.ProjectionNode}}const Uie=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function N3(t){return typeof t!="string"||t.includes("-")?!1:!!(Uie.indexOf(t)>-1||/[A-Z]/u.test(t))}function _6(t){const e=[{},{}];return t==null||t.values.forEach((r,n)=>{e[0][n]=r.get(),e[1][n]=r.getVelocity()}),e}function P3(t,e,r,n){if(typeof e=="function"){const[i,a]=_6(n);e=e(r!==void 0?r:t.custom,i,a)}if(typeof e=="string"&&(e=t.variants&&t.variants[e]),typeof e=="function"){const[i,a]=_6(n);e=e(r!==void 0?r:t.custom,i,a)}return e}const OC=t=>Array.isArray(t),Qie=t=>!!(t&&typeof t=="object"&&t.mix&&t.toValue),Wie=t=>OC(t)?t[t.length-1]||0:t,Fi=t=>!!(t&&t.getVelocity);function zy(t){const e=Fi(t)?t.get():t;return Qie(e)?e.toValue():e}function zie({scrapeMotionValuesFromProps:t,createRenderState:e,onUpdate:r},n,i,a){const s={latestValues:Vie(n,i,a,t),renderState:e()};return r&&(s.onMount=o=>r({props:n,current:o,...s}),s.onUpdate=o=>r(o)),s}const O7=t=>(e,r)=>{const n=U.useContext(W2),i=U.useContext(U2),a=()=>zie(t,e,n,i);return r?a():Im(a)};function Vie(t,e,r,n){const i={},a=n(t,{});for(const d in a)i[d]=zy(a[d]);let{initial:s,animate:o}=t;const l=V2(t),c=y7(t);e&&c&&!l&&t.inherit!==!1&&(s===void 0&&(s=e.initial),o===void 0&&(o=e.animate));let u=r?r.initial===!1:!1;u=u||s===!1;const h=u?o:s;if(h&&typeof h!="boolean"&&!z2(h)){const d=Array.isArray(h)?h:[h];for(let f=0;fe=>typeof e=="string"&&e.startsWith(t),_7=k7("--"),qie=k7("var(--"),R3=t=>qie(t)?Xie.test(t.split("/*")[0].trim()):!1,Xie=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,S7=(t,e)=>e&&typeof t=="number"?e.transform(t):t,Il=(t,e,r)=>r>e?e:rtypeof t=="number",parse:parseFloat,transform:t=>t},$g={...qf,transform:t=>Il(0,1,t)},D1={...qf,default:1},jm=t=>({test:e=>typeof e=="string"&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),yc=jm("deg"),Vo=jm("%"),Yt=jm("px"),Zie=jm("vh"),Hie=jm("vw"),S6={...Vo,parse:t=>Vo.parse(t)/100,transform:t=>Vo.transform(t*100)},Gie={borderWidth:Yt,borderTopWidth:Yt,borderRightWidth:Yt,borderBottomWidth:Yt,borderLeftWidth:Yt,borderRadius:Yt,radius:Yt,borderTopLeftRadius:Yt,borderTopRightRadius:Yt,borderBottomRightRadius:Yt,borderBottomLeftRadius:Yt,width:Yt,maxWidth:Yt,height:Yt,maxHeight:Yt,top:Yt,right:Yt,bottom:Yt,left:Yt,padding:Yt,paddingTop:Yt,paddingRight:Yt,paddingBottom:Yt,paddingLeft:Yt,margin:Yt,marginTop:Yt,marginRight:Yt,marginBottom:Yt,marginLeft:Yt,backgroundPositionX:Yt,backgroundPositionY:Yt},Yie={rotate:yc,rotateX:yc,rotateY:yc,rotateZ:yc,scale:D1,scaleX:D1,scaleY:D1,scaleZ:D1,skew:yc,skewX:yc,skewY:yc,distance:Yt,translateX:Yt,translateY:Yt,translateZ:Yt,x:Yt,y:Yt,z:Yt,perspective:Yt,transformPerspective:Yt,opacity:$g,originX:S6,originY:S6,originZ:Yt},T6={...qf,transform:Math.round},F3={...Gie,...Yie,zIndex:T6,size:Yt,fillOpacity:$g,strokeOpacity:$g,numOctaves:T6},Kie={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},Jie=Vf.length;function eae(t,e,r){let n="",i=!0;for(let a=0;a({style:{},transform:{},transformOrigin:{},vars:{}}),T7=()=>({...$3(),attrs:{}}),I3=t=>typeof t=="string"&&t.toLowerCase()==="svg";function C7(t,{style:e,vars:r},n,i){Object.assign(t.style,e,i&&i.getProjectionStyles(n));for(const a in r)t.style.setProperty(a,r[a])}const E7=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function D7(t,e,r,n){C7(t,e,void 0,n);for(const i in e.attrs)t.setAttribute(E7.has(i)?i:D3(i),e.attrs[i])}const Zv={};function aae(t){Object.assign(Zv,t)}function A7(t,{layout:e,layoutId:r}){return _h.has(t)||t.startsWith("origin")||(e||r!==void 0)&&(!!Zv[t]||t==="opacity")}function j3(t,e,r){var n;const{style:i}=t,a={};for(const s in i)(Fi(i[s])||e.style&&Fi(e.style[s])||A7(s,t)||((n=r==null?void 0:r.getValue(s))===null||n===void 0?void 0:n.liveStyle)!==void 0)&&(a[s]=i[s]);return a}function N7(t,e,r){const n=j3(t,e,r);for(const i in t)if(Fi(t[i])||Fi(e[i])){const a=Vf.indexOf(i)!==-1?"attr"+i.charAt(0).toUpperCase()+i.substring(1):i;n[a]=t[i]}return n}function sae(t,e){try{e.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{e.dimensions={x:0,y:0,width:0,height:0}}}const E6=["x","y","width","height","cx","cy","r"],oae={useVisualState:O7({scrapeMotionValuesFromProps:N7,createRenderState:T7,onUpdate:({props:t,prevProps:e,current:r,renderState:n,latestValues:i})=>{if(!r)return;let a=!!t.drag;if(!a){for(const o in i)if(_h.has(o)){a=!0;break}}if(!a)return;let s=!e;if(e)for(let o=0;o{sae(r,n),Gr.render(()=>{M3(n,i,I3(r.tagName),t.transformTemplate),D7(r,n)})})}})},lae={useVisualState:O7({scrapeMotionValuesFromProps:j3,createRenderState:$3})};function P7(t,e,r){for(const n in e)!Fi(e[n])&&!A7(n,r)&&(t[n]=e[n])}function cae({transformTemplate:t},e){return U.useMemo(()=>{const r=$3();return L3(r,e,t),Object.assign({},r.vars,r.style)},[e])}function uae(t,e){const r=t.style||{},n={};return P7(n,r,t),Object.assign(n,cae(t,e)),n}function hae(t,e){const r={},n=uae(t,e);return t.drag&&t.dragListener!==!1&&(r.draggable=!1,n.userSelect=n.WebkitUserSelect=n.WebkitTouchCallout="none",n.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(r.tabIndex=0),r.style=n,r}function dae(t,e,r,n){const i=U.useMemo(()=>{const a=T7();return M3(a,e,I3(n),t.transformTemplate),{...a.attrs,style:{...a.style}}},[e]);if(t.style){const a={};P7(a,t.style,t),i.style={...a,...i.style}}return i}function fae(t=!1){return(r,n,i,{latestValues:a},s)=>{const l=(N3(r)?dae:hae)(n,a,s,r),c=Eie(n,typeof r=="string",t),u=r!==U.Fragment?{...c,...l,ref:i}:{},{children:h}=n,d=U.useMemo(()=>Fi(h)?h.get():h,[h]);return U.createElement(r,{...u,children:d})}}function pae(t,e){return function(n,{forwardMotionProps:i}={forwardMotionProps:!1}){const s={...N3(n)?oae:lae,preloadedFeatures:t,useRender:fae(i),createVisualElement:e,Component:n};return $ie(s)}}function R7(t,e){if(!Array.isArray(e))return!1;const r=e.length;if(r!==t.length)return!1;for(let n=0;nwindow.ScrollTimeline!==void 0);class mae{constructor(e){this.stop=()=>this.runAll("stop"),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>"finished"in e?e.finished:e))}getAll(e){return this.animations[0][e]}setAll(e,r){for(let n=0;n{if(gae()&&i.attachTimeline)return i.attachTimeline(e);if(typeof r=="function")return r(i)});return()=>{n.forEach((i,a)=>{i&&i(),this.animations[a].stop()})}}get time(){return this.getAll("time")}set time(e){this.setAll("time",e)}get speed(){return this.getAll("speed")}set speed(e){this.setAll("speed",e)}get startTime(){return this.getAll("startTime")}get duration(){let e=0;for(let r=0;rr[e]())}flatten(){this.runAll("flatten")}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}class xae extends mae{then(e,r){return Promise.all(this.animations).then(e).catch(r)}}function B3(t,e){return t?t[e]||t.default||t:void 0}const kC=2e4;function F7(t){let e=0;const r=50;let n=t.next(e);for(;!n.done&&e=kC?1/0:e}function U3(t){return typeof t=="function"}function D6(t,e){t.timeline=e,t.onfinish=null}const Q3=t=>Array.isArray(t)&&typeof t[0]=="number",yae={linearEasing:void 0};function vae(t,e){const r=T3(t);return()=>{var n;return(n=yae[e])!==null&&n!==void 0?n:r()}}const Hv=vae(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),L7=(t,e,r=10)=>{let n="";const i=Math.max(Math.round(e/r),2);for(let a=0;a`cubic-bezier(${t}, ${e}, ${r}, ${n})`,_C={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:L0([0,.65,.55,1]),circOut:L0([.55,0,1,.45]),backIn:L0([.31,.01,.66,-.59]),backOut:L0([.33,1.53,.69,.99])};function $7(t,e){if(t)return typeof t=="function"&&Hv()?L7(t,e):Q3(t)?L0(t):Array.isArray(t)?t.map(r=>$7(r,e)||_C.easeOut):_C[t]}const Vs={x:!1,y:!1};function I7(){return Vs.x||Vs.y}function bae(t,e,r){var n;if(t instanceof Element)return[t];if(typeof t=="string"){let i=document;const a=(n=void 0)!==null&&n!==void 0?n:i.querySelectorAll(t);return a?Array.from(a):[]}return Array.from(t)}function j7(t,e){const r=bae(t),n=new AbortController,i={passive:!0,...e,signal:n.signal};return[r,i,()=>n.abort()]}function A6(t){return e=>{e.pointerType==="touch"||I7()||t(e)}}function wae(t,e,r={}){const[n,i,a]=j7(t,r),s=A6(o=>{const{target:l}=o,c=e(o);if(typeof c!="function"||!l)return;const u=A6(h=>{c(h),l.removeEventListener("pointerleave",u)});l.addEventListener("pointerleave",u,i)});return n.forEach(o=>{o.addEventListener("pointerenter",s,i)}),a}const B7=(t,e)=>e?t===e?!0:B7(t,e.parentElement):!1,W3=t=>t.pointerType==="mouse"?typeof t.button!="number"||t.button<=0:t.isPrimary!==!1,Oae=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function kae(t){return Oae.has(t.tagName)||t.tabIndex!==-1}const M0=new WeakSet;function N6(t){return e=>{e.key==="Enter"&&t(e)}}function d_(t,e){t.dispatchEvent(new PointerEvent("pointer"+e,{isPrimary:!0,bubbles:!0}))}const _ae=(t,e)=>{const r=t.currentTarget;if(!r)return;const n=N6(()=>{if(M0.has(r))return;d_(r,"down");const i=N6(()=>{d_(r,"up")}),a=()=>d_(r,"cancel");r.addEventListener("keyup",i,e),r.addEventListener("blur",a,e)});r.addEventListener("keydown",n,e),r.addEventListener("blur",()=>r.removeEventListener("keydown",n),e)};function P6(t){return W3(t)&&!I7()}function Sae(t,e,r={}){const[n,i,a]=j7(t,r),s=o=>{const l=o.currentTarget;if(!P6(o)||M0.has(l))return;M0.add(l);const c=e(o),u=(f,g)=>{window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",d),!(!P6(f)||!M0.has(l))&&(M0.delete(l),typeof c=="function"&&c(f,{success:g}))},h=f=>{u(f,r.useGlobalTarget||B7(l,f.target))},d=f=>{u(f,!1)};window.addEventListener("pointerup",h,i),window.addEventListener("pointercancel",d,i)};return n.forEach(o=>{!kae(o)&&o.getAttribute("tabindex")===null&&(o.tabIndex=0),(r.useGlobalTarget?window:o).addEventListener("pointerdown",s,i),o.addEventListener("focus",c=>_ae(c,i),i)}),a}function Tae(t){return t==="x"||t==="y"?Vs[t]?null:(Vs[t]=!0,()=>{Vs[t]=!1}):Vs.x||Vs.y?null:(Vs.x=Vs.y=!0,()=>{Vs.x=Vs.y=!1})}const U7=new Set(["width","height","top","left","right","bottom",...Vf]);let Vy;function Cae(){Vy=void 0}const qo={now:()=>(Vy===void 0&&qo.set(di.isProcessing||Oie.useManualTiming?di.timestamp:performance.now()),Vy),set:t=>{Vy=t,queueMicrotask(Cae)}};function z3(t,e){t.indexOf(e)===-1&&t.push(e)}function V3(t,e){const r=t.indexOf(e);r>-1&&t.splice(r,1)}class q3{constructor(){this.subscriptions=[]}add(e){return z3(this.subscriptions,e),()=>V3(this.subscriptions,e)}notify(e,r,n){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](e,r,n);else for(let a=0;a!isNaN(parseFloat(t)),ag={current:void 0};class Dae{constructor(e,r={}){this.version="11.18.2",this.canTrackVelocity=null,this.events={},this.updateAndNotify=(n,i=!0)=>{const a=qo.now();this.updatedAt!==a&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(n),this.current!==this.prev&&this.events.change&&this.events.change.notify(this.current),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.hasAnimated=!1,this.setCurrent(e),this.owner=r.owner}setCurrent(e){this.current=e,this.updatedAt=qo.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Eae(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on("change",e)}on(e,r){this.events[e]||(this.events[e]=new q3);const n=this.events[e].add(r);return e==="change"?()=>{n(),Gr.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(const e in this.events)this.events[e].clear()}attach(e,r){this.passiveEffect=e,this.stopPassiveEffect=r}set(e,r=!0){!r||!this.passiveEffect?this.updateAndNotify(e,r):this.passiveEffect(e,this.updateAndNotify)}setWithVelocity(e,r,n){this.set(r),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,r=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,r&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return ag.current&&ag.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const e=qo.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>R6)return 0;const r=Math.min(this.updatedAt-this.prevUpdatedAt,R6);return Q7(parseFloat(this.current)-parseFloat(this.prevFrameValue),r)}start(e){return this.stop(),new Promise(r=>{this.hasAnimated=!0,this.animation=e(r),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function mf(t,e){return new Dae(t,e)}function Aae(t,e,r){t.hasValue(e)?t.getValue(e).set(r):t.addValue(e,mf(r))}function Nae(t,e){const r=q2(t,e);let{transitionEnd:n={},transition:i={},...a}=r||{};a={...a,...n};for(const s in a){const o=Wie(a[s]);Aae(t,s,o)}}function Pae(t){return!!(Fi(t)&&t.add)}function SC(t,e){const r=t.getValue("willChange");if(Pae(r))return r.add(e)}function W7(t){return t.props[v7]}const z7=(t,e,r)=>(((1-3*r+3*e)*t+(3*r-6*e))*t+3*e)*t,Rae=1e-7,Fae=12;function Lae(t,e,r,n,i){let a,s,o=0;do s=e+(r-e)/2,a=z7(s,n,i)-t,a>0?r=s:e=s;while(Math.abs(a)>Rae&&++oLae(a,0,1,t,r);return a=>a===0||a===1?a:z7(i(a),e,n)}const V7=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,q7=t=>e=>1-t(1-e),X7=Bm(.33,1.53,.69,.99),X3=q7(X7),Z7=V7(X3),H7=t=>(t*=2)<1?.5*X3(t):.5*(2-Math.pow(2,-10*(t-1))),Z3=t=>1-Math.sin(Math.acos(t)),G7=q7(Z3),Y7=V7(Z3),K7=t=>/^0[^.\s]+$/u.test(t);function Mae(t){return typeof t=="number"?t===0:t!==null?t==="none"||t==="0"||K7(t):!0}const sg=t=>Math.round(t*1e5)/1e5,H3=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function $ae(t){return t==null}const Iae=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,G3=(t,e)=>r=>!!(typeof r=="string"&&Iae.test(r)&&r.startsWith(t)||e&&!$ae(r)&&Object.prototype.hasOwnProperty.call(r,e)),J7=(t,e,r)=>n=>{if(typeof n!="string")return n;const[i,a,s,o]=n.match(H3);return{[t]:parseFloat(i),[e]:parseFloat(a),[r]:parseFloat(s),alpha:o!==void 0?parseFloat(o):1}},jae=t=>Il(0,255,t),f_={...qf,transform:t=>Math.round(jae(t))},Iu={test:G3("rgb","red"),parse:J7("red","green","blue"),transform:({red:t,green:e,blue:r,alpha:n=1})=>"rgba("+f_.transform(t)+", "+f_.transform(e)+", "+f_.transform(r)+", "+sg($g.transform(n))+")"};function Bae(t){let e="",r="",n="",i="";return t.length>5?(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7),i=t.substring(7,9)):(e=t.substring(1,2),r=t.substring(2,3),n=t.substring(3,4),i=t.substring(4,5),e+=e,r+=r,n+=n,i+=i),{red:parseInt(e,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:i?parseInt(i,16)/255:1}}const TC={test:G3("#"),parse:Bae,transform:Iu.transform},Dd={test:G3("hsl","hue"),parse:J7("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:r,alpha:n=1})=>"hsla("+Math.round(t)+", "+Vo.transform(sg(e))+", "+Vo.transform(sg(r))+", "+sg($g.transform(n))+")"},Ei={test:t=>Iu.test(t)||TC.test(t)||Dd.test(t),parse:t=>Iu.test(t)?Iu.parse(t):Dd.test(t)?Dd.parse(t):TC.parse(t),transform:t=>typeof t=="string"?t:t.hasOwnProperty("red")?Iu.transform(t):Dd.transform(t)},Uae=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function Qae(t){var e,r;return isNaN(t)&&typeof t=="string"&&(((e=t.match(H3))===null||e===void 0?void 0:e.length)||0)+(((r=t.match(Uae))===null||r===void 0?void 0:r.length)||0)>0}const eU="number",tU="color",Wae="var",zae="var(",F6="${}",Vae=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Ig(t){const e=t.toString(),r=[],n={color:[],number:[],var:[]},i=[];let a=0;const o=e.replace(Vae,l=>(Ei.test(l)?(n.color.push(a),i.push(tU),r.push(Ei.parse(l))):l.startsWith(zae)?(n.var.push(a),i.push(Wae),r.push(l)):(n.number.push(a),i.push(eU),r.push(parseFloat(l))),++a,F6)).split(F6);return{values:r,split:o,indexes:n,types:i}}function rU(t){return Ig(t).values}function nU(t){const{split:e,types:r}=Ig(t),n=e.length;return i=>{let a="";for(let s=0;stypeof t=="number"?0:t;function Xae(t){const e=rU(t);return nU(t)(e.map(qae))}const $c={test:Qae,parse:rU,createTransformer:nU,getAnimatableNone:Xae},Zae=new Set(["brightness","contrast","saturate","opacity"]);function Hae(t){const[e,r]=t.slice(0,-1).split("(");if(e==="drop-shadow")return t;const[n]=r.match(H3)||[];if(!n)return t;const i=r.replace(n,"");let a=Zae.has(e)?1:0;return n!==r&&(a*=100),e+"("+a+i+")"}const Gae=/\b([a-z-]*)\(.*?\)/gu,CC={...$c,getAnimatableNone:t=>{const e=t.match(Gae);return e?e.map(Hae).join(" "):t}},Yae={...F3,color:Ei,backgroundColor:Ei,outlineColor:Ei,fill:Ei,stroke:Ei,borderColor:Ei,borderTopColor:Ei,borderRightColor:Ei,borderBottomColor:Ei,borderLeftColor:Ei,filter:CC,WebkitFilter:CC},Y3=t=>Yae[t];function iU(t,e){let r=Y3(t);return r!==CC&&(r=$c),r.getAnimatableNone?r.getAnimatableNone(e):void 0}const Kae=new Set(["auto","none","0"]);function Jae(t,e,r){let n=0,i;for(;nt===qf||t===Yt,M6=(t,e)=>parseFloat(t.split(", ")[e]),$6=(t,e)=>(r,{transform:n})=>{if(n==="none"||!n)return 0;const i=n.match(/^matrix3d\((.+)\)$/u);if(i)return M6(i[1],e);{const a=n.match(/^matrix\((.+)\)$/u);return a?M6(a[1],t):0}},ese=new Set(["x","y","z"]),tse=Vf.filter(t=>!ese.has(t));function rse(t){const e=[];return tse.forEach(r=>{const n=t.getValue(r);n!==void 0&&(e.push([r,n.get()]),n.set(r.startsWith("scale")?1:0))}),e}const xf={width:({x:t},{paddingLeft:e="0",paddingRight:r="0"})=>t.max-t.min-parseFloat(e)-parseFloat(r),height:({y:t},{paddingTop:e="0",paddingBottom:r="0"})=>t.max-t.min-parseFloat(e)-parseFloat(r),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:$6(4,13),y:$6(5,14)};xf.translateX=xf.x;xf.translateY=xf.y;const Yu=new Set;let EC=!1,DC=!1;function aU(){if(DC){const t=Array.from(Yu).filter(n=>n.needsMeasurement),e=new Set(t.map(n=>n.element)),r=new Map;e.forEach(n=>{const i=rse(n);i.length&&(r.set(n,i),n.render())}),t.forEach(n=>n.measureInitialState()),e.forEach(n=>{n.render();const i=r.get(n);i&&i.forEach(([a,s])=>{var o;(o=n.getValue(a))===null||o===void 0||o.set(s)})}),t.forEach(n=>n.measureEndState()),t.forEach(n=>{n.suspendedScrollY!==void 0&&window.scrollTo(0,n.suspendedScrollY)})}DC=!1,EC=!1,Yu.forEach(t=>t.complete()),Yu.clear()}function sU(){Yu.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(DC=!0)})}function nse(){sU(),aU()}class K3{constructor(e,r,n,i,a,s=!1){this.isComplete=!1,this.isAsync=!1,this.needsMeasurement=!1,this.isScheduled=!1,this.unresolvedKeyframes=[...e],this.onComplete=r,this.name=n,this.motionValue=i,this.element=a,this.isAsync=s}scheduleResolve(){this.isScheduled=!0,this.isAsync?(Yu.add(this),EC||(EC=!0,Gr.read(sU),Gr.resolveKeyframes(aU))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:e,name:r,element:n,motionValue:i}=this;for(let a=0;a/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t),ise=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function ase(t){const e=ise.exec(t);if(!e)return[,];const[,r,n,i]=e;return[`--${r??n}`,i]}function lU(t,e,r=1){const[n,i]=ase(t);if(!n)return;const a=window.getComputedStyle(e).getPropertyValue(n);if(a){const s=a.trim();return oU(s)?parseFloat(s):s}return R3(i)?lU(i,e,r+1):i}const cU=t=>e=>e.test(t),sse={test:t=>t==="auto",parse:t=>t},uU=[qf,Yt,Vo,yc,Hie,Zie,sse],I6=t=>uU.find(cU(t));class hU extends K3{constructor(e,r,n,i,a){super(e,r,n,i,a,!0)}readKeyframes(){const{unresolvedKeyframes:e,element:r,name:n}=this;if(!r||!r.current)return;super.readKeyframes();for(let l=0;l{r.getValue(l).set(c)}),this.resolveNoneKeyframes()}}const j6=(t,e)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&($c.test(t)||t==="0")&&!t.startsWith("url("));function ose(t){const e=t[0];if(t.length===1)return!0;for(let r=0;rt!==null;function X2(t,{repeat:e,repeatType:r="loop"},n){const i=t.filter(cse),a=e&&r!=="loop"&&e%2===1?0:i.length-1;return!a||n===void 0?i[a]:n}const use=40;class dU{constructor({autoplay:e=!0,delay:r=0,type:n="keyframes",repeat:i=0,repeatDelay:a=0,repeatType:s="loop",...o}){this.isStopped=!1,this.hasAttemptedResolve=!1,this.createdAt=qo.now(),this.options={autoplay:e,delay:r,type:n,repeat:i,repeatDelay:a,repeatType:s,...o},this.updateFinishedPromise()}calcStartTime(){return this.resolvedAt?this.resolvedAt-this.createdAt>use?this.resolvedAt:this.createdAt:this.createdAt}get resolved(){return!this._resolved&&!this.hasAttemptedResolve&&nse(),this._resolved}onKeyframesResolved(e,r){this.resolvedAt=qo.now(),this.hasAttemptedResolve=!0;const{name:n,type:i,velocity:a,delay:s,onComplete:o,onUpdate:l,isGenerator:c}=this.options;if(!c&&!lse(e,n,i,a))if(s)this.options.duration=0;else{l&&l(X2(e,this.options,r)),o&&o(),this.resolveFinishedPromise();return}const u=this.initPlayback(e,r);u!==!1&&(this._resolved={keyframes:e,finalKeyframe:r,...u},this.onPostResolved())}onPostResolved(){}then(e,r){return this.currentFinishedPromise.then(e,r)}flatten(){this.options.type="keyframes",this.options.ease="linear"}updateFinishedPromise(){this.currentFinishedPromise=new Promise(e=>{this.resolveFinishedPromise=e})}}const hn=(t,e,r)=>t+(e-t)*r;function p_(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+(e-t)*6*r:r<1/2?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function hse({hue:t,saturation:e,lightness:r,alpha:n}){t/=360,e/=100,r/=100;let i=0,a=0,s=0;if(!e)i=a=s=r;else{const o=r<.5?r*(1+e):r+e-r*e,l=2*r-o;i=p_(l,o,t+1/3),a=p_(l,o,t),s=p_(l,o,t-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(s*255),alpha:n}}function Gv(t,e){return r=>r>0?e:t}const g_=(t,e,r)=>{const n=t*t,i=r*(e*e-n)+n;return i<0?0:Math.sqrt(i)},dse=[TC,Iu,Dd],fse=t=>dse.find(e=>e.test(t));function B6(t){const e=fse(t);if(!e)return!1;let r=e.parse(t);return e===Dd&&(r=hse(r)),r}const U6=(t,e)=>{const r=B6(t),n=B6(e);if(!r||!n)return Gv(t,e);const i={...r};return a=>(i.red=g_(r.red,n.red,a),i.green=g_(r.green,n.green,a),i.blue=g_(r.blue,n.blue,a),i.alpha=hn(r.alpha,n.alpha,a),Iu.transform(i))},pse=(t,e)=>r=>e(t(r)),Um=(...t)=>t.reduce(pse),AC=new Set(["none","hidden"]);function gse(t,e){return AC.has(t)?r=>r<=0?t:e:r=>r>=1?e:t}function mse(t,e){return r=>hn(t,e,r)}function J3(t){return typeof t=="number"?mse:typeof t=="string"?R3(t)?Gv:Ei.test(t)?U6:vse:Array.isArray(t)?fU:typeof t=="object"?Ei.test(t)?U6:xse:Gv}function fU(t,e){const r=[...t],n=r.length,i=t.map((a,s)=>J3(a)(a,e[s]));return a=>{for(let s=0;s{for(const a in n)r[a]=n[a](i);return r}}function yse(t,e){var r;const n=[],i={color:0,var:0,number:0};for(let a=0;a{const r=$c.createTransformer(e),n=Ig(t),i=Ig(e);return n.indexes.var.length===i.indexes.var.length&&n.indexes.color.length===i.indexes.color.length&&n.indexes.number.length>=i.indexes.number.length?AC.has(t)&&!i.values.length||AC.has(e)&&!n.values.length?gse(t,e):Um(fU(yse(n,i),i.values),r):Gv(t,e)};function pU(t,e,r){return typeof t=="number"&&typeof e=="number"&&typeof r=="number"?hn(t,e,r):J3(t)(t,e)}const bse=5;function gU(t,e,r){const n=Math.max(e-bse,0);return Q7(r-t(n),e-n)}const pn={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},m_=.001;function wse({duration:t=pn.duration,bounce:e=pn.bounce,velocity:r=pn.velocity,mass:n=pn.mass}){let i,a,s=1-e;s=Il(pn.minDamping,pn.maxDamping,s),t=Il(pn.minDuration,pn.maxDuration,El(t)),s<1?(i=c=>{const u=c*s,h=u*t,d=u-r,f=NC(c,s),g=Math.exp(-h);return m_-d/f*g},a=c=>{const h=c*s*t,d=h*r+r,f=Math.pow(s,2)*Math.pow(c,2)*t,g=Math.exp(-h),m=NC(Math.pow(c,2),s);return(-i(c)+m_>0?-1:1)*((d-f)*g)/m}):(i=c=>{const u=Math.exp(-c*t),h=(c-r)*t+1;return-m_+u*h},a=c=>{const u=Math.exp(-c*t),h=(r-c)*(t*t);return u*h});const o=5/t,l=kse(i,a,o);if(t=Cl(t),isNaN(l))return{stiffness:pn.stiffness,damping:pn.damping,duration:t};{const c=Math.pow(l,2)*n;return{stiffness:c,damping:s*2*Math.sqrt(n*c),duration:t}}}const Ose=12;function kse(t,e,r){let n=r;for(let i=1;it[r]!==void 0)}function Tse(t){let e={velocity:pn.velocity,stiffness:pn.stiffness,damping:pn.damping,mass:pn.mass,isResolvedFromDuration:!1,...t};if(!Q6(t,Sse)&&Q6(t,_se))if(t.visualDuration){const r=t.visualDuration,n=2*Math.PI/(r*1.2),i=n*n,a=2*Il(.05,1,1-(t.bounce||0))*Math.sqrt(i);e={...e,mass:pn.mass,stiffness:i,damping:a}}else{const r=wse(t);e={...e,...r,mass:pn.mass},e.isResolvedFromDuration=!0}return e}function mU(t=pn.visualDuration,e=pn.bounce){const r=typeof t!="object"?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:n,restDelta:i}=r;const a=r.keyframes[0],s=r.keyframes[r.keyframes.length-1],o={done:!1,value:a},{stiffness:l,damping:c,mass:u,duration:h,velocity:d,isResolvedFromDuration:f}=Tse({...r,velocity:-El(r.velocity||0)}),g=d||0,m=c/(2*Math.sqrt(l*u)),v=s-a,b=El(Math.sqrt(l/u)),w=Math.abs(v)<5;n||(n=w?pn.restSpeed.granular:pn.restSpeed.default),i||(i=w?pn.restDelta.granular:pn.restDelta.default);let O;if(m<1){const T=NC(b,m);O=_=>{const C=Math.exp(-m*b*_);return s-C*((g+m*b*v)/T*Math.sin(T*_)+v*Math.cos(T*_))}}else if(m===1)O=T=>s-Math.exp(-b*T)*(v+(g+b*v)*T);else{const T=b*Math.sqrt(m*m-1);O=_=>{const C=Math.exp(-m*b*_),D=Math.min(T*_,300);return s-C*((g+m*b*v)*Math.sinh(D)+T*v*Math.cosh(D))/T}}const S={calculatedDuration:f&&h||null,next:T=>{const _=O(T);if(f)o.done=T>=h;else{let C=0;m<1&&(C=T===0?Cl(g):gU(O,T,_));const D=Math.abs(C)<=n,A=Math.abs(s-_)<=i;o.done=D&&A}return o.value=o.done?s:_,o},toString:()=>{const T=Math.min(F7(S),kC),_=L7(C=>S.next(T*C).value,T,30);return T+"ms "+_}};return S}function W6({keyframes:t,velocity:e=0,power:r=.8,timeConstant:n=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:s,min:o,max:l,restDelta:c=.5,restSpeed:u}){const h=t[0],d={done:!1,value:h},f=D=>o!==void 0&&Dl,g=D=>o===void 0?l:l===void 0||Math.abs(o-D)-m*Math.exp(-D/n),O=D=>b+w(D),S=D=>{const A=w(D),I=O(D);d.done=Math.abs(A)<=c,d.value=d.done?b:I};let T,_;const C=D=>{f(d.value)&&(T=D,_=mU({keyframes:[d.value,g(d.value)],velocity:gU(O,D,d.value),damping:i,stiffness:a,restDelta:c,restSpeed:u}))};return C(0),{calculatedDuration:null,next:D=>{let A=!1;return!_&&T===void 0&&(A=!0,S(D),C(D)),T!==void 0&&D>=T?_.next(D-T):(!A&&S(D),d)}}}const Cse=Bm(.42,0,1,1),Ese=Bm(0,0,.58,1),xU=Bm(.42,0,.58,1),Dse=t=>Array.isArray(t)&&typeof t[0]!="number",Ase={linear:Za,easeIn:Cse,easeInOut:xU,easeOut:Ese,circIn:Z3,circInOut:Y7,circOut:G7,backIn:X3,backInOut:Z7,backOut:X7,anticipate:H7},z6=t=>{if(Q3(t)){p7(t.length===4);const[e,r,n,i]=t;return Bm(e,r,n,i)}else if(typeof t=="string")return Ase[t];return t};function Nse(t,e,r){const n=[],i=r||pU,a=t.length-1;for(let s=0;se[0];if(a===2&&e[0]===e[1])return()=>e[1];const s=t[0]===t[1];t[0]>t[a-1]&&(t=[...t].reverse(),e=[...e].reverse());const o=Nse(e,n,i),l=o.length,c=u=>{if(s&&u1)for(;hc(Il(t[0],t[a-1],u)):c}function Pse(t,e){const r=t[t.length-1];for(let n=1;n<=e;n++){const i=pf(0,e,n);t.push(hn(r,1,i))}}function Rse(t){const e=[0];return Pse(e,t.length-1),e}function Fse(t,e){return t.map(r=>r*e)}function Lse(t,e){return t.map(()=>e||xU).splice(0,t.length-1)}function Yv({duration:t=300,keyframes:e,times:r,ease:n="easeInOut"}){const i=Dse(n)?n.map(z6):z6(n),a={done:!1,value:e[0]},s=Fse(r&&r.length===e.length?r:Rse(e),t),o=yU(s,e,{ease:Array.isArray(i)?i:Lse(e,i)});return{calculatedDuration:t,next:l=>(a.value=o(l),a.done=l>=t,a)}}const Mse=t=>{const e=({timestamp:r})=>t(r);return{start:()=>Gr.update(e,!0),stop:()=>$l(e),now:()=>di.isProcessing?di.timestamp:qo.now()}},$se={decay:W6,inertia:W6,tween:Yv,keyframes:Yv,spring:mU},Ise=t=>t/100;class eA extends dU{constructor(e){super(e),this.holdTime=null,this.cancelTime=null,this.currentTime=0,this.playbackSpeed=1,this.pendingPlayState="running",this.startTime=null,this.state="idle",this.stop=()=>{if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.teardown();const{onStop:l}=this.options;l&&l()};const{name:r,motionValue:n,element:i,keyframes:a}=this.options,s=(i==null?void 0:i.KeyframeResolver)||K3,o=(l,c)=>this.onKeyframesResolved(l,c);this.resolver=new s(a,o,r,n,i),this.resolver.scheduleResolve()}flatten(){super.flatten(),this._resolved&&Object.assign(this._resolved,this.initPlayback(this._resolved.keyframes))}initPlayback(e){const{type:r="keyframes",repeat:n=0,repeatDelay:i=0,repeatType:a,velocity:s=0}=this.options,o=U3(r)?r:$se[r]||Yv;let l,c;o!==Yv&&typeof e[0]!="number"&&(l=Um(Ise,pU(e[0],e[1])),e=[0,100]);const u=o({...this.options,keyframes:e});a==="mirror"&&(c=o({...this.options,keyframes:[...e].reverse(),velocity:-s})),u.calculatedDuration===null&&(u.calculatedDuration=F7(u));const{calculatedDuration:h}=u,d=h+i,f=d*(n+1)-i;return{generator:u,mirroredGenerator:c,mapPercentToKeyframes:l,calculatedDuration:h,resolvedDuration:d,totalDuration:f}}onPostResolved(){const{autoplay:e=!0}=this.options;this.play(),this.pendingPlayState==="paused"||!e?this.pause():this.state=this.pendingPlayState}tick(e,r=!1){const{resolved:n}=this;if(!n){const{keyframes:D}=this.options;return{done:!0,value:D[D.length-1]}}const{finalKeyframe:i,generator:a,mirroredGenerator:s,mapPercentToKeyframes:o,keyframes:l,calculatedDuration:c,totalDuration:u,resolvedDuration:h}=n;if(this.startTime===null)return a.next(0);const{delay:d,repeat:f,repeatType:g,repeatDelay:m,onUpdate:v}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-u/this.speed,this.startTime)),r?this.currentTime=e:this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=Math.round(e-this.startTime)*this.speed;const b=this.currentTime-d*(this.speed>=0?1:-1),w=this.speed>=0?b<0:b>u;this.currentTime=Math.max(b,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=u);let O=this.currentTime,S=a;if(f){const D=Math.min(this.currentTime,u)/h;let A=Math.floor(D),I=D%1;!I&&D>=1&&(I=1),I===1&&A--,A=Math.min(A,f+1),!!(A%2)&&(g==="reverse"?(I=1-I,m&&(I-=m/h)):g==="mirror"&&(S=s)),O=Il(0,1,I)*h}const T=w?{done:!1,value:l[0]}:S.next(O);o&&(T.value=o(T.value));let{done:_}=T;!w&&c!==null&&(_=this.speed>=0?this.currentTime>=u:this.currentTime<=0);const C=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&_);return C&&i!==void 0&&(T.value=X2(l,this.options,i)),v&&v(T.value),C&&this.finish(),T}get duration(){const{resolved:e}=this;return e?El(e.calculatedDuration):0}get time(){return El(this.currentTime)}set time(e){e=Cl(e),this.currentTime=e,this.holdTime!==null||this.speed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.speed)}get speed(){return this.playbackSpeed}set speed(e){const r=this.playbackSpeed!==e;this.playbackSpeed=e,r&&(this.time=El(this.currentTime))}play(){if(this.resolver.isScheduled||this.resolver.resume(),!this._resolved){this.pendingPlayState="running";return}if(this.isStopped)return;const{driver:e=Mse,onPlay:r,startTime:n}=this.options;this.driver||(this.driver=e(a=>this.tick(a))),r&&r();const i=this.driver.now();this.holdTime!==null?this.startTime=i-this.holdTime:this.startTime?this.state==="finished"&&(this.startTime=i):this.startTime=n??this.calcStartTime(),this.state==="finished"&&this.updateFinishedPromise(),this.cancelTime=this.startTime,this.holdTime=null,this.state="running",this.driver.start()}pause(){var e;if(!this._resolved){this.pendingPlayState="paused";return}this.state="paused",this.holdTime=(e=this.currentTime)!==null&&e!==void 0?e:0}complete(){this.state!=="running"&&this.play(),this.pendingPlayState=this.state="finished",this.holdTime=null}finish(){this.teardown(),this.state="finished";const{onComplete:e}=this.options;e&&e()}cancel(){this.cancelTime!==null&&this.tick(this.cancelTime),this.teardown(),this.updateFinishedPromise()}teardown(){this.state="idle",this.stopDriver(),this.resolveFinishedPromise(),this.updateFinishedPromise(),this.startTime=this.cancelTime=null,this.resolver.cancel()}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}}const jse=new Set(["opacity","clipPath","filter","transform"]);function Bse(t,e,r,{delay:n=0,duration:i=300,repeat:a=0,repeatType:s="loop",ease:o="easeInOut",times:l}={}){const c={[e]:r};l&&(c.offset=l);const u=$7(o,i);return Array.isArray(u)&&(c.easing=u),t.animate(c,{delay:n,duration:i,easing:Array.isArray(u)?"linear":u,fill:"both",iterations:a+1,direction:s==="reverse"?"alternate":"normal"})}const Use=T3(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),Kv=10,Qse=2e4;function Wse(t){return U3(t.type)||t.type==="spring"||!M7(t.ease)}function zse(t,e){const r=new eA({...e,keyframes:t,repeat:0,delay:0,isGenerator:!0});let n={done:!1,value:t[0]};const i=[];let a=0;for(;!n.done&&athis.onKeyframesResolved(s,o),r,n,i),this.resolver.scheduleResolve()}initPlayback(e,r){let{duration:n=300,times:i,ease:a,type:s,motionValue:o,name:l,startTime:c}=this.options;if(!o.owner||!o.owner.current)return!1;if(typeof a=="string"&&Hv()&&Vse(a)&&(a=vU[a]),Wse(this.options)){const{onComplete:h,onUpdate:d,motionValue:f,element:g,...m}=this.options,v=zse(e,m);e=v.keyframes,e.length===1&&(e[1]=e[0]),n=v.duration,i=v.times,a=v.ease,s="keyframes"}const u=Bse(o.owner.current,l,e,{...this.options,duration:n,times:i,ease:a});return u.startTime=c??this.calcStartTime(),this.pendingTimeline?(D6(u,this.pendingTimeline),this.pendingTimeline=void 0):u.onfinish=()=>{const{onComplete:h}=this.options;o.set(X2(e,this.options,r)),h&&h(),this.cancel(),this.resolveFinishedPromise()},{animation:u,duration:n,times:i,type:s,ease:a,keyframes:e}}get duration(){const{resolved:e}=this;if(!e)return 0;const{duration:r}=e;return El(r)}get time(){const{resolved:e}=this;if(!e)return 0;const{animation:r}=e;return El(r.currentTime||0)}set time(e){const{resolved:r}=this;if(!r)return;const{animation:n}=r;n.currentTime=Cl(e)}get speed(){const{resolved:e}=this;if(!e)return 1;const{animation:r}=e;return r.playbackRate}set speed(e){const{resolved:r}=this;if(!r)return;const{animation:n}=r;n.playbackRate=e}get state(){const{resolved:e}=this;if(!e)return"idle";const{animation:r}=e;return r.playState}get startTime(){const{resolved:e}=this;if(!e)return null;const{animation:r}=e;return r.startTime}attachTimeline(e){if(!this._resolved)this.pendingTimeline=e;else{const{resolved:r}=this;if(!r)return Za;const{animation:n}=r;D6(n,e)}return Za}play(){if(this.isStopped)return;const{resolved:e}=this;if(!e)return;const{animation:r}=e;r.playState==="finished"&&this.updateFinishedPromise(),r.play()}pause(){const{resolved:e}=this;if(!e)return;const{animation:r}=e;r.pause()}stop(){if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.resolveFinishedPromise(),this.updateFinishedPromise();const{resolved:e}=this;if(!e)return;const{animation:r,keyframes:n,duration:i,type:a,ease:s,times:o}=e;if(r.playState==="idle"||r.playState==="finished")return;if(this.time){const{motionValue:c,onUpdate:u,onComplete:h,element:d,...f}=this.options,g=new eA({...f,keyframes:n,duration:i,type:a,ease:s,times:o,isGenerator:!0}),m=Cl(this.time);c.setWithVelocity(g.sample(m-Kv).value,g.sample(m).value,Kv)}const{onStop:l}=this.options;l&&l(),this.cancel()}complete(){const{resolved:e}=this;e&&e.animation.finish()}cancel(){const{resolved:e}=this;e&&e.animation.cancel()}static supports(e){const{motionValue:r,name:n,repeatDelay:i,repeatType:a,damping:s,type:o}=e;if(!r||!r.owner||!(r.owner.current instanceof HTMLElement))return!1;const{onUpdate:l,transformTemplate:c}=r.owner.getProps();return Use()&&n&&jse.has(n)&&!l&&!c&&!i&&a!=="mirror"&&s!==0&&o!=="inertia"}}const qse={type:"spring",stiffness:500,damping:25,restSpeed:10},Xse=t=>({type:"spring",stiffness:550,damping:t===0?2*Math.sqrt(550):30,restSpeed:10}),Zse={type:"keyframes",duration:.8},Hse={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},Gse=(t,{keyframes:e})=>e.length>2?Zse:_h.has(t)?t.startsWith("scale")?Xse(e[1]):qse:Hse;function Yse({when:t,delay:e,delayChildren:r,staggerChildren:n,staggerDirection:i,repeat:a,repeatType:s,repeatDelay:o,from:l,elapsed:c,...u}){return!!Object.keys(u).length}const tA=(t,e,r,n={},i,a)=>s=>{const o=B3(n,t)||{},l=o.delay||n.delay||0;let{elapsed:c=0}=n;c=c-Cl(l);let u={keyframes:Array.isArray(r)?r:[null,r],ease:"easeOut",velocity:e.getVelocity(),...o,delay:-c,onUpdate:d=>{e.set(d),o.onUpdate&&o.onUpdate(d)},onComplete:()=>{s(),o.onComplete&&o.onComplete()},name:t,motionValue:e,element:a?void 0:i};Yse(o)||(u={...u,...Gse(t,u)}),u.duration&&(u.duration=Cl(u.duration)),u.repeatDelay&&(u.repeatDelay=Cl(u.repeatDelay)),u.from!==void 0&&(u.keyframes[0]=u.from);let h=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(u.duration=0,u.delay===0&&(h=!0)),h&&!a&&e.get()!==void 0){const d=X2(u.keyframes,o);if(d!==void 0)return Gr.update(()=>{u.onUpdate(d),u.onComplete()}),new xae([])}return!a&&V6.supports(u)?new V6(u):new eA(u)};function Kse({protectedKeys:t,needsAnimating:e},r){const n=t.hasOwnProperty(r)&&e[r]!==!0;return e[r]=!1,n}function bU(t,e,{delay:r=0,transitionOverride:n,type:i}={}){var a;let{transition:s=t.getDefaultTransition(),transitionEnd:o,...l}=e;n&&(s=n);const c=[],u=i&&t.animationState&&t.animationState.getState()[i];for(const h in l){const d=t.getValue(h,(a=t.latestValues[h])!==null&&a!==void 0?a:null),f=l[h];if(f===void 0||u&&Kse(u,h))continue;const g={delay:r,...B3(s||{},h)};let m=!1;if(window.MotionHandoffAnimation){const b=W7(t);if(b){const w=window.MotionHandoffAnimation(b,h,Gr);w!==null&&(g.startTime=w,m=!0)}}SC(t,h),d.start(tA(h,d,f,t.shouldReduceMotion&&U7.has(h)?{type:!1}:g,t,m));const v=d.animation;v&&c.push(v)}return o&&Promise.all(c).then(()=>{Gr.update(()=>{o&&Nae(t,o)})}),c}function PC(t,e,r={}){var n;const i=q2(t,e,r.type==="exit"?(n=t.presenceContext)===null||n===void 0?void 0:n.custom:void 0);let{transition:a=t.getDefaultTransition()||{}}=i||{};r.transitionOverride&&(a=r.transitionOverride);const s=i?()=>Promise.all(bU(t,i,r)):()=>Promise.resolve(),o=t.variantChildren&&t.variantChildren.size?(c=0)=>{const{delayChildren:u=0,staggerChildren:h,staggerDirection:d}=a;return Jse(t,e,u+c,h,d,r)}:()=>Promise.resolve(),{when:l}=a;if(l){const[c,u]=l==="beforeChildren"?[s,o]:[o,s];return c().then(()=>u())}else return Promise.all([s(),o(r.delay)])}function Jse(t,e,r=0,n=0,i=1,a){const s=[],o=(t.variantChildren.size-1)*n,l=i===1?(c=0)=>c*n:(c=0)=>o-c*n;return Array.from(t.variantChildren).sort(eoe).forEach((c,u)=>{c.notify("AnimationStart",e),s.push(PC(c,e,{...a,delay:r+l(u)}).then(()=>c.notify("AnimationComplete",e)))}),Promise.all(s)}function eoe(t,e){return t.sortNodePosition(e)}function toe(t,e,r={}){t.notify("AnimationStart",e);let n;if(Array.isArray(e)){const i=e.map(a=>PC(t,a,r));n=Promise.all(i)}else if(typeof e=="string")n=PC(t,e,r);else{const i=typeof e=="function"?q2(t,e,r.custom):e;n=Promise.all(bU(t,i,r))}return n.then(()=>{t.notify("AnimationComplete",e)})}const roe=E3.length;function wU(t){if(!t)return;if(!t.isControllingVariants){const r=t.parent?wU(t.parent)||{}:{};return t.props.initial!==void 0&&(r.initial=t.props.initial),r}const e={};for(let r=0;rPromise.all(e.map(({animation:r,options:n})=>toe(t,r,n)))}function soe(t){let e=aoe(t),r=q6(),n=!0;const i=l=>(c,u)=>{var h;const d=q2(t,u,l==="exit"?(h=t.presenceContext)===null||h===void 0?void 0:h.custom:void 0);if(d){const{transition:f,transitionEnd:g,...m}=d;c={...c,...m,...g}}return c};function a(l){e=l(t)}function s(l){const{props:c}=t,u=wU(t.parent)||{},h=[],d=new Set;let f={},g=1/0;for(let v=0;vg&&S,A=!1;const I=Array.isArray(O)?O:[O];let M=I.reduce(i(b),{});T===!1&&(M={});const{prevResolvedValues:N={}}=w,B={...N,...M},P=z=>{D=!0,d.has(z)&&(A=!0,d.delete(z)),w.needsAnimating[z]=!0;const Z=t.getValue(z);Z&&(Z.liveStyle=!1)};for(const z in B){const Z=M[z],H=N[z];if(f.hasOwnProperty(z))continue;let re=!1;OC(Z)&&OC(H)?re=!R7(Z,H):re=Z!==H,re?Z!=null?P(z):d.add(z):Z!==void 0&&d.has(z)?P(z):w.protectedKeys[z]=!0}w.prevProp=O,w.prevResolvedValues=M,w.isActive&&(f={...f,...M}),n&&t.blockInitialAnimation&&(D=!1),D&&(!(_&&C)||A)&&h.push(...I.map(z=>({animation:z,options:{type:b}})))}if(d.size){const v={};d.forEach(b=>{const w=t.getBaseTarget(b),O=t.getValue(b);O&&(O.liveStyle=!0),v[b]=w??null}),h.push({animation:v})}let m=!!h.length;return n&&(c.initial===!1||c.initial===c.animate)&&!t.manuallyAnimateOnMount&&(m=!1),n=!1,m?e(h):Promise.resolve()}function o(l,c){var u;if(r[l].isActive===c)return Promise.resolve();(u=t.variantChildren)===null||u===void 0||u.forEach(d=>{var f;return(f=d.animationState)===null||f===void 0?void 0:f.setActive(l,c)}),r[l].isActive=c;const h=s(l);for(const d in r)r[d].protectedKeys={};return h}return{animateChanges:s,setActive:o,setAnimateFunction:a,getState:()=>r,reset:()=>{r=q6(),n=!0}}}function ooe(t,e){return typeof e=="string"?e!==t:Array.isArray(e)?!R7(e,t):!1}function Ou(t=!1){return{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function q6(){return{animate:Ou(!0),whileInView:Ou(),whileHover:Ou(),whileTap:Ou(),whileDrag:Ou(),whileFocus:Ou(),exit:Ou()}}class Kc{constructor(e){this.isMounted=!1,this.node=e}update(){}}class loe extends Kc{constructor(e){super(e),e.animationState||(e.animationState=soe(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();z2(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:r}=this.node.prevProps||{};e!==r&&this.updateAnimationControlsSubscription()}unmount(){var e;this.node.animationState.reset(),(e=this.unmountControls)===null||e===void 0||e.call(this)}}let coe=0;class uoe extends Kc{constructor(){super(...arguments),this.id=coe++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:r}=this.node.presenceContext,{isPresent:n}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===n)return;const i=this.node.animationState.setActive("exit",!e);r&&!e&&i.then(()=>r(this.id))}mount(){const{register:e}=this.node.presenceContext||{};e&&(this.unmount=e(this.id))}unmount(){}}const hoe={animation:{Feature:loe},exit:{Feature:uoe}};function jg(t,e,r,n={passive:!0}){return t.addEventListener(e,r,n),()=>t.removeEventListener(e,r)}function Qm(t){return{point:{x:t.pageX,y:t.pageY}}}const doe=t=>e=>W3(e)&&t(e,Qm(e));function og(t,e,r,n){return jg(t,e,doe(r),n)}const X6=(t,e)=>Math.abs(t-e);function foe(t,e){const r=X6(t.x,e.x),n=X6(t.y,e.y);return Math.sqrt(r**2+n**2)}class OU{constructor(e,r,{transformPagePoint:n,contextWindow:i,dragSnapToOrigin:a=!1}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const h=y_(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=foe(h.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:g}=h,{timestamp:m}=di;this.history.push({...g,timestamp:m});const{onStart:v,onMove:b}=this.handlers;d||(v&&v(this.lastMoveEvent,h),this.startEvent=this.lastMoveEvent),b&&b(this.lastMoveEvent,h)},this.handlePointerMove=(h,d)=>{this.lastMoveEvent=h,this.lastMoveEventInfo=x_(d,this.transformPagePoint),Gr.update(this.updatePoint,!0)},this.handlePointerUp=(h,d)=>{this.end();const{onEnd:f,onSessionEnd:g,resumeAnimation:m}=this.handlers;if(this.dragSnapToOrigin&&m&&m(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const v=y_(h.type==="pointercancel"?this.lastMoveEventInfo:x_(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(h,v),g&&g(h,v)},!W3(e))return;this.dragSnapToOrigin=a,this.handlers=r,this.transformPagePoint=n,this.contextWindow=i||window;const s=Qm(e),o=x_(s,this.transformPagePoint),{point:l}=o,{timestamp:c}=di;this.history=[{...l,timestamp:c}];const{onSessionStart:u}=r;u&&u(e,y_(o,this.history)),this.removeListeners=Um(og(this.contextWindow,"pointermove",this.handlePointerMove),og(this.contextWindow,"pointerup",this.handlePointerUp),og(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),$l(this.updatePoint)}}function x_(t,e){return e?{point:e(t.point)}:t}function Z6(t,e){return{x:t.x-e.x,y:t.y-e.y}}function y_({point:t},e){return{point:t,delta:Z6(t,kU(e)),offset:Z6(t,poe(e)),velocity:goe(e,.1)}}function poe(t){return t[0]}function kU(t){return t[t.length-1]}function goe(t,e){if(t.length<2)return{x:0,y:0};let r=t.length-1,n=null;const i=kU(t);for(;r>=0&&(n=t[r],!(i.timestamp-n.timestamp>Cl(e)));)r--;if(!n)return{x:0,y:0};const a=El(i.timestamp-n.timestamp);if(a===0)return{x:0,y:0};const s={x:(i.x-n.x)/a,y:(i.y-n.y)/a};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}const _U=1e-4,moe=1-_U,xoe=1+_U,SU=.01,yoe=0-SU,voe=0+SU;function Ka(t){return t.max-t.min}function boe(t,e,r){return Math.abs(t-e)<=r}function H6(t,e,r,n=.5){t.origin=n,t.originPoint=hn(e.min,e.max,t.origin),t.scale=Ka(r)/Ka(e),t.translate=hn(r.min,r.max,t.origin)-t.originPoint,(t.scale>=moe&&t.scale<=xoe||isNaN(t.scale))&&(t.scale=1),(t.translate>=yoe&&t.translate<=voe||isNaN(t.translate))&&(t.translate=0)}function lg(t,e,r,n){H6(t.x,e.x,r.x,n?n.originX:void 0),H6(t.y,e.y,r.y,n?n.originY:void 0)}function G6(t,e,r){t.min=r.min+e.min,t.max=t.min+Ka(e)}function woe(t,e,r){G6(t.x,e.x,r.x),G6(t.y,e.y,r.y)}function Y6(t,e,r){t.min=e.min-r.min,t.max=t.min+Ka(e)}function cg(t,e,r){Y6(t.x,e.x,r.x),Y6(t.y,e.y,r.y)}function Ooe(t,{min:e,max:r},n){return e!==void 0&&tr&&(t=n?hn(r,t,n.max):Math.min(t,r)),t}function K6(t,e,r){return{min:e!==void 0?t.min+e:void 0,max:r!==void 0?t.max+r-(t.max-t.min):void 0}}function koe(t,{top:e,left:r,bottom:n,right:i}){return{x:K6(t.x,r,i),y:K6(t.y,e,n)}}function J6(t,e){let r=e.min-t.min,n=e.max-t.max;return e.max-e.minn?r=pf(e.min,e.max-n,t.min):n>i&&(r=pf(t.min,t.max-i,e.min)),Il(0,1,r)}function Toe(t,e){const r={};return e.min!==void 0&&(r.min=e.min-t.min),e.max!==void 0&&(r.max=e.max-t.min),r}const RC=.35;function Coe(t=RC){return t===!1?t=0:t===!0&&(t=RC),{x:eR(t,"left","right"),y:eR(t,"top","bottom")}}function eR(t,e,r){return{min:tR(t,e),max:tR(t,r)}}function tR(t,e){return typeof t=="number"?t:t[e]||0}const rR=()=>({translate:0,scale:1,origin:0,originPoint:0}),Ad=()=>({x:rR(),y:rR()}),nR=()=>({min:0,max:0}),On=()=>({x:nR(),y:nR()});function ms(t){return[t("x"),t("y")]}function TU({top:t,left:e,right:r,bottom:n}){return{x:{min:e,max:r},y:{min:t,max:n}}}function Eoe({x:t,y:e}){return{top:e.min,right:t.max,bottom:e.max,left:t.min}}function Doe(t,e){if(!e)return t;const r=e({x:t.left,y:t.top}),n=e({x:t.right,y:t.bottom});return{top:r.y,left:r.x,bottom:n.y,right:n.x}}function v_(t){return t===void 0||t===1}function FC({scale:t,scaleX:e,scaleY:r}){return!v_(t)||!v_(e)||!v_(r)}function Du(t){return FC(t)||CU(t)||t.z||t.rotate||t.rotateX||t.rotateY||t.skewX||t.skewY}function CU(t){return iR(t.x)||iR(t.y)}function iR(t){return t&&t!=="0%"}function Jv(t,e,r){const n=t-r,i=e*n;return r+i}function aR(t,e,r,n,i){return i!==void 0&&(t=Jv(t,i,n)),Jv(t,r,n)+e}function LC(t,e=0,r=1,n,i){t.min=aR(t.min,e,r,n,i),t.max=aR(t.max,e,r,n,i)}function EU(t,{x:e,y:r}){LC(t.x,e.translate,e.scale,e.originPoint),LC(t.y,r.translate,r.scale,r.originPoint)}const sR=.999999999999,oR=1.0000000000001;function Aoe(t,e,r,n=!1){const i=r.length;if(!i)return;e.x=e.y=1;let a,s;for(let o=0;osR&&(e.x=1),e.ysR&&(e.y=1)}function Nd(t,e){t.min=t.min+e,t.max=t.max+e}function lR(t,e,r,n,i=.5){const a=hn(t.min,t.max,i);LC(t,e,r,a,n)}function Pd(t,e){lR(t.x,e.x,e.scaleX,e.scale,e.originX),lR(t.y,e.y,e.scaleY,e.scale,e.originY)}function DU(t,e){return TU(Doe(t.getBoundingClientRect(),e))}function Noe(t,e,r){const n=DU(t,r),{scroll:i}=e;return i&&(Nd(n.x,i.offset.x),Nd(n.y,i.offset.y)),n}const AU=({current:t})=>t?t.ownerDocument.defaultView:null,Poe=new WeakMap;class Roe{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=On(),this.visualElement=e}start(e,{snapToCursor:r=!1}={}){const{presenceContext:n}=this.visualElement;if(n&&n.isPresent===!1)return;const i=u=>{const{dragSnapToOrigin:h}=this.getProps();h?this.pauseAnimation():this.stopAnimation(),r&&this.snapToCursor(Qm(u).point)},a=(u,h)=>{const{drag:d,dragPropagation:f,onDragStart:g}=this.getProps();if(d&&!f&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Tae(d),!this.openDragLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ms(v=>{let b=this.getAxisMotionValue(v).get()||0;if(Vo.test(b)){const{projection:w}=this.visualElement;if(w&&w.layout){const O=w.layout.layoutBox[v];O&&(b=Ka(O)*(parseFloat(b)/100))}}this.originPoint[v]=b}),g&&Gr.postRender(()=>g(u,h)),SC(this.visualElement,"transform");const{animationState:m}=this.visualElement;m&&m.setActive("whileDrag",!0)},s=(u,h)=>{const{dragPropagation:d,dragDirectionLock:f,onDirectionLock:g,onDrag:m}=this.getProps();if(!d&&!this.openDragLock)return;const{offset:v}=h;if(f&&this.currentDirection===null){this.currentDirection=Foe(v),this.currentDirection!==null&&g&&g(this.currentDirection);return}this.updateAxis("x",h.point,v),this.updateAxis("y",h.point,v),this.visualElement.render(),m&&m(u,h)},o=(u,h)=>this.stop(u,h),l=()=>ms(u=>{var h;return this.getAnimationState(u)==="paused"&&((h=this.getAxisMotionValue(u).animation)===null||h===void 0?void 0:h.play())}),{dragSnapToOrigin:c}=this.getProps();this.panSession=new OU(e,{onSessionStart:i,onStart:a,onMove:s,onSessionEnd:o,resumeAnimation:l},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:c,contextWindow:AU(this.visualElement)})}stop(e,r){const n=this.isDragging;if(this.cancel(),!n)return;const{velocity:i}=r;this.startAnimation(i);const{onDragEnd:a}=this.getProps();a&&Gr.postRender(()=>a(e,r))}cancel(){this.isDragging=!1;const{projection:e,animationState:r}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:n}=this.getProps();!n&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),r&&r.setActive("whileDrag",!1)}updateAxis(e,r,n){const{drag:i}=this.getProps();if(!n||!A1(e,i,this.currentDirection))return;const a=this.getAxisMotionValue(e);let s=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(s=Ooe(s,this.constraints[e],this.elastic[e])),a.set(s)}resolveConstraints(){var e;const{dragConstraints:r,dragElastic:n}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(e=this.visualElement.projection)===null||e===void 0?void 0:e.layout,a=this.constraints;r&&Ed(r)?this.constraints||(this.constraints=this.resolveRefConstraints()):r&&i?this.constraints=koe(i.layoutBox,r):this.constraints=!1,this.elastic=Coe(n),a!==this.constraints&&i&&this.constraints&&!this.hasMutatedConstraints&&ms(s=>{this.constraints!==!1&&this.getAxisMotionValue(s)&&(this.constraints[s]=Toe(i.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:r}=this.getProps();if(!e||!Ed(e))return!1;const n=e.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const a=Noe(n,i.root,this.visualElement.getTransformPagePoint());let s=_oe(i.layout.layoutBox,a);if(r){const o=r(Eoe(s));this.hasMutatedConstraints=!!o,o&&(s=TU(o))}return s}startAnimation(e){const{drag:r,dragMomentum:n,dragElastic:i,dragTransition:a,dragSnapToOrigin:s,onDragTransitionEnd:o}=this.getProps(),l=this.constraints||{},c=ms(u=>{if(!A1(u,r,this.currentDirection))return;let h=l&&l[u]||{};s&&(h={min:0,max:0});const d=i?200:1e6,f=i?40:1e7,g={type:"inertia",velocity:n?e[u]:0,bounceStiffness:d,bounceDamping:f,timeConstant:750,restDelta:1,restSpeed:10,...a,...h};return this.startAxisValueAnimation(u,g)});return Promise.all(c).then(o)}startAxisValueAnimation(e,r){const n=this.getAxisMotionValue(e);return SC(this.visualElement,e),n.start(tA(e,n,0,r,this.visualElement,!1))}stopAnimation(){ms(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){ms(e=>{var r;return(r=this.getAxisMotionValue(e).animation)===null||r===void 0?void 0:r.pause()})}getAnimationState(e){var r;return(r=this.getAxisMotionValue(e).animation)===null||r===void 0?void 0:r.state}getAxisMotionValue(e){const r=`_drag${e.toUpperCase()}`,n=this.visualElement.getProps(),i=n[r];return i||this.visualElement.getValue(e,(n.initial?n.initial[e]:void 0)||0)}snapToCursor(e){ms(r=>{const{drag:n}=this.getProps();if(!A1(r,n,this.currentDirection))return;const{projection:i}=this.visualElement,a=this.getAxisMotionValue(r);if(i&&i.layout){const{min:s,max:o}=i.layout.layoutBox[r];a.set(e[r]-hn(s,o,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:r}=this.getProps(),{projection:n}=this.visualElement;if(!Ed(r)||!n||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};ms(s=>{const o=this.getAxisMotionValue(s);if(o&&this.constraints!==!1){const l=o.get();i[s]=Soe({min:l,max:l},this.constraints[s])}});const{transformTemplate:a}=this.visualElement.getProps();this.visualElement.current.style.transform=a?a({},""):"none",n.root&&n.root.updateScroll(),n.updateLayout(),this.resolveConstraints(),ms(s=>{if(!A1(s,e,null))return;const o=this.getAxisMotionValue(s),{min:l,max:c}=this.constraints[s];o.set(hn(l,c,i[s]))})}addListeners(){if(!this.visualElement.current)return;Poe.set(this.visualElement,this);const e=this.visualElement.current,r=og(e,"pointerdown",l=>{const{drag:c,dragListener:u=!0}=this.getProps();c&&u&&this.start(l)}),n=()=>{const{dragConstraints:l}=this.getProps();Ed(l)&&l.current&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,a=i.addEventListener("measure",n);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),Gr.read(n);const s=jg(window,"resize",()=>this.scalePositionWithinConstraints()),o=i.addEventListener("didUpdate",(({delta:l,hasLayoutChanged:c})=>{this.isDragging&&c&&(ms(u=>{const h=this.getAxisMotionValue(u);h&&(this.originPoint[u]+=l[u].translate,h.set(h.get()+l[u].translate))}),this.visualElement.render())}));return()=>{s(),r(),a(),o&&o()}}getProps(){const e=this.visualElement.getProps(),{drag:r=!1,dragDirectionLock:n=!1,dragPropagation:i=!1,dragConstraints:a=!1,dragElastic:s=RC,dragMomentum:o=!0}=e;return{...e,drag:r,dragDirectionLock:n,dragPropagation:i,dragConstraints:a,dragElastic:s,dragMomentum:o}}}function A1(t,e,r){return(e===!0||e===t)&&(r===null||r===t)}function Foe(t,e=10){let r=null;return Math.abs(t.y)>e?r="y":Math.abs(t.x)>e&&(r="x"),r}class Loe extends Kc{constructor(e){super(e),this.removeGroupControls=Za,this.removeListeners=Za,this.controls=new Roe(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Za}unmount(){this.removeGroupControls(),this.removeListeners()}}const cR=t=>(e,r)=>{t&&Gr.postRender(()=>t(e,r))};class Moe extends Kc{constructor(){super(...arguments),this.removePointerDownListener=Za}onPointerDown(e){this.session=new OU(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:AU(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:r,onPan:n,onPanEnd:i}=this.node.getProps();return{onSessionStart:cR(e),onStart:cR(r),onMove:n,onEnd:(a,s)=>{delete this.session,i&&Gr.postRender(()=>i(a,s))}}}mount(){this.removePointerDownListener=og(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const qy={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function uR(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}const qp={correct:(t,e)=>{if(!e.target)return t;if(typeof t=="string")if(Yt.test(t))t=parseFloat(t);else return t;const r=uR(t,e.target.x),n=uR(t,e.target.y);return`${r}% ${n}%`}},$oe={correct:(t,{treeScale:e,projectionDelta:r})=>{const n=t,i=$c.parse(t);if(i.length>5)return n;const a=$c.createTransformer(t),s=typeof i[0]!="number"?1:0,o=r.x.scale*e.x,l=r.y.scale*e.y;i[0+s]/=o,i[1+s]/=l;const c=hn(o,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=c),typeof i[3+s]=="number"&&(i[3+s]/=c),a(i)}};class Ioe extends U.Component{componentDidMount(){const{visualElement:e,layoutGroup:r,switchLayoutGroup:n,layoutId:i}=this.props,{projection:a}=e;aae(joe),a&&(r.group&&r.group.add(a),n&&n.register&&i&&n.register(a),a.root.didUpdate(),a.addEventListener("animationComplete",()=>{this.safeToRemove()}),a.setOptions({...a.options,onExitComplete:()=>this.safeToRemove()})),qy.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:r,visualElement:n,drag:i,isPresent:a}=this.props,s=n.projection;return s&&(s.isPresent=a,i||e.layoutDependency!==r||r===void 0?s.willUpdate():this.safeToRemove(),e.isPresent!==a&&(a?s.promote():s.relegate()||Gr.postRender(()=>{const o=s.getStack();(!o||!o.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),A3.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:r,switchLayoutGroup:n}=this.props,{projection:i}=e;i&&(i.scheduleCheckAfterUnmount(),r&&r.group&&r.group.remove(i),n&&n.deregister&&n.deregister(i))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function NU(t){const[e,r]=f7(),n=U.useContext(k3);return x.jsx(Ioe,{...t,layoutGroup:n,switchLayoutGroup:U.useContext(b7),isPresent:e,safeToRemove:r})}const joe={borderRadius:{...qp,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:qp,borderTopRightRadius:qp,borderBottomLeftRadius:qp,borderBottomRightRadius:qp,boxShadow:$oe};function Boe(t,e,r){const n=Fi(t)?t:mf(t);return n.start(tA("",n,e,r)),n.animation}function Uoe(t){return t instanceof SVGElement&&t.tagName!=="svg"}const Qoe=(t,e)=>t.depth-e.depth;class Woe{constructor(){this.children=[],this.isDirty=!1}add(e){z3(this.children,e),this.isDirty=!0}remove(e){V3(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(Qoe),this.isDirty=!1,this.children.forEach(e)}}function zoe(t,e){const r=qo.now(),n=({timestamp:i})=>{const a=i-r;a>=e&&($l(n),t(a-e))};return Gr.read(n,!0),()=>$l(n)}const PU=["TopLeft","TopRight","BottomLeft","BottomRight"],Voe=PU.length,hR=t=>typeof t=="string"?parseFloat(t):t,dR=t=>typeof t=="number"||Yt.test(t);function qoe(t,e,r,n,i,a){i?(t.opacity=hn(0,r.opacity!==void 0?r.opacity:1,Xoe(n)),t.opacityExit=hn(e.opacity!==void 0?e.opacity:1,0,Zoe(n))):a&&(t.opacity=hn(e.opacity!==void 0?e.opacity:1,r.opacity!==void 0?r.opacity:1,n));for(let s=0;sne?1:r(pf(t,e,n))}function pR(t,e){t.min=e.min,t.max=e.max}function cs(t,e){pR(t.x,e.x),pR(t.y,e.y)}function gR(t,e){t.translate=e.translate,t.scale=e.scale,t.originPoint=e.originPoint,t.origin=e.origin}function mR(t,e,r,n,i){return t-=e,t=Jv(t,1/r,n),i!==void 0&&(t=Jv(t,1/i,n)),t}function Hoe(t,e=0,r=1,n=.5,i,a=t,s=t){if(Vo.test(e)&&(e=parseFloat(e),e=hn(s.min,s.max,e/100)-s.min),typeof e!="number")return;let o=hn(a.min,a.max,n);t===a&&(o-=e),t.min=mR(t.min,e,r,o,i),t.max=mR(t.max,e,r,o,i)}function xR(t,e,[r,n,i],a,s){Hoe(t,e[r],e[n],e[i],e.scale,a,s)}const Goe=["x","scaleX","originX"],Yoe=["y","scaleY","originY"];function yR(t,e,r,n){xR(t.x,e,Goe,r?r.x:void 0,n?n.x:void 0),xR(t.y,e,Yoe,r?r.y:void 0,n?n.y:void 0)}function vR(t){return t.translate===0&&t.scale===1}function FU(t){return vR(t.x)&&vR(t.y)}function bR(t,e){return t.min===e.min&&t.max===e.max}function Koe(t,e){return bR(t.x,e.x)&&bR(t.y,e.y)}function wR(t,e){return Math.round(t.min)===Math.round(e.min)&&Math.round(t.max)===Math.round(e.max)}function LU(t,e){return wR(t.x,e.x)&&wR(t.y,e.y)}function OR(t){return Ka(t.x)/Ka(t.y)}function kR(t,e){return t.translate===e.translate&&t.scale===e.scale&&t.originPoint===e.originPoint}class Joe{constructor(){this.members=[]}add(e){z3(this.members,e),e.scheduleRender()}remove(e){if(V3(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){const r=this.members[this.members.length-1];r&&this.promote(r)}}relegate(e){const r=this.members.findIndex(i=>e===i);if(r===0)return!1;let n;for(let i=r;i>=0;i--){const a=this.members[i];if(a.isPresent!==!1){n=a;break}}return n?(this.promote(n),!0):!1}promote(e,r){const n=this.lead;if(e!==n&&(this.prevLead=n,this.lead=e,e.show(),n)){n.instance&&n.scheduleRender(),e.scheduleRender(),e.resumeFrom=n,r&&(e.resumeFrom.preserveOpacity=!0),n.snapshot&&(e.snapshot=n.snapshot,e.snapshot.latestValues=n.animationValues||n.latestValues),e.root&&e.root.isUpdating&&(e.isLayoutDirty=!0);const{crossfade:i}=e.options;i===!1&&n.hide()}}exitAnimationComplete(){this.members.forEach(e=>{const{options:r,resumingFrom:n}=e;r.onExitComplete&&r.onExitComplete(),n&&n.options.onExitComplete&&n.options.onExitComplete()})}scheduleRender(){this.members.forEach(e=>{e.instance&&e.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function ele(t,e,r){let n="";const i=t.x.translate/e.x,a=t.y.translate/e.y,s=(r==null?void 0:r.z)||0;if((i||a||s)&&(n=`translate3d(${i}px, ${a}px, ${s}px) `),(e.x!==1||e.y!==1)&&(n+=`scale(${1/e.x}, ${1/e.y}) `),r){const{transformPerspective:c,rotate:u,rotateX:h,rotateY:d,skewX:f,skewY:g}=r;c&&(n=`perspective(${c}px) ${n}`),u&&(n+=`rotate(${u}deg) `),h&&(n+=`rotateX(${h}deg) `),d&&(n+=`rotateY(${d}deg) `),f&&(n+=`skewX(${f}deg) `),g&&(n+=`skewY(${g}deg) `)}const o=t.x.scale*e.x,l=t.y.scale*e.y;return(o!==1||l!==1)&&(n+=`scale(${o}, ${l})`),n||"none"}const Au={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0},$0=typeof window<"u"&&window.MotionDebug!==void 0,b_=["","X","Y","Z"],tle={visibility:"hidden"},_R=1e3;let rle=0;function w_(t,e,r,n){const{latestValues:i}=e;i[t]&&(r[t]=i[t],e.setStaticValue(t,0),n&&(n[t]=0))}function MU(t){if(t.hasCheckedOptimisedAppear=!0,t.root===t)return;const{visualElement:e}=t.options;if(!e)return;const r=W7(e);if(window.MotionHasOptimisedAnimation(r,"transform")){const{layout:i,layoutId:a}=t.options;window.MotionCancelOptimisedAnimation(r,"transform",Gr,!(i||a))}const{parent:n}=t;n&&!n.hasCheckedOptimisedAppear&&MU(n)}function $U({attachResizeListener:t,defaultParent:e,measureScroll:r,checkIsScrollRoot:n,resetTransform:i}){return class{constructor(s={},o=e==null?void 0:e()){this.id=rle++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,$0&&(Au.totalNodes=Au.resolvedTargetDeltas=Au.recalculatedProjection=0),this.nodes.forEach(ale),this.nodes.forEach(ule),this.nodes.forEach(hle),this.nodes.forEach(sle),$0&&window.MotionDebug.record(Au)},this.resolvedRelativeTargetAt=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=o?o.root||o:this,this.path=o?[...o.path,o]:[],this.parent=o,this.depth=o?o.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;t(s,()=>{this.root.updateBlockedByResize=!0,h&&h(),h=zoe(d,250),qy.hasAnimatedSinceResize&&(qy.hasAnimatedSinceResize=!1,this.nodes.forEach(TR))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:h,hasLayoutChanged:d,hasRelativeTargetChanged:f,layout:g})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||u.getDefaultTransition()||mle,{onLayoutAnimationStart:v,onLayoutAnimationComplete:b}=u.getProps(),w=!this.targetLayout||!LU(this.targetLayout,g)||f,O=!d&&f;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||O||d&&(w||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(h,O);const S={...B3(m,"layout"),onPlay:v,onComplete:b};(u.shouldReduceMotion||this.options.layoutRoot)&&(S.delay=0,S.type=!1),this.startAnimation(S)}else d||TR(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=g})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,$l(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(dle),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&MU(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;u{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const T=S/1e3;CR(h.x,s.x,T),CR(h.y,s.y,T),this.setTargetDelta(h),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(cg(d,this.layout.layoutBox,this.relativeParent.layout.layoutBox),ple(this.relativeTarget,this.relativeTargetOrigin,d,T),O&&Koe(this.relativeTarget,O)&&(this.isProjectionDirty=!1),O||(O=On()),cs(O,this.relativeTarget)),m&&(this.animationValues=u,qoe(u,c,this.latestValues,T,w,b)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=T},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&($l(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Gr.update(()=>{qy.hasAnimatedSinceResize=!0,this.currentAnimation=Boe(0,_R,{...s,onUpdate:o=>{this.mixTargetDelta(o),s.onUpdate&&s.onUpdate(o)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(_R),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:o,target:l,layout:c,latestValues:u}=s;if(!(!o||!l||!c)){if(this!==s&&this.layout&&c&&IU(this.options.animationType,this.layout.layoutBox,c.layoutBox)){l=this.target||On();const h=Ka(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+h;const d=Ka(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+d}cs(o,l),Pd(o,u),lg(this.projectionDeltaWithTransform,this.layoutCorrected,o,u)}}registerSharedNode(s,o){this.sharedNodes.has(s)||this.sharedNodes.set(s,new Joe),this.sharedNodes.get(s).add(o);const c=o.options.initialPromotionConfig;o.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(o):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:o}=this.options;return o?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:o}=this.options;return o?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:o,preserveFollowOpacity:l}={}){const c=this.getStack();c&&c.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),o&&this.setOptions({transition:o})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetSkewAndRotation(){const{visualElement:s}=this.options;if(!s)return;let o=!1;const{latestValues:l}=s;if((l.z||l.rotate||l.rotateX||l.rotateY||l.rotateZ||l.skewX||l.skewY)&&(o=!0),!o)return;const c={};l.z&&w_("z",s,c,this.animationValues);for(let u=0;u{var o;return(o=s.currentAnimation)===null||o===void 0?void 0:o.stop()}),this.root.nodes.forEach(SR),this.root.sharedNodes.clear()}}}function nle(t){t.updateLayout()}function ile(t){var e;const r=((e=t.resumeFrom)===null||e===void 0?void 0:e.snapshot)||t.snapshot;if(t.isLead()&&t.layout&&r&&t.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:i}=t.layout,{animationType:a}=t.options,s=r.source!==t.layout.source;a==="size"?ms(h=>{const d=s?r.measuredBox[h]:r.layoutBox[h],f=Ka(d);d.min=n[h].min,d.max=d.min+f}):IU(a,r.layoutBox,n)&&ms(h=>{const d=s?r.measuredBox[h]:r.layoutBox[h],f=Ka(n[h]);d.max=d.min+f,t.relativeTarget&&!t.currentAnimation&&(t.isProjectionDirty=!0,t.relativeTarget[h].max=t.relativeTarget[h].min+f)});const o=Ad();lg(o,n,r.layoutBox);const l=Ad();s?lg(l,t.applyTransform(i,!0),r.measuredBox):lg(l,n,r.layoutBox);const c=!FU(o);let u=!1;if(!t.resumeFrom){const h=t.getClosestProjectingParent();if(h&&!h.resumeFrom){const{snapshot:d,layout:f}=h;if(d&&f){const g=On();cg(g,r.layoutBox,d.layoutBox);const m=On();cg(m,n,f.layoutBox),LU(g,m)||(u=!0),h.options.layoutRoot&&(t.relativeTarget=m,t.relativeTargetOrigin=g,t.relativeParent=h)}}}t.notifyListeners("didUpdate",{layout:n,snapshot:r,delta:l,layoutDelta:o,hasLayoutChanged:c,hasRelativeTargetChanged:u})}else if(t.isLead()){const{onExitComplete:n}=t.options;n&&n()}t.options.transition=void 0}function ale(t){$0&&Au.totalNodes++,t.parent&&(t.isProjecting()||(t.isProjectionDirty=t.parent.isProjectionDirty),t.isSharedProjectionDirty||(t.isSharedProjectionDirty=!!(t.isProjectionDirty||t.parent.isProjectionDirty||t.parent.isSharedProjectionDirty)),t.isTransformDirty||(t.isTransformDirty=t.parent.isTransformDirty))}function sle(t){t.isProjectionDirty=t.isSharedProjectionDirty=t.isTransformDirty=!1}function ole(t){t.clearSnapshot()}function SR(t){t.clearMeasurements()}function lle(t){t.isLayoutDirty=!1}function cle(t){const{visualElement:e}=t.options;e&&e.getProps().onBeforeLayoutMeasure&&e.notify("BeforeLayoutMeasure"),t.resetTransform()}function TR(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0,t.isProjectionDirty=!0}function ule(t){t.resolveTargetDelta()}function hle(t){t.calcProjection()}function dle(t){t.resetSkewAndRotation()}function fle(t){t.removeLeadSnapshot()}function CR(t,e,r){t.translate=hn(e.translate,0,r),t.scale=hn(e.scale,1,r),t.origin=e.origin,t.originPoint=e.originPoint}function ER(t,e,r,n){t.min=hn(e.min,r.min,n),t.max=hn(e.max,r.max,n)}function ple(t,e,r,n){ER(t.x,e.x,r.x,n),ER(t.y,e.y,r.y,n)}function gle(t){return t.animationValues&&t.animationValues.opacityExit!==void 0}const mle={duration:.45,ease:[.4,0,.1,1]},DR=t=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(t),AR=DR("applewebkit/")&&!DR("chrome/")?Math.round:Za;function NR(t){t.min=AR(t.min),t.max=AR(t.max)}function xle(t){NR(t.x),NR(t.y)}function IU(t,e,r){return t==="position"||t==="preserve-aspect"&&!boe(OR(e),OR(r),.2)}function yle(t){var e;return t!==t.root&&((e=t.scroll)===null||e===void 0?void 0:e.wasRoot)}const vle=$U({attachResizeListener:(t,e)=>jg(t,"resize",e),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),O_={current:void 0},jU=$U({measureScroll:t=>({x:t.scrollLeft,y:t.scrollTop}),defaultParent:()=>{if(!O_.current){const t=new vle({});t.mount(window),t.setOptions({layoutScroll:!0}),O_.current=t}return O_.current},resetTransform:(t,e)=>{t.style.transform=e!==void 0?e:"none"},checkIsScrollRoot:t=>window.getComputedStyle(t).position==="fixed"}),ble={pan:{Feature:Moe},drag:{Feature:Loe,ProjectionNode:jU,MeasureLayout:NU}};function PR(t,e,r){const{props:n}=t;t.animationState&&n.whileHover&&t.animationState.setActive("whileHover",r==="Start");const i="onHover"+r,a=n[i];a&&Gr.postRender(()=>a(e,Qm(e)))}class wle extends Kc{mount(){const{current:e}=this.node;e&&(this.unmount=wae(e,r=>(PR(this.node,r,"Start"),n=>PR(this.node,n,"End"))))}unmount(){}}class Ole extends Kc{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Um(jg(this.node.current,"focus",()=>this.onFocus()),jg(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function RR(t,e,r){const{props:n}=t;t.animationState&&n.whileTap&&t.animationState.setActive("whileTap",r==="Start");const i="onTap"+(r==="End"?"":r),a=n[i];a&&Gr.postRender(()=>a(e,Qm(e)))}class kle extends Kc{mount(){const{current:e}=this.node;e&&(this.unmount=Sae(e,r=>(RR(this.node,r,"Start"),(n,{success:i})=>RR(this.node,n,i?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const MC=new WeakMap,k_=new WeakMap,_le=t=>{const e=MC.get(t.target);e&&e(t)},Sle=t=>{t.forEach(_le)};function Tle({root:t,...e}){const r=t||document;k_.has(r)||k_.set(r,{});const n=k_.get(r),i=JSON.stringify(e);return n[i]||(n[i]=new IntersectionObserver(Sle,{root:t,...e})),n[i]}function Cle(t,e,r){const n=Tle(e);return MC.set(t,r),n.observe(t),()=>{MC.delete(t),n.unobserve(t)}}const Ele={some:0,all:1};class Dle extends Kc{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:r,margin:n,amount:i="some",once:a}=e,s={root:r?r.current:void 0,rootMargin:n,threshold:typeof i=="number"?i:Ele[i]},o=l=>{const{isIntersecting:c}=l;if(this.isInView===c||(this.isInView=c,a&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:h}=this.node.getProps(),d=c?u:h;d&&d(l)};return Cle(this.node.current,s,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:r}=this.node;["amount","margin","root"].some(Ale(e,r))&&this.startObserver()}unmount(){}}function Ale({viewport:t={}},{viewport:e={}}={}){return r=>t[r]!==e[r]}const Nle={inView:{Feature:Dle},tap:{Feature:kle},focus:{Feature:Ole},hover:{Feature:wle}},Ple={layout:{ProjectionNode:jU,MeasureLayout:NU}},$C={current:null},BU={current:!1};function Rle(){if(BU.current=!0,!!_3)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>$C.current=t.matches;t.addListener(e),e()}else $C.current=!1}const Fle=[...uU,Ei,$c],Lle=t=>Fle.find(cU(t)),FR=new WeakMap;function Mle(t,e,r){for(const n in e){const i=e[n],a=r[n];if(Fi(i))t.addValue(n,i);else if(Fi(a))t.addValue(n,mf(i,{owner:t}));else if(a!==i)if(t.hasValue(n)){const s=t.getValue(n);s.liveStyle===!0?s.jump(i):s.hasAnimated||s.set(i)}else{const s=t.getStaticValue(n);t.addValue(n,mf(s!==void 0?s:i,{owner:t}))}}for(const n in r)e[n]===void 0&&t.removeValue(n);return e}const LR=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class $le{scrapeMotionValuesFromProps(e,r,n){return{}}constructor({parent:e,props:r,presenceContext:n,reducedMotionConfig:i,blockInitialAnimation:a,visualState:s},o={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=K3,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const f=qo.now();this.renderScheduledAtthis.bindToMotionValue(n,r)),BU.current||Rle(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:$C.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){FR.delete(this.current),this.projection&&this.projection.unmount(),$l(this.notifyUpdate),$l(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const e in this.events)this.events[e].clear();for(const e in this.features){const r=this.features[e];r&&(r.unmount(),r.isMounted=!1)}this.current=null}bindToMotionValue(e,r){this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)();const n=_h.has(e),i=r.on("change",o=>{this.latestValues[e]=o,this.props.onUpdate&&Gr.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0)}),a=r.on("renderRequest",this.scheduleRender);let s;window.MotionCheckAppearSync&&(s=window.MotionCheckAppearSync(this,e,r)),this.valueSubscriptions.set(e,()=>{i(),a(),s&&s(),r.owner&&r.stop()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e="animation";for(e in gf){const r=gf[e];if(!r)continue;const{isEnabled:n,Feature:i}=r;if(!this.features[e]&&i&&n(this.props)&&(this.features[e]=new i(this)),this.features[e]){const a=this.features[e];a.isMounted?a.update():(a.mount(),a.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):On()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,r){this.latestValues[e]=r}update(e,r){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=r;for(let n=0;nr.variantChildren.delete(e)}addValue(e,r){const n=this.values.get(e);r!==n&&(n&&this.removeValue(e),this.bindToMotionValue(e,r),this.values.set(e,r),this.latestValues[e]=r.get())}removeValue(e){this.values.delete(e);const r=this.valueSubscriptions.get(e);r&&(r(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,r){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&r!==void 0&&(n=mf(r===null?void 0:r,{owner:this}),this.addValue(e,n)),n}readValue(e,r){var n;let i=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:(n=this.getBaseTargetFromProps(this.props,e))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,e,this.options);return i!=null&&(typeof i=="string"&&(oU(i)||K7(i))?i=parseFloat(i):!Lle(i)&&$c.test(r)&&(i=iU(e,r)),this.setBaseTarget(e,Fi(i)?i.get():i)),Fi(i)?i.get():i}setBaseTarget(e,r){this.baseTarget[e]=r}getBaseTarget(e){var r;const{initial:n}=this.props;let i;if(typeof n=="string"||typeof n=="object"){const s=P3(this.props,n,(r=this.presenceContext)===null||r===void 0?void 0:r.custom);s&&(i=s[e])}if(n&&i!==void 0)return i;const a=this.getBaseTargetFromProps(this.props,e);return a!==void 0&&!Fi(a)?a:this.initialValues[e]!==void 0&&i===void 0?void 0:this.baseTarget[e]}on(e,r){return this.events[e]||(this.events[e]=new q3),this.events[e].add(r)}notify(e,...r){this.events[e]&&this.events[e].notify(...r)}}class UU extends $le{constructor(){super(...arguments),this.KeyframeResolver=hU}sortInstanceNodePosition(e,r){return e.compareDocumentPosition(r)&2?1:-1}getBaseTargetFromProps(e,r){return e.style?e.style[r]:void 0}removeValueFromRenderState(e,{vars:r,style:n}){delete r[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:e}=this.props;Fi(e)&&(this.childSubscription=e.on("change",r=>{this.current&&(this.current.textContent=`${r}`)}))}}function Ile(t){return window.getComputedStyle(t)}class jle extends UU{constructor(){super(...arguments),this.type="html",this.renderInstance=C7}readValueFromInstance(e,r){if(_h.has(r)){const n=Y3(r);return n&&n.default||0}else{const n=Ile(e),i=(_7(r)?n.getPropertyValue(r):n[r])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(e,{transformPagePoint:r}){return DU(e,r)}build(e,r,n){L3(e,r,n.transformTemplate)}scrapeMotionValuesFromProps(e,r,n){return j3(e,r,n)}}class Ble extends UU{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=On}getBaseTargetFromProps(e,r){return e[r]}readValueFromInstance(e,r){if(_h.has(r)){const n=Y3(r);return n&&n.default||0}return r=E7.has(r)?r:D3(r),e.getAttribute(r)}scrapeMotionValuesFromProps(e,r,n){return N7(e,r,n)}build(e,r,n){M3(e,r,this.isSVGTag,n.transformTemplate)}renderInstance(e,r,n,i){D7(e,r,n,i)}mount(e){this.isSVGTag=I3(e.tagName),super.mount(e)}}const Ule=(t,e)=>N3(t)?new Ble(e):new jle(e,{allowProjection:t!==U.Fragment}),Qle=pae({...hoe,...Nle,...ble,...Ple},Ule),mt=Die(Qle);function QU(t){const e=Im(()=>mf(t)),{isStatic:r}=U.useContext(Q2);if(r){const[,n]=U.useState(t);U.useEffect(()=>e.on("change",n),[])}return e}function WU(t,e){const r=QU(e()),n=()=>r.set(e());return n(),S3(()=>{const i=()=>Gr.preRender(n,!1,!0),a=t.map(s=>s.on("change",i));return()=>{a.forEach(s=>s()),$l(n)}}),r}const Wle=t=>t&&typeof t=="object"&&t.mix,zle=t=>Wle(t)?t.mix:void 0;function Vle(...t){const e=!Array.isArray(t[0]),r=e?0:-1,n=t[0+r],i=t[1+r],a=t[2+r],s=t[3+r],o=yU(i,a,{mixer:zle(a[0]),...s});return e?o(n):o}function qle(t){ag.current=[],t();const e=WU(ag.current,t);return ag.current=void 0,e}function MR(t,e,r,n){if(typeof t=="function")return qle(t);const i=typeof e=="function"?e:Vle(e,r,n);return Array.isArray(t)?$R(t,i):$R([t],([a])=>i(a))}function $R(t,e){const r=Im(()=>[]);return WU(t,()=>{r.length=0;const n=t.length;for(let i=0;i{document.head.removeChild(u)}},[e]),x.jsx(vie,{isPresent:e,childRef:n,sizeRef:i,children:U.cloneElement(t,{ref:n})})}const wie=({children:t,initial:e,isPresent:r,onExitComplete:n,custom:i,presenceAffectsLayout:a,mode:s})=>{const o=Im(Oie),l=U.useId(),c=U.useCallback(h=>{o.set(h,!0);for(const d of o.values())if(!d)return;n&&n()},[o,n]),u=U.useMemo(()=>({id:l,initial:e,isPresent:r,custom:i,onExitComplete:c,register:h=>(o.set(h,!1),()=>o.delete(h))}),a?[Math.random(),c]:[r,c]);return U.useMemo(()=>{o.forEach((h,d)=>o.set(d,!1))},[r]),U.useEffect(()=>{!r&&!o.size&&n&&n()},[r]),s==="popLayout"&&(t=x.jsx(bie,{isPresent:r,children:t})),x.jsx(U2.Provider,{value:u,children:t})};function Oie(){return new Map}function p7(t=!0){const e=U.useContext(U2);if(e===null)return[!0,null];const{isPresent:r,onExitComplete:n,register:i}=e,a=U.useId();U.useEffect(()=>{t&&i(a)},[t]);const s=U.useCallback(()=>t&&n&&n(a),[a,n,t]);return!r&&n?[!1,s]:[!0]}const C1=t=>t.key||"";function w6(t){const e=[];return U.Children.forEach(t,r=>{U.isValidElement(r)&&e.push(r)}),e}const _3=typeof window<"u",S3=_3?U.useLayoutEffect:U.useEffect,Lr=({children:t,custom:e,initial:r=!0,onExitComplete:n,presenceAffectsLayout:i=!0,mode:a="sync",propagate:s=!1})=>{const[o,l]=p7(s),c=U.useMemo(()=>w6(t),[t]),u=s&&!o?[]:c.map(C1),h=U.useRef(!0),d=U.useRef(c),f=Im(()=>new Map),[g,m]=U.useState(c),[v,b]=U.useState(c);S3(()=>{h.current=!1,d.current=c;for(let S=0;S{const T=C1(S),_=s&&!o?!1:c===v||u.includes(T),C=()=>{if(f.has(T))f.set(T,!0);else return;let D=!0;f.forEach(A=>{A||(D=!1)}),D&&(O==null||O(),b(d.current),s&&(l==null||l()),n&&n())};return x.jsx(wie,{isPresent:_,initial:!h.current||r?void 0:!1,custom:_?void 0:e,presenceAffectsLayout:i,mode:a,onExitComplete:_?void 0:C,children:S},T)})})},Za=t=>t;let g7=Za;function T3(t){let e;return()=>(e===void 0&&(e=t()),e)}const pf=(t,e,r)=>{const n=e-t;return n===0?1:(r-t)/n},Cl=t=>t*1e3,El=t=>t/1e3,kie={useManualTiming:!1};function _ie(t){let e=new Set,r=new Set,n=!1,i=!1;const a=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function o(c){a.has(c)&&(l.schedule(c),t()),c(s)}const l={schedule:(c,u=!1,h=!1)=>{const f=h&&n?e:r;return u&&a.add(c),f.has(c)||f.add(c),c},cancel:c=>{r.delete(c),a.delete(c)},process:c=>{if(s=c,n){i=!0;return}n=!0,[e,r]=[r,e],e.forEach(o),e.clear(),n=!1,i&&(i=!1,l.process(c))}};return l}const E1=["read","resolveKeyframes","update","preRender","render","postRender"],Sie=40;function m7(t,e){let r=!1,n=!0;const i={delta:0,timestamp:0,isProcessing:!1},a=()=>r=!0,s=E1.reduce((b,w)=>(b[w]=_ie(a),b),{}),{read:o,resolveKeyframes:l,update:c,preRender:u,render:h,postRender:d}=s,f=()=>{const b=performance.now();r=!1,i.delta=n?1e3/60:Math.max(Math.min(b-i.timestamp,Sie),1),i.timestamp=b,i.isProcessing=!0,o.process(i),l.process(i),c.process(i),u.process(i),h.process(i),d.process(i),i.isProcessing=!1,r&&e&&(n=!1,t(f))},g=()=>{r=!0,n=!0,i.isProcessing||t(f)};return{schedule:E1.reduce((b,w)=>{const O=s[w];return b[w]=(S,T=!1,_=!1)=>(r||g(),O.schedule(S,T,_)),b},{}),cancel:b=>{for(let w=0;wO6[t].some(r=>!!e[r])};function Tie(t){for(const e in t)gf[e]={...gf[e],...t[e]}}const Cie=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function Xv(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||Cie.has(t)}let y7=t=>!Xv(t);function Eie(t){t&&(y7=e=>e.startsWith("on")?!Xv(e):t(e))}try{Eie(require("@emotion/is-prop-valid").default)}catch{}function Die(t,e,r){const n={};for(const i in t)i==="values"&&typeof t.values=="object"||(y7(i)||r===!0&&Xv(i)||!e&&!Xv(i)||t.draggable&&i.startsWith("onDrag"))&&(n[i]=t[i]);return n}function Aie(t){if(typeof Proxy>"u")return t;const e=new Map,r=(...n)=>t(...n);return new Proxy(r,{get:(n,i)=>i==="create"?t:(e.has(i)||e.set(i,t(i)),e.get(i))})}const W2=U.createContext({});function Mg(t){return typeof t=="string"||Array.isArray(t)}function z2(t){return t!==null&&typeof t=="object"&&typeof t.start=="function"}const C3=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],E3=["initial",...C3];function V2(t){return z2(t.animate)||E3.some(e=>Mg(t[e]))}function v7(t){return!!(V2(t)||t.variants)}function Nie(t,e){if(V2(t)){const{initial:r,animate:n}=t;return{initial:r===!1||Mg(r)?r:void 0,animate:Mg(n)?n:void 0}}return t.inherit!==!1?e:{}}function Pie(t){const{initial:e,animate:r}=Nie(t,U.useContext(W2));return U.useMemo(()=>({initial:e,animate:r}),[k6(e),k6(r)])}function k6(t){return Array.isArray(t)?t.join(" "):t}const Rie=Symbol.for("motionComponentSymbol");function Ed(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function Fie(t,e,r){return U.useCallback(n=>{n&&t.onMount&&t.onMount(n),e&&(n?e.mount(n):e.unmount()),r&&(typeof r=="function"?r(n):Ed(r)&&(r.current=n))},[e])}const D3=t=>t.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),Lie="framerAppearId",b7="data-"+D3(Lie),{schedule:A3}=m7(queueMicrotask,!1),w7=U.createContext({});function Mie(t,e,r,n,i){var a,s;const{visualElement:o}=U.useContext(W2),l=U.useContext(x7),c=U.useContext(U2),u=U.useContext(Q2).reducedMotion,h=U.useRef(null);n=n||l.renderer,!h.current&&n&&(h.current=n(t,{visualState:e,parent:o,props:r,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u}));const d=h.current,f=U.useContext(w7);d&&!d.projection&&i&&(d.type==="html"||d.type==="svg")&&$ie(h.current,r,i,f);const g=U.useRef(!1);U.useInsertionEffect(()=>{d&&g.current&&d.update(r,c)});const m=r[b7],v=U.useRef(!!m&&!(!((a=window.MotionHandoffIsComplete)===null||a===void 0)&&a.call(window,m))&&((s=window.MotionHasOptimisedAnimation)===null||s===void 0?void 0:s.call(window,m)));return S3(()=>{d&&(g.current=!0,window.MotionIsMounted=!0,d.updateFeatures(),A3.render(d.render),v.current&&d.animationState&&d.animationState.animateChanges())}),U.useEffect(()=>{d&&(!v.current&&d.animationState&&d.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{var b;(b=window.MotionHandoffMarkAsComplete)===null||b===void 0||b.call(window,m)}),v.current=!1))}),d}function $ie(t,e,r,n){const{layoutId:i,layout:a,drag:s,dragConstraints:o,layoutScroll:l,layoutRoot:c}=e;t.projection=new r(t.latestValues,e["data-framer-portal-id"]?void 0:O7(t.parent)),t.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!s||o&&Ed(o),visualElement:t,animationType:typeof a=="string"?a:"both",initialPromotionConfig:n,layoutScroll:l,layoutRoot:c})}function O7(t){if(t)return t.options.allowProjection!==!1?t.projection:O7(t.parent)}function Iie({preloadedFeatures:t,createVisualElement:e,useRender:r,useVisualState:n,Component:i}){var a,s;t&&Tie(t);function o(c,u){let h;const d={...U.useContext(Q2),...c,layoutId:jie(c)},{isStatic:f}=d,g=Pie(c),m=n(c,f);if(!f&&_3){Bie();const v=Uie(d);h=v.MeasureLayout,g.visualElement=Mie(i,m,d,e,v.ProjectionNode)}return x.jsxs(W2.Provider,{value:g,children:[h&&g.visualElement?x.jsx(h,{visualElement:g.visualElement,...d}):null,r(i,c,Fie(m,g.visualElement,u),m,f,g.visualElement)]})}o.displayName=`motion.${typeof i=="string"?i:`create(${(s=(a=i.displayName)!==null&&a!==void 0?a:i.name)!==null&&s!==void 0?s:""})`}`;const l=U.forwardRef(o);return l[Rie]=i,l}function jie({layoutId:t}){const e=U.useContext(k3).id;return e&&t!==void 0?e+"-"+t:t}function Bie(t,e){U.useContext(x7).strict}function Uie(t){const{drag:e,layout:r}=gf;if(!e&&!r)return{};const n={...e,...r};return{MeasureLayout:e!=null&&e.isEnabled(t)||r!=null&&r.isEnabled(t)?n.MeasureLayout:void 0,ProjectionNode:n.ProjectionNode}}const Qie=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function N3(t){return typeof t!="string"||t.includes("-")?!1:!!(Qie.indexOf(t)>-1||/[A-Z]/u.test(t))}function _6(t){const e=[{},{}];return t==null||t.values.forEach((r,n)=>{e[0][n]=r.get(),e[1][n]=r.getVelocity()}),e}function P3(t,e,r,n){if(typeof e=="function"){const[i,a]=_6(n);e=e(r!==void 0?r:t.custom,i,a)}if(typeof e=="string"&&(e=t.variants&&t.variants[e]),typeof e=="function"){const[i,a]=_6(n);e=e(r!==void 0?r:t.custom,i,a)}return e}const OC=t=>Array.isArray(t),Wie=t=>!!(t&&typeof t=="object"&&t.mix&&t.toValue),zie=t=>OC(t)?t[t.length-1]||0:t,Fi=t=>!!(t&&t.getVelocity);function zy(t){const e=Fi(t)?t.get():t;return Wie(e)?e.toValue():e}function Vie({scrapeMotionValuesFromProps:t,createRenderState:e,onUpdate:r},n,i,a){const s={latestValues:qie(n,i,a,t),renderState:e()};return r&&(s.onMount=o=>r({props:n,current:o,...s}),s.onUpdate=o=>r(o)),s}const k7=t=>(e,r)=>{const n=U.useContext(W2),i=U.useContext(U2),a=()=>Vie(t,e,n,i);return r?a():Im(a)};function qie(t,e,r,n){const i={},a=n(t,{});for(const d in a)i[d]=zy(a[d]);let{initial:s,animate:o}=t;const l=V2(t),c=v7(t);e&&c&&!l&&t.inherit!==!1&&(s===void 0&&(s=e.initial),o===void 0&&(o=e.animate));let u=r?r.initial===!1:!1;u=u||s===!1;const h=u?o:s;if(h&&typeof h!="boolean"&&!z2(h)){const d=Array.isArray(h)?h:[h];for(let f=0;fe=>typeof e=="string"&&e.startsWith(t),S7=_7("--"),Xie=_7("var(--"),R3=t=>Xie(t)?Zie.test(t.split("/*")[0].trim()):!1,Zie=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,T7=(t,e)=>e&&typeof t=="number"?e.transform(t):t,Il=(t,e,r)=>r>e?e:rtypeof t=="number",parse:parseFloat,transform:t=>t},$g={...qf,transform:t=>Il(0,1,t)},D1={...qf,default:1},jm=t=>({test:e=>typeof e=="string"&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),yc=jm("deg"),Vo=jm("%"),Yt=jm("px"),Hie=jm("vh"),Gie=jm("vw"),S6={...Vo,parse:t=>Vo.parse(t)/100,transform:t=>Vo.transform(t*100)},Yie={borderWidth:Yt,borderTopWidth:Yt,borderRightWidth:Yt,borderBottomWidth:Yt,borderLeftWidth:Yt,borderRadius:Yt,radius:Yt,borderTopLeftRadius:Yt,borderTopRightRadius:Yt,borderBottomRightRadius:Yt,borderBottomLeftRadius:Yt,width:Yt,maxWidth:Yt,height:Yt,maxHeight:Yt,top:Yt,right:Yt,bottom:Yt,left:Yt,padding:Yt,paddingTop:Yt,paddingRight:Yt,paddingBottom:Yt,paddingLeft:Yt,margin:Yt,marginTop:Yt,marginRight:Yt,marginBottom:Yt,marginLeft:Yt,backgroundPositionX:Yt,backgroundPositionY:Yt},Kie={rotate:yc,rotateX:yc,rotateY:yc,rotateZ:yc,scale:D1,scaleX:D1,scaleY:D1,scaleZ:D1,skew:yc,skewX:yc,skewY:yc,distance:Yt,translateX:Yt,translateY:Yt,translateZ:Yt,x:Yt,y:Yt,z:Yt,perspective:Yt,transformPerspective:Yt,opacity:$g,originX:S6,originY:S6,originZ:Yt},T6={...qf,transform:Math.round},F3={...Yie,...Kie,zIndex:T6,size:Yt,fillOpacity:$g,strokeOpacity:$g,numOctaves:T6},Jie={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},eae=Vf.length;function tae(t,e,r){let n="",i=!0;for(let a=0;a({style:{},transform:{},transformOrigin:{},vars:{}}),C7=()=>({...$3(),attrs:{}}),I3=t=>typeof t=="string"&&t.toLowerCase()==="svg";function E7(t,{style:e,vars:r},n,i){Object.assign(t.style,e,i&&i.getProjectionStyles(n));for(const a in r)t.style.setProperty(a,r[a])}const D7=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function A7(t,e,r,n){E7(t,e,void 0,n);for(const i in e.attrs)t.setAttribute(D7.has(i)?i:D3(i),e.attrs[i])}const Zv={};function sae(t){Object.assign(Zv,t)}function N7(t,{layout:e,layoutId:r}){return _h.has(t)||t.startsWith("origin")||(e||r!==void 0)&&(!!Zv[t]||t==="opacity")}function j3(t,e,r){var n;const{style:i}=t,a={};for(const s in i)(Fi(i[s])||e.style&&Fi(e.style[s])||N7(s,t)||((n=r==null?void 0:r.getValue(s))===null||n===void 0?void 0:n.liveStyle)!==void 0)&&(a[s]=i[s]);return a}function P7(t,e,r){const n=j3(t,e,r);for(const i in t)if(Fi(t[i])||Fi(e[i])){const a=Vf.indexOf(i)!==-1?"attr"+i.charAt(0).toUpperCase()+i.substring(1):i;n[a]=t[i]}return n}function oae(t,e){try{e.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{e.dimensions={x:0,y:0,width:0,height:0}}}const E6=["x","y","width","height","cx","cy","r"],lae={useVisualState:k7({scrapeMotionValuesFromProps:P7,createRenderState:C7,onUpdate:({props:t,prevProps:e,current:r,renderState:n,latestValues:i})=>{if(!r)return;let a=!!t.drag;if(!a){for(const o in i)if(_h.has(o)){a=!0;break}}if(!a)return;let s=!e;if(e)for(let o=0;o{oae(r,n),Gr.render(()=>{M3(n,i,I3(r.tagName),t.transformTemplate),A7(r,n)})})}})},cae={useVisualState:k7({scrapeMotionValuesFromProps:j3,createRenderState:$3})};function R7(t,e,r){for(const n in e)!Fi(e[n])&&!N7(n,r)&&(t[n]=e[n])}function uae({transformTemplate:t},e){return U.useMemo(()=>{const r=$3();return L3(r,e,t),Object.assign({},r.vars,r.style)},[e])}function hae(t,e){const r=t.style||{},n={};return R7(n,r,t),Object.assign(n,uae(t,e)),n}function dae(t,e){const r={},n=hae(t,e);return t.drag&&t.dragListener!==!1&&(r.draggable=!1,n.userSelect=n.WebkitUserSelect=n.WebkitTouchCallout="none",n.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(r.tabIndex=0),r.style=n,r}function fae(t,e,r,n){const i=U.useMemo(()=>{const a=C7();return M3(a,e,I3(n),t.transformTemplate),{...a.attrs,style:{...a.style}}},[e]);if(t.style){const a={};R7(a,t.style,t),i.style={...a,...i.style}}return i}function pae(t=!1){return(r,n,i,{latestValues:a},s)=>{const l=(N3(r)?fae:dae)(n,a,s,r),c=Die(n,typeof r=="string",t),u=r!==U.Fragment?{...c,...l,ref:i}:{},{children:h}=n,d=U.useMemo(()=>Fi(h)?h.get():h,[h]);return U.createElement(r,{...u,children:d})}}function gae(t,e){return function(n,{forwardMotionProps:i}={forwardMotionProps:!1}){const s={...N3(n)?lae:cae,preloadedFeatures:t,useRender:pae(i),createVisualElement:e,Component:n};return Iie(s)}}function F7(t,e){if(!Array.isArray(e))return!1;const r=e.length;if(r!==t.length)return!1;for(let n=0;nwindow.ScrollTimeline!==void 0);class xae{constructor(e){this.stop=()=>this.runAll("stop"),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>"finished"in e?e.finished:e))}getAll(e){return this.animations[0][e]}setAll(e,r){for(let n=0;n{if(mae()&&i.attachTimeline)return i.attachTimeline(e);if(typeof r=="function")return r(i)});return()=>{n.forEach((i,a)=>{i&&i(),this.animations[a].stop()})}}get time(){return this.getAll("time")}set time(e){this.setAll("time",e)}get speed(){return this.getAll("speed")}set speed(e){this.setAll("speed",e)}get startTime(){return this.getAll("startTime")}get duration(){let e=0;for(let r=0;rr[e]())}flatten(){this.runAll("flatten")}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}class yae extends xae{then(e,r){return Promise.all(this.animations).then(e).catch(r)}}function B3(t,e){return t?t[e]||t.default||t:void 0}const kC=2e4;function L7(t){let e=0;const r=50;let n=t.next(e);for(;!n.done&&e=kC?1/0:e}function U3(t){return typeof t=="function"}function D6(t,e){t.timeline=e,t.onfinish=null}const Q3=t=>Array.isArray(t)&&typeof t[0]=="number",vae={linearEasing:void 0};function bae(t,e){const r=T3(t);return()=>{var n;return(n=vae[e])!==null&&n!==void 0?n:r()}}const Hv=bae(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),M7=(t,e,r=10)=>{let n="";const i=Math.max(Math.round(e/r),2);for(let a=0;a`cubic-bezier(${t}, ${e}, ${r}, ${n})`,_C={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:L0([0,.65,.55,1]),circOut:L0([.55,0,1,.45]),backIn:L0([.31,.01,.66,-.59]),backOut:L0([.33,1.53,.69,.99])};function I7(t,e){if(t)return typeof t=="function"&&Hv()?M7(t,e):Q3(t)?L0(t):Array.isArray(t)?t.map(r=>I7(r,e)||_C.easeOut):_C[t]}const Vs={x:!1,y:!1};function j7(){return Vs.x||Vs.y}function wae(t,e,r){var n;if(t instanceof Element)return[t];if(typeof t=="string"){let i=document;const a=(n=void 0)!==null&&n!==void 0?n:i.querySelectorAll(t);return a?Array.from(a):[]}return Array.from(t)}function B7(t,e){const r=wae(t),n=new AbortController,i={passive:!0,...e,signal:n.signal};return[r,i,()=>n.abort()]}function A6(t){return e=>{e.pointerType==="touch"||j7()||t(e)}}function Oae(t,e,r={}){const[n,i,a]=B7(t,r),s=A6(o=>{const{target:l}=o,c=e(o);if(typeof c!="function"||!l)return;const u=A6(h=>{c(h),l.removeEventListener("pointerleave",u)});l.addEventListener("pointerleave",u,i)});return n.forEach(o=>{o.addEventListener("pointerenter",s,i)}),a}const U7=(t,e)=>e?t===e?!0:U7(t,e.parentElement):!1,W3=t=>t.pointerType==="mouse"?typeof t.button!="number"||t.button<=0:t.isPrimary!==!1,kae=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function _ae(t){return kae.has(t.tagName)||t.tabIndex!==-1}const M0=new WeakSet;function N6(t){return e=>{e.key==="Enter"&&t(e)}}function d_(t,e){t.dispatchEvent(new PointerEvent("pointer"+e,{isPrimary:!0,bubbles:!0}))}const Sae=(t,e)=>{const r=t.currentTarget;if(!r)return;const n=N6(()=>{if(M0.has(r))return;d_(r,"down");const i=N6(()=>{d_(r,"up")}),a=()=>d_(r,"cancel");r.addEventListener("keyup",i,e),r.addEventListener("blur",a,e)});r.addEventListener("keydown",n,e),r.addEventListener("blur",()=>r.removeEventListener("keydown",n),e)};function P6(t){return W3(t)&&!j7()}function Tae(t,e,r={}){const[n,i,a]=B7(t,r),s=o=>{const l=o.currentTarget;if(!P6(o)||M0.has(l))return;M0.add(l);const c=e(o),u=(f,g)=>{window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",d),!(!P6(f)||!M0.has(l))&&(M0.delete(l),typeof c=="function"&&c(f,{success:g}))},h=f=>{u(f,r.useGlobalTarget||U7(l,f.target))},d=f=>{u(f,!1)};window.addEventListener("pointerup",h,i),window.addEventListener("pointercancel",d,i)};return n.forEach(o=>{!_ae(o)&&o.getAttribute("tabindex")===null&&(o.tabIndex=0),(r.useGlobalTarget?window:o).addEventListener("pointerdown",s,i),o.addEventListener("focus",c=>Sae(c,i),i)}),a}function Cae(t){return t==="x"||t==="y"?Vs[t]?null:(Vs[t]=!0,()=>{Vs[t]=!1}):Vs.x||Vs.y?null:(Vs.x=Vs.y=!0,()=>{Vs.x=Vs.y=!1})}const Q7=new Set(["width","height","top","left","right","bottom",...Vf]);let Vy;function Eae(){Vy=void 0}const qo={now:()=>(Vy===void 0&&qo.set(di.isProcessing||kie.useManualTiming?di.timestamp:performance.now()),Vy),set:t=>{Vy=t,queueMicrotask(Eae)}};function z3(t,e){t.indexOf(e)===-1&&t.push(e)}function V3(t,e){const r=t.indexOf(e);r>-1&&t.splice(r,1)}class q3{constructor(){this.subscriptions=[]}add(e){return z3(this.subscriptions,e),()=>V3(this.subscriptions,e)}notify(e,r,n){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](e,r,n);else for(let a=0;a!isNaN(parseFloat(t)),ag={current:void 0};class Aae{constructor(e,r={}){this.version="11.18.2",this.canTrackVelocity=null,this.events={},this.updateAndNotify=(n,i=!0)=>{const a=qo.now();this.updatedAt!==a&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(n),this.current!==this.prev&&this.events.change&&this.events.change.notify(this.current),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.hasAnimated=!1,this.setCurrent(e),this.owner=r.owner}setCurrent(e){this.current=e,this.updatedAt=qo.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Dae(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on("change",e)}on(e,r){this.events[e]||(this.events[e]=new q3);const n=this.events[e].add(r);return e==="change"?()=>{n(),Gr.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(const e in this.events)this.events[e].clear()}attach(e,r){this.passiveEffect=e,this.stopPassiveEffect=r}set(e,r=!0){!r||!this.passiveEffect?this.updateAndNotify(e,r):this.passiveEffect(e,this.updateAndNotify)}setWithVelocity(e,r,n){this.set(r),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,r=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,r&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return ag.current&&ag.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const e=qo.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>R6)return 0;const r=Math.min(this.updatedAt-this.prevUpdatedAt,R6);return W7(parseFloat(this.current)-parseFloat(this.prevFrameValue),r)}start(e){return this.stop(),new Promise(r=>{this.hasAnimated=!0,this.animation=e(r),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function mf(t,e){return new Aae(t,e)}function Nae(t,e,r){t.hasValue(e)?t.getValue(e).set(r):t.addValue(e,mf(r))}function Pae(t,e){const r=q2(t,e);let{transitionEnd:n={},transition:i={},...a}=r||{};a={...a,...n};for(const s in a){const o=zie(a[s]);Nae(t,s,o)}}function Rae(t){return!!(Fi(t)&&t.add)}function SC(t,e){const r=t.getValue("willChange");if(Rae(r))return r.add(e)}function z7(t){return t.props[b7]}const V7=(t,e,r)=>(((1-3*r+3*e)*t+(3*r-6*e))*t+3*e)*t,Fae=1e-7,Lae=12;function Mae(t,e,r,n,i){let a,s,o=0;do s=e+(r-e)/2,a=V7(s,n,i)-t,a>0?r=s:e=s;while(Math.abs(a)>Fae&&++oMae(a,0,1,t,r);return a=>a===0||a===1?a:V7(i(a),e,n)}const q7=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,X7=t=>e=>1-t(1-e),Z7=Bm(.33,1.53,.69,.99),X3=X7(Z7),H7=q7(X3),G7=t=>(t*=2)<1?.5*X3(t):.5*(2-Math.pow(2,-10*(t-1))),Z3=t=>1-Math.sin(Math.acos(t)),Y7=X7(Z3),K7=q7(Z3),J7=t=>/^0[^.\s]+$/u.test(t);function $ae(t){return typeof t=="number"?t===0:t!==null?t==="none"||t==="0"||J7(t):!0}const sg=t=>Math.round(t*1e5)/1e5,H3=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function Iae(t){return t==null}const jae=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,G3=(t,e)=>r=>!!(typeof r=="string"&&jae.test(r)&&r.startsWith(t)||e&&!Iae(r)&&Object.prototype.hasOwnProperty.call(r,e)),eU=(t,e,r)=>n=>{if(typeof n!="string")return n;const[i,a,s,o]=n.match(H3);return{[t]:parseFloat(i),[e]:parseFloat(a),[r]:parseFloat(s),alpha:o!==void 0?parseFloat(o):1}},Bae=t=>Il(0,255,t),f_={...qf,transform:t=>Math.round(Bae(t))},Iu={test:G3("rgb","red"),parse:eU("red","green","blue"),transform:({red:t,green:e,blue:r,alpha:n=1})=>"rgba("+f_.transform(t)+", "+f_.transform(e)+", "+f_.transform(r)+", "+sg($g.transform(n))+")"};function Uae(t){let e="",r="",n="",i="";return t.length>5?(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7),i=t.substring(7,9)):(e=t.substring(1,2),r=t.substring(2,3),n=t.substring(3,4),i=t.substring(4,5),e+=e,r+=r,n+=n,i+=i),{red:parseInt(e,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:i?parseInt(i,16)/255:1}}const TC={test:G3("#"),parse:Uae,transform:Iu.transform},Dd={test:G3("hsl","hue"),parse:eU("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:r,alpha:n=1})=>"hsla("+Math.round(t)+", "+Vo.transform(sg(e))+", "+Vo.transform(sg(r))+", "+sg($g.transform(n))+")"},Ei={test:t=>Iu.test(t)||TC.test(t)||Dd.test(t),parse:t=>Iu.test(t)?Iu.parse(t):Dd.test(t)?Dd.parse(t):TC.parse(t),transform:t=>typeof t=="string"?t:t.hasOwnProperty("red")?Iu.transform(t):Dd.transform(t)},Qae=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function Wae(t){var e,r;return isNaN(t)&&typeof t=="string"&&(((e=t.match(H3))===null||e===void 0?void 0:e.length)||0)+(((r=t.match(Qae))===null||r===void 0?void 0:r.length)||0)>0}const tU="number",rU="color",zae="var",Vae="var(",F6="${}",qae=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Ig(t){const e=t.toString(),r=[],n={color:[],number:[],var:[]},i=[];let a=0;const o=e.replace(qae,l=>(Ei.test(l)?(n.color.push(a),i.push(rU),r.push(Ei.parse(l))):l.startsWith(Vae)?(n.var.push(a),i.push(zae),r.push(l)):(n.number.push(a),i.push(tU),r.push(parseFloat(l))),++a,F6)).split(F6);return{values:r,split:o,indexes:n,types:i}}function nU(t){return Ig(t).values}function iU(t){const{split:e,types:r}=Ig(t),n=e.length;return i=>{let a="";for(let s=0;stypeof t=="number"?0:t;function Zae(t){const e=nU(t);return iU(t)(e.map(Xae))}const $c={test:Wae,parse:nU,createTransformer:iU,getAnimatableNone:Zae},Hae=new Set(["brightness","contrast","saturate","opacity"]);function Gae(t){const[e,r]=t.slice(0,-1).split("(");if(e==="drop-shadow")return t;const[n]=r.match(H3)||[];if(!n)return t;const i=r.replace(n,"");let a=Hae.has(e)?1:0;return n!==r&&(a*=100),e+"("+a+i+")"}const Yae=/\b([a-z-]*)\(.*?\)/gu,CC={...$c,getAnimatableNone:t=>{const e=t.match(Yae);return e?e.map(Gae).join(" "):t}},Kae={...F3,color:Ei,backgroundColor:Ei,outlineColor:Ei,fill:Ei,stroke:Ei,borderColor:Ei,borderTopColor:Ei,borderRightColor:Ei,borderBottomColor:Ei,borderLeftColor:Ei,filter:CC,WebkitFilter:CC},Y3=t=>Kae[t];function aU(t,e){let r=Y3(t);return r!==CC&&(r=$c),r.getAnimatableNone?r.getAnimatableNone(e):void 0}const Jae=new Set(["auto","none","0"]);function ese(t,e,r){let n=0,i;for(;nt===qf||t===Yt,M6=(t,e)=>parseFloat(t.split(", ")[e]),$6=(t,e)=>(r,{transform:n})=>{if(n==="none"||!n)return 0;const i=n.match(/^matrix3d\((.+)\)$/u);if(i)return M6(i[1],e);{const a=n.match(/^matrix\((.+)\)$/u);return a?M6(a[1],t):0}},tse=new Set(["x","y","z"]),rse=Vf.filter(t=>!tse.has(t));function nse(t){const e=[];return rse.forEach(r=>{const n=t.getValue(r);n!==void 0&&(e.push([r,n.get()]),n.set(r.startsWith("scale")?1:0))}),e}const xf={width:({x:t},{paddingLeft:e="0",paddingRight:r="0"})=>t.max-t.min-parseFloat(e)-parseFloat(r),height:({y:t},{paddingTop:e="0",paddingBottom:r="0"})=>t.max-t.min-parseFloat(e)-parseFloat(r),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:$6(4,13),y:$6(5,14)};xf.translateX=xf.x;xf.translateY=xf.y;const Yu=new Set;let EC=!1,DC=!1;function sU(){if(DC){const t=Array.from(Yu).filter(n=>n.needsMeasurement),e=new Set(t.map(n=>n.element)),r=new Map;e.forEach(n=>{const i=nse(n);i.length&&(r.set(n,i),n.render())}),t.forEach(n=>n.measureInitialState()),e.forEach(n=>{n.render();const i=r.get(n);i&&i.forEach(([a,s])=>{var o;(o=n.getValue(a))===null||o===void 0||o.set(s)})}),t.forEach(n=>n.measureEndState()),t.forEach(n=>{n.suspendedScrollY!==void 0&&window.scrollTo(0,n.suspendedScrollY)})}DC=!1,EC=!1,Yu.forEach(t=>t.complete()),Yu.clear()}function oU(){Yu.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(DC=!0)})}function ise(){oU(),sU()}class K3{constructor(e,r,n,i,a,s=!1){this.isComplete=!1,this.isAsync=!1,this.needsMeasurement=!1,this.isScheduled=!1,this.unresolvedKeyframes=[...e],this.onComplete=r,this.name=n,this.motionValue=i,this.element=a,this.isAsync=s}scheduleResolve(){this.isScheduled=!0,this.isAsync?(Yu.add(this),EC||(EC=!0,Gr.read(oU),Gr.resolveKeyframes(sU))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:e,name:r,element:n,motionValue:i}=this;for(let a=0;a/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t),ase=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function sse(t){const e=ase.exec(t);if(!e)return[,];const[,r,n,i]=e;return[`--${r??n}`,i]}function cU(t,e,r=1){const[n,i]=sse(t);if(!n)return;const a=window.getComputedStyle(e).getPropertyValue(n);if(a){const s=a.trim();return lU(s)?parseFloat(s):s}return R3(i)?cU(i,e,r+1):i}const uU=t=>e=>e.test(t),ose={test:t=>t==="auto",parse:t=>t},hU=[qf,Yt,Vo,yc,Gie,Hie,ose],I6=t=>hU.find(uU(t));class dU extends K3{constructor(e,r,n,i,a){super(e,r,n,i,a,!0)}readKeyframes(){const{unresolvedKeyframes:e,element:r,name:n}=this;if(!r||!r.current)return;super.readKeyframes();for(let l=0;l{r.getValue(l).set(c)}),this.resolveNoneKeyframes()}}const j6=(t,e)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&($c.test(t)||t==="0")&&!t.startsWith("url("));function lse(t){const e=t[0];if(t.length===1)return!0;for(let r=0;rt!==null;function X2(t,{repeat:e,repeatType:r="loop"},n){const i=t.filter(use),a=e&&r!=="loop"&&e%2===1?0:i.length-1;return!a||n===void 0?i[a]:n}const hse=40;class fU{constructor({autoplay:e=!0,delay:r=0,type:n="keyframes",repeat:i=0,repeatDelay:a=0,repeatType:s="loop",...o}){this.isStopped=!1,this.hasAttemptedResolve=!1,this.createdAt=qo.now(),this.options={autoplay:e,delay:r,type:n,repeat:i,repeatDelay:a,repeatType:s,...o},this.updateFinishedPromise()}calcStartTime(){return this.resolvedAt?this.resolvedAt-this.createdAt>hse?this.resolvedAt:this.createdAt:this.createdAt}get resolved(){return!this._resolved&&!this.hasAttemptedResolve&&ise(),this._resolved}onKeyframesResolved(e,r){this.resolvedAt=qo.now(),this.hasAttemptedResolve=!0;const{name:n,type:i,velocity:a,delay:s,onComplete:o,onUpdate:l,isGenerator:c}=this.options;if(!c&&!cse(e,n,i,a))if(s)this.options.duration=0;else{l&&l(X2(e,this.options,r)),o&&o(),this.resolveFinishedPromise();return}const u=this.initPlayback(e,r);u!==!1&&(this._resolved={keyframes:e,finalKeyframe:r,...u},this.onPostResolved())}onPostResolved(){}then(e,r){return this.currentFinishedPromise.then(e,r)}flatten(){this.options.type="keyframes",this.options.ease="linear"}updateFinishedPromise(){this.currentFinishedPromise=new Promise(e=>{this.resolveFinishedPromise=e})}}const hn=(t,e,r)=>t+(e-t)*r;function p_(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+(e-t)*6*r:r<1/2?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function dse({hue:t,saturation:e,lightness:r,alpha:n}){t/=360,e/=100,r/=100;let i=0,a=0,s=0;if(!e)i=a=s=r;else{const o=r<.5?r*(1+e):r+e-r*e,l=2*r-o;i=p_(l,o,t+1/3),a=p_(l,o,t),s=p_(l,o,t-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(s*255),alpha:n}}function Gv(t,e){return r=>r>0?e:t}const g_=(t,e,r)=>{const n=t*t,i=r*(e*e-n)+n;return i<0?0:Math.sqrt(i)},fse=[TC,Iu,Dd],pse=t=>fse.find(e=>e.test(t));function B6(t){const e=pse(t);if(!e)return!1;let r=e.parse(t);return e===Dd&&(r=dse(r)),r}const U6=(t,e)=>{const r=B6(t),n=B6(e);if(!r||!n)return Gv(t,e);const i={...r};return a=>(i.red=g_(r.red,n.red,a),i.green=g_(r.green,n.green,a),i.blue=g_(r.blue,n.blue,a),i.alpha=hn(r.alpha,n.alpha,a),Iu.transform(i))},gse=(t,e)=>r=>e(t(r)),Um=(...t)=>t.reduce(gse),AC=new Set(["none","hidden"]);function mse(t,e){return AC.has(t)?r=>r<=0?t:e:r=>r>=1?e:t}function xse(t,e){return r=>hn(t,e,r)}function J3(t){return typeof t=="number"?xse:typeof t=="string"?R3(t)?Gv:Ei.test(t)?U6:bse:Array.isArray(t)?pU:typeof t=="object"?Ei.test(t)?U6:yse:Gv}function pU(t,e){const r=[...t],n=r.length,i=t.map((a,s)=>J3(a)(a,e[s]));return a=>{for(let s=0;s{for(const a in n)r[a]=n[a](i);return r}}function vse(t,e){var r;const n=[],i={color:0,var:0,number:0};for(let a=0;a{const r=$c.createTransformer(e),n=Ig(t),i=Ig(e);return n.indexes.var.length===i.indexes.var.length&&n.indexes.color.length===i.indexes.color.length&&n.indexes.number.length>=i.indexes.number.length?AC.has(t)&&!i.values.length||AC.has(e)&&!n.values.length?mse(t,e):Um(pU(vse(n,i),i.values),r):Gv(t,e)};function gU(t,e,r){return typeof t=="number"&&typeof e=="number"&&typeof r=="number"?hn(t,e,r):J3(t)(t,e)}const wse=5;function mU(t,e,r){const n=Math.max(e-wse,0);return W7(r-t(n),e-n)}const pn={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},m_=.001;function Ose({duration:t=pn.duration,bounce:e=pn.bounce,velocity:r=pn.velocity,mass:n=pn.mass}){let i,a,s=1-e;s=Il(pn.minDamping,pn.maxDamping,s),t=Il(pn.minDuration,pn.maxDuration,El(t)),s<1?(i=c=>{const u=c*s,h=u*t,d=u-r,f=NC(c,s),g=Math.exp(-h);return m_-d/f*g},a=c=>{const h=c*s*t,d=h*r+r,f=Math.pow(s,2)*Math.pow(c,2)*t,g=Math.exp(-h),m=NC(Math.pow(c,2),s);return(-i(c)+m_>0?-1:1)*((d-f)*g)/m}):(i=c=>{const u=Math.exp(-c*t),h=(c-r)*t+1;return-m_+u*h},a=c=>{const u=Math.exp(-c*t),h=(r-c)*(t*t);return u*h});const o=5/t,l=_se(i,a,o);if(t=Cl(t),isNaN(l))return{stiffness:pn.stiffness,damping:pn.damping,duration:t};{const c=Math.pow(l,2)*n;return{stiffness:c,damping:s*2*Math.sqrt(n*c),duration:t}}}const kse=12;function _se(t,e,r){let n=r;for(let i=1;it[r]!==void 0)}function Cse(t){let e={velocity:pn.velocity,stiffness:pn.stiffness,damping:pn.damping,mass:pn.mass,isResolvedFromDuration:!1,...t};if(!Q6(t,Tse)&&Q6(t,Sse))if(t.visualDuration){const r=t.visualDuration,n=2*Math.PI/(r*1.2),i=n*n,a=2*Il(.05,1,1-(t.bounce||0))*Math.sqrt(i);e={...e,mass:pn.mass,stiffness:i,damping:a}}else{const r=Ose(t);e={...e,...r,mass:pn.mass},e.isResolvedFromDuration=!0}return e}function xU(t=pn.visualDuration,e=pn.bounce){const r=typeof t!="object"?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:n,restDelta:i}=r;const a=r.keyframes[0],s=r.keyframes[r.keyframes.length-1],o={done:!1,value:a},{stiffness:l,damping:c,mass:u,duration:h,velocity:d,isResolvedFromDuration:f}=Cse({...r,velocity:-El(r.velocity||0)}),g=d||0,m=c/(2*Math.sqrt(l*u)),v=s-a,b=El(Math.sqrt(l/u)),w=Math.abs(v)<5;n||(n=w?pn.restSpeed.granular:pn.restSpeed.default),i||(i=w?pn.restDelta.granular:pn.restDelta.default);let O;if(m<1){const T=NC(b,m);O=_=>{const C=Math.exp(-m*b*_);return s-C*((g+m*b*v)/T*Math.sin(T*_)+v*Math.cos(T*_))}}else if(m===1)O=T=>s-Math.exp(-b*T)*(v+(g+b*v)*T);else{const T=b*Math.sqrt(m*m-1);O=_=>{const C=Math.exp(-m*b*_),D=Math.min(T*_,300);return s-C*((g+m*b*v)*Math.sinh(D)+T*v*Math.cosh(D))/T}}const S={calculatedDuration:f&&h||null,next:T=>{const _=O(T);if(f)o.done=T>=h;else{let C=0;m<1&&(C=T===0?Cl(g):mU(O,T,_));const D=Math.abs(C)<=n,A=Math.abs(s-_)<=i;o.done=D&&A}return o.value=o.done?s:_,o},toString:()=>{const T=Math.min(L7(S),kC),_=M7(C=>S.next(T*C).value,T,30);return T+"ms "+_}};return S}function W6({keyframes:t,velocity:e=0,power:r=.8,timeConstant:n=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:s,min:o,max:l,restDelta:c=.5,restSpeed:u}){const h=t[0],d={done:!1,value:h},f=D=>o!==void 0&&Dl,g=D=>o===void 0?l:l===void 0||Math.abs(o-D)-m*Math.exp(-D/n),O=D=>b+w(D),S=D=>{const A=w(D),I=O(D);d.done=Math.abs(A)<=c,d.value=d.done?b:I};let T,_;const C=D=>{f(d.value)&&(T=D,_=xU({keyframes:[d.value,g(d.value)],velocity:mU(O,D,d.value),damping:i,stiffness:a,restDelta:c,restSpeed:u}))};return C(0),{calculatedDuration:null,next:D=>{let A=!1;return!_&&T===void 0&&(A=!0,S(D),C(D)),T!==void 0&&D>=T?_.next(D-T):(!A&&S(D),d)}}}const Ese=Bm(.42,0,1,1),Dse=Bm(0,0,.58,1),yU=Bm(.42,0,.58,1),Ase=t=>Array.isArray(t)&&typeof t[0]!="number",Nse={linear:Za,easeIn:Ese,easeInOut:yU,easeOut:Dse,circIn:Z3,circInOut:K7,circOut:Y7,backIn:X3,backInOut:H7,backOut:Z7,anticipate:G7},z6=t=>{if(Q3(t)){g7(t.length===4);const[e,r,n,i]=t;return Bm(e,r,n,i)}else if(typeof t=="string")return Nse[t];return t};function Pse(t,e,r){const n=[],i=r||gU,a=t.length-1;for(let s=0;se[0];if(a===2&&e[0]===e[1])return()=>e[1];const s=t[0]===t[1];t[0]>t[a-1]&&(t=[...t].reverse(),e=[...e].reverse());const o=Pse(e,n,i),l=o.length,c=u=>{if(s&&u1)for(;hc(Il(t[0],t[a-1],u)):c}function Rse(t,e){const r=t[t.length-1];for(let n=1;n<=e;n++){const i=pf(0,e,n);t.push(hn(r,1,i))}}function Fse(t){const e=[0];return Rse(e,t.length-1),e}function Lse(t,e){return t.map(r=>r*e)}function Mse(t,e){return t.map(()=>e||yU).splice(0,t.length-1)}function Yv({duration:t=300,keyframes:e,times:r,ease:n="easeInOut"}){const i=Ase(n)?n.map(z6):z6(n),a={done:!1,value:e[0]},s=Lse(r&&r.length===e.length?r:Fse(e),t),o=vU(s,e,{ease:Array.isArray(i)?i:Mse(e,i)});return{calculatedDuration:t,next:l=>(a.value=o(l),a.done=l>=t,a)}}const $se=t=>{const e=({timestamp:r})=>t(r);return{start:()=>Gr.update(e,!0),stop:()=>$l(e),now:()=>di.isProcessing?di.timestamp:qo.now()}},Ise={decay:W6,inertia:W6,tween:Yv,keyframes:Yv,spring:xU},jse=t=>t/100;class eA extends fU{constructor(e){super(e),this.holdTime=null,this.cancelTime=null,this.currentTime=0,this.playbackSpeed=1,this.pendingPlayState="running",this.startTime=null,this.state="idle",this.stop=()=>{if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.teardown();const{onStop:l}=this.options;l&&l()};const{name:r,motionValue:n,element:i,keyframes:a}=this.options,s=(i==null?void 0:i.KeyframeResolver)||K3,o=(l,c)=>this.onKeyframesResolved(l,c);this.resolver=new s(a,o,r,n,i),this.resolver.scheduleResolve()}flatten(){super.flatten(),this._resolved&&Object.assign(this._resolved,this.initPlayback(this._resolved.keyframes))}initPlayback(e){const{type:r="keyframes",repeat:n=0,repeatDelay:i=0,repeatType:a,velocity:s=0}=this.options,o=U3(r)?r:Ise[r]||Yv;let l,c;o!==Yv&&typeof e[0]!="number"&&(l=Um(jse,gU(e[0],e[1])),e=[0,100]);const u=o({...this.options,keyframes:e});a==="mirror"&&(c=o({...this.options,keyframes:[...e].reverse(),velocity:-s})),u.calculatedDuration===null&&(u.calculatedDuration=L7(u));const{calculatedDuration:h}=u,d=h+i,f=d*(n+1)-i;return{generator:u,mirroredGenerator:c,mapPercentToKeyframes:l,calculatedDuration:h,resolvedDuration:d,totalDuration:f}}onPostResolved(){const{autoplay:e=!0}=this.options;this.play(),this.pendingPlayState==="paused"||!e?this.pause():this.state=this.pendingPlayState}tick(e,r=!1){const{resolved:n}=this;if(!n){const{keyframes:D}=this.options;return{done:!0,value:D[D.length-1]}}const{finalKeyframe:i,generator:a,mirroredGenerator:s,mapPercentToKeyframes:o,keyframes:l,calculatedDuration:c,totalDuration:u,resolvedDuration:h}=n;if(this.startTime===null)return a.next(0);const{delay:d,repeat:f,repeatType:g,repeatDelay:m,onUpdate:v}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-u/this.speed,this.startTime)),r?this.currentTime=e:this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=Math.round(e-this.startTime)*this.speed;const b=this.currentTime-d*(this.speed>=0?1:-1),w=this.speed>=0?b<0:b>u;this.currentTime=Math.max(b,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=u);let O=this.currentTime,S=a;if(f){const D=Math.min(this.currentTime,u)/h;let A=Math.floor(D),I=D%1;!I&&D>=1&&(I=1),I===1&&A--,A=Math.min(A,f+1),!!(A%2)&&(g==="reverse"?(I=1-I,m&&(I-=m/h)):g==="mirror"&&(S=s)),O=Il(0,1,I)*h}const T=w?{done:!1,value:l[0]}:S.next(O);o&&(T.value=o(T.value));let{done:_}=T;!w&&c!==null&&(_=this.speed>=0?this.currentTime>=u:this.currentTime<=0);const C=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&_);return C&&i!==void 0&&(T.value=X2(l,this.options,i)),v&&v(T.value),C&&this.finish(),T}get duration(){const{resolved:e}=this;return e?El(e.calculatedDuration):0}get time(){return El(this.currentTime)}set time(e){e=Cl(e),this.currentTime=e,this.holdTime!==null||this.speed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.speed)}get speed(){return this.playbackSpeed}set speed(e){const r=this.playbackSpeed!==e;this.playbackSpeed=e,r&&(this.time=El(this.currentTime))}play(){if(this.resolver.isScheduled||this.resolver.resume(),!this._resolved){this.pendingPlayState="running";return}if(this.isStopped)return;const{driver:e=$se,onPlay:r,startTime:n}=this.options;this.driver||(this.driver=e(a=>this.tick(a))),r&&r();const i=this.driver.now();this.holdTime!==null?this.startTime=i-this.holdTime:this.startTime?this.state==="finished"&&(this.startTime=i):this.startTime=n??this.calcStartTime(),this.state==="finished"&&this.updateFinishedPromise(),this.cancelTime=this.startTime,this.holdTime=null,this.state="running",this.driver.start()}pause(){var e;if(!this._resolved){this.pendingPlayState="paused";return}this.state="paused",this.holdTime=(e=this.currentTime)!==null&&e!==void 0?e:0}complete(){this.state!=="running"&&this.play(),this.pendingPlayState=this.state="finished",this.holdTime=null}finish(){this.teardown(),this.state="finished";const{onComplete:e}=this.options;e&&e()}cancel(){this.cancelTime!==null&&this.tick(this.cancelTime),this.teardown(),this.updateFinishedPromise()}teardown(){this.state="idle",this.stopDriver(),this.resolveFinishedPromise(),this.updateFinishedPromise(),this.startTime=this.cancelTime=null,this.resolver.cancel()}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}}const Bse=new Set(["opacity","clipPath","filter","transform"]);function Use(t,e,r,{delay:n=0,duration:i=300,repeat:a=0,repeatType:s="loop",ease:o="easeInOut",times:l}={}){const c={[e]:r};l&&(c.offset=l);const u=I7(o,i);return Array.isArray(u)&&(c.easing=u),t.animate(c,{delay:n,duration:i,easing:Array.isArray(u)?"linear":u,fill:"both",iterations:a+1,direction:s==="reverse"?"alternate":"normal"})}const Qse=T3(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),Kv=10,Wse=2e4;function zse(t){return U3(t.type)||t.type==="spring"||!$7(t.ease)}function Vse(t,e){const r=new eA({...e,keyframes:t,repeat:0,delay:0,isGenerator:!0});let n={done:!1,value:t[0]};const i=[];let a=0;for(;!n.done&&athis.onKeyframesResolved(s,o),r,n,i),this.resolver.scheduleResolve()}initPlayback(e,r){let{duration:n=300,times:i,ease:a,type:s,motionValue:o,name:l,startTime:c}=this.options;if(!o.owner||!o.owner.current)return!1;if(typeof a=="string"&&Hv()&&qse(a)&&(a=bU[a]),zse(this.options)){const{onComplete:h,onUpdate:d,motionValue:f,element:g,...m}=this.options,v=Vse(e,m);e=v.keyframes,e.length===1&&(e[1]=e[0]),n=v.duration,i=v.times,a=v.ease,s="keyframes"}const u=Use(o.owner.current,l,e,{...this.options,duration:n,times:i,ease:a});return u.startTime=c??this.calcStartTime(),this.pendingTimeline?(D6(u,this.pendingTimeline),this.pendingTimeline=void 0):u.onfinish=()=>{const{onComplete:h}=this.options;o.set(X2(e,this.options,r)),h&&h(),this.cancel(),this.resolveFinishedPromise()},{animation:u,duration:n,times:i,type:s,ease:a,keyframes:e}}get duration(){const{resolved:e}=this;if(!e)return 0;const{duration:r}=e;return El(r)}get time(){const{resolved:e}=this;if(!e)return 0;const{animation:r}=e;return El(r.currentTime||0)}set time(e){const{resolved:r}=this;if(!r)return;const{animation:n}=r;n.currentTime=Cl(e)}get speed(){const{resolved:e}=this;if(!e)return 1;const{animation:r}=e;return r.playbackRate}set speed(e){const{resolved:r}=this;if(!r)return;const{animation:n}=r;n.playbackRate=e}get state(){const{resolved:e}=this;if(!e)return"idle";const{animation:r}=e;return r.playState}get startTime(){const{resolved:e}=this;if(!e)return null;const{animation:r}=e;return r.startTime}attachTimeline(e){if(!this._resolved)this.pendingTimeline=e;else{const{resolved:r}=this;if(!r)return Za;const{animation:n}=r;D6(n,e)}return Za}play(){if(this.isStopped)return;const{resolved:e}=this;if(!e)return;const{animation:r}=e;r.playState==="finished"&&this.updateFinishedPromise(),r.play()}pause(){const{resolved:e}=this;if(!e)return;const{animation:r}=e;r.pause()}stop(){if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.resolveFinishedPromise(),this.updateFinishedPromise();const{resolved:e}=this;if(!e)return;const{animation:r,keyframes:n,duration:i,type:a,ease:s,times:o}=e;if(r.playState==="idle"||r.playState==="finished")return;if(this.time){const{motionValue:c,onUpdate:u,onComplete:h,element:d,...f}=this.options,g=new eA({...f,keyframes:n,duration:i,type:a,ease:s,times:o,isGenerator:!0}),m=Cl(this.time);c.setWithVelocity(g.sample(m-Kv).value,g.sample(m).value,Kv)}const{onStop:l}=this.options;l&&l(),this.cancel()}complete(){const{resolved:e}=this;e&&e.animation.finish()}cancel(){const{resolved:e}=this;e&&e.animation.cancel()}static supports(e){const{motionValue:r,name:n,repeatDelay:i,repeatType:a,damping:s,type:o}=e;if(!r||!r.owner||!(r.owner.current instanceof HTMLElement))return!1;const{onUpdate:l,transformTemplate:c}=r.owner.getProps();return Qse()&&n&&Bse.has(n)&&!l&&!c&&!i&&a!=="mirror"&&s!==0&&o!=="inertia"}}const Xse={type:"spring",stiffness:500,damping:25,restSpeed:10},Zse=t=>({type:"spring",stiffness:550,damping:t===0?2*Math.sqrt(550):30,restSpeed:10}),Hse={type:"keyframes",duration:.8},Gse={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},Yse=(t,{keyframes:e})=>e.length>2?Hse:_h.has(t)?t.startsWith("scale")?Zse(e[1]):Xse:Gse;function Kse({when:t,delay:e,delayChildren:r,staggerChildren:n,staggerDirection:i,repeat:a,repeatType:s,repeatDelay:o,from:l,elapsed:c,...u}){return!!Object.keys(u).length}const tA=(t,e,r,n={},i,a)=>s=>{const o=B3(n,t)||{},l=o.delay||n.delay||0;let{elapsed:c=0}=n;c=c-Cl(l);let u={keyframes:Array.isArray(r)?r:[null,r],ease:"easeOut",velocity:e.getVelocity(),...o,delay:-c,onUpdate:d=>{e.set(d),o.onUpdate&&o.onUpdate(d)},onComplete:()=>{s(),o.onComplete&&o.onComplete()},name:t,motionValue:e,element:a?void 0:i};Kse(o)||(u={...u,...Yse(t,u)}),u.duration&&(u.duration=Cl(u.duration)),u.repeatDelay&&(u.repeatDelay=Cl(u.repeatDelay)),u.from!==void 0&&(u.keyframes[0]=u.from);let h=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(u.duration=0,u.delay===0&&(h=!0)),h&&!a&&e.get()!==void 0){const d=X2(u.keyframes,o);if(d!==void 0)return Gr.update(()=>{u.onUpdate(d),u.onComplete()}),new yae([])}return!a&&V6.supports(u)?new V6(u):new eA(u)};function Jse({protectedKeys:t,needsAnimating:e},r){const n=t.hasOwnProperty(r)&&e[r]!==!0;return e[r]=!1,n}function wU(t,e,{delay:r=0,transitionOverride:n,type:i}={}){var a;let{transition:s=t.getDefaultTransition(),transitionEnd:o,...l}=e;n&&(s=n);const c=[],u=i&&t.animationState&&t.animationState.getState()[i];for(const h in l){const d=t.getValue(h,(a=t.latestValues[h])!==null&&a!==void 0?a:null),f=l[h];if(f===void 0||u&&Jse(u,h))continue;const g={delay:r,...B3(s||{},h)};let m=!1;if(window.MotionHandoffAnimation){const b=z7(t);if(b){const w=window.MotionHandoffAnimation(b,h,Gr);w!==null&&(g.startTime=w,m=!0)}}SC(t,h),d.start(tA(h,d,f,t.shouldReduceMotion&&Q7.has(h)?{type:!1}:g,t,m));const v=d.animation;v&&c.push(v)}return o&&Promise.all(c).then(()=>{Gr.update(()=>{o&&Pae(t,o)})}),c}function PC(t,e,r={}){var n;const i=q2(t,e,r.type==="exit"?(n=t.presenceContext)===null||n===void 0?void 0:n.custom:void 0);let{transition:a=t.getDefaultTransition()||{}}=i||{};r.transitionOverride&&(a=r.transitionOverride);const s=i?()=>Promise.all(wU(t,i,r)):()=>Promise.resolve(),o=t.variantChildren&&t.variantChildren.size?(c=0)=>{const{delayChildren:u=0,staggerChildren:h,staggerDirection:d}=a;return eoe(t,e,u+c,h,d,r)}:()=>Promise.resolve(),{when:l}=a;if(l){const[c,u]=l==="beforeChildren"?[s,o]:[o,s];return c().then(()=>u())}else return Promise.all([s(),o(r.delay)])}function eoe(t,e,r=0,n=0,i=1,a){const s=[],o=(t.variantChildren.size-1)*n,l=i===1?(c=0)=>c*n:(c=0)=>o-c*n;return Array.from(t.variantChildren).sort(toe).forEach((c,u)=>{c.notify("AnimationStart",e),s.push(PC(c,e,{...a,delay:r+l(u)}).then(()=>c.notify("AnimationComplete",e)))}),Promise.all(s)}function toe(t,e){return t.sortNodePosition(e)}function roe(t,e,r={}){t.notify("AnimationStart",e);let n;if(Array.isArray(e)){const i=e.map(a=>PC(t,a,r));n=Promise.all(i)}else if(typeof e=="string")n=PC(t,e,r);else{const i=typeof e=="function"?q2(t,e,r.custom):e;n=Promise.all(wU(t,i,r))}return n.then(()=>{t.notify("AnimationComplete",e)})}const noe=E3.length;function OU(t){if(!t)return;if(!t.isControllingVariants){const r=t.parent?OU(t.parent)||{}:{};return t.props.initial!==void 0&&(r.initial=t.props.initial),r}const e={};for(let r=0;rPromise.all(e.map(({animation:r,options:n})=>roe(t,r,n)))}function ooe(t){let e=soe(t),r=q6(),n=!0;const i=l=>(c,u)=>{var h;const d=q2(t,u,l==="exit"?(h=t.presenceContext)===null||h===void 0?void 0:h.custom:void 0);if(d){const{transition:f,transitionEnd:g,...m}=d;c={...c,...m,...g}}return c};function a(l){e=l(t)}function s(l){const{props:c}=t,u=OU(t.parent)||{},h=[],d=new Set;let f={},g=1/0;for(let v=0;vg&&S,A=!1;const I=Array.isArray(O)?O:[O];let M=I.reduce(i(b),{});T===!1&&(M={});const{prevResolvedValues:N={}}=w,B={...N,...M},P=z=>{D=!0,d.has(z)&&(A=!0,d.delete(z)),w.needsAnimating[z]=!0;const Z=t.getValue(z);Z&&(Z.liveStyle=!1)};for(const z in B){const Z=M[z],H=N[z];if(f.hasOwnProperty(z))continue;let re=!1;OC(Z)&&OC(H)?re=!F7(Z,H):re=Z!==H,re?Z!=null?P(z):d.add(z):Z!==void 0&&d.has(z)?P(z):w.protectedKeys[z]=!0}w.prevProp=O,w.prevResolvedValues=M,w.isActive&&(f={...f,...M}),n&&t.blockInitialAnimation&&(D=!1),D&&(!(_&&C)||A)&&h.push(...I.map(z=>({animation:z,options:{type:b}})))}if(d.size){const v={};d.forEach(b=>{const w=t.getBaseTarget(b),O=t.getValue(b);O&&(O.liveStyle=!0),v[b]=w??null}),h.push({animation:v})}let m=!!h.length;return n&&(c.initial===!1||c.initial===c.animate)&&!t.manuallyAnimateOnMount&&(m=!1),n=!1,m?e(h):Promise.resolve()}function o(l,c){var u;if(r[l].isActive===c)return Promise.resolve();(u=t.variantChildren)===null||u===void 0||u.forEach(d=>{var f;return(f=d.animationState)===null||f===void 0?void 0:f.setActive(l,c)}),r[l].isActive=c;const h=s(l);for(const d in r)r[d].protectedKeys={};return h}return{animateChanges:s,setActive:o,setAnimateFunction:a,getState:()=>r,reset:()=>{r=q6(),n=!0}}}function loe(t,e){return typeof e=="string"?e!==t:Array.isArray(e)?!F7(e,t):!1}function Ou(t=!1){return{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function q6(){return{animate:Ou(!0),whileInView:Ou(),whileHover:Ou(),whileTap:Ou(),whileDrag:Ou(),whileFocus:Ou(),exit:Ou()}}class Kc{constructor(e){this.isMounted=!1,this.node=e}update(){}}class coe extends Kc{constructor(e){super(e),e.animationState||(e.animationState=ooe(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();z2(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:r}=this.node.prevProps||{};e!==r&&this.updateAnimationControlsSubscription()}unmount(){var e;this.node.animationState.reset(),(e=this.unmountControls)===null||e===void 0||e.call(this)}}let uoe=0;class hoe extends Kc{constructor(){super(...arguments),this.id=uoe++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:r}=this.node.presenceContext,{isPresent:n}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===n)return;const i=this.node.animationState.setActive("exit",!e);r&&!e&&i.then(()=>r(this.id))}mount(){const{register:e}=this.node.presenceContext||{};e&&(this.unmount=e(this.id))}unmount(){}}const doe={animation:{Feature:coe},exit:{Feature:hoe}};function jg(t,e,r,n={passive:!0}){return t.addEventListener(e,r,n),()=>t.removeEventListener(e,r)}function Qm(t){return{point:{x:t.pageX,y:t.pageY}}}const foe=t=>e=>W3(e)&&t(e,Qm(e));function og(t,e,r,n){return jg(t,e,foe(r),n)}const X6=(t,e)=>Math.abs(t-e);function poe(t,e){const r=X6(t.x,e.x),n=X6(t.y,e.y);return Math.sqrt(r**2+n**2)}class kU{constructor(e,r,{transformPagePoint:n,contextWindow:i,dragSnapToOrigin:a=!1}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const h=y_(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=poe(h.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:g}=h,{timestamp:m}=di;this.history.push({...g,timestamp:m});const{onStart:v,onMove:b}=this.handlers;d||(v&&v(this.lastMoveEvent,h),this.startEvent=this.lastMoveEvent),b&&b(this.lastMoveEvent,h)},this.handlePointerMove=(h,d)=>{this.lastMoveEvent=h,this.lastMoveEventInfo=x_(d,this.transformPagePoint),Gr.update(this.updatePoint,!0)},this.handlePointerUp=(h,d)=>{this.end();const{onEnd:f,onSessionEnd:g,resumeAnimation:m}=this.handlers;if(this.dragSnapToOrigin&&m&&m(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const v=y_(h.type==="pointercancel"?this.lastMoveEventInfo:x_(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(h,v),g&&g(h,v)},!W3(e))return;this.dragSnapToOrigin=a,this.handlers=r,this.transformPagePoint=n,this.contextWindow=i||window;const s=Qm(e),o=x_(s,this.transformPagePoint),{point:l}=o,{timestamp:c}=di;this.history=[{...l,timestamp:c}];const{onSessionStart:u}=r;u&&u(e,y_(o,this.history)),this.removeListeners=Um(og(this.contextWindow,"pointermove",this.handlePointerMove),og(this.contextWindow,"pointerup",this.handlePointerUp),og(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),$l(this.updatePoint)}}function x_(t,e){return e?{point:e(t.point)}:t}function Z6(t,e){return{x:t.x-e.x,y:t.y-e.y}}function y_({point:t},e){return{point:t,delta:Z6(t,_U(e)),offset:Z6(t,goe(e)),velocity:moe(e,.1)}}function goe(t){return t[0]}function _U(t){return t[t.length-1]}function moe(t,e){if(t.length<2)return{x:0,y:0};let r=t.length-1,n=null;const i=_U(t);for(;r>=0&&(n=t[r],!(i.timestamp-n.timestamp>Cl(e)));)r--;if(!n)return{x:0,y:0};const a=El(i.timestamp-n.timestamp);if(a===0)return{x:0,y:0};const s={x:(i.x-n.x)/a,y:(i.y-n.y)/a};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}const SU=1e-4,xoe=1-SU,yoe=1+SU,TU=.01,voe=0-TU,boe=0+TU;function Ka(t){return t.max-t.min}function woe(t,e,r){return Math.abs(t-e)<=r}function H6(t,e,r,n=.5){t.origin=n,t.originPoint=hn(e.min,e.max,t.origin),t.scale=Ka(r)/Ka(e),t.translate=hn(r.min,r.max,t.origin)-t.originPoint,(t.scale>=xoe&&t.scale<=yoe||isNaN(t.scale))&&(t.scale=1),(t.translate>=voe&&t.translate<=boe||isNaN(t.translate))&&(t.translate=0)}function lg(t,e,r,n){H6(t.x,e.x,r.x,n?n.originX:void 0),H6(t.y,e.y,r.y,n?n.originY:void 0)}function G6(t,e,r){t.min=r.min+e.min,t.max=t.min+Ka(e)}function Ooe(t,e,r){G6(t.x,e.x,r.x),G6(t.y,e.y,r.y)}function Y6(t,e,r){t.min=e.min-r.min,t.max=t.min+Ka(e)}function cg(t,e,r){Y6(t.x,e.x,r.x),Y6(t.y,e.y,r.y)}function koe(t,{min:e,max:r},n){return e!==void 0&&tr&&(t=n?hn(r,t,n.max):Math.min(t,r)),t}function K6(t,e,r){return{min:e!==void 0?t.min+e:void 0,max:r!==void 0?t.max+r-(t.max-t.min):void 0}}function _oe(t,{top:e,left:r,bottom:n,right:i}){return{x:K6(t.x,r,i),y:K6(t.y,e,n)}}function J6(t,e){let r=e.min-t.min,n=e.max-t.max;return e.max-e.minn?r=pf(e.min,e.max-n,t.min):n>i&&(r=pf(t.min,t.max-i,e.min)),Il(0,1,r)}function Coe(t,e){const r={};return e.min!==void 0&&(r.min=e.min-t.min),e.max!==void 0&&(r.max=e.max-t.min),r}const RC=.35;function Eoe(t=RC){return t===!1?t=0:t===!0&&(t=RC),{x:eR(t,"left","right"),y:eR(t,"top","bottom")}}function eR(t,e,r){return{min:tR(t,e),max:tR(t,r)}}function tR(t,e){return typeof t=="number"?t:t[e]||0}const rR=()=>({translate:0,scale:1,origin:0,originPoint:0}),Ad=()=>({x:rR(),y:rR()}),nR=()=>({min:0,max:0}),On=()=>({x:nR(),y:nR()});function ms(t){return[t("x"),t("y")]}function CU({top:t,left:e,right:r,bottom:n}){return{x:{min:e,max:r},y:{min:t,max:n}}}function Doe({x:t,y:e}){return{top:e.min,right:t.max,bottom:e.max,left:t.min}}function Aoe(t,e){if(!e)return t;const r=e({x:t.left,y:t.top}),n=e({x:t.right,y:t.bottom});return{top:r.y,left:r.x,bottom:n.y,right:n.x}}function v_(t){return t===void 0||t===1}function FC({scale:t,scaleX:e,scaleY:r}){return!v_(t)||!v_(e)||!v_(r)}function Du(t){return FC(t)||EU(t)||t.z||t.rotate||t.rotateX||t.rotateY||t.skewX||t.skewY}function EU(t){return iR(t.x)||iR(t.y)}function iR(t){return t&&t!=="0%"}function Jv(t,e,r){const n=t-r,i=e*n;return r+i}function aR(t,e,r,n,i){return i!==void 0&&(t=Jv(t,i,n)),Jv(t,r,n)+e}function LC(t,e=0,r=1,n,i){t.min=aR(t.min,e,r,n,i),t.max=aR(t.max,e,r,n,i)}function DU(t,{x:e,y:r}){LC(t.x,e.translate,e.scale,e.originPoint),LC(t.y,r.translate,r.scale,r.originPoint)}const sR=.999999999999,oR=1.0000000000001;function Noe(t,e,r,n=!1){const i=r.length;if(!i)return;e.x=e.y=1;let a,s;for(let o=0;osR&&(e.x=1),e.ysR&&(e.y=1)}function Nd(t,e){t.min=t.min+e,t.max=t.max+e}function lR(t,e,r,n,i=.5){const a=hn(t.min,t.max,i);LC(t,e,r,a,n)}function Pd(t,e){lR(t.x,e.x,e.scaleX,e.scale,e.originX),lR(t.y,e.y,e.scaleY,e.scale,e.originY)}function AU(t,e){return CU(Aoe(t.getBoundingClientRect(),e))}function Poe(t,e,r){const n=AU(t,r),{scroll:i}=e;return i&&(Nd(n.x,i.offset.x),Nd(n.y,i.offset.y)),n}const NU=({current:t})=>t?t.ownerDocument.defaultView:null,Roe=new WeakMap;class Foe{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=On(),this.visualElement=e}start(e,{snapToCursor:r=!1}={}){const{presenceContext:n}=this.visualElement;if(n&&n.isPresent===!1)return;const i=u=>{const{dragSnapToOrigin:h}=this.getProps();h?this.pauseAnimation():this.stopAnimation(),r&&this.snapToCursor(Qm(u).point)},a=(u,h)=>{const{drag:d,dragPropagation:f,onDragStart:g}=this.getProps();if(d&&!f&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Cae(d),!this.openDragLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ms(v=>{let b=this.getAxisMotionValue(v).get()||0;if(Vo.test(b)){const{projection:w}=this.visualElement;if(w&&w.layout){const O=w.layout.layoutBox[v];O&&(b=Ka(O)*(parseFloat(b)/100))}}this.originPoint[v]=b}),g&&Gr.postRender(()=>g(u,h)),SC(this.visualElement,"transform");const{animationState:m}=this.visualElement;m&&m.setActive("whileDrag",!0)},s=(u,h)=>{const{dragPropagation:d,dragDirectionLock:f,onDirectionLock:g,onDrag:m}=this.getProps();if(!d&&!this.openDragLock)return;const{offset:v}=h;if(f&&this.currentDirection===null){this.currentDirection=Loe(v),this.currentDirection!==null&&g&&g(this.currentDirection);return}this.updateAxis("x",h.point,v),this.updateAxis("y",h.point,v),this.visualElement.render(),m&&m(u,h)},o=(u,h)=>this.stop(u,h),l=()=>ms(u=>{var h;return this.getAnimationState(u)==="paused"&&((h=this.getAxisMotionValue(u).animation)===null||h===void 0?void 0:h.play())}),{dragSnapToOrigin:c}=this.getProps();this.panSession=new kU(e,{onSessionStart:i,onStart:a,onMove:s,onSessionEnd:o,resumeAnimation:l},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:c,contextWindow:NU(this.visualElement)})}stop(e,r){const n=this.isDragging;if(this.cancel(),!n)return;const{velocity:i}=r;this.startAnimation(i);const{onDragEnd:a}=this.getProps();a&&Gr.postRender(()=>a(e,r))}cancel(){this.isDragging=!1;const{projection:e,animationState:r}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:n}=this.getProps();!n&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),r&&r.setActive("whileDrag",!1)}updateAxis(e,r,n){const{drag:i}=this.getProps();if(!n||!A1(e,i,this.currentDirection))return;const a=this.getAxisMotionValue(e);let s=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(s=koe(s,this.constraints[e],this.elastic[e])),a.set(s)}resolveConstraints(){var e;const{dragConstraints:r,dragElastic:n}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(e=this.visualElement.projection)===null||e===void 0?void 0:e.layout,a=this.constraints;r&&Ed(r)?this.constraints||(this.constraints=this.resolveRefConstraints()):r&&i?this.constraints=_oe(i.layoutBox,r):this.constraints=!1,this.elastic=Eoe(n),a!==this.constraints&&i&&this.constraints&&!this.hasMutatedConstraints&&ms(s=>{this.constraints!==!1&&this.getAxisMotionValue(s)&&(this.constraints[s]=Coe(i.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:r}=this.getProps();if(!e||!Ed(e))return!1;const n=e.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const a=Poe(n,i.root,this.visualElement.getTransformPagePoint());let s=Soe(i.layout.layoutBox,a);if(r){const o=r(Doe(s));this.hasMutatedConstraints=!!o,o&&(s=CU(o))}return s}startAnimation(e){const{drag:r,dragMomentum:n,dragElastic:i,dragTransition:a,dragSnapToOrigin:s,onDragTransitionEnd:o}=this.getProps(),l=this.constraints||{},c=ms(u=>{if(!A1(u,r,this.currentDirection))return;let h=l&&l[u]||{};s&&(h={min:0,max:0});const d=i?200:1e6,f=i?40:1e7,g={type:"inertia",velocity:n?e[u]:0,bounceStiffness:d,bounceDamping:f,timeConstant:750,restDelta:1,restSpeed:10,...a,...h};return this.startAxisValueAnimation(u,g)});return Promise.all(c).then(o)}startAxisValueAnimation(e,r){const n=this.getAxisMotionValue(e);return SC(this.visualElement,e),n.start(tA(e,n,0,r,this.visualElement,!1))}stopAnimation(){ms(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){ms(e=>{var r;return(r=this.getAxisMotionValue(e).animation)===null||r===void 0?void 0:r.pause()})}getAnimationState(e){var r;return(r=this.getAxisMotionValue(e).animation)===null||r===void 0?void 0:r.state}getAxisMotionValue(e){const r=`_drag${e.toUpperCase()}`,n=this.visualElement.getProps(),i=n[r];return i||this.visualElement.getValue(e,(n.initial?n.initial[e]:void 0)||0)}snapToCursor(e){ms(r=>{const{drag:n}=this.getProps();if(!A1(r,n,this.currentDirection))return;const{projection:i}=this.visualElement,a=this.getAxisMotionValue(r);if(i&&i.layout){const{min:s,max:o}=i.layout.layoutBox[r];a.set(e[r]-hn(s,o,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:r}=this.getProps(),{projection:n}=this.visualElement;if(!Ed(r)||!n||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};ms(s=>{const o=this.getAxisMotionValue(s);if(o&&this.constraints!==!1){const l=o.get();i[s]=Toe({min:l,max:l},this.constraints[s])}});const{transformTemplate:a}=this.visualElement.getProps();this.visualElement.current.style.transform=a?a({},""):"none",n.root&&n.root.updateScroll(),n.updateLayout(),this.resolveConstraints(),ms(s=>{if(!A1(s,e,null))return;const o=this.getAxisMotionValue(s),{min:l,max:c}=this.constraints[s];o.set(hn(l,c,i[s]))})}addListeners(){if(!this.visualElement.current)return;Roe.set(this.visualElement,this);const e=this.visualElement.current,r=og(e,"pointerdown",l=>{const{drag:c,dragListener:u=!0}=this.getProps();c&&u&&this.start(l)}),n=()=>{const{dragConstraints:l}=this.getProps();Ed(l)&&l.current&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,a=i.addEventListener("measure",n);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),Gr.read(n);const s=jg(window,"resize",()=>this.scalePositionWithinConstraints()),o=i.addEventListener("didUpdate",(({delta:l,hasLayoutChanged:c})=>{this.isDragging&&c&&(ms(u=>{const h=this.getAxisMotionValue(u);h&&(this.originPoint[u]+=l[u].translate,h.set(h.get()+l[u].translate))}),this.visualElement.render())}));return()=>{s(),r(),a(),o&&o()}}getProps(){const e=this.visualElement.getProps(),{drag:r=!1,dragDirectionLock:n=!1,dragPropagation:i=!1,dragConstraints:a=!1,dragElastic:s=RC,dragMomentum:o=!0}=e;return{...e,drag:r,dragDirectionLock:n,dragPropagation:i,dragConstraints:a,dragElastic:s,dragMomentum:o}}}function A1(t,e,r){return(e===!0||e===t)&&(r===null||r===t)}function Loe(t,e=10){let r=null;return Math.abs(t.y)>e?r="y":Math.abs(t.x)>e&&(r="x"),r}class Moe extends Kc{constructor(e){super(e),this.removeGroupControls=Za,this.removeListeners=Za,this.controls=new Foe(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Za}unmount(){this.removeGroupControls(),this.removeListeners()}}const cR=t=>(e,r)=>{t&&Gr.postRender(()=>t(e,r))};class $oe extends Kc{constructor(){super(...arguments),this.removePointerDownListener=Za}onPointerDown(e){this.session=new kU(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:NU(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:r,onPan:n,onPanEnd:i}=this.node.getProps();return{onSessionStart:cR(e),onStart:cR(r),onMove:n,onEnd:(a,s)=>{delete this.session,i&&Gr.postRender(()=>i(a,s))}}}mount(){this.removePointerDownListener=og(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const qy={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function uR(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}const qp={correct:(t,e)=>{if(!e.target)return t;if(typeof t=="string")if(Yt.test(t))t=parseFloat(t);else return t;const r=uR(t,e.target.x),n=uR(t,e.target.y);return`${r}% ${n}%`}},Ioe={correct:(t,{treeScale:e,projectionDelta:r})=>{const n=t,i=$c.parse(t);if(i.length>5)return n;const a=$c.createTransformer(t),s=typeof i[0]!="number"?1:0,o=r.x.scale*e.x,l=r.y.scale*e.y;i[0+s]/=o,i[1+s]/=l;const c=hn(o,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=c),typeof i[3+s]=="number"&&(i[3+s]/=c),a(i)}};class joe extends U.Component{componentDidMount(){const{visualElement:e,layoutGroup:r,switchLayoutGroup:n,layoutId:i}=this.props,{projection:a}=e;sae(Boe),a&&(r.group&&r.group.add(a),n&&n.register&&i&&n.register(a),a.root.didUpdate(),a.addEventListener("animationComplete",()=>{this.safeToRemove()}),a.setOptions({...a.options,onExitComplete:()=>this.safeToRemove()})),qy.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:r,visualElement:n,drag:i,isPresent:a}=this.props,s=n.projection;return s&&(s.isPresent=a,i||e.layoutDependency!==r||r===void 0?s.willUpdate():this.safeToRemove(),e.isPresent!==a&&(a?s.promote():s.relegate()||Gr.postRender(()=>{const o=s.getStack();(!o||!o.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),A3.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:r,switchLayoutGroup:n}=this.props,{projection:i}=e;i&&(i.scheduleCheckAfterUnmount(),r&&r.group&&r.group.remove(i),n&&n.deregister&&n.deregister(i))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function PU(t){const[e,r]=p7(),n=U.useContext(k3);return x.jsx(joe,{...t,layoutGroup:n,switchLayoutGroup:U.useContext(w7),isPresent:e,safeToRemove:r})}const Boe={borderRadius:{...qp,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:qp,borderTopRightRadius:qp,borderBottomLeftRadius:qp,borderBottomRightRadius:qp,boxShadow:Ioe};function Uoe(t,e,r){const n=Fi(t)?t:mf(t);return n.start(tA("",n,e,r)),n.animation}function Qoe(t){return t instanceof SVGElement&&t.tagName!=="svg"}const Woe=(t,e)=>t.depth-e.depth;class zoe{constructor(){this.children=[],this.isDirty=!1}add(e){z3(this.children,e),this.isDirty=!0}remove(e){V3(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(Woe),this.isDirty=!1,this.children.forEach(e)}}function Voe(t,e){const r=qo.now(),n=({timestamp:i})=>{const a=i-r;a>=e&&($l(n),t(a-e))};return Gr.read(n,!0),()=>$l(n)}const RU=["TopLeft","TopRight","BottomLeft","BottomRight"],qoe=RU.length,hR=t=>typeof t=="string"?parseFloat(t):t,dR=t=>typeof t=="number"||Yt.test(t);function Xoe(t,e,r,n,i,a){i?(t.opacity=hn(0,r.opacity!==void 0?r.opacity:1,Zoe(n)),t.opacityExit=hn(e.opacity!==void 0?e.opacity:1,0,Hoe(n))):a&&(t.opacity=hn(e.opacity!==void 0?e.opacity:1,r.opacity!==void 0?r.opacity:1,n));for(let s=0;sne?1:r(pf(t,e,n))}function pR(t,e){t.min=e.min,t.max=e.max}function cs(t,e){pR(t.x,e.x),pR(t.y,e.y)}function gR(t,e){t.translate=e.translate,t.scale=e.scale,t.originPoint=e.originPoint,t.origin=e.origin}function mR(t,e,r,n,i){return t-=e,t=Jv(t,1/r,n),i!==void 0&&(t=Jv(t,1/i,n)),t}function Goe(t,e=0,r=1,n=.5,i,a=t,s=t){if(Vo.test(e)&&(e=parseFloat(e),e=hn(s.min,s.max,e/100)-s.min),typeof e!="number")return;let o=hn(a.min,a.max,n);t===a&&(o-=e),t.min=mR(t.min,e,r,o,i),t.max=mR(t.max,e,r,o,i)}function xR(t,e,[r,n,i],a,s){Goe(t,e[r],e[n],e[i],e.scale,a,s)}const Yoe=["x","scaleX","originX"],Koe=["y","scaleY","originY"];function yR(t,e,r,n){xR(t.x,e,Yoe,r?r.x:void 0,n?n.x:void 0),xR(t.y,e,Koe,r?r.y:void 0,n?n.y:void 0)}function vR(t){return t.translate===0&&t.scale===1}function LU(t){return vR(t.x)&&vR(t.y)}function bR(t,e){return t.min===e.min&&t.max===e.max}function Joe(t,e){return bR(t.x,e.x)&&bR(t.y,e.y)}function wR(t,e){return Math.round(t.min)===Math.round(e.min)&&Math.round(t.max)===Math.round(e.max)}function MU(t,e){return wR(t.x,e.x)&&wR(t.y,e.y)}function OR(t){return Ka(t.x)/Ka(t.y)}function kR(t,e){return t.translate===e.translate&&t.scale===e.scale&&t.originPoint===e.originPoint}class ele{constructor(){this.members=[]}add(e){z3(this.members,e),e.scheduleRender()}remove(e){if(V3(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){const r=this.members[this.members.length-1];r&&this.promote(r)}}relegate(e){const r=this.members.findIndex(i=>e===i);if(r===0)return!1;let n;for(let i=r;i>=0;i--){const a=this.members[i];if(a.isPresent!==!1){n=a;break}}return n?(this.promote(n),!0):!1}promote(e,r){const n=this.lead;if(e!==n&&(this.prevLead=n,this.lead=e,e.show(),n)){n.instance&&n.scheduleRender(),e.scheduleRender(),e.resumeFrom=n,r&&(e.resumeFrom.preserveOpacity=!0),n.snapshot&&(e.snapshot=n.snapshot,e.snapshot.latestValues=n.animationValues||n.latestValues),e.root&&e.root.isUpdating&&(e.isLayoutDirty=!0);const{crossfade:i}=e.options;i===!1&&n.hide()}}exitAnimationComplete(){this.members.forEach(e=>{const{options:r,resumingFrom:n}=e;r.onExitComplete&&r.onExitComplete(),n&&n.options.onExitComplete&&n.options.onExitComplete()})}scheduleRender(){this.members.forEach(e=>{e.instance&&e.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function tle(t,e,r){let n="";const i=t.x.translate/e.x,a=t.y.translate/e.y,s=(r==null?void 0:r.z)||0;if((i||a||s)&&(n=`translate3d(${i}px, ${a}px, ${s}px) `),(e.x!==1||e.y!==1)&&(n+=`scale(${1/e.x}, ${1/e.y}) `),r){const{transformPerspective:c,rotate:u,rotateX:h,rotateY:d,skewX:f,skewY:g}=r;c&&(n=`perspective(${c}px) ${n}`),u&&(n+=`rotate(${u}deg) `),h&&(n+=`rotateX(${h}deg) `),d&&(n+=`rotateY(${d}deg) `),f&&(n+=`skewX(${f}deg) `),g&&(n+=`skewY(${g}deg) `)}const o=t.x.scale*e.x,l=t.y.scale*e.y;return(o!==1||l!==1)&&(n+=`scale(${o}, ${l})`),n||"none"}const Au={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0},$0=typeof window<"u"&&window.MotionDebug!==void 0,b_=["","X","Y","Z"],rle={visibility:"hidden"},_R=1e3;let nle=0;function w_(t,e,r,n){const{latestValues:i}=e;i[t]&&(r[t]=i[t],e.setStaticValue(t,0),n&&(n[t]=0))}function $U(t){if(t.hasCheckedOptimisedAppear=!0,t.root===t)return;const{visualElement:e}=t.options;if(!e)return;const r=z7(e);if(window.MotionHasOptimisedAnimation(r,"transform")){const{layout:i,layoutId:a}=t.options;window.MotionCancelOptimisedAnimation(r,"transform",Gr,!(i||a))}const{parent:n}=t;n&&!n.hasCheckedOptimisedAppear&&$U(n)}function IU({attachResizeListener:t,defaultParent:e,measureScroll:r,checkIsScrollRoot:n,resetTransform:i}){return class{constructor(s={},o=e==null?void 0:e()){this.id=nle++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,$0&&(Au.totalNodes=Au.resolvedTargetDeltas=Au.recalculatedProjection=0),this.nodes.forEach(sle),this.nodes.forEach(hle),this.nodes.forEach(dle),this.nodes.forEach(ole),$0&&window.MotionDebug.record(Au)},this.resolvedRelativeTargetAt=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=o?o.root||o:this,this.path=o?[...o.path,o]:[],this.parent=o,this.depth=o?o.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;t(s,()=>{this.root.updateBlockedByResize=!0,h&&h(),h=Voe(d,250),qy.hasAnimatedSinceResize&&(qy.hasAnimatedSinceResize=!1,this.nodes.forEach(TR))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:h,hasLayoutChanged:d,hasRelativeTargetChanged:f,layout:g})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||u.getDefaultTransition()||xle,{onLayoutAnimationStart:v,onLayoutAnimationComplete:b}=u.getProps(),w=!this.targetLayout||!MU(this.targetLayout,g)||f,O=!d&&f;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||O||d&&(w||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(h,O);const S={...B3(m,"layout"),onPlay:v,onComplete:b};(u.shouldReduceMotion||this.options.layoutRoot)&&(S.delay=0,S.type=!1),this.startAnimation(S)}else d||TR(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=g})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,$l(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(fle),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&$U(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;u{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const T=S/1e3;CR(h.x,s.x,T),CR(h.y,s.y,T),this.setTargetDelta(h),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(cg(d,this.layout.layoutBox,this.relativeParent.layout.layoutBox),gle(this.relativeTarget,this.relativeTargetOrigin,d,T),O&&Joe(this.relativeTarget,O)&&(this.isProjectionDirty=!1),O||(O=On()),cs(O,this.relativeTarget)),m&&(this.animationValues=u,Xoe(u,c,this.latestValues,T,w,b)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=T},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&($l(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Gr.update(()=>{qy.hasAnimatedSinceResize=!0,this.currentAnimation=Uoe(0,_R,{...s,onUpdate:o=>{this.mixTargetDelta(o),s.onUpdate&&s.onUpdate(o)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(_R),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:o,target:l,layout:c,latestValues:u}=s;if(!(!o||!l||!c)){if(this!==s&&this.layout&&c&&jU(this.options.animationType,this.layout.layoutBox,c.layoutBox)){l=this.target||On();const h=Ka(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+h;const d=Ka(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+d}cs(o,l),Pd(o,u),lg(this.projectionDeltaWithTransform,this.layoutCorrected,o,u)}}registerSharedNode(s,o){this.sharedNodes.has(s)||this.sharedNodes.set(s,new ele),this.sharedNodes.get(s).add(o);const c=o.options.initialPromotionConfig;o.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(o):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:o}=this.options;return o?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:o}=this.options;return o?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:o,preserveFollowOpacity:l}={}){const c=this.getStack();c&&c.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),o&&this.setOptions({transition:o})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetSkewAndRotation(){const{visualElement:s}=this.options;if(!s)return;let o=!1;const{latestValues:l}=s;if((l.z||l.rotate||l.rotateX||l.rotateY||l.rotateZ||l.skewX||l.skewY)&&(o=!0),!o)return;const c={};l.z&&w_("z",s,c,this.animationValues);for(let u=0;u{var o;return(o=s.currentAnimation)===null||o===void 0?void 0:o.stop()}),this.root.nodes.forEach(SR),this.root.sharedNodes.clear()}}}function ile(t){t.updateLayout()}function ale(t){var e;const r=((e=t.resumeFrom)===null||e===void 0?void 0:e.snapshot)||t.snapshot;if(t.isLead()&&t.layout&&r&&t.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:i}=t.layout,{animationType:a}=t.options,s=r.source!==t.layout.source;a==="size"?ms(h=>{const d=s?r.measuredBox[h]:r.layoutBox[h],f=Ka(d);d.min=n[h].min,d.max=d.min+f}):jU(a,r.layoutBox,n)&&ms(h=>{const d=s?r.measuredBox[h]:r.layoutBox[h],f=Ka(n[h]);d.max=d.min+f,t.relativeTarget&&!t.currentAnimation&&(t.isProjectionDirty=!0,t.relativeTarget[h].max=t.relativeTarget[h].min+f)});const o=Ad();lg(o,n,r.layoutBox);const l=Ad();s?lg(l,t.applyTransform(i,!0),r.measuredBox):lg(l,n,r.layoutBox);const c=!LU(o);let u=!1;if(!t.resumeFrom){const h=t.getClosestProjectingParent();if(h&&!h.resumeFrom){const{snapshot:d,layout:f}=h;if(d&&f){const g=On();cg(g,r.layoutBox,d.layoutBox);const m=On();cg(m,n,f.layoutBox),MU(g,m)||(u=!0),h.options.layoutRoot&&(t.relativeTarget=m,t.relativeTargetOrigin=g,t.relativeParent=h)}}}t.notifyListeners("didUpdate",{layout:n,snapshot:r,delta:l,layoutDelta:o,hasLayoutChanged:c,hasRelativeTargetChanged:u})}else if(t.isLead()){const{onExitComplete:n}=t.options;n&&n()}t.options.transition=void 0}function sle(t){$0&&Au.totalNodes++,t.parent&&(t.isProjecting()||(t.isProjectionDirty=t.parent.isProjectionDirty),t.isSharedProjectionDirty||(t.isSharedProjectionDirty=!!(t.isProjectionDirty||t.parent.isProjectionDirty||t.parent.isSharedProjectionDirty)),t.isTransformDirty||(t.isTransformDirty=t.parent.isTransformDirty))}function ole(t){t.isProjectionDirty=t.isSharedProjectionDirty=t.isTransformDirty=!1}function lle(t){t.clearSnapshot()}function SR(t){t.clearMeasurements()}function cle(t){t.isLayoutDirty=!1}function ule(t){const{visualElement:e}=t.options;e&&e.getProps().onBeforeLayoutMeasure&&e.notify("BeforeLayoutMeasure"),t.resetTransform()}function TR(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0,t.isProjectionDirty=!0}function hle(t){t.resolveTargetDelta()}function dle(t){t.calcProjection()}function fle(t){t.resetSkewAndRotation()}function ple(t){t.removeLeadSnapshot()}function CR(t,e,r){t.translate=hn(e.translate,0,r),t.scale=hn(e.scale,1,r),t.origin=e.origin,t.originPoint=e.originPoint}function ER(t,e,r,n){t.min=hn(e.min,r.min,n),t.max=hn(e.max,r.max,n)}function gle(t,e,r,n){ER(t.x,e.x,r.x,n),ER(t.y,e.y,r.y,n)}function mle(t){return t.animationValues&&t.animationValues.opacityExit!==void 0}const xle={duration:.45,ease:[.4,0,.1,1]},DR=t=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(t),AR=DR("applewebkit/")&&!DR("chrome/")?Math.round:Za;function NR(t){t.min=AR(t.min),t.max=AR(t.max)}function yle(t){NR(t.x),NR(t.y)}function jU(t,e,r){return t==="position"||t==="preserve-aspect"&&!woe(OR(e),OR(r),.2)}function vle(t){var e;return t!==t.root&&((e=t.scroll)===null||e===void 0?void 0:e.wasRoot)}const ble=IU({attachResizeListener:(t,e)=>jg(t,"resize",e),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),O_={current:void 0},BU=IU({measureScroll:t=>({x:t.scrollLeft,y:t.scrollTop}),defaultParent:()=>{if(!O_.current){const t=new ble({});t.mount(window),t.setOptions({layoutScroll:!0}),O_.current=t}return O_.current},resetTransform:(t,e)=>{t.style.transform=e!==void 0?e:"none"},checkIsScrollRoot:t=>window.getComputedStyle(t).position==="fixed"}),wle={pan:{Feature:$oe},drag:{Feature:Moe,ProjectionNode:BU,MeasureLayout:PU}};function PR(t,e,r){const{props:n}=t;t.animationState&&n.whileHover&&t.animationState.setActive("whileHover",r==="Start");const i="onHover"+r,a=n[i];a&&Gr.postRender(()=>a(e,Qm(e)))}class Ole extends Kc{mount(){const{current:e}=this.node;e&&(this.unmount=Oae(e,r=>(PR(this.node,r,"Start"),n=>PR(this.node,n,"End"))))}unmount(){}}class kle extends Kc{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Um(jg(this.node.current,"focus",()=>this.onFocus()),jg(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function RR(t,e,r){const{props:n}=t;t.animationState&&n.whileTap&&t.animationState.setActive("whileTap",r==="Start");const i="onTap"+(r==="End"?"":r),a=n[i];a&&Gr.postRender(()=>a(e,Qm(e)))}class _le extends Kc{mount(){const{current:e}=this.node;e&&(this.unmount=Tae(e,r=>(RR(this.node,r,"Start"),(n,{success:i})=>RR(this.node,n,i?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const MC=new WeakMap,k_=new WeakMap,Sle=t=>{const e=MC.get(t.target);e&&e(t)},Tle=t=>{t.forEach(Sle)};function Cle({root:t,...e}){const r=t||document;k_.has(r)||k_.set(r,{});const n=k_.get(r),i=JSON.stringify(e);return n[i]||(n[i]=new IntersectionObserver(Tle,{root:t,...e})),n[i]}function Ele(t,e,r){const n=Cle(e);return MC.set(t,r),n.observe(t),()=>{MC.delete(t),n.unobserve(t)}}const Dle={some:0,all:1};class Ale extends Kc{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:r,margin:n,amount:i="some",once:a}=e,s={root:r?r.current:void 0,rootMargin:n,threshold:typeof i=="number"?i:Dle[i]},o=l=>{const{isIntersecting:c}=l;if(this.isInView===c||(this.isInView=c,a&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:h}=this.node.getProps(),d=c?u:h;d&&d(l)};return Ele(this.node.current,s,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:r}=this.node;["amount","margin","root"].some(Nle(e,r))&&this.startObserver()}unmount(){}}function Nle({viewport:t={}},{viewport:e={}}={}){return r=>t[r]!==e[r]}const Ple={inView:{Feature:Ale},tap:{Feature:_le},focus:{Feature:kle},hover:{Feature:Ole}},Rle={layout:{ProjectionNode:BU,MeasureLayout:PU}},$C={current:null},UU={current:!1};function Fle(){if(UU.current=!0,!!_3)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>$C.current=t.matches;t.addListener(e),e()}else $C.current=!1}const Lle=[...hU,Ei,$c],Mle=t=>Lle.find(uU(t)),FR=new WeakMap;function $le(t,e,r){for(const n in e){const i=e[n],a=r[n];if(Fi(i))t.addValue(n,i);else if(Fi(a))t.addValue(n,mf(i,{owner:t}));else if(a!==i)if(t.hasValue(n)){const s=t.getValue(n);s.liveStyle===!0?s.jump(i):s.hasAnimated||s.set(i)}else{const s=t.getStaticValue(n);t.addValue(n,mf(s!==void 0?s:i,{owner:t}))}}for(const n in r)e[n]===void 0&&t.removeValue(n);return e}const LR=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class Ile{scrapeMotionValuesFromProps(e,r,n){return{}}constructor({parent:e,props:r,presenceContext:n,reducedMotionConfig:i,blockInitialAnimation:a,visualState:s},o={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=K3,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const f=qo.now();this.renderScheduledAtthis.bindToMotionValue(n,r)),UU.current||Fle(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:$C.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){FR.delete(this.current),this.projection&&this.projection.unmount(),$l(this.notifyUpdate),$l(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const e in this.events)this.events[e].clear();for(const e in this.features){const r=this.features[e];r&&(r.unmount(),r.isMounted=!1)}this.current=null}bindToMotionValue(e,r){this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)();const n=_h.has(e),i=r.on("change",o=>{this.latestValues[e]=o,this.props.onUpdate&&Gr.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0)}),a=r.on("renderRequest",this.scheduleRender);let s;window.MotionCheckAppearSync&&(s=window.MotionCheckAppearSync(this,e,r)),this.valueSubscriptions.set(e,()=>{i(),a(),s&&s(),r.owner&&r.stop()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e="animation";for(e in gf){const r=gf[e];if(!r)continue;const{isEnabled:n,Feature:i}=r;if(!this.features[e]&&i&&n(this.props)&&(this.features[e]=new i(this)),this.features[e]){const a=this.features[e];a.isMounted?a.update():(a.mount(),a.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):On()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,r){this.latestValues[e]=r}update(e,r){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=r;for(let n=0;nr.variantChildren.delete(e)}addValue(e,r){const n=this.values.get(e);r!==n&&(n&&this.removeValue(e),this.bindToMotionValue(e,r),this.values.set(e,r),this.latestValues[e]=r.get())}removeValue(e){this.values.delete(e);const r=this.valueSubscriptions.get(e);r&&(r(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,r){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&r!==void 0&&(n=mf(r===null?void 0:r,{owner:this}),this.addValue(e,n)),n}readValue(e,r){var n;let i=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:(n=this.getBaseTargetFromProps(this.props,e))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,e,this.options);return i!=null&&(typeof i=="string"&&(lU(i)||J7(i))?i=parseFloat(i):!Mle(i)&&$c.test(r)&&(i=aU(e,r)),this.setBaseTarget(e,Fi(i)?i.get():i)),Fi(i)?i.get():i}setBaseTarget(e,r){this.baseTarget[e]=r}getBaseTarget(e){var r;const{initial:n}=this.props;let i;if(typeof n=="string"||typeof n=="object"){const s=P3(this.props,n,(r=this.presenceContext)===null||r===void 0?void 0:r.custom);s&&(i=s[e])}if(n&&i!==void 0)return i;const a=this.getBaseTargetFromProps(this.props,e);return a!==void 0&&!Fi(a)?a:this.initialValues[e]!==void 0&&i===void 0?void 0:this.baseTarget[e]}on(e,r){return this.events[e]||(this.events[e]=new q3),this.events[e].add(r)}notify(e,...r){this.events[e]&&this.events[e].notify(...r)}}class QU extends Ile{constructor(){super(...arguments),this.KeyframeResolver=dU}sortInstanceNodePosition(e,r){return e.compareDocumentPosition(r)&2?1:-1}getBaseTargetFromProps(e,r){return e.style?e.style[r]:void 0}removeValueFromRenderState(e,{vars:r,style:n}){delete r[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:e}=this.props;Fi(e)&&(this.childSubscription=e.on("change",r=>{this.current&&(this.current.textContent=`${r}`)}))}}function jle(t){return window.getComputedStyle(t)}class Ble extends QU{constructor(){super(...arguments),this.type="html",this.renderInstance=E7}readValueFromInstance(e,r){if(_h.has(r)){const n=Y3(r);return n&&n.default||0}else{const n=jle(e),i=(S7(r)?n.getPropertyValue(r):n[r])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(e,{transformPagePoint:r}){return AU(e,r)}build(e,r,n){L3(e,r,n.transformTemplate)}scrapeMotionValuesFromProps(e,r,n){return j3(e,r,n)}}class Ule extends QU{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=On}getBaseTargetFromProps(e,r){return e[r]}readValueFromInstance(e,r){if(_h.has(r)){const n=Y3(r);return n&&n.default||0}return r=D7.has(r)?r:D3(r),e.getAttribute(r)}scrapeMotionValuesFromProps(e,r,n){return P7(e,r,n)}build(e,r,n){M3(e,r,this.isSVGTag,n.transformTemplate)}renderInstance(e,r,n,i){A7(e,r,n,i)}mount(e){this.isSVGTag=I3(e.tagName),super.mount(e)}}const Qle=(t,e)=>N3(t)?new Ule(e):new Ble(e,{allowProjection:t!==U.Fragment}),Wle=gae({...doe,...Ple,...wle,...Rle},Qle),mt=Aie(Wle);function WU(t){const e=Im(()=>mf(t)),{isStatic:r}=U.useContext(Q2);if(r){const[,n]=U.useState(t);U.useEffect(()=>e.on("change",n),[])}return e}function zU(t,e){const r=WU(e()),n=()=>r.set(e());return n(),S3(()=>{const i=()=>Gr.preRender(n,!1,!0),a=t.map(s=>s.on("change",i));return()=>{a.forEach(s=>s()),$l(n)}}),r}const zle=t=>t&&typeof t=="object"&&t.mix,Vle=t=>zle(t)?t.mix:void 0;function qle(...t){const e=!Array.isArray(t[0]),r=e?0:-1,n=t[0+r],i=t[1+r],a=t[2+r],s=t[3+r],o=vU(i,a,{mixer:Vle(a[0]),...s});return e?o(n):o}function Xle(t){ag.current=[],t();const e=zU(ag.current,t);return ag.current=void 0,e}function MR(t,e,r,n){if(typeof t=="function")return Xle(t);const i=typeof e=="function"?e:qle(e,r,n);return Array.isArray(t)?$R(t,i):$R([t],([a])=>i(a))}function $R(t,e){const r=Im(()=>[]);return zU(t,()=>{r.length=0;const n=t.length;for(let i=0;it.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),zU=(...t)=>t.filter((e,r,n)=>!!e&&e.trim()!==""&&n.indexOf(e)===r).join(" ").trim();/** + */const Zle=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),VU=(...t)=>t.filter((e,r,n)=>!!e&&e.trim()!==""&&n.indexOf(e)===r).join(" ").trim();/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */var Zle={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + */var Hle={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Hle=U.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:i="",children:a,iconNode:s,...o},l)=>U.createElement("svg",{ref:l,...Zle,width:e,height:e,stroke:t,strokeWidth:n?Number(r)*24/Number(e):r,className:zU("lucide",i),...o},[...s.map(([c,u])=>U.createElement(c,u)),...Array.isArray(a)?a:[a]]));/** + */const Gle=U.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:i="",children:a,iconNode:s,...o},l)=>U.createElement("svg",{ref:l,...Hle,width:e,height:e,stroke:t,strokeWidth:n?Number(r)*24/Number(e):r,className:VU("lucide",i),...o},[...s.map(([c,u])=>U.createElement(c,u)),...Array.isArray(a)?a:[a]]));/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const dt=(t,e)=>{const r=U.forwardRef(({className:n,...i},a)=>U.createElement(Hle,{ref:a,iconNode:e,className:zU(`lucide-${Xle(t)}`,n),...i}));return r.displayName=`${t}`,r};/** + */const dt=(t,e)=>{const r=U.forwardRef(({className:n,...i},a)=>U.createElement(Gle,{ref:a,iconNode:e,className:VU(`lucide-${Zle(t)}`,n),...i}));return r.displayName=`${t}`,r};/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const VU=dt("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** + */const qU=dt("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const qU=dt("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** + */const XU=dt("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Gle=dt("Bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);/** + */const Yle=dt("Bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -121,7 +121,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Yle=dt("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + */const Kle=dt("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -136,12 +136,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Kle=dt("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + */const Jle=dt("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Jle=dt("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + */const ece=dt("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -156,7 +156,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ece=dt("CodeXml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);/** + */const tce=dt("CodeXml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -171,7 +171,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const XU=dt("Container",[["path",{d:"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z",key:"1t2lqe"}],["path",{d:"M10 21.9V14L2.1 9.1",key:"o7czzq"}],["path",{d:"m10 14 11.9-6.9",key:"zm5e20"}],["path",{d:"M14 19.8v-8.1",key:"159ecu"}],["path",{d:"M18 17.5V9.4",key:"11uown"}]]);/** + */const ZU=dt("Container",[["path",{d:"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z",key:"1t2lqe"}],["path",{d:"M10 21.9V14L2.1 9.1",key:"o7czzq"}],["path",{d:"m10 14 11.9-6.9",key:"zm5e20"}],["path",{d:"M14 19.8v-8.1",key:"159ecu"}],["path",{d:"M18 17.5V9.4",key:"11uown"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -181,7 +181,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const tce=dt("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + */const rce=dt("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -191,12 +191,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ZU=dt("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + */const HU=dt("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const rce=dt("Equal",[["line",{x1:"5",x2:"19",y1:"9",y2:"9",key:"1nwqeh"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15",key:"g8yjpy"}]]);/** + */const nce=dt("Equal",[["line",{x1:"5",x2:"19",y1:"9",y2:"9",key:"1nwqeh"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15",key:"g8yjpy"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -246,7 +246,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const nce=dt("FileType",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M9 13v-1h6v1",key:"1bb014"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"M11 18h2",key:"12mj7e"}]]);/** + */const ice=dt("FileType",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M9 13v-1h6v1",key:"1bb014"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"M11 18h2",key:"12mj7e"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -286,7 +286,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ice=dt("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** + */const ace=dt("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -301,22 +301,22 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const HU=dt("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** + */const GU=dt("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const GU=dt("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** + */const YU=dt("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ace=dt("Keyboard",[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]]);/** + */const sce=dt("Keyboard",[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const sce=dt("ListOrdered",[["path",{d:"M10 12h11",key:"6m4ad9"}],["path",{d:"M10 18h11",key:"11hvi2"}],["path",{d:"M10 6h11",key:"c7qv1k"}],["path",{d:"M4 10h2",key:"16xx2s"}],["path",{d:"M4 6h1v4",key:"cnovpq"}],["path",{d:"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1",key:"m9a95d"}]]);/** + */const oce=dt("ListOrdered",[["path",{d:"M10 12h11",key:"6m4ad9"}],["path",{d:"M10 18h11",key:"11hvi2"}],["path",{d:"M10 6h11",key:"c7qv1k"}],["path",{d:"M4 10h2",key:"16xx2s"}],["path",{d:"M4 6h1v4",key:"cnovpq"}],["path",{d:"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1",key:"m9a95d"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -331,7 +331,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const oce=dt("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** + */const lce=dt("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -346,12 +346,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const YU=dt("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + */const KU=dt("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const lce=dt("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + */const cce=dt("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -361,12 +361,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const cce=dt("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** + */const uce=dt("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const KU=dt("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** + */const JU=dt("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -381,7 +381,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const uce=dt("Puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);/** + */const hce=dt("Puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -391,12 +391,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const JU=dt("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);/** + */const eQ=dt("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const hce=dt("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** + */const dce=dt("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -416,12 +416,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const dce=dt("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/** + */const fce=dt("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const fce=dt("Shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]);/** + */const pce=dt("Shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -431,17 +431,17 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const pce=dt("Split",[["path",{d:"M16 3h5v5",key:"1806ms"}],["path",{d:"M8 3H3v5",key:"15dfkv"}],["path",{d:"M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3",key:"1qrqzj"}],["path",{d:"m15 9 6-6",key:"ko1vev"}]]);/** + */const gce=dt("Split",[["path",{d:"M16 3h5v5",key:"1806ms"}],["path",{d:"M8 3H3v5",key:"15dfkv"}],["path",{d:"M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3",key:"1qrqzj"}],["path",{d:"m15 9 6-6",key:"ko1vev"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const gce=dt("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** + */const mce=dt("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const mce=dt("Table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);/** + */const xce=dt("Table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -456,7 +456,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const eQ=dt("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + */const tQ=dt("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -466,7 +466,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const xce=dt("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** + */const yce=dt("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -481,12 +481,12 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const yce=dt("Volume2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]);/** + */const vce=dt("Volume2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const vce=dt("VolumeX",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]]);/** + */const bce=dt("VolumeX",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15",key:"1ewh16"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15",key:"5ykzw1"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -501,7 +501,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const tQ=dt("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + */const rQ=dt("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -511,7 +511,7 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const bce=dt("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** + */const wce=dt("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. @@ -521,32 +521,32 @@ Error generating stack: `+q.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const wce=dt("ZoomIn",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);/** + */const Oce=dt("ZoomIn",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);/** * @license lucide-react v0.468.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Oce=dt("ZoomOut",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),jR=t=>{let e;const r=new Set,n=(c,u)=>{const h=typeof c=="function"?c(e):c;if(!Object.is(h,e)){const d=e;e=u??(typeof h!="object"||h===null)?h:Object.assign({},e,h),r.forEach(f=>f(e,d))}},i=()=>e,o={setState:n,getState:i,getInitialState:()=>l,subscribe:c=>(r.add(c),()=>r.delete(c))},l=e=t(n,i,o);return o},kce=(t=>t?jR(t):jR),_ce=t=>t;function Sce(t,e=_ce){const r=Cd.useSyncExternalStore(t.subscribe,Cd.useCallback(()=>e(t.getState()),[t,e]),Cd.useCallback(()=>e(t.getInitialState()),[t,e]));return Cd.useDebugValue(r),r}const BR=t=>{const e=kce(t),r=n=>Sce(e,n);return Object.assign(r,e),r},Hf=(t=>t?BR(t):BR),gd=new Map,ab=Hf(t=>({notifications:[],addNotification:e=>{const r=`${Date.now()}-${Math.random().toString(36).slice(2,9)}`,n={...e,id:r,timestamp:Date.now()};t(a=>({notifications:[...a.notifications,n]}));const i=setTimeout(()=>{gd.delete(r),t(a=>({notifications:a.notifications.filter(s=>s.id!==r)}))},5e3);gd.set(r,i)},removeNotification:e=>{const r=gd.get(e);r&&(clearTimeout(r),gd.delete(e)),t(n=>({notifications:n.notifications.filter(i=>i.id!==e)}))},clearAll:()=>{gd.forEach(e=>clearTimeout(e)),gd.clear(),t({notifications:[]})}})),UR={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Wg=new Map,P1=t=>{const e=Wg.get(t);return e?Object.fromEntries(Object.entries(e.stores).map(([r,n])=>[r,n.getState()])):{}},Tce=(t,e,r)=>{if(t===void 0)return{type:"untracked",connection:e.connect(r)};const n=Wg.get(r.name);if(n)return{type:"tracked",store:t,...n};const i={connection:e.connect(r),stores:{}};return Wg.set(r.name,i),{type:"tracked",store:t,...i}},Cce=(t,e)=>{if(e===void 0)return;const r=Wg.get(t);r&&(delete r.stores[e],Object.keys(r.stores).length===0&&Wg.delete(t))},Ece=t=>{var e,r;if(!t)return;const n=t.split(` -`),i=n.findIndex(s=>s.includes("api.setState"));if(i<0)return;const a=((e=n[i+1])==null?void 0:e.trim())||"";return(r=/.+ (.+) .+/.exec(a))==null?void 0:r[1]},Dce=(t,e={})=>(r,n,i)=>{const{enabled:a,anonymousActionType:s,store:o,...l}=e;let c;try{c=(a??(UR?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!c)return t(r,n,i);const{connection:u,...h}=Tce(o,c,l);let d=!0;i.setState=((m,v,b)=>{const w=r(m,v);if(!d)return w;const O=b===void 0?{type:s||Ece(new Error().stack)||"anonymous"}:typeof b=="string"?{type:b}:b;return o===void 0?(u==null||u.send(O,n()),w):(u==null||u.send({...O,type:`${o}/${O.type}`},{...P1(l.name),[o]:i.getState()}),w)}),i.devtools={cleanup:()=>{u&&typeof u.unsubscribe=="function"&&u.unsubscribe(),Cce(l.name,o)}};const f=(...m)=>{const v=d;d=!1,r(...m),d=v},g=t(i.setState,n,i);if(h.type==="untracked"?u==null||u.init(g):(h.stores[h.store]=i,u==null||u.init(Object.fromEntries(Object.entries(h.stores).map(([m,v])=>[m,m===h.store?g:v.getState()])))),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let m=!1;const v=i.dispatch;i.dispatch=(...b)=>{(UR?"production":void 0)!=="production"&&b[0].type==="__setState"&&!m&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),m=!0),v(...b)}}return u.subscribe(m=>{var v;switch(m.type){case"ACTION":if(typeof m.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return E_(m.payload,b=>{if(b.type==="__setState"){if(o===void 0){f(b.state);return}Object.keys(b.state).length!==1&&console.error(` + */const kce=dt("ZoomOut",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),jR=t=>{let e;const r=new Set,n=(c,u)=>{const h=typeof c=="function"?c(e):c;if(!Object.is(h,e)){const d=e;e=u??(typeof h!="object"||h===null)?h:Object.assign({},e,h),r.forEach(f=>f(e,d))}},i=()=>e,o={setState:n,getState:i,getInitialState:()=>l,subscribe:c=>(r.add(c),()=>r.delete(c))},l=e=t(n,i,o);return o},_ce=(t=>t?jR(t):jR),Sce=t=>t;function Tce(t,e=Sce){const r=Cd.useSyncExternalStore(t.subscribe,Cd.useCallback(()=>e(t.getState()),[t,e]),Cd.useCallback(()=>e(t.getInitialState()),[t,e]));return Cd.useDebugValue(r),r}const BR=t=>{const e=_ce(t),r=n=>Tce(e,n);return Object.assign(r,e),r},Hf=(t=>t?BR(t):BR),gd=new Map,ab=Hf(t=>({notifications:[],addNotification:e=>{const r=`${Date.now()}-${Math.random().toString(36).slice(2,9)}`,n={...e,id:r,timestamp:Date.now()};t(a=>({notifications:[...a.notifications,n]}));const i=setTimeout(()=>{gd.delete(r),t(a=>({notifications:a.notifications.filter(s=>s.id!==r)}))},5e3);gd.set(r,i)},removeNotification:e=>{const r=gd.get(e);r&&(clearTimeout(r),gd.delete(e)),t(n=>({notifications:n.notifications.filter(i=>i.id!==e)}))},clearAll:()=>{gd.forEach(e=>clearTimeout(e)),gd.clear(),t({notifications:[]})}})),UR={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Wg=new Map,P1=t=>{const e=Wg.get(t);return e?Object.fromEntries(Object.entries(e.stores).map(([r,n])=>[r,n.getState()])):{}},Cce=(t,e,r)=>{if(t===void 0)return{type:"untracked",connection:e.connect(r)};const n=Wg.get(r.name);if(n)return{type:"tracked",store:t,...n};const i={connection:e.connect(r),stores:{}};return Wg.set(r.name,i),{type:"tracked",store:t,...i}},Ece=(t,e)=>{if(e===void 0)return;const r=Wg.get(t);r&&(delete r.stores[e],Object.keys(r.stores).length===0&&Wg.delete(t))},Dce=t=>{var e,r;if(!t)return;const n=t.split(` +`),i=n.findIndex(s=>s.includes("api.setState"));if(i<0)return;const a=((e=n[i+1])==null?void 0:e.trim())||"";return(r=/.+ (.+) .+/.exec(a))==null?void 0:r[1]},Ace=(t,e={})=>(r,n,i)=>{const{enabled:a,anonymousActionType:s,store:o,...l}=e;let c;try{c=(a??(UR?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!c)return t(r,n,i);const{connection:u,...h}=Cce(o,c,l);let d=!0;i.setState=((m,v,b)=>{const w=r(m,v);if(!d)return w;const O=b===void 0?{type:s||Dce(new Error().stack)||"anonymous"}:typeof b=="string"?{type:b}:b;return o===void 0?(u==null||u.send(O,n()),w):(u==null||u.send({...O,type:`${o}/${O.type}`},{...P1(l.name),[o]:i.getState()}),w)}),i.devtools={cleanup:()=>{u&&typeof u.unsubscribe=="function"&&u.unsubscribe(),Ece(l.name,o)}};const f=(...m)=>{const v=d;d=!1,r(...m),d=v},g=t(i.setState,n,i);if(h.type==="untracked"?u==null||u.init(g):(h.stores[h.store]=i,u==null||u.init(Object.fromEntries(Object.entries(h.stores).map(([m,v])=>[m,m===h.store?g:v.getState()])))),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let m=!1;const v=i.dispatch;i.dispatch=(...b)=>{(UR?"production":void 0)!=="production"&&b[0].type==="__setState"&&!m&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),m=!0),v(...b)}}return u.subscribe(m=>{var v;switch(m.type){case"ACTION":if(typeof m.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return E_(m.payload,b=>{if(b.type==="__setState"){if(o===void 0){f(b.state);return}Object.keys(b.state).length!==1&&console.error(` [zustand devtools middleware] Unsupported __setState action format. When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(), and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } } - `);const w=b.state[o];if(w==null)return;JSON.stringify(i.getState())!==JSON.stringify(w)&&f(w);return}i.dispatchFromDevtools&&typeof i.dispatch=="function"&&i.dispatch(b)});case"DISPATCH":switch(m.payload.type){case"RESET":return f(g),o===void 0?u==null?void 0:u.init(i.getState()):u==null?void 0:u.init(P1(l.name));case"COMMIT":if(o===void 0){u==null||u.init(i.getState());return}return u==null?void 0:u.init(P1(l.name));case"ROLLBACK":return E_(m.state,b=>{if(o===void 0){f(b),u==null||u.init(i.getState());return}f(b[o]),u==null||u.init(P1(l.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return E_(m.state,b=>{if(o===void 0){f(b);return}JSON.stringify(i.getState())!==JSON.stringify(b[o])&&f(b[o])});case"IMPORT_STATE":{const{nextLiftedState:b}=m.payload,w=(v=b.computedStates.slice(-1)[0])==null?void 0:v.state;if(!w)return;f(o===void 0?w:w[o]),u==null||u.send(null,b);return}case"PAUSE_RECORDING":return d=!d}return}}),g},Ace=Dce,E_=(t,e)=>{let r;try{r=JSON.parse(t)}catch(n){console.error("[zustand devtools middleware] Could not parse the received json",n)}r!==void 0&&e(r)};function Nce(t,e){let r;try{r=t()}catch{return}return{getItem:i=>{var a;const s=l=>l===null?null:JSON.parse(l,void 0),o=(a=r.getItem(i))!=null?a:null;return o instanceof Promise?o.then(s):s(o)},setItem:(i,a)=>r.setItem(i,JSON.stringify(a,void 0)),removeItem:i=>r.removeItem(i)}}const QC=t=>e=>{try{const r=t(e);return r instanceof Promise?r:{then(n){return QC(n)(r)},catch(n){return this}}}catch(r){return{then(n){return this},catch(n){return QC(n)(r)}}}},Pce=(t,e)=>(r,n,i)=>{let a={storage:Nce(()=>localStorage),partialize:m=>m,version:0,merge:(m,v)=>({...v,...m}),...e},s=!1;const o=new Set,l=new Set;let c=a.storage;if(!c)return t((...m)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),r(...m)},n,i);const u=()=>{const m=a.partialize({...n()});return c.setItem(a.name,{state:m,version:a.version})},h=i.setState;i.setState=(m,v)=>(h(m,v),u());const d=t((...m)=>(r(...m),u()),n,i);i.getInitialState=()=>d;let f;const g=()=>{var m,v;if(!c)return;s=!1,o.forEach(w=>{var O;return w((O=n())!=null?O:d)});const b=((v=a.onRehydrateStorage)==null?void 0:v.call(a,(m=n())!=null?m:d))||void 0;return QC(c.getItem.bind(c))(a.name).then(w=>{if(w)if(typeof w.version=="number"&&w.version!==a.version){if(a.migrate){const O=a.migrate(w.state,w.version);return O instanceof Promise?O.then(S=>[!0,S]):[!0,O]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,w.state];return[!1,void 0]}).then(w=>{var O;const[S,T]=w;if(f=a.merge(T,(O=n())!=null?O:d),r(f,!0),S)return u()}).then(()=>{b==null||b(f,void 0),f=n(),s=!0,l.forEach(w=>w(f))}).catch(w=>{b==null||b(void 0,w)})};return i.persist={setOptions:m=>{a={...a,...m},m.storage&&(c=m.storage)},clearStorage:()=>{c==null||c.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>g(),hasHydrated:()=>s,onHydrate:m=>(o.add(m),()=>{o.delete(m)}),onFinishHydration:m=>(l.add(m),()=>{l.delete(m)})},a.skipHydration||g(),f||d},Rce=Pce;function Rd(t){if(!t)return"";let e=t.replace(/\/+$/,"");return e=e.replace(/\/+/g,"/"),e}class Fce{constructor(){Me(this,"enabled",!1);Me(this,"queue",[]);Me(this,"flushTimeout",null);Me(this,"sessionId")}debug(e,r){this.log("debug",e,r)}info(e,r){this.log("info",e,r)}warn(e,r){this.log("warn",e,r)}error(e,r){this.log("error",e,r)}setEnabled(e){this.enabled=e}setSessionId(e){this.sessionId=e}log(e,r,n){if(!this.enabled)return;const i=e==="debug"?"log":e;n?console[i](`[FileLog] ${r}`,n):console[i](`[FileLog] ${r}`),this.queue.push({level:e,message:r,data:n,sessionId:this.sessionId}),this.scheduleFlush()}scheduleFlush(){this.flushTimeout||(this.flushTimeout=setTimeout(()=>{this.flush()},100))}async flush(){if(this.flushTimeout=null,this.queue.length===0)return;const e=[...this.queue];this.queue=[];for(const r of e)try{await fetch("/api/debug/log",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}catch{}}}const jr=new Fce,hg=new Map,ju=new Set;function rQ(){const[t,e]=U.useState(null),[r,n]=U.useState(!1),[i,a]=U.useState(null),s=U.useRef(0),o=U.useRef(null),l=U.useCallback(async(u,h,d=!1)=>{var w;const f=Rd(h),g=`${f}:${u}`,m=++s.current;if(jr.info("[FileContent] fetchFile called",{filePath:u,workspacePath:h,normalizedWorkspacePath:f,skipCache:d,requestId:m}),d)hg.delete(g),ju.delete(g);else{const O=hg.get(g);if(O){jr.info("[FileContent] cache hit",{filePath:u,workspacePath:h,requestId:m}),e(O),a(null);return}if(ju.has(g)){jr.info("[FileContent] notFound cache hit",{filePath:u,workspacePath:h,requestId:m}),a("File not found"),e(null);return}}o.current&&(jr.info("[FileContent] aborting previous request",{requestId:m}),o.current.abort()),n(!0),a(null);const v=new AbortController;o.current=v;const b=setTimeout(()=>v.abort(),1e4);try{const O=new URLSearchParams({path:u,workspace:f});jr.info("[FileContent] fetching",{url:`/api/workspace/file?${O}`,requestId:m});const S=await fetch(`/api/workspace/file?${O}`,{signal:v.signal});if(clearTimeout(b),m!==s.current){jr.info("[FileContent] stale response ignored",{filePath:u,requestId:m,currentId:s.current});return}if(!S.ok){jr.error("[FileContent] fetch failed",{status:S.status,requestId:m}),S.status===404&&ju.add(g);let _=`Failed to fetch file: ${S.status}`;try{const C=await S.json();C.error&&(_=C.error)}catch{_=S.statusText||_}throw new Error(_)}const T=await S.json();if(T.error)throw jr.error("[FileContent] response has error field",{filePath:u,error:T.error,requestId:m}),new Error(T.error);jr.info("[FileContent] fetch success",{filePath:u,contentLength:((w=T.content)==null?void 0:w.length)??0,binary:T.binary,mimeType:T.mimeType,hasContent:!!T.content,requestId:m}),hg.set(g,T),ju.delete(g),m===s.current&&(e(T),o.current=null)}catch(O){if(clearTimeout(b),O instanceof Error&&O.name==="AbortError"){if(m!==s.current){jr.info("[FileContent] request aborted by newer request",{filePath:u,requestId:m});return}jr.error("[FileContent] timeout",{filePath:u,workspacePath:h,requestId:m}),a("Request timed out. Try again."),e(null),o.current=null;return}if(m!==s.current){jr.info("[FileContent] stale error ignored",{filePath:u,requestId:m});return}jr.error("[FileContent] error",{filePath:u,workspacePath:h,error:O instanceof Error?O.message:String(O),requestId:m}),a(O instanceof Error?O.message:"Failed to load file"),e(null),o.current=null}finally{m===s.current&&n(!1)}},[]),c=U.useCallback(()=>{e(null),a(null)},[]);return{content:t,isLoading:r,error:i,fetchFile:l,clearContent:c}}function WC(){hg.clear(),ju.clear()}function Lce(t){const r=`${Rd(t)}:`;let n=0;for(const i of ju)i.startsWith(r)&&(ju.delete(i),hg.delete(i),n++);n>0&&jr.info("[FileContent] clearFileNotFoundForWorkspace",{workspacePath:t,clearedCount:n})}const QR={wsStatus:"disconnected",wsError:null,reconnectAttempts:0,workspaces:{},historicalSnapshots:{},refreshSessionFn:null},pi=Hf()(Ace((t,e)=>({...QR,setConnectionStatus:r=>t({wsStatus:r}),setConnectionError:r=>t({wsError:r}),incrementReconnectAttempts:()=>t(r=>({reconnectAttempts:r.reconnectAttempts+1})),resetReconnectAttempts:()=>t({reconnectAttempts:0}),setRefreshSessionFn:r=>t({refreshSessionFn:r}),setInitialFiles:(r,n)=>{const i=Rd(r);Lce(i),t(a=>({workspaces:{...a.workspaces,[i]:{workspacePath:i,files:n,lastUpdated:Date.now()}}}))},clearWorkspace:r=>{const n=Rd(r);t(i=>{const{[n]:a,...s}=i.workspaces;return{workspaces:s}})},addHistoricalSnapshot:(r,n,i,a)=>{var u,h;const s=Rd(n),o=e().workspaces,l=Object.keys(o);let c=a??((u=o[s])==null?void 0:u.files)??null;if(!c&&!a){const d=n.match(/agent_([a-z0-9_]+)/i);if(d){const f=d[1].toLowerCase();for(const g of l){const m=g.match(/workspace(\d+)$/);if(m){const v=parseInt(m[1],10),b=f==="a"?1:f==="b"?2:parseInt(f,10);if(v===b){c=((h=o[g])==null?void 0:h.files)??null;break}}}}}t(d=>({historicalSnapshots:{...d.historicalSnapshots,[r]:{workspacePath:s,files:c,timestamp:i||Date.now()}}}))},setSnapshotFiles:(r,n)=>t(i=>{const a=i.historicalSnapshots[r];return a?{historicalSnapshots:{...i.historicalSnapshots,[r]:{...a,files:n}}}:i}),getWorkspaceFiles:r=>{const n=Rd(r),a=e().workspaces[n];return(a==null?void 0:a.files)||[]},getHistoricalFiles:r=>{var i;const n=e().historicalSnapshots[r];return!n||n.files===null||n.files.length===0?(jr.info("[HistoricalLoad] getHistoricalFiles returning null",{answerLabel:r,hasSnapshot:!!n,filesNull:(n==null?void 0:n.files)===null,filesLength:((i=n==null?void 0:n.files)==null?void 0:i.length)??"N/A"}),null):(jr.info("[HistoricalLoad] getHistoricalFiles returning files",{answerLabel:r,fileCount:n.files.length}),n.files)},reset:()=>t(QR)}),{name:"WorkspaceStore"})),Mce=t=>t.wsStatus,$ce=t=>t.wsError,WR={sessionId:"",question:"",agents:{},agentOrder:[],answers:[],voteDistribution:{},voteHistory:[],currentVotingRound:1,selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],isComplete:!1,selectingWinner:!1,error:void 0,theme:"dark",viewMode:"coordination",turnNumber:1,conversationHistory:[],agentUIState:{},restoredFromSnapshot:!1,automationMode:!1,logDir:void 0,initStatus:void 0,preparationStatus:void 0,preparationDetail:void 0},D_=()=>({dropdownOpen:!1}),Ice=(t,e)=>{const r=`${t}-round-0`;return{id:t,modelName:e,status:"waiting",content:[],currentContent:"",rounds:[{id:r,roundNumber:0,type:"answer",label:"current",content:"",startTimestamp:Date.now()}],currentRoundId:r,displayRoundId:r,answerCount:0,voteCount:0,files:[],toolCalls:[]}},At=Hf((t,e)=>({...WR,initSession:(r,n,i,a,s)=>{const o={},l={};i.forEach(h=>{o[h]=Ice(h,s==null?void 0:s[h]),l[h]=D_()});const c=e(),u=c.turnNumber>1&&c.conversationHistory.length>0;t({sessionId:r,question:n,agents:o,agentOrder:i,answers:[],theme:a,isComplete:!1,selectingWinner:!1,error:void 0,voteDistribution:{},selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],viewMode:"coordination",agentUIState:l,restoredFromSnapshot:!1,...u?{conversationHistory:c.conversationHistory,turnNumber:c.turnNumber}:{conversationHistory:[{role:"user",content:n,turn:1}],turnNumber:1}})},updateAgentContent:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=i==="status"&&n.includes("new_answer")?s.answerCount+1:s.answerCount,l=s.rounds.map(c=>c.id===s.currentRoundId?{...c,content:c.content+n}:c);return{agents:{...a.agents,[r]:{...s,content:[...s.content,n],currentContent:s.currentContent+n,rounds:l,answerCount:o}}}})},updateAgentStatus:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,status:n}}}:i})},addOrchestratorEvent:r=>{t(n=>({orchestratorEvents:[...n.orchestratorEvents,r]}))},updateVoteDistribution:r=>{t({voteDistribution:r})},recordVote:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=a.currentVotingRound;if(s.voteRound===o&&s.voteTarget)return console.log(`[AgentStore] Ignoring duplicate vote from ${r} in round ${o}`),a;const l={...a.voteDistribution};l[n]=(l[n]||0)+1;const c=a.agents[n],u=a.agentOrder.indexOf(n),h=(c==null?void 0:c.answerCount)||1,d=`answer${u+1}.${h}`,f={voterId:r,targetId:n,reason:i,voteRound:o,timestamp:Date.now(),votedAnswerLabel:d},g={...s,voteTarget:n,voteReason:i,voteRound:o,voteCount:s.voteCount+1},m={...a.agents,[r]:g},v=a.agentOrder.length,w=Object.values(m).filter(O=>O.voteRound===o&&O.voteTarget).length>=v;return{agents:m,voteDistribution:l,voteHistory:[...a.voteHistory,f],selectingWinner:w}})},setConsensus:r=>{const n=e();n.closeAllDropdowns(),t({selectingWinner:!1});const i=e().agents[r];if(i){const a=i.rounds.find(s=>s.id===i.currentRoundId);a&&a.label==="current"?t(s=>{const o=s.agents[r];if(!o)return s;const l=o.rounds.map(c=>c.id===o.currentRoundId?{...c,label:"final"}:c);return{agents:{...s.agents,[r]:{...o,rounds:l}}}}):n.startNewRound(r,"final","final")}t({selectedAgent:r}),t({viewMode:"finalStreaming"})},setFinalAnswer:(r,n,i)=>{const a=Date.now(),s=e();t({finalAnswer:"__PENDING__",selectedAgent:i}),!s.answers.find(l=>l.agentId===i&&l.id.includes("-final"))&&i&&s.addAnswer({id:`${i}-final-${a}`,agentId:i,answerNumber:0,content:"__PENDING__",timestamp:a,votes:0,isWinner:!0})},addAnswer:r=>{t(n=>{const i=n.agents[r.agentId],a=i?{...n.agents,[r.agentId]:{...i,answerCount:Math.max(i.answerCount,r.answerNumber)}}:n.agents;return{answers:[...n.answers,r],agents:a}})},addFileChange:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,files:[...a.files,n]}}}:i})},addToolCall:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,toolCalls:[...a.toolCalls,n]}}}:i})},updateToolResult:(r,n,i,a)=>{t(s=>{const o=s.agents[r];if(!o)return s;const l=o.toolCalls.map(c=>c.id===n||!n&&c.result===void 0?{...c,result:i,success:a}:c);return{agents:{...s.agents,[r]:{...o,toolCalls:l}}}})},setError:r=>{t({error:r})},setComplete:r=>{const n=e();if(r){const i=Object.fromEntries(Object.entries(n.agents).map(([a,s])=>[a,{...s,status:"completed"}]));t({isComplete:r,agents:i}),n.selectedAgent&&e().fetchCleanFinalAnswer()}else t({isComplete:r})},setViewMode:r=>{t({viewMode:r})},backToCoordination:()=>{t({viewMode:"coordination"})},fetchCleanFinalAnswer:async()=>{const r=e();if(r.sessionId){try{const n=await fetch(`/api/sessions/${r.sessionId}/final-answer`);if(n.ok){const i=await n.json();if(i.answer){t({finalAnswer:i.answer});const a=r.selectedAgent;a&&t(s=>({answers:s.answers.map(o=>o.agentId===a&&o.answerNumber===0?{...o,content:i.answer}:o)}))}}}catch(n){console.error("Failed to fetch clean final answer:",n)}t({viewMode:"finalComplete"})}},startNewRound:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=a.agentOrder.indexOf(r)+1,c=s.rounds.filter(b=>b.type==="answer"&&b.label!=="current").length+1,u=`answer${o}.${c}`,h=Date.now(),d=`${r}-round-${s.rounds.length}`,f=s.rounds.map(b=>{if(b.id===s.currentRoundId&&!b.endTimestamp){const w=b.label==="current"?u:b.label;return{...b,endTimestamp:h,label:w}}return b}),g=i==="final"?"final":"current",m=n==="answer"?c+1:s.rounds.filter(b=>b.type===n&&b.label!=="current").length+1,v={id:d,roundNumber:m,type:n,label:g,content:"",startTimestamp:h};return{agents:{...a.agents,[r]:{...s,rounds:[...f,v],currentRoundId:d,displayRoundId:d,currentContent:"",voteCount:n==="vote"?s.voteCount+1:s.voteCount}}}})},finalizeRoundWithLabel:(r,n,i=!0)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=Date.now(),l=s.rounds.find(h=>h.id===s.currentRoundId),c=s.rounds.map(h=>h.id===s.currentRoundId&&h.label==="current"?{...h,endTimestamp:o,label:n}:h),u=s.currentRoundId;if(i){const h=`${r}-round-${s.rounds.length}`,d={id:h,roundNumber:s.rounds.length,type:"answer",label:"current",content:"",startTimestamp:o};return{agents:{...a.agents,[r]:{...s,rounds:[...c,d],currentRoundId:h,displayRoundId:h,currentContent:""}}}}return{agents:{...a.agents,[r]:{...s,rounds:c,displayRoundId:u,currentContent:(l==null?void 0:l.content)||""}}}})},setAgentRound:(r,n)=>{t(i=>{const a=i.agents[r];if(!a)return i;const s=a.rounds.find(o=>o.id===n);return s?{agents:{...i.agents,[r]:{...a,displayRoundId:n,currentContent:s.content}}}:i})},reset:()=>{t(WR)},addToConversationHistory:(r,n)=>{t(i=>({conversationHistory:[...i.conversationHistory,{role:r,content:n,turn:i.turnNumber}]}))},startContinuation:r=>{t(n=>{const a=[...n.finalAnswer?[...n.conversationHistory,{role:"assistant",content:n.finalAnswer,turn:n.turnNumber}]:n.conversationHistory,{role:"user",content:r,turn:n.turnNumber+1}],s={},o={};return n.agentOrder.forEach(l=>{const c=n.agents[l],u=`${l}-round-0`;s[l]={id:l,modelName:c==null?void 0:c.modelName,status:"waiting",content:[],currentContent:"",rounds:[{id:u,roundNumber:0,type:"answer",label:"current",content:"",startTimestamp:Date.now()}],currentRoundId:u,displayRoundId:u,answerCount:0,voteCount:0,files:[],toolCalls:[]},o[l]=D_()}),{question:r,agents:s,answers:[],voteDistribution:{},selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],isComplete:!1,selectingWinner:!1,error:void 0,viewMode:"coordination",turnNumber:n.turnNumber+1,conversationHistory:a,agentUIState:o}})},setAgentDropdownOpen:(r,n)=>{t(i=>({agentUIState:{...i.agentUIState,[r]:{...i.agentUIState[r]||D_(),dropdownOpen:n}}}))},closeAllDropdowns:()=>{t(r=>{const n={};return Object.entries(r.agentUIState).forEach(([i,a])=>{n[i]={...a,dropdownOpen:!1}}),{agentUIState:n}})},setPreparationStatus:(r,n)=>{t({preparationStatus:r,preparationDetail:n})},processWSEvent:r=>{const n=e();switch(r.type){case"preparation_status":"status"in r&&n.setPreparationStatus(r.status,"detail"in r?r.detail:void 0);break;case"init":"agents"in r&&"question"in r?(t({initStatus:void 0}),n.setPreparationStatus(void 0,void 0),"automation_mode"in r&&t({automationMode:r.automation_mode}),"log_dir"in r&&t({logDir:r.log_dir}),n.initSession(r.session_id,r.question,r.agents,"theme"in r?r.theme:"dark","agent_models"in r?r.agent_models:void 0)):"automation_mode"in r&&t({automationMode:r.automation_mode});break;case"agent_content":"agent_id"in r&&"content"in r&&n.updateAgentContent(r.agent_id,r.content,"content_type"in r?r.content_type:"thinking");break;case"agent_status":"agent_id"in r&&"status"in r&&n.updateAgentStatus(r.agent_id,r.status);break;case"orchestrator_event":"event"in r&&n.addOrchestratorEvent(r.event);break;case"vote_cast":if("voter_id"in r&&"target_id"in r){const i=e().agents[r.voter_id],a=i?i.voteCount+1:1,o=`vote${e().agentOrder.indexOf(r.voter_id)+1}.${a}`;n.finalizeRoundWithLabel(r.voter_id,o,!1),n.recordVote(r.voter_id,r.target_id,"reason"in r?r.reason:"");const l=e().agents[r.voter_id],c=e().agents[r.target_id],u=c!=null&&c.modelName?`${r.target_id} (${c.modelName})`:r.target_id;ab.getState().addNotification({type:"vote",title:`${r.voter_id} voted`,message:`Voted for ${u}`,agentId:r.voter_id,modelName:l==null?void 0:l.modelName})}break;case"vote_distribution":break;case"consensus_reached":"winner_id"in r&&n.setConsensus(r.winner_id);break;case"final_answer":"answer"in r&&n.setFinalAnswer(r.answer,"vote_results"in r?r.vote_results:{},"selected_agent"in r?r.selected_agent:"");break;case"new_answer":if("agent_id"in r&&"content"in r){const i=r,a=e().agents[i.agent_id];if(a&&a.voteCount>0)break;t(d=>{const f={...d.agents},g=Date.now();return d.agentOrder.forEach(m=>{const v=f[m];if(!v)return;const b=v.rounds.find(O=>O.id===v.currentRoundId),w=b&&b.label!=="current"&&b.type==="vote";if(w||v.status==="completed"){const O=w?`${m}-round-${v.rounds.length}`:v.currentRoundId,S=w?[...v.rounds,{id:O,roundNumber:v.rounds.length,type:"answer",label:"current",content:"",startTimestamp:g}]:v.rounds;f[m]={...v,status:"working",rounds:S,currentRoundId:O,displayRoundId:O,currentContent:""}}}),{agents:f,currentVotingRound:d.currentVotingRound+1,voteDistribution:{},selectingWinner:!1}});const s=e().agentOrder.indexOf(i.agent_id)+1,o=i.answer_number??1,l=i.answer_label||`answer${s}.${o}`;if(n.finalizeRoundWithLabel(i.agent_id,l),n.addAnswer({id:i.answer_id??`${i.agent_id}-${Date.now()}`,agentId:i.agent_id,answerNumber:o,content:i.content,timestamp:i.timestamp<1e12?i.timestamp*1e3:i.timestamp,votes:0,workspacePath:i.workspace_path}),i.workspace_path){const d=i.timestamp<1e12?i.timestamp*1e3:i.timestamp;pi.getState().addHistoricalSnapshot(l,i.workspace_path,d)}const c=e().agents[i.agent_id],u=i.content.slice(0,100)+(i.content.length>100?"...":""),h=i.answer_id??`${i.agent_id}-${Date.now()}`;ab.getState().addNotification({type:"answer",title:`New Answer from ${i.agent_id}`,message:u,agentId:i.agent_id,modelName:c==null?void 0:c.modelName,answerId:h})}break;case"restart":"reason"in r&&e().agentOrder.forEach(a=>{n.startNewRound(a,"answer")});break;case"file_change":"agent_id"in r&&"path"in r&&n.addFileChange(r.agent_id,{path:r.path,operation:"operation"in r?r.operation:"create",timestamp:r.timestamp<1e12?r.timestamp*1e3:r.timestamp,contentPreview:"content_preview"in r?r.content_preview:void 0});break;case"tool_call":"agent_id"in r&&"tool_name"in r&&n.addToolCall(r.agent_id,{id:"tool_id"in r?r.tool_id:void 0,name:r.tool_name,args:"tool_args"in r?r.tool_args:{},timestamp:r.timestamp<1e12?r.timestamp*1e3:r.timestamp});break;case"tool_result":"agent_id"in r&&"result"in r&&n.updateToolResult(r.agent_id,"tool_id"in r?r.tool_id:void 0,r.result,"success"in r?r.success:!0);break;case"timeout_status":"agent_id"in r&&"timeout_state"in r&&t(i=>{const a=i.agents[r.agent_id];return a?{agents:{...i.agents,[r.agent_id]:{...a,timeoutState:r.timeout_state}}}:i});break;case"hook_execution":if("agent_id"in r&&"hook_info"in r){const i=r;t(a=>{const s=a.agents[i.agent_id];if(!s||!s.toolCalls.length)return a;const o=[...s.toolCalls];let l=-1;if(i.tool_call_id&&(l=o.findIndex(c=>c.id===i.tool_call_id)),l===-1&&(l=o.length-1),l>=0){const c={...o[l]};i.hook_info.hook_type==="pre"?c.preHooks=[...c.preHooks||[],i.hook_info]:c.postHooks=[...c.postHooks||[],i.hook_info],o[l]=c}return{agents:{...a.agents,[i.agent_id]:{...s,toolCalls:o}}}})}break;case"error":"message"in r&&n.setError(r.message);break;case"done":case"coordination_complete":n.setComplete(!0),t({initStatus:void 0});break;case"init_status":"message"in r&&"step"in r&&"progress"in r&&t({initStatus:{message:r.message,step:r.step,progress:r.progress}});break;case"state_snapshot":if("agents"in r&&Array.isArray(r.agents)){const i=r;if(i.automation_mode!==void 0&&t({automationMode:i.automation_mode}),i.log_dir&&t({logDir:i.log_dir}),n.initSession(i.session_id,i.question||"",i.agents,i.theme||"dark",i.agent_models),i.agent_status&&i.agent_outputs&&Object.entries(i.agent_status).forEach(([a,s])=>{var c;const o=(c=i.agent_outputs)==null?void 0:c[a],l=o&&o.length>0&&o.some(u=>u.length>0);(s==="waiting"||l)&&n.updateAgentStatus(a,s)}),i.agent_outputs&&t(a=>{const s={...a.agents};return Object.entries(i.agent_outputs).forEach(([o,l])=>{if(s[o]){const c=l.join(""),u=s[o].rounds.map((h,d)=>d===0?{...h,content:c}:h);s[o]={...s[o],rounds:u}}}),{agents:s}}),i.vote_distribution&&n.updateVoteDistribution(i.vote_distribution),i.vote_targets&&t(a=>{const s={...a.agents};return Object.entries(i.vote_targets).forEach(([o,l])=>{s[o]&&(s[o]={...s[o],voteTarget:l})}),{agents:s}}),i.final_answer&&i.selected_agent)t({restoredFromSnapshot:!0}),n.setFinalAnswer(i.final_answer,{},i.selected_agent),n.setComplete(!0);else if(i.selected_agent){t({restoredFromSnapshot:!0});const a=i.session_id,s=i.selected_agent;fetch(`/api/sessions/${a}/final-answer`).then(o=>o.json()).then(o=>{e().sessionId===a&&o.answer&&(n.setFinalAnswer(o.answer,{},s),n.setComplete(!0))}).catch(()=>{})}}break}}})),Th=t=>t.agents,Vm=t=>t.agentOrder,oA=t=>t.answers,nQ=t=>t.voteDistribution,jce=t=>t.voteHistory,Bce=t=>t.currentVotingRound,Ch=t=>t.selectedAgent,iQ=t=>t.finalAnswer,lA=t=>t.isComplete,cA=t=>t.question,aQ=t=>t.viewMode,Uce=t=>t.selectingWinner,Qce=t=>t.restoredFromSnapshot,Wce=t=>t.automationMode,zce=t=>t.logDir,Vce=t=>t.initStatus,sQ=t=>t.preparationStatus,qce=t=>t.preparationDetail;function zR(t){if(!t)return t;let n=t.split(` + `);const w=b.state[o];if(w==null)return;JSON.stringify(i.getState())!==JSON.stringify(w)&&f(w);return}i.dispatchFromDevtools&&typeof i.dispatch=="function"&&i.dispatch(b)});case"DISPATCH":switch(m.payload.type){case"RESET":return f(g),o===void 0?u==null?void 0:u.init(i.getState()):u==null?void 0:u.init(P1(l.name));case"COMMIT":if(o===void 0){u==null||u.init(i.getState());return}return u==null?void 0:u.init(P1(l.name));case"ROLLBACK":return E_(m.state,b=>{if(o===void 0){f(b),u==null||u.init(i.getState());return}f(b[o]),u==null||u.init(P1(l.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return E_(m.state,b=>{if(o===void 0){f(b);return}JSON.stringify(i.getState())!==JSON.stringify(b[o])&&f(b[o])});case"IMPORT_STATE":{const{nextLiftedState:b}=m.payload,w=(v=b.computedStates.slice(-1)[0])==null?void 0:v.state;if(!w)return;f(o===void 0?w:w[o]),u==null||u.send(null,b);return}case"PAUSE_RECORDING":return d=!d}return}}),g},Nce=Ace,E_=(t,e)=>{let r;try{r=JSON.parse(t)}catch(n){console.error("[zustand devtools middleware] Could not parse the received json",n)}r!==void 0&&e(r)};function Pce(t,e){let r;try{r=t()}catch{return}return{getItem:i=>{var a;const s=l=>l===null?null:JSON.parse(l,void 0),o=(a=r.getItem(i))!=null?a:null;return o instanceof Promise?o.then(s):s(o)},setItem:(i,a)=>r.setItem(i,JSON.stringify(a,void 0)),removeItem:i=>r.removeItem(i)}}const QC=t=>e=>{try{const r=t(e);return r instanceof Promise?r:{then(n){return QC(n)(r)},catch(n){return this}}}catch(r){return{then(n){return this},catch(n){return QC(n)(r)}}}},Rce=(t,e)=>(r,n,i)=>{let a={storage:Pce(()=>localStorage),partialize:m=>m,version:0,merge:(m,v)=>({...v,...m}),...e},s=!1;const o=new Set,l=new Set;let c=a.storage;if(!c)return t((...m)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),r(...m)},n,i);const u=()=>{const m=a.partialize({...n()});return c.setItem(a.name,{state:m,version:a.version})},h=i.setState;i.setState=(m,v)=>(h(m,v),u());const d=t((...m)=>(r(...m),u()),n,i);i.getInitialState=()=>d;let f;const g=()=>{var m,v;if(!c)return;s=!1,o.forEach(w=>{var O;return w((O=n())!=null?O:d)});const b=((v=a.onRehydrateStorage)==null?void 0:v.call(a,(m=n())!=null?m:d))||void 0;return QC(c.getItem.bind(c))(a.name).then(w=>{if(w)if(typeof w.version=="number"&&w.version!==a.version){if(a.migrate){const O=a.migrate(w.state,w.version);return O instanceof Promise?O.then(S=>[!0,S]):[!0,O]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,w.state];return[!1,void 0]}).then(w=>{var O;const[S,T]=w;if(f=a.merge(T,(O=n())!=null?O:d),r(f,!0),S)return u()}).then(()=>{b==null||b(f,void 0),f=n(),s=!0,l.forEach(w=>w(f))}).catch(w=>{b==null||b(void 0,w)})};return i.persist={setOptions:m=>{a={...a,...m},m.storage&&(c=m.storage)},clearStorage:()=>{c==null||c.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>g(),hasHydrated:()=>s,onHydrate:m=>(o.add(m),()=>{o.delete(m)}),onFinishHydration:m=>(l.add(m),()=>{l.delete(m)})},a.skipHydration||g(),f||d},Fce=Rce;function Rd(t){if(!t)return"";let e=t.replace(/\/+$/,"");return e=e.replace(/\/+/g,"/"),e}class Lce{constructor(){Me(this,"enabled",!1);Me(this,"queue",[]);Me(this,"flushTimeout",null);Me(this,"sessionId")}debug(e,r){this.log("debug",e,r)}info(e,r){this.log("info",e,r)}warn(e,r){this.log("warn",e,r)}error(e,r){this.log("error",e,r)}setEnabled(e){this.enabled=e}setSessionId(e){this.sessionId=e}log(e,r,n){if(!this.enabled)return;const i=e==="debug"?"log":e;n?console[i](`[FileLog] ${r}`,n):console[i](`[FileLog] ${r}`),this.queue.push({level:e,message:r,data:n,sessionId:this.sessionId}),this.scheduleFlush()}scheduleFlush(){this.flushTimeout||(this.flushTimeout=setTimeout(()=>{this.flush()},100))}async flush(){if(this.flushTimeout=null,this.queue.length===0)return;const e=[...this.queue];this.queue=[];for(const r of e)try{await fetch("/api/debug/log",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}catch{}}}const jr=new Lce,hg=new Map,ju=new Set;function nQ(){const[t,e]=U.useState(null),[r,n]=U.useState(!1),[i,a]=U.useState(null),s=U.useRef(0),o=U.useRef(null),l=U.useCallback(async(u,h,d=!1)=>{var w;const f=Rd(h),g=`${f}:${u}`,m=++s.current;if(jr.info("[FileContent] fetchFile called",{filePath:u,workspacePath:h,normalizedWorkspacePath:f,skipCache:d,requestId:m}),d)hg.delete(g),ju.delete(g);else{const O=hg.get(g);if(O){jr.info("[FileContent] cache hit",{filePath:u,workspacePath:h,requestId:m}),e(O),a(null);return}if(ju.has(g)){jr.info("[FileContent] notFound cache hit",{filePath:u,workspacePath:h,requestId:m}),a("File not found"),e(null);return}}o.current&&(jr.info("[FileContent] aborting previous request",{requestId:m}),o.current.abort()),n(!0),a(null);const v=new AbortController;o.current=v;const b=setTimeout(()=>v.abort(),1e4);try{const O=new URLSearchParams({path:u,workspace:f});jr.info("[FileContent] fetching",{url:`/api/workspace/file?${O}`,requestId:m});const S=await fetch(`/api/workspace/file?${O}`,{signal:v.signal});if(clearTimeout(b),m!==s.current){jr.info("[FileContent] stale response ignored",{filePath:u,requestId:m,currentId:s.current});return}if(!S.ok){jr.error("[FileContent] fetch failed",{status:S.status,requestId:m}),S.status===404&&ju.add(g);let _=`Failed to fetch file: ${S.status}`;try{const C=await S.json();C.error&&(_=C.error)}catch{_=S.statusText||_}throw new Error(_)}const T=await S.json();if(T.error)throw jr.error("[FileContent] response has error field",{filePath:u,error:T.error,requestId:m}),new Error(T.error);jr.info("[FileContent] fetch success",{filePath:u,contentLength:((w=T.content)==null?void 0:w.length)??0,binary:T.binary,mimeType:T.mimeType,hasContent:!!T.content,requestId:m}),hg.set(g,T),ju.delete(g),m===s.current&&(e(T),o.current=null)}catch(O){if(clearTimeout(b),O instanceof Error&&O.name==="AbortError"){if(m!==s.current){jr.info("[FileContent] request aborted by newer request",{filePath:u,requestId:m});return}jr.error("[FileContent] timeout",{filePath:u,workspacePath:h,requestId:m}),a("Request timed out. Try again."),e(null),o.current=null;return}if(m!==s.current){jr.info("[FileContent] stale error ignored",{filePath:u,requestId:m});return}jr.error("[FileContent] error",{filePath:u,workspacePath:h,error:O instanceof Error?O.message:String(O),requestId:m}),a(O instanceof Error?O.message:"Failed to load file"),e(null),o.current=null}finally{m===s.current&&n(!1)}},[]),c=U.useCallback(()=>{e(null),a(null)},[]);return{content:t,isLoading:r,error:i,fetchFile:l,clearContent:c}}function WC(){hg.clear(),ju.clear()}function Mce(t){const r=`${Rd(t)}:`;let n=0;for(const i of ju)i.startsWith(r)&&(ju.delete(i),hg.delete(i),n++);n>0&&jr.info("[FileContent] clearFileNotFoundForWorkspace",{workspacePath:t,clearedCount:n})}const QR={wsStatus:"disconnected",wsError:null,reconnectAttempts:0,workspaces:{},historicalSnapshots:{},refreshSessionFn:null},pi=Hf()(Nce((t,e)=>({...QR,setConnectionStatus:r=>t({wsStatus:r}),setConnectionError:r=>t({wsError:r}),incrementReconnectAttempts:()=>t(r=>({reconnectAttempts:r.reconnectAttempts+1})),resetReconnectAttempts:()=>t({reconnectAttempts:0}),setRefreshSessionFn:r=>t({refreshSessionFn:r}),setInitialFiles:(r,n)=>{const i=Rd(r);Mce(i),t(a=>({workspaces:{...a.workspaces,[i]:{workspacePath:i,files:n,lastUpdated:Date.now()}}}))},clearWorkspace:r=>{const n=Rd(r);t(i=>{const{[n]:a,...s}=i.workspaces;return{workspaces:s}})},addHistoricalSnapshot:(r,n,i,a)=>{var u,h;const s=Rd(n),o=e().workspaces,l=Object.keys(o);let c=a??((u=o[s])==null?void 0:u.files)??null;if(!c&&!a){const d=n.match(/agent_([a-z0-9_]+)/i);if(d){const f=d[1].toLowerCase();for(const g of l){const m=g.match(/workspace(\d+)$/);if(m){const v=parseInt(m[1],10),b=f==="a"?1:f==="b"?2:parseInt(f,10);if(v===b){c=((h=o[g])==null?void 0:h.files)??null;break}}}}}t(d=>({historicalSnapshots:{...d.historicalSnapshots,[r]:{workspacePath:s,files:c,timestamp:i||Date.now()}}}))},setSnapshotFiles:(r,n)=>t(i=>{const a=i.historicalSnapshots[r];return a?{historicalSnapshots:{...i.historicalSnapshots,[r]:{...a,files:n}}}:i}),getWorkspaceFiles:r=>{const n=Rd(r),a=e().workspaces[n];return(a==null?void 0:a.files)||[]},getHistoricalFiles:r=>{var i;const n=e().historicalSnapshots[r];return!n||n.files===null||n.files.length===0?(jr.info("[HistoricalLoad] getHistoricalFiles returning null",{answerLabel:r,hasSnapshot:!!n,filesNull:(n==null?void 0:n.files)===null,filesLength:((i=n==null?void 0:n.files)==null?void 0:i.length)??"N/A"}),null):(jr.info("[HistoricalLoad] getHistoricalFiles returning files",{answerLabel:r,fileCount:n.files.length}),n.files)},reset:()=>t(QR)}),{name:"WorkspaceStore"})),$ce=t=>t.wsStatus,Ice=t=>t.wsError,WR={sessionId:"",question:"",agents:{},agentOrder:[],answers:[],voteDistribution:{},voteHistory:[],currentVotingRound:1,selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],isComplete:!1,selectingWinner:!1,error:void 0,theme:"dark",viewMode:"coordination",turnNumber:1,conversationHistory:[],agentUIState:{},restoredFromSnapshot:!1,automationMode:!1,logDir:void 0,initStatus:void 0,preparationStatus:void 0,preparationDetail:void 0},D_=()=>({dropdownOpen:!1}),jce=(t,e)=>{const r=`${t}-round-0`;return{id:t,modelName:e,status:"waiting",content:[],currentContent:"",rounds:[{id:r,roundNumber:0,type:"answer",label:"current",content:"",startTimestamp:Date.now()}],currentRoundId:r,displayRoundId:r,answerCount:0,voteCount:0,files:[],toolCalls:[]}},At=Hf((t,e)=>({...WR,initSession:(r,n,i,a,s)=>{const o={},l={};i.forEach(h=>{o[h]=jce(h,s==null?void 0:s[h]),l[h]=D_()});const c=e(),u=c.turnNumber>1&&c.conversationHistory.length>0;t({sessionId:r,question:n,agents:o,agentOrder:i,answers:[],theme:a,isComplete:!1,selectingWinner:!1,error:void 0,voteDistribution:{},selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],viewMode:"coordination",agentUIState:l,restoredFromSnapshot:!1,...u?{conversationHistory:c.conversationHistory,turnNumber:c.turnNumber}:{conversationHistory:[{role:"user",content:n,turn:1}],turnNumber:1}})},updateAgentContent:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=i==="status"&&n.includes("new_answer")?s.answerCount+1:s.answerCount,l=s.rounds.map(c=>c.id===s.currentRoundId?{...c,content:c.content+n}:c);return{agents:{...a.agents,[r]:{...s,content:[...s.content,n],currentContent:s.currentContent+n,rounds:l,answerCount:o}}}})},updateAgentStatus:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,status:n}}}:i})},addOrchestratorEvent:r=>{t(n=>({orchestratorEvents:[...n.orchestratorEvents,r]}))},updateVoteDistribution:r=>{t({voteDistribution:r})},recordVote:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=a.currentVotingRound;if(s.voteRound===o&&s.voteTarget)return console.log(`[AgentStore] Ignoring duplicate vote from ${r} in round ${o}`),a;const l={...a.voteDistribution};l[n]=(l[n]||0)+1;const c=a.agents[n],u=a.agentOrder.indexOf(n),h=(c==null?void 0:c.answerCount)||1,d=`answer${u+1}.${h}`,f={voterId:r,targetId:n,reason:i,voteRound:o,timestamp:Date.now(),votedAnswerLabel:d},g={...s,voteTarget:n,voteReason:i,voteRound:o,voteCount:s.voteCount+1},m={...a.agents,[r]:g},v=a.agentOrder.length,w=Object.values(m).filter(O=>O.voteRound===o&&O.voteTarget).length>=v;return{agents:m,voteDistribution:l,voteHistory:[...a.voteHistory,f],selectingWinner:w}})},setConsensus:r=>{const n=e();n.closeAllDropdowns(),t({selectingWinner:!1});const i=e().agents[r];if(i){const a=i.rounds.find(s=>s.id===i.currentRoundId);a&&a.label==="current"?t(s=>{const o=s.agents[r];if(!o)return s;const l=o.rounds.map(c=>c.id===o.currentRoundId?{...c,label:"final"}:c);return{agents:{...s.agents,[r]:{...o,rounds:l}}}}):n.startNewRound(r,"final","final")}t({selectedAgent:r}),t({viewMode:"finalStreaming"})},setFinalAnswer:(r,n,i)=>{const a=Date.now(),s=e();t({finalAnswer:"__PENDING__",selectedAgent:i}),!s.answers.find(l=>l.agentId===i&&l.id.includes("-final"))&&i&&s.addAnswer({id:`${i}-final-${a}`,agentId:i,answerNumber:0,content:"__PENDING__",timestamp:a,votes:0,isWinner:!0})},addAnswer:r=>{t(n=>{const i=n.agents[r.agentId],a=i?{...n.agents,[r.agentId]:{...i,answerCount:Math.max(i.answerCount,r.answerNumber)}}:n.agents;return{answers:[...n.answers,r],agents:a}})},addFileChange:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,files:[...a.files,n]}}}:i})},addToolCall:(r,n)=>{t(i=>{const a=i.agents[r];return a?{agents:{...i.agents,[r]:{...a,toolCalls:[...a.toolCalls,n]}}}:i})},updateToolResult:(r,n,i,a)=>{t(s=>{const o=s.agents[r];if(!o)return s;const l=o.toolCalls.map(c=>c.id===n||!n&&c.result===void 0?{...c,result:i,success:a}:c);return{agents:{...s.agents,[r]:{...o,toolCalls:l}}}})},setError:r=>{t({error:r})},setComplete:r=>{const n=e();if(r){const i=Object.fromEntries(Object.entries(n.agents).map(([a,s])=>[a,{...s,status:"completed"}]));t({isComplete:r,agents:i}),n.selectedAgent&&e().fetchCleanFinalAnswer()}else t({isComplete:r})},setViewMode:r=>{t({viewMode:r})},backToCoordination:()=>{t({viewMode:"coordination"})},fetchCleanFinalAnswer:async()=>{const r=e();if(r.sessionId){try{const n=await fetch(`/api/sessions/${r.sessionId}/final-answer`);if(n.ok){const i=await n.json();if(i.answer){t({finalAnswer:i.answer});const a=r.selectedAgent;a&&t(s=>({answers:s.answers.map(o=>o.agentId===a&&o.answerNumber===0?{...o,content:i.answer}:o)}))}}}catch(n){console.error("Failed to fetch clean final answer:",n)}t({viewMode:"finalComplete"})}},startNewRound:(r,n,i)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=a.agentOrder.indexOf(r)+1,c=s.rounds.filter(b=>b.type==="answer"&&b.label!=="current").length+1,u=`answer${o}.${c}`,h=Date.now(),d=`${r}-round-${s.rounds.length}`,f=s.rounds.map(b=>{if(b.id===s.currentRoundId&&!b.endTimestamp){const w=b.label==="current"?u:b.label;return{...b,endTimestamp:h,label:w}}return b}),g=i==="final"?"final":"current",m=n==="answer"?c+1:s.rounds.filter(b=>b.type===n&&b.label!=="current").length+1,v={id:d,roundNumber:m,type:n,label:g,content:"",startTimestamp:h};return{agents:{...a.agents,[r]:{...s,rounds:[...f,v],currentRoundId:d,displayRoundId:d,currentContent:"",voteCount:n==="vote"?s.voteCount+1:s.voteCount}}}})},finalizeRoundWithLabel:(r,n,i=!0)=>{t(a=>{const s=a.agents[r];if(!s)return a;const o=Date.now(),l=s.rounds.find(h=>h.id===s.currentRoundId),c=s.rounds.map(h=>h.id===s.currentRoundId&&h.label==="current"?{...h,endTimestamp:o,label:n}:h),u=s.currentRoundId;if(i){const h=`${r}-round-${s.rounds.length}`,d={id:h,roundNumber:s.rounds.length,type:"answer",label:"current",content:"",startTimestamp:o};return{agents:{...a.agents,[r]:{...s,rounds:[...c,d],currentRoundId:h,displayRoundId:h,currentContent:""}}}}return{agents:{...a.agents,[r]:{...s,rounds:c,displayRoundId:u,currentContent:(l==null?void 0:l.content)||""}}}})},setAgentRound:(r,n)=>{t(i=>{const a=i.agents[r];if(!a)return i;const s=a.rounds.find(o=>o.id===n);return s?{agents:{...i.agents,[r]:{...a,displayRoundId:n,currentContent:s.content}}}:i})},reset:()=>{t(WR)},addToConversationHistory:(r,n)=>{t(i=>({conversationHistory:[...i.conversationHistory,{role:r,content:n,turn:i.turnNumber}]}))},startContinuation:r=>{t(n=>{const a=[...n.finalAnswer?[...n.conversationHistory,{role:"assistant",content:n.finalAnswer,turn:n.turnNumber}]:n.conversationHistory,{role:"user",content:r,turn:n.turnNumber+1}],s={},o={};return n.agentOrder.forEach(l=>{const c=n.agents[l],u=`${l}-round-0`;s[l]={id:l,modelName:c==null?void 0:c.modelName,status:"waiting",content:[],currentContent:"",rounds:[{id:u,roundNumber:0,type:"answer",label:"current",content:"",startTimestamp:Date.now()}],currentRoundId:u,displayRoundId:u,answerCount:0,voteCount:0,files:[],toolCalls:[]},o[l]=D_()}),{question:r,agents:s,answers:[],voteDistribution:{},selectedAgent:void 0,finalAnswer:void 0,orchestratorEvents:[],isComplete:!1,selectingWinner:!1,error:void 0,viewMode:"coordination",turnNumber:n.turnNumber+1,conversationHistory:a,agentUIState:o}})},setAgentDropdownOpen:(r,n)=>{t(i=>({agentUIState:{...i.agentUIState,[r]:{...i.agentUIState[r]||D_(),dropdownOpen:n}}}))},closeAllDropdowns:()=>{t(r=>{const n={};return Object.entries(r.agentUIState).forEach(([i,a])=>{n[i]={...a,dropdownOpen:!1}}),{agentUIState:n}})},setPreparationStatus:(r,n)=>{t({preparationStatus:r,preparationDetail:n})},processWSEvent:r=>{const n=e();switch(r.type){case"preparation_status":"status"in r&&n.setPreparationStatus(r.status,"detail"in r?r.detail:void 0);break;case"init":"agents"in r&&"question"in r?(t({initStatus:void 0}),n.setPreparationStatus(void 0,void 0),"automation_mode"in r&&t({automationMode:r.automation_mode}),"log_dir"in r&&t({logDir:r.log_dir}),n.initSession(r.session_id,r.question,r.agents,"theme"in r?r.theme:"dark","agent_models"in r?r.agent_models:void 0)):"automation_mode"in r&&t({automationMode:r.automation_mode});break;case"agent_content":"agent_id"in r&&"content"in r&&n.updateAgentContent(r.agent_id,r.content,"content_type"in r?r.content_type:"thinking");break;case"agent_status":"agent_id"in r&&"status"in r&&n.updateAgentStatus(r.agent_id,r.status);break;case"orchestrator_event":"event"in r&&n.addOrchestratorEvent(r.event);break;case"vote_cast":if("voter_id"in r&&"target_id"in r){const i=e().agents[r.voter_id],a=i?i.voteCount+1:1,o=`vote${e().agentOrder.indexOf(r.voter_id)+1}.${a}`;n.finalizeRoundWithLabel(r.voter_id,o,!1),n.recordVote(r.voter_id,r.target_id,"reason"in r?r.reason:"");const l=e().agents[r.voter_id],c=e().agents[r.target_id],u=c!=null&&c.modelName?`${r.target_id} (${c.modelName})`:r.target_id;ab.getState().addNotification({type:"vote",title:`${r.voter_id} voted`,message:`Voted for ${u}`,agentId:r.voter_id,modelName:l==null?void 0:l.modelName})}break;case"vote_distribution":break;case"consensus_reached":"winner_id"in r&&n.setConsensus(r.winner_id);break;case"final_answer":"answer"in r&&n.setFinalAnswer(r.answer,"vote_results"in r?r.vote_results:{},"selected_agent"in r?r.selected_agent:"");break;case"new_answer":if("agent_id"in r&&"content"in r){const i=r,a=e().agents[i.agent_id];if(a&&a.voteCount>0)break;t(d=>{const f={...d.agents},g=Date.now();return d.agentOrder.forEach(m=>{const v=f[m];if(!v)return;const b=v.rounds.find(O=>O.id===v.currentRoundId),w=b&&b.label!=="current"&&b.type==="vote";if(w||v.status==="completed"){const O=w?`${m}-round-${v.rounds.length}`:v.currentRoundId,S=w?[...v.rounds,{id:O,roundNumber:v.rounds.length,type:"answer",label:"current",content:"",startTimestamp:g}]:v.rounds;f[m]={...v,status:"working",rounds:S,currentRoundId:O,displayRoundId:O,currentContent:""}}}),{agents:f,currentVotingRound:d.currentVotingRound+1,voteDistribution:{},selectingWinner:!1}});const s=e().agentOrder.indexOf(i.agent_id)+1,o=i.answer_number??1,l=i.answer_label||`answer${s}.${o}`;if(n.finalizeRoundWithLabel(i.agent_id,l),n.addAnswer({id:i.answer_id??`${i.agent_id}-${Date.now()}`,agentId:i.agent_id,answerNumber:o,content:i.content,timestamp:i.timestamp<1e12?i.timestamp*1e3:i.timestamp,votes:0,workspacePath:i.workspace_path}),i.workspace_path){const d=i.timestamp<1e12?i.timestamp*1e3:i.timestamp;pi.getState().addHistoricalSnapshot(l,i.workspace_path,d)}const c=e().agents[i.agent_id],u=i.content.slice(0,100)+(i.content.length>100?"...":""),h=i.answer_id??`${i.agent_id}-${Date.now()}`;ab.getState().addNotification({type:"answer",title:`New Answer from ${i.agent_id}`,message:u,agentId:i.agent_id,modelName:c==null?void 0:c.modelName,answerId:h})}break;case"restart":"reason"in r&&e().agentOrder.forEach(a=>{n.startNewRound(a,"answer")});break;case"file_change":"agent_id"in r&&"path"in r&&n.addFileChange(r.agent_id,{path:r.path,operation:"operation"in r?r.operation:"create",timestamp:r.timestamp<1e12?r.timestamp*1e3:r.timestamp,contentPreview:"content_preview"in r?r.content_preview:void 0});break;case"tool_call":"agent_id"in r&&"tool_name"in r&&n.addToolCall(r.agent_id,{id:"tool_id"in r?r.tool_id:void 0,name:r.tool_name,args:"tool_args"in r?r.tool_args:{},timestamp:r.timestamp<1e12?r.timestamp*1e3:r.timestamp});break;case"tool_result":"agent_id"in r&&"result"in r&&n.updateToolResult(r.agent_id,"tool_id"in r?r.tool_id:void 0,r.result,"success"in r?r.success:!0);break;case"timeout_status":"agent_id"in r&&"timeout_state"in r&&t(i=>{const a=i.agents[r.agent_id];return a?{agents:{...i.agents,[r.agent_id]:{...a,timeoutState:r.timeout_state}}}:i});break;case"hook_execution":if("agent_id"in r&&"hook_info"in r){const i=r;t(a=>{const s=a.agents[i.agent_id];if(!s||!s.toolCalls.length)return a;const o=[...s.toolCalls];let l=-1;if(i.tool_call_id&&(l=o.findIndex(c=>c.id===i.tool_call_id)),l===-1&&(l=o.length-1),l>=0){const c={...o[l]};i.hook_info.hook_type==="pre"?c.preHooks=[...c.preHooks||[],i.hook_info]:c.postHooks=[...c.postHooks||[],i.hook_info],o[l]=c}return{agents:{...a.agents,[i.agent_id]:{...s,toolCalls:o}}}})}break;case"error":"message"in r&&n.setError(r.message);break;case"done":case"coordination_complete":n.setComplete(!0),t({initStatus:void 0});break;case"init_status":"message"in r&&"step"in r&&"progress"in r&&t({initStatus:{message:r.message,step:r.step,progress:r.progress}});break;case"state_snapshot":if("agents"in r&&Array.isArray(r.agents)){const i=r;if(i.automation_mode!==void 0&&t({automationMode:i.automation_mode}),i.log_dir&&t({logDir:i.log_dir}),n.initSession(i.session_id,i.question||"",i.agents,i.theme||"dark",i.agent_models),i.agent_status&&i.agent_outputs&&Object.entries(i.agent_status).forEach(([a,s])=>{var c;const o=(c=i.agent_outputs)==null?void 0:c[a],l=o&&o.length>0&&o.some(u=>u.length>0);(s==="waiting"||l)&&n.updateAgentStatus(a,s)}),i.agent_outputs&&t(a=>{const s={...a.agents};return Object.entries(i.agent_outputs).forEach(([o,l])=>{if(s[o]){const c=l.join(""),u=s[o].rounds.map((h,d)=>d===0?{...h,content:c}:h);s[o]={...s[o],rounds:u}}}),{agents:s}}),i.vote_distribution&&n.updateVoteDistribution(i.vote_distribution),i.vote_targets&&t(a=>{const s={...a.agents};return Object.entries(i.vote_targets).forEach(([o,l])=>{s[o]&&(s[o]={...s[o],voteTarget:l})}),{agents:s}}),i.final_answer&&i.selected_agent)t({restoredFromSnapshot:!0}),n.setFinalAnswer(i.final_answer,{},i.selected_agent),n.setComplete(!0);else if(i.selected_agent){t({restoredFromSnapshot:!0});const a=i.session_id,s=i.selected_agent;fetch(`/api/sessions/${a}/final-answer`).then(o=>o.json()).then(o=>{e().sessionId===a&&o.answer&&(n.setFinalAnswer(o.answer,{},s),n.setComplete(!0))}).catch(()=>{})}}break}}})),Th=t=>t.agents,Vm=t=>t.agentOrder,oA=t=>t.answers,iQ=t=>t.voteDistribution,Bce=t=>t.voteHistory,Uce=t=>t.currentVotingRound,Ch=t=>t.selectedAgent,aQ=t=>t.finalAnswer,lA=t=>t.isComplete,cA=t=>t.question,sQ=t=>t.viewMode,Qce=t=>t.selectingWinner,Wce=t=>t.restoredFromSnapshot,zce=t=>t.automationMode,Vce=t=>t.logDir,qce=t=>t.initStatus,oQ=t=>t.preparationStatus,Xce=t=>t.preparationDetail;function zR(t){if(!t)return t;let n=t.split(` `).filter(i=>{const a=i.trim();return!(a.includes("[MCP]")||a.startsWith("✅ [MCP]")||a.startsWith("🔧 [MCP]")||a.match(/^\d+ tools? available$/)||a.match(/^Connected to \d+ servers?$/))}).join(` -`);return n=n.replace(/✅\s*\[MCP\][^🔧\n]*(?:🔧\s*\[MCP\][^\n]*)?/g,""),n=n.replace(/🔧\s*\[MCP\][^\n]*/g,""),n.trim()}const Xce=t=>{if(t.finalAnswer&&t.finalAnswer!=="__PENDING__"||!t.selectedAgent)return t.finalAnswer;const e=t.agents[t.selectedAgent];if(!e)return t.finalAnswer;const r=e.rounds.find(n=>n.label==="final");return r!=null&&r.content?zR(r.content):e.currentContent?zR(e.currentContent):t.finalAnswer};function Zce(t,e,r){if(t.content==="__PENDING__"&&t.answerNumber===0){if(r&&r!=="__PENDING__")return r;const n=e[t.agentId];if(n){const i=n.rounds.find(a=>a.label==="final");if(i!=null&&i.content)return i.content;if(n.currentContent)return n.currentContent}}return t.content}function Hce({sessionId:t,autoConnect:e=!0,reconnectAttempts:r=5,reconnectInterval:n=3e3}){const[i,a]=U.useState("disconnected"),[s,o]=U.useState(null),l=U.useRef(null),c=U.useRef(0),u=U.useRef(null),h=At(S=>S.processWSEvent),d=U.useCallback(()=>{const S=window.location.protocol==="https:"?"wss:":"ws:",T=window.location.host;return`${S}//${T}/ws/${t}`},[t]),f=U.useCallback(S=>{try{const T=JSON.parse(S.data);h(T)}catch(T){console.error("Failed to parse WebSocket message:",T)}},[h]),g=U.useCallback(()=>{var S;if(((S=l.current)==null?void 0:S.readyState)!==WebSocket.OPEN){a("connecting"),o(null);try{const T=new WebSocket(d());T.onopen=()=>{a("connected"),c.current=0,console.log("WebSocket connected")},T.onmessage=f,T.onclose=_=>{a("disconnected"),console.log("WebSocket disconnected:",_.code,_.reason),_.code!==1e3&&c.current{g()},n))},T.onerror=_=>{console.error("WebSocket error:",_),a("error"),o("WebSocket connection failed")},l.current=T}catch(T){console.error("Failed to create WebSocket:",T),a("error"),o(T instanceof Error?T.message:"Failed to connect")}}},[d,f,r,n]),m=U.useCallback(()=>{u.current&&(clearTimeout(u.current),u.current=null),l.current&&(l.current.close(1e3,"Client disconnect"),l.current=null),a("disconnected")},[]),v=U.useCallback(S=>{var T;((T=l.current)==null?void 0:T.readyState)===WebSocket.OPEN?l.current.send(JSON.stringify(S)):console.warn("WebSocket is not connected")},[]),b=U.useCallback((S,T)=>{v({action:"start",question:S,config:T})},[v]),w=U.useCallback(S=>{v({action:"continue",question:S})},[v]),O=U.useCallback(()=>{v({action:"cancel"})},[v]);return U.useEffect(()=>(e&&t&&g(),()=>{m()}),[e,t,g,m]),{status:i,connect:g,disconnect:m,send:v,startCoordination:b,continueConversation:w,cancelCoordination:O,error:s}}function A_(){return typeof window<"u"&&window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":"dark"}function zC(t){if(typeof document<"u"){const e=document.documentElement;t==="dark"?e.classList.add("dark"):e.classList.remove("dark")}}const ah=Hf()(Rce((t,e)=>({mode:"dark",setMode:r=>{t({mode:r});const n=r==="system"?A_():r;zC(n)},getEffectiveTheme:()=>{const{mode:r}=e();return r==="system"?A_():r}}),{name:"massgen-theme",onRehydrateStorage:()=>t=>{if(t){const e=t.mode==="system"?A_():t.mode;zC(e)}}}));typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{const{mode:t,getEffectiveTheme:e}=ah.getState();t==="system"&&zC(e())});const Gce=t=>t.mode,Yce=t=>t.setMode;function Kce(t){return t?t.split(` +`);return n=n.replace(/✅\s*\[MCP\][^🔧\n]*(?:🔧\s*\[MCP\][^\n]*)?/g,""),n=n.replace(/🔧\s*\[MCP\][^\n]*/g,""),n.trim()}const Zce=t=>{if(t.finalAnswer&&t.finalAnswer!=="__PENDING__"||!t.selectedAgent)return t.finalAnswer;const e=t.agents[t.selectedAgent];if(!e)return t.finalAnswer;const r=e.rounds.find(n=>n.label==="final");return r!=null&&r.content?zR(r.content):e.currentContent?zR(e.currentContent):t.finalAnswer};function Hce(t,e,r){if(t.content==="__PENDING__"&&t.answerNumber===0){if(r&&r!=="__PENDING__")return r;const n=e[t.agentId];if(n){const i=n.rounds.find(a=>a.label==="final");if(i!=null&&i.content)return i.content;if(n.currentContent)return n.currentContent}}return t.content}function Gce({sessionId:t,autoConnect:e=!0,reconnectAttempts:r=5,reconnectInterval:n=3e3}){const[i,a]=U.useState("disconnected"),[s,o]=U.useState(null),l=U.useRef(null),c=U.useRef(0),u=U.useRef(null),h=At(S=>S.processWSEvent),d=U.useCallback(()=>{const S=window.location.protocol==="https:"?"wss:":"ws:",T=window.location.host;return`${S}//${T}/ws/${t}`},[t]),f=U.useCallback(S=>{try{const T=JSON.parse(S.data);h(T)}catch(T){console.error("Failed to parse WebSocket message:",T)}},[h]),g=U.useCallback(()=>{var S;if(((S=l.current)==null?void 0:S.readyState)!==WebSocket.OPEN){a("connecting"),o(null);try{const T=new WebSocket(d());T.onopen=()=>{a("connected"),c.current=0,console.log("WebSocket connected")},T.onmessage=f,T.onclose=_=>{a("disconnected"),console.log("WebSocket disconnected:",_.code,_.reason),_.code!==1e3&&c.current{g()},n))},T.onerror=_=>{console.error("WebSocket error:",_),a("error"),o("WebSocket connection failed")},l.current=T}catch(T){console.error("Failed to create WebSocket:",T),a("error"),o(T instanceof Error?T.message:"Failed to connect")}}},[d,f,r,n]),m=U.useCallback(()=>{u.current&&(clearTimeout(u.current),u.current=null),l.current&&(l.current.close(1e3,"Client disconnect"),l.current=null),a("disconnected")},[]),v=U.useCallback(S=>{var T;((T=l.current)==null?void 0:T.readyState)===WebSocket.OPEN?l.current.send(JSON.stringify(S)):console.warn("WebSocket is not connected")},[]),b=U.useCallback((S,T)=>{v({action:"start",question:S,config:T})},[v]),w=U.useCallback(S=>{v({action:"continue",question:S})},[v]),O=U.useCallback(()=>{v({action:"cancel"})},[v]);return U.useEffect(()=>(e&&t&&g(),()=>{m()}),[e,t,g,m]),{status:i,connect:g,disconnect:m,send:v,startCoordination:b,continueConversation:w,cancelCoordination:O,error:s}}function A_(){return typeof window<"u"&&window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":"dark"}function zC(t){if(typeof document<"u"){const e=document.documentElement;t==="dark"?e.classList.add("dark"):e.classList.remove("dark")}}const ah=Hf()(Fce((t,e)=>({mode:"dark",setMode:r=>{t({mode:r});const n=r==="system"?A_():r;zC(n)},getEffectiveTheme:()=>{const{mode:r}=e();return r==="system"?A_():r}}),{name:"massgen-theme",onRehydrateStorage:()=>t=>{if(t){const e=t.mode==="system"?A_():t.mode;zC(e)}}}));typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{const{mode:t,getEffectiveTheme:e}=ah.getState();t==="system"&&zC(e())});const Yce=t=>t.mode,Kce=t=>t.setMode;function Jce(t){return t?t.split(` `).map((r,n)=>r.includes("🔧")||r.includes("Tool:")||r.includes("tool_call")?x.jsxs("span",{className:"text-blue-400",children:[r,` `]},n):r.includes("✅")||r.includes("✓")?x.jsxs("span",{className:"text-green-400",children:[r,` `]},n):r.includes("❌")||r.includes("Error")||r.includes("error")?x.jsxs("span",{className:"text-red-400",children:[r,` `]},n):r.includes("🗳️")||r.includes("vote")||r.includes("Vote")?x.jsxs("span",{className:"text-amber-400",children:[r,` `]},n):r.includes("💡")||r.includes("new_answer")?x.jsxs("span",{className:"text-purple-400",children:[r,` `]},n):x.jsxs("span",{children:[r,` -`]},n)):null}const Jce={waiting:{color:"bg-gray-500",icon:Z2,label:"Waiting"},working:{color:"bg-blue-500",icon:mr,label:"Working"},voting:{color:"bg-amber-500",icon:Xo,label:"Voting"},completed:{color:"bg-green-500",icon:nA,label:"Done"},failed:{color:"bg-red-500",icon:ln,label:"Failed"}};function VC({agent:t,isWinner:e=!1,isVisible:r=!0,disableLayoutAnimation:n=!1}){var T,_,C;const i=U.useRef(null),a=U.useRef(null),s=At(D=>D.setAgentRound),o=At(D=>D.agentUIState[t.id]),l=At(D=>D.setAgentDropdownOpen),c=At(D=>D.closeAllDropdowns),u=(o==null?void 0:o.dropdownOpen)??!1,{color:h,icon:d,label:f}=Jce[t.status],g=t.modelName?`${t.id} (${t.modelName})`:t.id,m=(T=t.rounds)==null?void 0:T.find(D=>D.id===t.displayRoundId),v=(m==null?void 0:m.label)||"current",b=(((_=t.rounds)==null?void 0:_.length)||0)>1,w=t.displayRoundId===t.currentRoundId,O=w&&t.currentContent?t.currentContent:(m==null?void 0:m.content)||t.currentContent||"";U.useEffect(()=>{i.current&&(i.current.scrollTop=i.current.scrollHeight)},[t.currentContent]),U.useEffect(()=>{const D=A=>{a.current&&!a.current.contains(A.target)&&u&&l(t.id,!1)};return document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D)},[u,t.id,l]);const S=()=>{u?l(t.id,!1):(c(),l(t.id,!0))};return x.jsxs(mt.div,{layout:!n,initial:{opacity:0,scale:.9},animate:{opacity:r?1:.3,scale:e&&!n?1.02:1},exit:{opacity:0,scale:.9},transition:{type:"spring",stiffness:300,damping:30},className:` +`]},n)):null}const eue={waiting:{color:"bg-gray-500",icon:Z2,label:"Waiting"},working:{color:"bg-blue-500",icon:mr,label:"Working"},voting:{color:"bg-amber-500",icon:Xo,label:"Voting"},completed:{color:"bg-green-500",icon:nA,label:"Done"},failed:{color:"bg-red-500",icon:ln,label:"Failed"}};function VC({agent:t,isWinner:e=!1,isVisible:r=!0,disableLayoutAnimation:n=!1}){var T,_,C;const i=U.useRef(null),a=U.useRef(null),s=At(D=>D.setAgentRound),o=At(D=>D.agentUIState[t.id]),l=At(D=>D.setAgentDropdownOpen),c=At(D=>D.closeAllDropdowns),u=(o==null?void 0:o.dropdownOpen)??!1,{color:h,icon:d,label:f}=eue[t.status],g=t.modelName?`${t.id} (${t.modelName})`:t.id,m=(T=t.rounds)==null?void 0:T.find(D=>D.id===t.displayRoundId),v=(m==null?void 0:m.label)||"current",b=(((_=t.rounds)==null?void 0:_.length)||0)>1,w=t.displayRoundId===t.currentRoundId,O=w&&t.currentContent?t.currentContent:(m==null?void 0:m.content)||t.currentContent||"";U.useEffect(()=>{i.current&&(i.current.scrollTop=i.current.scrollHeight)},[t.currentContent]),U.useEffect(()=>{const D=A=>{a.current&&!a.current.contains(A.target)&&u&&l(t.id,!1)};return document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D)},[u,t.id,l]);const S=()=>{u?l(t.id,!1):(c(),l(t.id,!0))};return x.jsxs(mt.div,{layout:!n,initial:{opacity:0,scale:.9},animate:{opacity:r?1:.3,scale:e&&!n?1.02:1},exit:{opacity:0,scale:.9},transition:{type:"spring",stiffness:300,damping:30},className:` flex flex-col h-full w-full bg-white dark:bg-gray-800 rounded-lg border-2 overflow-hidden ${e?"border-yellow-500 shadow-lg shadow-yellow-500/20":"border-gray-200 dark:border-gray-700"} `,children:[x.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-100/50 dark:bg-gray-900/50 border-b border-gray-200 dark:border-gray-700",children:[x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx(ug,{className:"w-5 h-5 text-gray-500 dark:text-gray-400"}),x.jsx("span",{className:"font-medium text-gray-800 dark:text-gray-200",children:g}),e&&x.jsx(mt.span,{initial:{scale:0},animate:{scale:1},className:"text-yellow-500 text-lg",children:"👑"})]}),x.jsxs("div",{className:"flex items-center gap-2",children:[b&&x.jsxs("div",{className:"relative",ref:a,children:[x.jsxs("button",{onClick:S,className:`flex items-center gap-1 px-2 py-1 text-xs bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 rounded transition-colors`,children:[x.jsx("span",{className:"text-gray-700 dark:text-gray-300",children:v}),x.jsx(Ha,{className:`w-3 h-3 transition-transform ${u?"rotate-180":""}`})]}),u&&x.jsx("div",{className:"absolute right-0 top-full mt-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded shadow-lg z-10 min-w-[120px]",children:(C=t.rounds)==null?void 0:C.map(D=>x.jsx("button",{onClick:()=>{s(t.id,D.id),l(t.id,!1)},className:`w-full text-left px-3 py-1.5 text-xs hover:bg-gray-100 dark:hover:bg-gray-700 - ${D.id===t.displayRoundId?"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":"text-gray-700 dark:text-gray-300"}`,children:D.label},D.id))})]}),x.jsxs("div",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full ${h}`,children:[x.jsx(d,{className:`w-3.5 h-3.5 text-white ${t.status==="working"?"animate-spin":""}`}),x.jsx("span",{className:"text-xs font-medium text-white",children:f})]})]})]}),x.jsxs("div",{className:"flex items-center gap-4 px-3 py-2 bg-gray-100/50 dark:bg-gray-800/50 text-sm",children:[x.jsxs("span",{className:"text-gray-500 dark:text-gray-400",children:["Answers: ",x.jsx("span",{className:"text-gray-800 dark:text-gray-200 font-medium",children:t.answerCount})]}),t.voteTarget&&x.jsxs("span",{className:"text-gray-500 dark:text-gray-400",children:["Voted for:"," ",x.jsx("span",{className:"text-amber-600 dark:text-amber-400 font-medium",children:t.voteTarget})]})]}),x.jsx("div",{ref:i,className:"flex-1 p-3 overflow-y-auto custom-scrollbar text-sm font-mono",children:x.jsx("pre",{className:"whitespace-pre-wrap text-gray-700 dark:text-gray-300 leading-relaxed",children:O?x.jsxs(x.Fragment,{children:[Kce(O),w&&t.status==="working"&&x.jsxs("span",{className:"text-blue-400",children:[x.jsx("span",{className:"streaming-dot",children:"."}),x.jsx("span",{className:"streaming-dot",children:"."}),x.jsx("span",{className:"streaming-dot",children:"."})]})]}):x.jsxs("span",{className:"text-gray-500 italic",children:[t.status==="working"?"Generating response":"Waiting",x.jsx("span",{className:"typing-dot",children:"."}),x.jsx("span",{className:"typing-dot",children:"."}),x.jsx("span",{className:"typing-dot",children:"."})]})})}),t.toolCalls.length>0&&x.jsxs("div",{className:"border-t border-gray-200 dark:border-gray-700 p-2 bg-gray-100/30 dark:bg-gray-900/30",children:[x.jsx("div",{className:"text-xs text-gray-500 mb-1",children:"Recent Tools:"}),x.jsx("div",{className:"flex flex-wrap gap-1",children:t.toolCalls.slice(-3).map((D,A)=>x.jsx("span",{className:`px-2 py-0.5 rounded text-xs ${D.success===!1?"bg-red-100 dark:bg-red-900/50 text-red-700 dark:text-red-300":D.result?"bg-green-100 dark:bg-green-900/50 text-green-700 dark:text-green-300":"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300"}`,children:D.name},A))})]})]})}const Hp=3,N_=360;function eue(){const t=At(Th),e=At(Vm),r=At(Ch),n=At(cA),i=At(sQ),a=At(qce),[s,o]=U.useState(0),l=QU(0),c=e.length,u=Math.max(0,c-Hp),h=c<=Hp,d=h?e:e.slice(s,s+Hp),f=!h&&s>0,g=!h&&s{o(S=>Math.max(0,S-1))},[]),v=U.useCallback(()=>{o(S=>Math.min(u,S+1))},[u]),b=U.useCallback((S,T)=>{const _=N_/3;T.offset.x>_&&s>0?m():T.offset.x<-_&&s0,T=i||(S?"Starting coordination...":"Waiting for prompt...");return x.jsxs("div",{className:"flex flex-col items-center justify-center h-[400px] gap-4",children:[x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx(mt.div,{className:"w-3 h-3 bg-blue-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:0}}),x.jsx(mt.div,{className:"w-3 h-3 bg-purple-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:.2}}),x.jsx(mt.div,{className:"w-3 h-3 bg-blue-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:.4}})]}),x.jsx(mt.span,{className:"text-gray-500 dark:text-gray-400",animate:{opacity:[.5,1,.5]},transition:{repeat:1/0,duration:2},children:T}),a&&x.jsx(mt.span,{className:"text-gray-600 dark:text-gray-500 text-sm",initial:{opacity:0},animate:{opacity:.7},children:a})]})}if(h){const S=c===1?"grid-cols-1":c===2?"grid-cols-2":"grid-cols-3";return x.jsx("div",{className:`grid ${S} gap-4 py-4`,children:x.jsx(Lr,{mode:"popLayout",initial:!1,children:d.map(T=>{const _=t[T];return _?x.jsx(mt.div,{layout:!0,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{type:"spring",stiffness:300,damping:30},className:"h-[450px] min-w-0",children:x.jsx(VC,{agent:_,isWinner:r===T,isVisible:!0})},T):null})})})}return x.jsxs("div",{className:"relative",children:[x.jsx("button",{onClick:m,disabled:!f,className:` + ${D.id===t.displayRoundId?"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":"text-gray-700 dark:text-gray-300"}`,children:D.label},D.id))})]}),x.jsxs("div",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full ${h}`,children:[x.jsx(d,{className:`w-3.5 h-3.5 text-white ${t.status==="working"?"animate-spin":""}`}),x.jsx("span",{className:"text-xs font-medium text-white",children:f})]})]})]}),x.jsxs("div",{className:"flex items-center gap-4 px-3 py-2 bg-gray-100/50 dark:bg-gray-800/50 text-sm",children:[x.jsxs("span",{className:"text-gray-500 dark:text-gray-400",children:["Answers: ",x.jsx("span",{className:"text-gray-800 dark:text-gray-200 font-medium",children:t.answerCount})]}),t.voteTarget&&x.jsxs("span",{className:"text-gray-500 dark:text-gray-400",children:["Voted for:"," ",x.jsx("span",{className:"text-amber-600 dark:text-amber-400 font-medium",children:t.voteTarget})]})]}),x.jsx("div",{ref:i,className:"flex-1 p-3 overflow-y-auto custom-scrollbar text-sm font-mono",children:x.jsx("pre",{className:"whitespace-pre-wrap text-gray-700 dark:text-gray-300 leading-relaxed",children:O?x.jsxs(x.Fragment,{children:[Jce(O),w&&t.status==="working"&&x.jsxs("span",{className:"text-blue-400",children:[x.jsx("span",{className:"streaming-dot",children:"."}),x.jsx("span",{className:"streaming-dot",children:"."}),x.jsx("span",{className:"streaming-dot",children:"."})]})]}):x.jsxs("span",{className:"text-gray-500 italic",children:[t.status==="working"?"Generating response":"Waiting",x.jsx("span",{className:"typing-dot",children:"."}),x.jsx("span",{className:"typing-dot",children:"."}),x.jsx("span",{className:"typing-dot",children:"."})]})})}),t.toolCalls.length>0&&x.jsxs("div",{className:"border-t border-gray-200 dark:border-gray-700 p-2 bg-gray-100/30 dark:bg-gray-900/30",children:[x.jsx("div",{className:"text-xs text-gray-500 mb-1",children:"Recent Tools:"}),x.jsx("div",{className:"flex flex-wrap gap-1",children:t.toolCalls.slice(-3).map((D,A)=>x.jsx("span",{className:`px-2 py-0.5 rounded text-xs ${D.success===!1?"bg-red-100 dark:bg-red-900/50 text-red-700 dark:text-red-300":D.result?"bg-green-100 dark:bg-green-900/50 text-green-700 dark:text-green-300":"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300"}`,children:D.name},A))})]})]})}const Hp=3,N_=360;function tue(){const t=At(Th),e=At(Vm),r=At(Ch),n=At(cA),i=At(oQ),a=At(Xce),[s,o]=U.useState(0),l=WU(0),c=e.length,u=Math.max(0,c-Hp),h=c<=Hp,d=h?e:e.slice(s,s+Hp),f=!h&&s>0,g=!h&&s{o(S=>Math.max(0,S-1))},[]),v=U.useCallback(()=>{o(S=>Math.min(u,S+1))},[u]),b=U.useCallback((S,T)=>{const _=N_/3;T.offset.x>_&&s>0?m():T.offset.x<-_&&s0,T=i||(S?"Starting coordination...":"Waiting for prompt...");return x.jsxs("div",{className:"flex flex-col items-center justify-center h-[400px] gap-4",children:[x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx(mt.div,{className:"w-3 h-3 bg-blue-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:0}}),x.jsx(mt.div,{className:"w-3 h-3 bg-purple-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:.2}}),x.jsx(mt.div,{className:"w-3 h-3 bg-blue-500 rounded-full",animate:{scale:[1,1.3,1],opacity:[.5,1,.5]},transition:{repeat:1/0,duration:1.2,delay:.4}})]}),x.jsx(mt.span,{className:"text-gray-500 dark:text-gray-400",animate:{opacity:[.5,1,.5]},transition:{repeat:1/0,duration:2},children:T}),a&&x.jsx(mt.span,{className:"text-gray-600 dark:text-gray-500 text-sm",initial:{opacity:0},animate:{opacity:.7},children:a})]})}if(h){const S=c===1?"grid-cols-1":c===2?"grid-cols-2":"grid-cols-3";return x.jsx("div",{className:`grid ${S} gap-4 py-4`,children:x.jsx(Lr,{mode:"popLayout",initial:!1,children:d.map(T=>{const _=t[T];return _?x.jsx(mt.div,{layout:!0,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{type:"spring",stiffness:300,damping:30},className:"h-[450px] min-w-0",children:x.jsx(VC,{agent:_,isWinner:r===T,isVisible:!0})},T):null})})})}return x.jsxs("div",{className:"relative",children:[x.jsx("button",{onClick:m,disabled:!f,className:` absolute left-0 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-gray-800/80 border border-gray-600 transition-opacity duration-200 @@ -559,13 +559,13 @@ Error generating stack: `+q.message+` `,"aria-label":"Show next agent",children:x.jsx(Sh,{className:"w-6 h-6 text-gray-300"})}),x.jsx(mt.div,{className:"absolute left-12 top-0 bottom-0 w-16 shadow-indicator-left z-5 pointer-events-none",style:{opacity:f?w:0},animate:{opacity:f?.8:0},children:f&&x.jsx(mt.div,{className:"absolute left-2 top-1/2 -translate-y-1/2",animate:{x:[-5,0,-5]},transition:{repeat:1/0,duration:2,ease:"easeInOut"},children:x.jsx("div",{className:"w-2 h-20 bg-gradient-to-r from-blue-500/50 to-transparent rounded-full"})})}),x.jsx(mt.div,{className:"absolute right-12 top-0 bottom-0 w-16 shadow-indicator-right z-5 pointer-events-none",style:{opacity:g?O:0},animate:{opacity:g?.8:0},children:g&&x.jsx(mt.div,{className:"absolute right-2 top-1/2 -translate-y-1/2",animate:{x:[5,0,5]},transition:{repeat:1/0,duration:2,ease:"easeInOut"},children:x.jsx("div",{className:"w-2 h-20 bg-gradient-to-l from-blue-500/50 to-transparent rounded-full"})})}),x.jsx(mt.div,{className:"flex gap-4 px-14 py-4 overflow-hidden cursor-grab active:cursor-grabbing",drag:"x",dragConstraints:{left:0,right:0},dragElastic:.2,onDragEnd:b,style:{x:l},children:x.jsx(Lr,{mode:"popLayout",initial:!1,children:d.map(S=>{const T=t[S];return T?x.jsx(mt.div,{layout:!0,initial:{opacity:0,x:50},animate:{opacity:1,x:0},exit:{opacity:0,x:-50},transition:{type:"spring",stiffness:300,damping:30},style:{width:N_,minWidth:N_},className:"h-[450px]",children:x.jsx(VC,{agent:T,isWinner:r===S,isVisible:!0})},S):null})})}),c>Hp&&x.jsx("div",{className:"flex justify-center gap-2 mt-2",children:Array.from({length:c}).map((S,T)=>x.jsx("button",{onClick:()=>o(Math.min(T,u)),className:` w-2 h-2 rounded-full transition-all duration-200 ${T>=s&&T{let o=0,l=0;const c=[];return r.forEach(u=>{const h=e[u];if(h&&((h.status==="working"||h.status==="voting"&&!h.voteTarget)&&o++,h.voteTarget)){l++;const d=e[h.voteTarget],f=(d==null?void 0:d.answerCount)||1;c.push({voter:u,votedFor:h.voteTarget,answerLabel:nue(h.voteTarget,r,f)})}}),{workingCount:o,votedCount:l,voteDetails:c}},[e,r]);return x.jsxs("div",{className:"bg-gray-100/50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 px-6 py-3",children:[x.jsxs("div",{className:"max-w-7xl mx-auto flex items-center justify-between",children:[x.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:r.map(o=>{const l=e[o];if(!l)return null;const c=tue[l.status],u=rue[l.status],h=n===o,d=!!l.voteTarget;return x.jsxs(mt.button,{onClick:()=>t==null?void 0:t(o),whileHover:{scale:1.05},whileTap:{scale:.95},className:` + `,"aria-label":`Go to agent ${T+1}`},T))})]})}const rue={waiting:Z2,working:mr,voting:Xo,completed:nA,failed:ln},nue={waiting:"bg-gray-600 text-gray-300",working:"bg-blue-600 text-blue-100",voting:"bg-amber-600 text-amber-100",completed:"bg-green-600 text-green-100",failed:"bg-red-600 text-red-100"};function iue(t,e,r=1){return`answer${e.indexOf(t)+1}.${r}`}function aue({onAgentClick:t}){const e=At(Th),r=At(Vm),n=At(Ch),{workingCount:i,votedCount:a,voteDetails:s}=U.useMemo(()=>{let o=0,l=0;const c=[];return r.forEach(u=>{const h=e[u];if(h&&((h.status==="working"||h.status==="voting"&&!h.voteTarget)&&o++,h.voteTarget)){l++;const d=e[h.voteTarget],f=(d==null?void 0:d.answerCount)||1;c.push({voter:u,votedFor:h.voteTarget,answerLabel:iue(h.voteTarget,r,f)})}}),{workingCount:o,votedCount:l,voteDetails:c}},[e,r]);return x.jsxs("div",{className:"bg-gray-100/50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 px-6 py-3",children:[x.jsxs("div",{className:"max-w-7xl mx-auto flex items-center justify-between",children:[x.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:r.map(o=>{const l=e[o];if(!l)return null;const c=rue[l.status],u=nue[l.status],h=n===o,d=!!l.voteTarget;return x.jsxs(mt.button,{onClick:()=>t==null?void 0:t(o),whileHover:{scale:1.05},whileTap:{scale:.95},className:` flex items-center gap-2 px-3 py-1.5 rounded-full transition-all duration-200 cursor-pointer ${u} ${h?"ring-2 ring-yellow-500 ring-offset-2 ring-offset-white dark:ring-offset-gray-900":""} ${d&&!h?"ring-1 ring-amber-500/50":""} - `,children:[x.jsx(c,{className:`w-4 h-4 ${l.status==="working"?"animate-spin":""}`}),x.jsx("span",{className:"text-sm font-medium",children:o}),x.jsxs("span",{className:"text-xs bg-black/20 px-1.5 rounded-full",children:["#",r.indexOf(o)+1]}),h&&x.jsx("span",{className:"text-sm",children:"👑"})]},o)})}),x.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[x.jsxs("div",{className:"flex items-center gap-1 text-gray-600 dark:text-gray-400",children:[x.jsx(mr,{className:"w-4 h-4 text-blue-500"}),x.jsxs("span",{children:["Working: ",i]})]}),x.jsxs("div",{className:"flex items-center gap-1 text-gray-600 dark:text-gray-400",children:[x.jsx(nA,{className:"w-4 h-4 text-green-500"}),x.jsxs("span",{children:["Voted: ",a]})]})]})]}),s.length>0&&x.jsx("div",{className:"max-w-7xl mx-auto flex items-center gap-2 mt-2 flex-wrap",children:s.map(o=>x.jsxs("span",{className:"flex items-center gap-1 px-2 py-1 bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded text-xs",children:[x.jsx("span",{className:"font-medium",children:o.voter}),x.jsx(qU,{className:"w-3 h-3"}),x.jsx("span",{className:"text-amber-600 dark:text-amber-200",children:o.answerLabel})]},o.voter))})]})}function aue(){const t=At(Ch),e=At(Th),r=At(aQ),n=At(Qce),[i,a]=U.useState(!1),s=r==="finalComplete"&&t&&!i&&!n,o=t?e[t]:null,l=o!=null&&o.modelName?`${t} (${o.modelName})`:t;return U.useEffect(()=>{if(s){const c=setTimeout(()=>{a(!0)},1500);return()=>clearTimeout(c)}},[s]),U.useEffect(()=>{r==="coordination"&&a(!1)},[r]),x.jsx(Lr,{children:s&&x.jsx(x.Fragment,{children:x.jsxs(mt.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},className:"fixed inset-0 z-50 pointer-events-none",children:[x.jsx(mt.div,{initial:{scale:.8,opacity:0},animate:{scale:1.5,opacity:[0,.3,0]},transition:{duration:1.5,ease:"easeOut"},className:"absolute inset-0 flex items-center justify-center",children:x.jsx("div",{className:"w-96 h-96 rounded-full bg-yellow-400 blur-3xl"})}),x.jsx(mt.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},transition:{duration:.4,type:"spring",stiffness:300},className:"absolute inset-0 flex items-center justify-center",children:x.jsx("div",{className:"bg-gray-900/95 border-2 border-yellow-500 rounded-2xl p-8 shadow-2xl shadow-yellow-500/30 final-answer-glow",children:x.jsxs("div",{className:"flex flex-col items-center gap-4",children:[x.jsx(mt.div,{animate:{rotate:[0,10,-10,10,-10,0]},transition:{duration:.6,repeat:1},children:x.jsx(Dl,{className:"w-16 h-16 text-yellow-500"})}),x.jsxs("div",{className:"text-center",children:[x.jsxs("h2",{className:"text-2xl font-bold text-yellow-400 flex items-center justify-center gap-2",children:[x.jsx(ib,{className:"w-6 h-6"}),"Final Answer Ready!",x.jsx(ib,{className:"w-6 h-6"})]}),x.jsxs("p",{className:"text-gray-400 mt-2",children:["Winner: ",x.jsx("span",{className:"text-yellow-300 font-semibold",children:l})]})]})]})})})]})})})}const Gp=["docker","apiKeys","agentCount","setupMode","agentConfig","coordination","context","preview"],sue={voting_sensitivity:"lenient",answer_novelty_requirement:"lenient"},VR={isOpen:!1,currentStep:"docker",isLoading:!1,error:null,setupStatus:null,providers:[],dynamicModels:{},loadingModels:{},providerCapabilities:{},loadingCapabilities:{},contextPaths:[],useDocker:!0,agentCount:3,setupMode:"same",agents:[],coordinationSettings:sue,generatedConfig:null,generatedYaml:null,configFilename:"config",savedConfigPath:null},Bt=Hf()((t,e)=>({...VR,openWizard:()=>{t({isOpen:!0,currentStep:"docker"}),e().fetchSetupStatus(),e().fetchProviders()},closeWizard:()=>{t({isOpen:!1})},addContextPath:(r,n)=>{const{contextPaths:i}=e();t({contextPaths:[...i,{path:r,type:n}]})},removeContextPath:r=>{const{contextPaths:n}=e();t({contextPaths:n.filter((i,a)=>a!==r)})},updateContextPath:(r,n,i)=>{const{contextPaths:a}=e(),s=[...a];s[r]&&(s[r]={path:n,type:i},t({contextPaths:s}))},setStep:r=>{t({currentStep:r})},nextStep:()=>{const{currentStep:r,agentCount:n,providers:i}=e(),a=Gp.indexOf(r);if(r==="docker"&&i.some(o=>o.has_api_key)){t({currentStep:"agentCount"});return}if(r==="agentCount"&&n===1){t({setupMode:"different",agents:[{id:"agent_a",provider:"",model:""}],currentStep:"agentConfig"});return}if(r==="setupMode"){const s=[];for(let o=0;o{const{currentStep:r,agentCount:n,providers:i}=e(),a=Gp.indexOf(r);if(r==="agentCount"&&i.some(o=>o.has_api_key)){t({currentStep:"docker"});return}if(r==="agentConfig"&&n===1){t({currentStep:"agentCount"});return}a>0&&t({currentStep:Gp[a-1]})},setUseDocker:r=>{t({useDocker:r})},setAgentCount:r=>{t({agentCount:r})},setSetupMode:r=>{t({setupMode:r})},setAgentConfig:(r,n,i,a)=>{const{agents:s}=e(),o=[...s];o[r]&&(o[r]={...o[r],provider:n,model:i,...a!==void 0&&{enable_web_search:a}},t({agents:o}))},setAllAgentsConfig:(r,n,i)=>{const{agents:a}=e(),s=a.map(o=>({...o,provider:r,model:n,...i!==void 0&&{enable_web_search:i}}));t({agents:s})},setAgentWebSearch:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],enable_web_search:n},t({agents:a}))},setAgentCodeExecution:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],enable_code_execution:n},t({agents:a}))},setAgentSystemMessage:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],system_message:n||void 0},t({agents:a}))},setCoordinationSettings:r=>{const{coordinationSettings:n}=e();t({coordinationSettings:{...n,...r}})},setConfigFilename:r=>{t({configFilename:r})},setGeneratedYaml:r=>{t({generatedYaml:r})},fetchSetupStatus:async()=>{t({isLoading:!0,error:null});try{const r=await fetch("/api/setup/status");if(!r.ok)throw new Error("Failed to fetch setup status");const n=await r.json();t({setupStatus:n,useDocker:n.docker_available})}catch(r){t({error:r instanceof Error?r.message:"Unknown error"})}finally{t({isLoading:!1})}},fetchProviders:async()=>{t({isLoading:!0,error:null});try{const r=await fetch("/api/providers");if(!r.ok)throw new Error("Failed to fetch providers");const n=await r.json();t({providers:n.providers})}catch(r){t({error:r instanceof Error?r.message:"Unknown error"})}finally{t({isLoading:!1})}},fetchDynamicModels:async r=>{const{dynamicModels:n,loadingModels:i}=e();if(n[r])return n[r];if(i[r])return[];t({loadingModels:{...i,[r]:!0}});try{const a=await fetch(`/api/providers/${r}/models`);if(!a.ok)throw new Error("Failed to fetch models");const o=(await a.json()).models||[];return t({dynamicModels:{...e().dynamicModels,[r]:o},loadingModels:{...e().loadingModels,[r]:!1}}),o}catch{return t({loadingModels:{...e().loadingModels,[r]:!1}}),[]}},fetchProviderCapabilities:async r=>{const{providerCapabilities:n,loadingCapabilities:i}=e();if(n[r])return n[r];if(i[r])return null;t({loadingCapabilities:{...i,[r]:!0}});try{const a=await fetch(`/api/providers/${r}/capabilities`);if(!a.ok)throw new Error("Failed to fetch capabilities");const s=await a.json();return t({providerCapabilities:{...e().providerCapabilities,[r]:s},loadingCapabilities:{...e().loadingCapabilities,[r]:!1}}),s}catch{return t({loadingCapabilities:{...e().loadingCapabilities,[r]:!1}}),null}},generateConfig:async()=>{const{agents:r,useDocker:n,coordinationSettings:i,contextPaths:a}=e();t({isLoading:!0,error:null});try{const s=await fetch("/api/config/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agents:r,use_docker:n,coordination:i,context_paths:a})});if(!s.ok){const l=await s.json();throw new Error(l.error||"Failed to generate config")}const o=await s.json();t({generatedConfig:o.config,generatedYaml:o.yaml})}catch(s){t({error:s instanceof Error?s.message:"Unknown error"})}finally{t({isLoading:!1})}},saveConfig:async()=>{const{generatedConfig:r,generatedYaml:n,configFilename:i}=e();if(!r&&!n)return t({error:"No config to save"}),!1;t({isLoading:!0,error:null});try{const s={filename:`${i||"config"}.yaml`};n&&(s.yaml_content=n),r&&(s.config=r);const o=await fetch("/api/config/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!o.ok){const c=await o.json();throw new Error(c.error||"Failed to save config")}const l=await o.json();return t({isLoading:!1,savedConfigPath:l.path}),!0}catch(a){return t({error:a instanceof Error?a.message:"Unknown error",isLoading:!1}),!1}},reset:()=>{t(VR)}})),oue=t=>t.contextPaths;function lue({currentSessionId:t,selectedConfig:e,onConfigChange:r,onSessionChange:n,onNewSession:i,onOpenAnswerBrowser:a,onOpenVoteBrowser:s,onViewConfig:o,answerCount:l,voteCount:c}){var R,W,G,Y;const[u,h]=U.useState([]),[d,f]=U.useState([]),[g,m]=U.useState(null),[v,b]=U.useState(!1),[w,O]=U.useState(!1),[S,T]=U.useState(!0),[_,C]=U.useState(""),[D,A]=U.useState(""),I=ah(Gce),M=ah(Yce),N=Bt(J=>J.openWizard),B=()=>{const J=["light","dark","system"],ae=(J.indexOf(I)+1)%J.length;M(J[ae])},P=I==="light"?gce:I==="dark"?lce:YU;U.useEffect(()=>{if(S||new URLSearchParams(window.location.search).get("config"))return;!e&&!g&&N()},[S,N,e,g]);const V=U.useCallback(async()=>{try{const ce=await(await fetch("/api/configs")).json();h(ce.configs||[]),m(ce.default);const ae=new URLSearchParams(window.location.search).get("config");!e&&!ae&&ce.default&&r(ce.default)}catch(J){console.error("Failed to fetch configs:",J)}finally{T(!1)}},[e,r]),j=U.useCallback(async()=>{try{const ce=await(await fetch("/api/sessions")).json();f(ce.sessions||[])}catch(J){console.error("Failed to fetch sessions:",J)}},[]);U.useEffect(()=>{V(),j();const J=setInterval(j,5e3);return()=>clearInterval(J)},[V,j]);const z=(_.trim()?u.filter(J=>J.name.toLowerCase().includes(_.toLowerCase())||J.category.toLowerCase().includes(_.toLowerCase())||J.path.toLowerCase().includes(_.toLowerCase())):u).filter(J=>J.category.toLowerCase()!=="ag2"&&!J.name.toLowerCase().startsWith("ag2")),Z=z.reduce((J,ce)=>{const ae=ce.category||"root";return J[ae]||(J[ae]=[]),J[ae].push(ce),J},{}),re=["user",...Object.keys(Z).filter(J=>J!=="user").sort()].filter(J=>Z[J]),L=e?((R=u.find(J=>J.path===e))==null?void 0:R.name)||((W=u.find(J=>J.path.endsWith("/"+e)))==null?void 0:W.name)||((G=e.split("/").pop())==null?void 0:G.replace(".yaml","").replace(".json",""))||"Selected":"Select Config";return x.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[x.jsxs("div",{className:"relative",children:[x.jsxs("button",{onClick:()=>{const J=!v;b(J),O(!1),J||C("")},className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 + `,children:[x.jsx(c,{className:`w-4 h-4 ${l.status==="working"?"animate-spin":""}`}),x.jsx("span",{className:"text-sm font-medium",children:o}),x.jsxs("span",{className:"text-xs bg-black/20 px-1.5 rounded-full",children:["#",r.indexOf(o)+1]}),h&&x.jsx("span",{className:"text-sm",children:"👑"})]},o)})}),x.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[x.jsxs("div",{className:"flex items-center gap-1 text-gray-600 dark:text-gray-400",children:[x.jsx(mr,{className:"w-4 h-4 text-blue-500"}),x.jsxs("span",{children:["Working: ",i]})]}),x.jsxs("div",{className:"flex items-center gap-1 text-gray-600 dark:text-gray-400",children:[x.jsx(nA,{className:"w-4 h-4 text-green-500"}),x.jsxs("span",{children:["Voted: ",a]})]})]})]}),s.length>0&&x.jsx("div",{className:"max-w-7xl mx-auto flex items-center gap-2 mt-2 flex-wrap",children:s.map(o=>x.jsxs("span",{className:"flex items-center gap-1 px-2 py-1 bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded text-xs",children:[x.jsx("span",{className:"font-medium",children:o.voter}),x.jsx(XU,{className:"w-3 h-3"}),x.jsx("span",{className:"text-amber-600 dark:text-amber-200",children:o.answerLabel})]},o.voter))})]})}function sue(){const t=At(Ch),e=At(Th),r=At(sQ),n=At(Wce),[i,a]=U.useState(!1),s=r==="finalComplete"&&t&&!i&&!n,o=t?e[t]:null,l=o!=null&&o.modelName?`${t} (${o.modelName})`:t;return U.useEffect(()=>{if(s){const c=setTimeout(()=>{a(!0)},1500);return()=>clearTimeout(c)}},[s]),U.useEffect(()=>{r==="coordination"&&a(!1)},[r]),x.jsx(Lr,{children:s&&x.jsx(x.Fragment,{children:x.jsxs(mt.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},className:"fixed inset-0 z-50 pointer-events-none",children:[x.jsx(mt.div,{initial:{scale:.8,opacity:0},animate:{scale:1.5,opacity:[0,.3,0]},transition:{duration:1.5,ease:"easeOut"},className:"absolute inset-0 flex items-center justify-center",children:x.jsx("div",{className:"w-96 h-96 rounded-full bg-yellow-400 blur-3xl"})}),x.jsx(mt.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},transition:{duration:.4,type:"spring",stiffness:300},className:"absolute inset-0 flex items-center justify-center",children:x.jsx("div",{className:"bg-gray-900/95 border-2 border-yellow-500 rounded-2xl p-8 shadow-2xl shadow-yellow-500/30 final-answer-glow",children:x.jsxs("div",{className:"flex flex-col items-center gap-4",children:[x.jsx(mt.div,{animate:{rotate:[0,10,-10,10,-10,0]},transition:{duration:.6,repeat:1},children:x.jsx(Dl,{className:"w-16 h-16 text-yellow-500"})}),x.jsxs("div",{className:"text-center",children:[x.jsxs("h2",{className:"text-2xl font-bold text-yellow-400 flex items-center justify-center gap-2",children:[x.jsx(ib,{className:"w-6 h-6"}),"Final Answer Ready!",x.jsx(ib,{className:"w-6 h-6"})]}),x.jsxs("p",{className:"text-gray-400 mt-2",children:["Winner: ",x.jsx("span",{className:"text-yellow-300 font-semibold",children:l})]})]})]})})})]})})})}const Gp=["docker","apiKeys","agentCount","setupMode","agentConfig","coordination","context","preview"],oue={voting_sensitivity:"lenient",answer_novelty_requirement:"lenient"},VR={isOpen:!1,currentStep:"docker",isLoading:!1,error:null,setupStatus:null,providers:[],dynamicModels:{},loadingModels:{},providerCapabilities:{},loadingCapabilities:{},contextPaths:[],useDocker:!0,agentCount:3,setupMode:"same",agents:[],coordinationSettings:oue,generatedConfig:null,generatedYaml:null,configFilename:"config",savedConfigPath:null},Bt=Hf()((t,e)=>({...VR,openWizard:()=>{t({isOpen:!0,currentStep:"docker"}),e().fetchSetupStatus(),e().fetchProviders()},closeWizard:()=>{t({isOpen:!1})},addContextPath:(r,n)=>{const{contextPaths:i}=e();t({contextPaths:[...i,{path:r,type:n}]})},removeContextPath:r=>{const{contextPaths:n}=e();t({contextPaths:n.filter((i,a)=>a!==r)})},updateContextPath:(r,n,i)=>{const{contextPaths:a}=e(),s=[...a];s[r]&&(s[r]={path:n,type:i},t({contextPaths:s}))},setStep:r=>{t({currentStep:r})},nextStep:()=>{const{currentStep:r,agentCount:n,providers:i}=e(),a=Gp.indexOf(r);if(r==="docker"&&i.some(o=>o.has_api_key)){t({currentStep:"agentCount"});return}if(r==="agentCount"&&n===1){t({setupMode:"different",agents:[{id:"agent_a",provider:"",model:""}],currentStep:"agentConfig"});return}if(r==="setupMode"){const s=[];for(let o=0;o{const{currentStep:r,agentCount:n,providers:i}=e(),a=Gp.indexOf(r);if(r==="agentCount"&&i.some(o=>o.has_api_key)){t({currentStep:"docker"});return}if(r==="agentConfig"&&n===1){t({currentStep:"agentCount"});return}a>0&&t({currentStep:Gp[a-1]})},setUseDocker:r=>{t({useDocker:r})},setAgentCount:r=>{t({agentCount:r})},setSetupMode:r=>{t({setupMode:r})},setAgentConfig:(r,n,i,a)=>{const{agents:s}=e(),o=[...s];o[r]&&(o[r]={...o[r],provider:n,model:i,...a!==void 0&&{enable_web_search:a}},t({agents:o}))},setAllAgentsConfig:(r,n,i)=>{const{agents:a}=e(),s=a.map(o=>({...o,provider:r,model:n,...i!==void 0&&{enable_web_search:i}}));t({agents:s})},setAgentWebSearch:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],enable_web_search:n},t({agents:a}))},setAgentCodeExecution:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],enable_code_execution:n},t({agents:a}))},setAgentSystemMessage:(r,n)=>{const{agents:i}=e(),a=[...i];a[r]&&(a[r]={...a[r],system_message:n||void 0},t({agents:a}))},setCoordinationSettings:r=>{const{coordinationSettings:n}=e();t({coordinationSettings:{...n,...r}})},setConfigFilename:r=>{t({configFilename:r})},setGeneratedYaml:r=>{t({generatedYaml:r})},fetchSetupStatus:async()=>{t({isLoading:!0,error:null});try{const r=await fetch("/api/setup/status");if(!r.ok)throw new Error("Failed to fetch setup status");const n=await r.json();t({setupStatus:n,useDocker:n.docker_available})}catch(r){t({error:r instanceof Error?r.message:"Unknown error"})}finally{t({isLoading:!1})}},fetchProviders:async()=>{t({isLoading:!0,error:null});try{const r=await fetch("/api/providers");if(!r.ok)throw new Error("Failed to fetch providers");const n=await r.json();t({providers:n.providers})}catch(r){t({error:r instanceof Error?r.message:"Unknown error"})}finally{t({isLoading:!1})}},fetchDynamicModels:async r=>{const{dynamicModels:n,loadingModels:i}=e();if(n[r])return n[r];if(i[r])return[];t({loadingModels:{...i,[r]:!0}});try{const a=await fetch(`/api/providers/${r}/models`);if(!a.ok)throw new Error("Failed to fetch models");const o=(await a.json()).models||[];return t({dynamicModels:{...e().dynamicModels,[r]:o},loadingModels:{...e().loadingModels,[r]:!1}}),o}catch{return t({loadingModels:{...e().loadingModels,[r]:!1}}),[]}},fetchProviderCapabilities:async r=>{const{providerCapabilities:n,loadingCapabilities:i}=e();if(n[r])return n[r];if(i[r])return null;t({loadingCapabilities:{...i,[r]:!0}});try{const a=await fetch(`/api/providers/${r}/capabilities`);if(!a.ok)throw new Error("Failed to fetch capabilities");const s=await a.json();return t({providerCapabilities:{...e().providerCapabilities,[r]:s},loadingCapabilities:{...e().loadingCapabilities,[r]:!1}}),s}catch{return t({loadingCapabilities:{...e().loadingCapabilities,[r]:!1}}),null}},generateConfig:async()=>{const{agents:r,useDocker:n,coordinationSettings:i,contextPaths:a}=e();t({isLoading:!0,error:null});try{const s=await fetch("/api/config/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agents:r,use_docker:n,coordination:i,context_paths:a})});if(!s.ok){const l=await s.json();throw new Error(l.error||"Failed to generate config")}const o=await s.json();t({generatedConfig:o.config,generatedYaml:o.yaml})}catch(s){t({error:s instanceof Error?s.message:"Unknown error"})}finally{t({isLoading:!1})}},saveConfig:async()=>{const{generatedConfig:r,generatedYaml:n,configFilename:i}=e();if(!r&&!n)return t({error:"No config to save"}),!1;t({isLoading:!0,error:null});try{const s={filename:`${i||"config"}.yaml`};n&&(s.yaml_content=n),r&&(s.config=r);const o=await fetch("/api/config/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!o.ok){const c=await o.json();throw new Error(c.error||"Failed to save config")}const l=await o.json();return t({isLoading:!1,savedConfigPath:l.path}),!0}catch(a){return t({error:a instanceof Error?a.message:"Unknown error",isLoading:!1}),!1}},reset:()=>{t(VR)}})),lue=t=>t.contextPaths;function cue({currentSessionId:t,selectedConfig:e,onConfigChange:r,onSessionChange:n,onNewSession:i,onOpenAnswerBrowser:a,onOpenVoteBrowser:s,onViewConfig:o,answerCount:l,voteCount:c}){var R,W,G,Y;const[u,h]=U.useState([]),[d,f]=U.useState([]),[g,m]=U.useState(null),[v,b]=U.useState(!1),[w,O]=U.useState(!1),[S,T]=U.useState(!0),[_,C]=U.useState(""),[D,A]=U.useState(""),I=ah(Yce),M=ah(Kce),N=Bt(J=>J.openWizard),B=()=>{const J=["light","dark","system"],ae=(J.indexOf(I)+1)%J.length;M(J[ae])},P=I==="light"?mce:I==="dark"?cce:KU;U.useEffect(()=>{if(S||new URLSearchParams(window.location.search).get("config"))return;!e&&!g&&N()},[S,N,e,g]);const V=U.useCallback(async()=>{try{const ce=await(await fetch("/api/configs")).json();h(ce.configs||[]),m(ce.default);const ae=new URLSearchParams(window.location.search).get("config");!e&&!ae&&ce.default&&r(ce.default)}catch(J){console.error("Failed to fetch configs:",J)}finally{T(!1)}},[e,r]),j=U.useCallback(async()=>{try{const ce=await(await fetch("/api/sessions")).json();f(ce.sessions||[])}catch(J){console.error("Failed to fetch sessions:",J)}},[]);U.useEffect(()=>{V(),j();const J=setInterval(j,5e3);return()=>clearInterval(J)},[V,j]);const z=(_.trim()?u.filter(J=>J.name.toLowerCase().includes(_.toLowerCase())||J.category.toLowerCase().includes(_.toLowerCase())||J.path.toLowerCase().includes(_.toLowerCase())):u).filter(J=>J.category.toLowerCase()!=="ag2"&&!J.name.toLowerCase().startsWith("ag2")),Z=z.reduce((J,ce)=>{const ae=ce.category||"root";return J[ae]||(J[ae]=[]),J[ae].push(ce),J},{}),re=["user",...Object.keys(Z).filter(J=>J!=="user").sort()].filter(J=>Z[J]),L=e?((R=u.find(J=>J.path===e))==null?void 0:R.name)||((W=u.find(J=>J.path.endsWith("/"+e)))==null?void 0:W.name)||((G=e.split("/").pop())==null?void 0:G.replace(".yaml","").replace(".json",""))||"Selected":"Select Config";return x.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[x.jsxs("div",{className:"relative",children:[x.jsxs("button",{onClick:()=>{const J=!v;b(J),O(!1),J||C("")},className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 rounded-lg border border-gray-300 dark:border-gray-600 text-sm transition-colors`,children:[x.jsx(aA,{className:"w-4 h-4 text-blue-400"}),x.jsx("span",{className:"max-w-[140px] truncate",children:S?"Loading...":L}),x.jsx(Ha,{className:`w-3 h-3 transition-transform ${v?"rotate-180":""}`})]}),x.jsx(Lr,{children:v&&x.jsxs(mt.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},className:`absolute right-0 mt-2 w-80 max-h-[400px] overflow-y-auto bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-xl z-50`,children:[x.jsxs("div",{className:"p-2 border-b border-gray-200 dark:border-gray-700 sticky top-0 bg-white dark:bg-gray-800 z-10",children:[x.jsxs("div",{className:"relative",children:[x.jsx(nb,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),x.jsx("input",{type:"text",value:_,onChange:J=>C(J.target.value),placeholder:"Search configs...",className:`w-full pl-9 pr-8 py-2 bg-gray-100 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg text-sm text-gray-900 dark:text-gray-100 placeholder-gray-500 @@ -586,10 +586,10 @@ Error generating stack: `+q.message+` rounded-lg border border-gray-300 dark:border-gray-600 text-sm transition-colors`,title:"Browse Answers",children:[x.jsx(on,{className:"w-4 h-4 text-blue-500 dark:text-blue-400"}),x.jsx("span",{children:"Answers"}),l>0&&x.jsx("span",{className:"px-1.5 py-0.5 bg-blue-600 text-white rounded-full text-xs min-w-[1.25rem] text-center",children:l})]}),x.jsxs("button",{onClick:s,className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 rounded-lg border border-gray-300 dark:border-gray-600 text-sm transition-colors`,title:"Browse Votes",children:[x.jsx(Xo,{className:"w-4 h-4 text-amber-500 dark:text-amber-400"}),x.jsx("span",{children:"Votes"}),c>0&&x.jsx("span",{className:"px-1.5 py-0.5 bg-amber-600 text-white rounded-full text-xs min-w-[1.25rem] text-center",children:c})]}),x.jsx("button",{onClick:B,className:`p-1.5 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 rounded-lg border border-gray-300 dark:border-gray-600 transition-colors`,title:`Theme: ${I} (click to cycle)`,children:x.jsx(P,{className:"w-4 h-4 text-amber-500 dark:text-yellow-400"})}),x.jsxs("a",{href:"/setup",className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gray-200 dark:bg-gray-700 hover:bg-gray-300 dark:hover:bg-gray-600 - rounded-lg border border-gray-300 dark:border-gray-600 text-sm transition-colors`,title:"Open Setup Page",children:[x.jsx(bce,{className:"w-4 h-4 text-gray-600 dark:text-gray-400"}),x.jsx("span",{children:"Setup"})]}),x.jsxs("button",{onClick:N,className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gradient-to-r from-blue-500 to-purple-500 - hover:from-blue-600 hover:to-purple-600 rounded-lg text-sm text-white transition-all`,title:"Open Quickstart Wizard",children:[x.jsx(BC,{className:"w-4 h-4"}),x.jsx("span",{children:"Quickstart"})]}),x.jsx("button",{className:"p-1.5 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors",title:"Settings",children:x.jsx(Zs,{className:"w-4 h-4 text-gray-500 dark:text-gray-400"})})]})}const cue="modulepreload",uue=function(t){return"/"+t},qR={},fe=function(e,r,n){let i=Promise.resolve();if(r&&r.length>0){let s=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=s(r.map(c=>{if(c=uue(c),c in qR)return;qR[c]=!0;const u=c.endsWith(".css"),h=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${h}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":cue,u||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((f,g)=>{d.addEventListener("load",f),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function a(s){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=s,window.dispatchEvent(o),!o.defaultPrevented)throw s}return i.then(s=>{for(const o of s||[])o.status==="rejected"&&a(o.reason);return e().catch(a)})},oQ=[{id:"abap",name:"ABAP",import:()=>fe(()=>import("./abap-DsBKuouk.js"),[])},{id:"actionscript-3",name:"ActionScript",import:()=>fe(()=>import("./actionscript-3-D_z4Izcz.js"),[])},{id:"ada",name:"Ada",import:()=>fe(()=>import("./ada-727ZlQH0.js"),[])},{id:"angular-html",name:"Angular HTML",import:()=>fe(()=>import("./angular-html-LfdN0zeE.js").then(t=>t.f),__vite__mapDeps([0,1,2,3]))},{id:"angular-ts",name:"Angular TypeScript",import:()=>fe(()=>import("./angular-ts-CKsD7JZE.js"),__vite__mapDeps([4,0,1,2,3,5]))},{id:"apache",name:"Apache Conf",import:()=>fe(()=>import("./apache-Dn00JSTd.js"),[])},{id:"apex",name:"Apex",import:()=>fe(()=>import("./apex-COJ4H7py.js"),[])},{id:"apl",name:"APL",import:()=>fe(()=>import("./apl-BBq3IX1j.js"),__vite__mapDeps([6,1,2,3,7,8,9]))},{id:"applescript",name:"AppleScript",import:()=>fe(()=>import("./applescript-Bu5BbsvL.js"),[])},{id:"ara",name:"Ara",import:()=>fe(()=>import("./ara-7O62HKoU.js"),[])},{id:"asciidoc",name:"AsciiDoc",aliases:["adoc"],import:()=>fe(()=>import("./asciidoc-BPT9niGB.js"),[])},{id:"asm",name:"Assembly",import:()=>fe(()=>import("./asm-Dhn9LcZ4.js"),[])},{id:"astro",name:"Astro",import:()=>fe(()=>import("./astro-CqkE3fuf.js"),__vite__mapDeps([10,9,2,11,3,12]))},{id:"awk",name:"AWK",import:()=>fe(()=>import("./awk-eg146-Ew.js"),[])},{id:"ballerina",name:"Ballerina",import:()=>fe(()=>import("./ballerina-Du268qiB.js"),[])},{id:"bat",name:"Batch File",aliases:["batch"],import:()=>fe(()=>import("./bat-fje9CFhw.js"),[])},{id:"beancount",name:"Beancount",import:()=>fe(()=>import("./beancount-BwXTMy5W.js"),[])},{id:"berry",name:"Berry",aliases:["be"],import:()=>fe(()=>import("./berry-3xVqZejG.js"),[])},{id:"bibtex",name:"BibTeX",import:()=>fe(()=>import("./bibtex-xW4inM5L.js"),[])},{id:"bicep",name:"Bicep",import:()=>fe(()=>import("./bicep-DHo0CJ0O.js"),[])},{id:"blade",name:"Blade",import:()=>fe(()=>import("./blade-a8OxSdnT.js"),__vite__mapDeps([13,1,2,3,7,8,14,9]))},{id:"bsl",name:"1C (Enterprise)",aliases:["1c"],import:()=>fe(()=>import("./bsl-Dgyn0ogV.js"),__vite__mapDeps([15,16]))},{id:"c",name:"C",import:()=>fe(()=>import("./c-C3t2pwGQ.js"),[])},{id:"cadence",name:"Cadence",aliases:["cdc"],import:()=>fe(()=>import("./cadence-DNquZEk8.js"),[])},{id:"cairo",name:"Cairo",import:()=>fe(()=>import("./cairo--RitsXJZ.js"),__vite__mapDeps([17,18]))},{id:"clarity",name:"Clarity",import:()=>fe(()=>import("./clarity-BHOwM8T6.js"),[])},{id:"clojure",name:"Clojure",aliases:["clj"],import:()=>fe(()=>import("./clojure-DxSadP1t.js"),[])},{id:"cmake",name:"CMake",import:()=>fe(()=>import("./cmake-DbXoA79R.js"),[])},{id:"cobol",name:"COBOL",import:()=>fe(()=>import("./cobol-PTqiYgYu.js"),__vite__mapDeps([19,1,2,3,8]))},{id:"codeowners",name:"CODEOWNERS",import:()=>fe(()=>import("./codeowners-Bp6g37R7.js"),[])},{id:"codeql",name:"CodeQL",aliases:["ql"],import:()=>fe(()=>import("./codeql-sacFqUAJ.js"),[])},{id:"coffee",name:"CoffeeScript",aliases:["coffeescript"],import:()=>fe(()=>import("./coffee-dyiR41kL.js"),__vite__mapDeps([20,2]))},{id:"common-lisp",name:"Common Lisp",aliases:["lisp"],import:()=>fe(()=>import("./common-lisp-C7gG9l05.js"),[])},{id:"coq",name:"Coq",import:()=>fe(()=>import("./coq-Dsg_Bt_b.js"),[])},{id:"cpp",name:"C++",aliases:["c++"],import:()=>fe(()=>import("./cpp-BksuvNSY.js"),__vite__mapDeps([21,22,23,24,14]))},{id:"crystal",name:"Crystal",import:()=>fe(()=>import("./crystal-DtDmRg-F.js"),__vite__mapDeps([25,1,2,3,14,24,26]))},{id:"csharp",name:"C#",aliases:["c#","cs"],import:()=>fe(()=>import("./csharp-D9R-vmeu.js"),[])},{id:"css",name:"CSS",import:()=>fe(()=>import("./css-BPhBrDlE.js"),[])},{id:"csv",name:"CSV",import:()=>fe(()=>import("./csv-B0qRVHPH.js"),[])},{id:"cue",name:"CUE",import:()=>fe(()=>import("./cue-DtFQj3wx.js"),[])},{id:"cypher",name:"Cypher",aliases:["cql"],import:()=>fe(()=>import("./cypher-m2LEI-9-.js"),[])},{id:"d",name:"D",import:()=>fe(()=>import("./d-BoXegm-a.js"),[])},{id:"dart",name:"Dart",import:()=>fe(()=>import("./dart-B9wLZaAG.js"),[])},{id:"dax",name:"DAX",import:()=>fe(()=>import("./dax-ClGRhx96.js"),[])},{id:"desktop",name:"Desktop",import:()=>fe(()=>import("./desktop-DEIpsLCJ.js"),[])},{id:"diff",name:"Diff",import:()=>fe(()=>import("./diff-BgYniUM_.js"),[])},{id:"docker",name:"Dockerfile",aliases:["dockerfile"],import:()=>fe(()=>import("./docker-COcR7UxN.js"),[])},{id:"dotenv",name:"dotEnv",import:()=>fe(()=>import("./dotenv-BjQB5zDj.js"),[])},{id:"dream-maker",name:"Dream Maker",import:()=>fe(()=>import("./dream-maker-C-nORZOA.js"),[])},{id:"edge",name:"Edge",import:()=>fe(()=>import("./edge-D5gP-w-T.js"),__vite__mapDeps([27,11,1,2,3,28]))},{id:"elixir",name:"Elixir",import:()=>fe(()=>import("./elixir-CLiX3zqd.js"),__vite__mapDeps([29,1,2,3]))},{id:"elm",name:"Elm",import:()=>fe(()=>import("./elm-CmHSxxaM.js"),__vite__mapDeps([30,23,24]))},{id:"emacs-lisp",name:"Emacs Lisp",aliases:["elisp"],import:()=>fe(()=>import("./emacs-lisp-BX77sIaO.js"),[])},{id:"erb",name:"ERB",import:()=>fe(()=>import("./erb-BYTLMnw6.js"),__vite__mapDeps([31,1,2,3,32,33,7,8,14,34,11,35,36,21,22,23,24,26,37,38]))},{id:"erlang",name:"Erlang",aliases:["erl"],import:()=>fe(()=>import("./erlang-B-DoSBHF.js"),[])},{id:"fennel",name:"Fennel",import:()=>fe(()=>import("./fennel-bCA53EVm.js"),[])},{id:"fish",name:"Fish",import:()=>fe(()=>import("./fish-w-ucz2PV.js"),[])},{id:"fluent",name:"Fluent",aliases:["ftl"],import:()=>fe(()=>import("./fluent-Dayu4EKP.js"),[])},{id:"fortran-fixed-form",name:"Fortran (Fixed Form)",aliases:["f","for","f77"],import:()=>fe(()=>import("./fortran-fixed-form-TqA4NnZg.js"),__vite__mapDeps([39,40]))},{id:"fortran-free-form",name:"Fortran (Free Form)",aliases:["f90","f95","f03","f08","f18"],import:()=>fe(()=>import("./fortran-free-form-DKXYxT9g.js"),[])},{id:"fsharp",name:"F#",aliases:["f#","fs"],import:()=>fe(()=>import("./fsharp-XplgxFYe.js"),__vite__mapDeps([41,42]))},{id:"gdresource",name:"GDResource",import:()=>fe(()=>import("./gdresource-BHYsBjWJ.js"),__vite__mapDeps([43,44,45]))},{id:"gdscript",name:"GDScript",import:()=>fe(()=>import("./gdscript-DfxzS6Rs.js"),[])},{id:"gdshader",name:"GDShader",import:()=>fe(()=>import("./gdshader-SKMF96pI.js"),[])},{id:"genie",name:"Genie",import:()=>fe(()=>import("./genie-ajMbGru0.js"),[])},{id:"gherkin",name:"Gherkin",import:()=>fe(()=>import("./gherkin--30QC5Em.js"),[])},{id:"git-commit",name:"Git Commit Message",import:()=>fe(()=>import("./git-commit-i4q6IMui.js"),__vite__mapDeps([46,47]))},{id:"git-rebase",name:"Git Rebase Message",import:()=>fe(()=>import("./git-rebase-B-v9cOL2.js"),__vite__mapDeps([48,26]))},{id:"gleam",name:"Gleam",import:()=>fe(()=>import("./gleam-B430Bg39.js"),[])},{id:"glimmer-js",name:"Glimmer JS",aliases:["gjs"],import:()=>fe(()=>import("./glimmer-js-D-cwc0-E.js"),__vite__mapDeps([49,2,11,3,1]))},{id:"glimmer-ts",name:"Glimmer TS",aliases:["gts"],import:()=>fe(()=>import("./glimmer-ts-pgjy16dm.js"),__vite__mapDeps([50,11,3,2,1]))},{id:"glsl",name:"GLSL",import:()=>fe(()=>import("./glsl-DBO2IWDn.js"),__vite__mapDeps([23,24]))},{id:"gnuplot",name:"Gnuplot",import:()=>fe(()=>import("./gnuplot-CM8KxXT1.js"),[])},{id:"go",name:"Go",import:()=>fe(()=>import("./go-B1SYOhNW.js"),[])},{id:"graphql",name:"GraphQL",aliases:["gql"],import:()=>fe(()=>import("./graphql-cDcHW_If.js"),__vite__mapDeps([34,2,11,35,36]))},{id:"groovy",name:"Groovy",import:()=>fe(()=>import("./groovy-DkBy-JyN.js"),[])},{id:"hack",name:"Hack",import:()=>fe(()=>import("./hack-D1yCygmZ.js"),__vite__mapDeps([51,1,2,3,14]))},{id:"haml",name:"Ruby Haml",import:()=>fe(()=>import("./haml-B2EZWmdv.js"),__vite__mapDeps([33,2,3]))},{id:"handlebars",name:"Handlebars",aliases:["hbs"],import:()=>fe(()=>import("./handlebars-BQGss363.js"),__vite__mapDeps([52,1,2,3,38]))},{id:"haskell",name:"Haskell",aliases:["hs"],import:()=>fe(()=>import("./haskell-BILxekzW.js"),[])},{id:"haxe",name:"Haxe",import:()=>fe(()=>import("./haxe-C5wWYbrZ.js"),[])},{id:"hcl",name:"HashiCorp HCL",import:()=>fe(()=>import("./hcl-HzYwdGDm.js"),[])},{id:"hjson",name:"Hjson",import:()=>fe(()=>import("./hjson-T-Tgc4AT.js"),[])},{id:"hlsl",name:"HLSL",import:()=>fe(()=>import("./hlsl-ifBTmRxC.js"),[])},{id:"html",name:"HTML",import:()=>fe(()=>import("./html-C2L_23MC.js"),__vite__mapDeps([1,2,3]))},{id:"html-derivative",name:"HTML (Derivative)",import:()=>fe(()=>import("./html-derivative-CSfWNPLT.js"),__vite__mapDeps([28,1,2,3]))},{id:"http",name:"HTTP",import:()=>fe(()=>import("./http-FRrOvY1W.js"),__vite__mapDeps([53,26,9,7,8,34,2,11,35,36]))},{id:"hxml",name:"HXML",import:()=>fe(()=>import("./hxml-TIA70rKU.js"),__vite__mapDeps([54,55]))},{id:"hy",name:"Hy",import:()=>fe(()=>import("./hy-BMj5Y0dO.js"),[])},{id:"imba",name:"Imba",import:()=>fe(()=>import("./imba-bv_oIlVt.js"),__vite__mapDeps([56,11]))},{id:"ini",name:"INI",aliases:["properties"],import:()=>fe(()=>import("./ini-BjABl1g7.js"),[])},{id:"java",name:"Java",import:()=>fe(()=>import("./java-xI-RfyKK.js"),[])},{id:"javascript",name:"JavaScript",aliases:["js"],import:()=>fe(()=>import("./javascript-ySlJ1b_l.js"),[])},{id:"jinja",name:"Jinja",import:()=>fe(()=>import("./jinja-DGy0s7-h.js"),__vite__mapDeps([57,1,2,3]))},{id:"jison",name:"Jison",import:()=>fe(()=>import("./jison-BqZprYcd.js"),__vite__mapDeps([58,2]))},{id:"json",name:"JSON",import:()=>fe(()=>import("./json-BQoSv7ci.js"),[])},{id:"json5",name:"JSON5",import:()=>fe(()=>import("./json5-w8dY5SsB.js"),[])},{id:"jsonc",name:"JSON with Comments",import:()=>fe(()=>import("./jsonc-TU54ms6u.js"),[])},{id:"jsonl",name:"JSON Lines",import:()=>fe(()=>import("./jsonl-DREVFZK8.js"),[])},{id:"jsonnet",name:"Jsonnet",import:()=>fe(()=>import("./jsonnet-BfivnA6A.js"),[])},{id:"jssm",name:"JSSM",aliases:["fsl"],import:()=>fe(()=>import("./jssm-P4WzXJd0.js"),[])},{id:"jsx",name:"JSX",import:()=>fe(()=>import("./jsx-BAng5TT0.js"),[])},{id:"julia",name:"Julia",aliases:["jl"],import:()=>fe(()=>import("./julia-BBuGR-5E.js"),__vite__mapDeps([59,21,22,23,24,14,18,2,60]))},{id:"kotlin",name:"Kotlin",aliases:["kt","kts"],import:()=>fe(()=>import("./kotlin-B5lbUyaz.js"),[])},{id:"kusto",name:"Kusto",aliases:["kql"],import:()=>fe(()=>import("./kusto-mebxcVVE.js"),[])},{id:"latex",name:"LaTeX",import:()=>fe(()=>import("./latex-C-cWTeAZ.js"),__vite__mapDeps([61,62,60]))},{id:"lean",name:"Lean 4",aliases:["lean4"],import:()=>fe(()=>import("./lean-XBlWyCtg.js"),[])},{id:"less",name:"Less",import:()=>fe(()=>import("./less-BfCpw3nA.js"),[])},{id:"liquid",name:"Liquid",import:()=>fe(()=>import("./liquid-D3W5UaiH.js"),__vite__mapDeps([63,1,2,3,9]))},{id:"log",name:"Log file",import:()=>fe(()=>import("./log-Cc5clBb7.js"),[])},{id:"logo",name:"Logo",import:()=>fe(()=>import("./logo-IuBKFhSY.js"),[])},{id:"lua",name:"Lua",import:()=>fe(()=>import("./lua-CvWAzNxB.js"),__vite__mapDeps([37,24]))},{id:"luau",name:"Luau",import:()=>fe(()=>import("./luau-Du5NY7AG.js"),[])},{id:"make",name:"Makefile",aliases:["makefile"],import:()=>fe(()=>import("./make-Bvotw-X0.js"),[])},{id:"markdown",name:"Markdown",aliases:["md"],import:()=>fe(()=>import("./markdown-UIAJJxZW.js"),[])},{id:"marko",name:"Marko",import:()=>fe(()=>import("./marko-z0MBrx5-.js"),__vite__mapDeps([64,3,65,5,2]))},{id:"matlab",name:"MATLAB",import:()=>fe(()=>import("./matlab-D9-PGadD.js"),[])},{id:"mdc",name:"MDC",import:()=>fe(()=>import("./mdc-DB_EDNY_.js"),__vite__mapDeps([66,42,38,28,1,2,3]))},{id:"mdx",name:"MDX",import:()=>fe(()=>import("./mdx-sdHcTMYB.js"),[])},{id:"mermaid",name:"Mermaid",aliases:["mmd"],import:()=>fe(()=>import("./mermaid-Ci6OQyBP.js"),[])},{id:"mipsasm",name:"MIPS Assembly",aliases:["mips"],import:()=>fe(()=>import("./mipsasm-BC5c_5Pe.js"),[])},{id:"mojo",name:"Mojo",import:()=>fe(()=>import("./mojo-Tz6hzZYG.js"),[])},{id:"move",name:"Move",import:()=>fe(()=>import("./move-DB_GagMm.js"),[])},{id:"narrat",name:"Narrat Language",aliases:["nar"],import:()=>fe(()=>import("./narrat-DLbgOhZU.js"),[])},{id:"nextflow",name:"Nextflow",aliases:["nf"],import:()=>fe(()=>import("./nextflow-B0XVJmRM.js"),[])},{id:"nginx",name:"Nginx",import:()=>fe(()=>import("./nginx-D_VnBJ67.js"),__vite__mapDeps([67,37,24]))},{id:"nim",name:"Nim",import:()=>fe(()=>import("./nim-ZlGxZxc3.js"),__vite__mapDeps([68,24,1,2,3,7,8,23,42]))},{id:"nix",name:"Nix",import:()=>fe(()=>import("./nix-shcSOmrb.js"),[])},{id:"nushell",name:"nushell",aliases:["nu"],import:()=>fe(()=>import("./nushell-D4Tzg5kh.js"),[])},{id:"objective-c",name:"Objective-C",aliases:["objc"],import:()=>fe(()=>import("./objective-c-Deuh7S70.js"),[])},{id:"objective-cpp",name:"Objective-C++",import:()=>fe(()=>import("./objective-cpp-BUEGK8hf.js"),[])},{id:"ocaml",name:"OCaml",import:()=>fe(()=>import("./ocaml-BNioltXt.js"),[])},{id:"pascal",name:"Pascal",import:()=>fe(()=>import("./pascal-JqZropPD.js"),[])},{id:"perl",name:"Perl",import:()=>fe(()=>import("./perl-CHQXSrWU.js"),__vite__mapDeps([69,1,2,3,7,8,14]))},{id:"php",name:"PHP",import:()=>fe(()=>import("./php-B5ebYQev.js"),__vite__mapDeps([70,1,2,3,7,8,14,9]))},{id:"plsql",name:"PL/SQL",import:()=>fe(()=>import("./plsql-LKU2TuZ1.js"),[])},{id:"po",name:"Gettext PO",aliases:["pot","potx"],import:()=>fe(()=>import("./po-BFLt1xDp.js"),[])},{id:"polar",name:"Polar",import:()=>fe(()=>import("./polar-DKykz6zU.js"),[])},{id:"postcss",name:"PostCSS",import:()=>fe(()=>import("./postcss-B3ZDOciz.js"),[])},{id:"powerquery",name:"PowerQuery",import:()=>fe(()=>import("./powerquery-CSHBycmS.js"),[])},{id:"powershell",name:"PowerShell",aliases:["ps","ps1"],import:()=>fe(()=>import("./powershell-BIEUsx6d.js"),[])},{id:"prisma",name:"Prisma",import:()=>fe(()=>import("./prisma-B48N-Iqd.js"),[])},{id:"prolog",name:"Prolog",import:()=>fe(()=>import("./prolog-BY-TUvya.js"),[])},{id:"proto",name:"Protocol Buffer 3",aliases:["protobuf"],import:()=>fe(()=>import("./proto-zocC4JxJ.js"),[])},{id:"pug",name:"Pug",aliases:["jade"],import:()=>fe(()=>import("./pug-CM9l7STV.js"),__vite__mapDeps([71,2,3,1]))},{id:"puppet",name:"Puppet",import:()=>fe(()=>import("./puppet-Cza_XSSt.js"),[])},{id:"purescript",name:"PureScript",import:()=>fe(()=>import("./purescript-Bg-kzb6g.js"),[])},{id:"python",name:"Python",aliases:["py"],import:()=>fe(()=>import("./python-DhUJRlN_.js"),[])},{id:"qml",name:"QML",import:()=>fe(()=>import("./qml-D8XfuvdV.js"),__vite__mapDeps([72,2]))},{id:"qmldir",name:"QML Directory",import:()=>fe(()=>import("./qmldir-C8lEn-DE.js"),[])},{id:"qss",name:"Qt Style Sheets",import:()=>fe(()=>import("./qss-DhMKtDLN.js"),[])},{id:"r",name:"R",import:()=>fe(()=>import("./r-CwjWoCRV.js"),[])},{id:"racket",name:"Racket",import:()=>fe(()=>import("./racket-CzouJOBO.js"),[])},{id:"raku",name:"Raku",aliases:["perl6"],import:()=>fe(()=>import("./raku-B1bQXN8T.js"),[])},{id:"razor",name:"ASP.NET Razor",import:()=>fe(()=>import("./razor-CNLDkMZG.js"),__vite__mapDeps([73,1,2,3,74]))},{id:"reg",name:"Windows Registry Script",import:()=>fe(()=>import("./reg-5LuOXUq_.js"),[])},{id:"regexp",name:"RegExp",aliases:["regex"],import:()=>fe(()=>import("./regexp-DWJ3fJO_.js"),[])},{id:"rel",name:"Rel",import:()=>fe(()=>import("./rel-DJlmqQ1C.js"),[])},{id:"riscv",name:"RISC-V",import:()=>fe(()=>import("./riscv-QhoSD0DR.js"),[])},{id:"rst",name:"reStructuredText",import:()=>fe(()=>import("./rst-4NLicBqY.js"),__vite__mapDeps([75,28,1,2,3,21,22,23,24,14,18,26,38,76,32,33,7,8,34,11,35,36,37]))},{id:"ruby",name:"Ruby",aliases:["rb"],import:()=>fe(()=>import("./ruby-DeZ3UC14.js"),__vite__mapDeps([32,1,2,3,33,7,8,14,34,11,35,36,21,22,23,24,26,37,38]))},{id:"rust",name:"Rust",aliases:["rs"],import:()=>fe(()=>import("./rust-Be6lgOlo.js"),[])},{id:"sas",name:"SAS",import:()=>fe(()=>import("./sas-BmTFh92c.js"),__vite__mapDeps([77,14]))},{id:"sass",name:"Sass",import:()=>fe(()=>import("./sass-BJ4Li9vH.js"),[])},{id:"scala",name:"Scala",import:()=>fe(()=>import("./scala-DQVVAn-B.js"),[])},{id:"scheme",name:"Scheme",import:()=>fe(()=>import("./scheme-BJGe-b2p.js"),[])},{id:"scss",name:"SCSS",import:()=>fe(()=>import("./scss-C31hgJw-.js"),__vite__mapDeps([5,3]))},{id:"sdbl",name:"1C (Query)",aliases:["1c-query"],import:()=>fe(()=>import("./sdbl-BLhTXw86.js"),[])},{id:"shaderlab",name:"ShaderLab",aliases:["shader"],import:()=>fe(()=>import("./shaderlab-B7qAK45m.js"),__vite__mapDeps([78,79]))},{id:"shellscript",name:"Shell",aliases:["bash","sh","shell","zsh"],import:()=>fe(()=>import("./shellscript-atvbtKCR.js"),[])},{id:"shellsession",name:"Shell Session",aliases:["console"],import:()=>fe(()=>import("./shellsession-C_rIy8kc.js"),__vite__mapDeps([80,26]))},{id:"smalltalk",name:"Smalltalk",import:()=>fe(()=>import("./smalltalk-DkLiglaE.js"),[])},{id:"solidity",name:"Solidity",import:()=>fe(()=>import("./solidity-C1w2a3ep.js"),[])},{id:"soy",name:"Closure Templates",aliases:["closure-templates"],import:()=>fe(()=>import("./soy-C-lX7w71.js"),__vite__mapDeps([81,1,2,3]))},{id:"sparql",name:"SPARQL",import:()=>fe(()=>import("./sparql-bYkjHRlG.js"),__vite__mapDeps([82,83]))},{id:"splunk",name:"Splunk Query Language",aliases:["spl"],import:()=>fe(()=>import("./splunk-Cf8iN4DR.js"),[])},{id:"sql",name:"SQL",import:()=>fe(()=>import("./sql-COK4E0Yg.js"),[])},{id:"ssh-config",name:"SSH Config",import:()=>fe(()=>import("./ssh-config-BknIz3MU.js"),[])},{id:"stata",name:"Stata",import:()=>fe(()=>import("./stata-DorPZHa4.js"),__vite__mapDeps([84,14]))},{id:"stylus",name:"Stylus",aliases:["styl"],import:()=>fe(()=>import("./stylus-BeQkCIfX.js"),[])},{id:"svelte",name:"Svelte",import:()=>fe(()=>import("./svelte-MSaWC3Je.js"),__vite__mapDeps([85,2,11,3,12]))},{id:"swift",name:"Swift",import:()=>fe(()=>import("./swift-BSxZ-RaX.js"),[])},{id:"system-verilog",name:"SystemVerilog",import:()=>fe(()=>import("./system-verilog-C7L56vO4.js"),[])},{id:"systemd",name:"Systemd Units",import:()=>fe(()=>import("./systemd-CUnW07Te.js"),[])},{id:"talonscript",name:"TalonScript",aliases:["talon"],import:()=>fe(()=>import("./talonscript-C1XDQQGZ.js"),[])},{id:"tasl",name:"Tasl",import:()=>fe(()=>import("./tasl-CQjiPCtT.js"),[])},{id:"tcl",name:"Tcl",import:()=>fe(()=>import("./tcl-DQ1-QYvQ.js"),[])},{id:"templ",name:"Templ",import:()=>fe(()=>import("./templ-dwX3ZSMB.js"),__vite__mapDeps([86,87,2,3]))},{id:"terraform",name:"Terraform",aliases:["tf","tfvars"],import:()=>fe(()=>import("./terraform-BbSNqyBO.js"),[])},{id:"tex",name:"TeX",import:()=>fe(()=>import("./tex-rYs2v40G.js"),__vite__mapDeps([62,60]))},{id:"toml",name:"TOML",import:()=>fe(()=>import("./toml-CB2ApiWb.js"),[])},{id:"ts-tags",name:"TypeScript with Tags",aliases:["lit"],import:()=>fe(()=>import("./ts-tags-CipyTH0X.js"),__vite__mapDeps([88,11,3,2,23,24,1,14,7,8]))},{id:"tsv",name:"TSV",import:()=>fe(()=>import("./tsv-B_m7g4N7.js"),[])},{id:"tsx",name:"TSX",import:()=>fe(()=>import("./tsx-B6W0miNI.js"),[])},{id:"turtle",name:"Turtle",import:()=>fe(()=>import("./turtle-BMR_PYu6.js"),[])},{id:"twig",name:"Twig",import:()=>fe(()=>import("./twig-NC5TFiHP.js"),__vite__mapDeps([89,3,2,5,70,1,7,8,14,9,18,32,33,34,11,35,36,21,22,23,24,26,37,38]))},{id:"typescript",name:"TypeScript",aliases:["ts"],import:()=>fe(()=>import("./typescript-Dj6nwHGl.js"),[])},{id:"typespec",name:"TypeSpec",aliases:["tsp"],import:()=>fe(()=>import("./typespec-BpWG_bgh.js"),[])},{id:"typst",name:"Typst",aliases:["typ"],import:()=>fe(()=>import("./typst-BVUVsWT6.js"),[])},{id:"v",name:"V",import:()=>fe(()=>import("./v-CAQ2eGtk.js"),[])},{id:"vala",name:"Vala",import:()=>fe(()=>import("./vala-BFOHcciG.js"),[])},{id:"vb",name:"Visual Basic",aliases:["cmd"],import:()=>fe(()=>import("./vb-CdO5JTpU.js"),[])},{id:"verilog",name:"Verilog",import:()=>fe(()=>import("./verilog-CJaU5se_.js"),[])},{id:"vhdl",name:"VHDL",import:()=>fe(()=>import("./vhdl-DYoNaHQp.js"),[])},{id:"viml",name:"Vim Script",aliases:["vim","vimscript"],import:()=>fe(()=>import("./viml-m4uW47V2.js"),[])},{id:"vue",name:"Vue",import:()=>fe(()=>import("./vue-BuYVFjOK.js"),__vite__mapDeps([90,1,2,3,11,9,28]))},{id:"vue-html",name:"Vue HTML",import:()=>fe(()=>import("./vue-html-xdeiXROB.js"),__vite__mapDeps([91,90,1,2,3,11,9,28]))},{id:"vyper",name:"Vyper",aliases:["vy"],import:()=>fe(()=>import("./vyper-nyqBNV6O.js"),[])},{id:"wasm",name:"WebAssembly",import:()=>fe(()=>import("./wasm-C6j12Q_x.js"),[])},{id:"wenyan",name:"Wenyan",aliases:["文言"],import:()=>fe(()=>import("./wenyan-7A4Fjokl.js"),[])},{id:"wgsl",name:"WGSL",import:()=>fe(()=>import("./wgsl-CB0Krxn9.js"),[])},{id:"wikitext",name:"Wikitext",aliases:["mediawiki","wiki"],import:()=>fe(()=>import("./wikitext-DCE3LsBG.js"),[])},{id:"wolfram",name:"Wolfram",aliases:["wl"],import:()=>fe(()=>import("./wolfram-C3FkfJm5.js"),[])},{id:"xml",name:"XML",import:()=>fe(()=>import("./xml-e3z08dGr.js"),__vite__mapDeps([7,8]))},{id:"xsl",name:"XSL",import:()=>fe(()=>import("./xsl-Dd0NUgwM.js"),__vite__mapDeps([92,7,8]))},{id:"yaml",name:"YAML",aliases:["yml"],import:()=>fe(()=>import("./yaml-CVw76BM1.js"),[])},{id:"zenscript",name:"ZenScript",import:()=>fe(()=>import("./zenscript-HnGAYVZD.js"),[])},{id:"zig",name:"Zig",import:()=>fe(()=>import("./zig-BVz_zdnA.js"),[])}],hue=Object.fromEntries(oQ.map(t=>[t.id,t.import])),due=Object.fromEntries(oQ.flatMap(t=>{var e;return((e=t.aliases)==null?void 0:e.map(r=>[r,t.import]))||[]})),fue={...hue,...due},pue=[{id:"andromeeda",displayName:"Andromeeda",type:"dark",import:()=>fe(()=>import("./andromeeda-C3khCPGq.js"),[])},{id:"aurora-x",displayName:"Aurora X",type:"dark",import:()=>fe(()=>import("./aurora-x-D-2ljcwZ.js"),[])},{id:"ayu-dark",displayName:"Ayu Dark",type:"dark",import:()=>fe(()=>import("./ayu-dark-Cv9koXgw.js"),[])},{id:"catppuccin-frappe",displayName:"Catppuccin Frappé",type:"dark",import:()=>fe(()=>import("./catppuccin-frappe-CD_QflpE.js"),[])},{id:"catppuccin-latte",displayName:"Catppuccin Latte",type:"light",import:()=>fe(()=>import("./catppuccin-latte-DRW-0cLl.js"),[])},{id:"catppuccin-macchiato",displayName:"Catppuccin Macchiato",type:"dark",import:()=>fe(()=>import("./catppuccin-macchiato-C-_shW-Y.js"),[])},{id:"catppuccin-mocha",displayName:"Catppuccin Mocha",type:"dark",import:()=>fe(()=>import("./catppuccin-mocha-LGGdnPYs.js"),[])},{id:"dark-plus",displayName:"Dark Plus",type:"dark",import:()=>fe(()=>import("./dark-plus-C3mMm8J8.js"),[])},{id:"dracula",displayName:"Dracula Theme",type:"dark",import:()=>fe(()=>import("./dracula-BzJJZx-M.js"),[])},{id:"dracula-soft",displayName:"Dracula Theme Soft",type:"dark",import:()=>fe(()=>import("./dracula-soft-BXkSAIEj.js"),[])},{id:"everforest-dark",displayName:"Everforest Dark",type:"dark",import:()=>fe(()=>import("./everforest-dark-BgDCqdQA.js"),[])},{id:"everforest-light",displayName:"Everforest Light",type:"light",import:()=>fe(()=>import("./everforest-light-C8M2exoo.js"),[])},{id:"github-dark",displayName:"GitHub Dark",type:"dark",import:()=>fe(()=>import("./github-dark-DHJKELXO.js"),[])},{id:"github-dark-default",displayName:"GitHub Dark Default",type:"dark",import:()=>fe(()=>import("./github-dark-default-Cuk6v7N8.js"),[])},{id:"github-dark-dimmed",displayName:"GitHub Dark Dimmed",type:"dark",import:()=>fe(()=>import("./github-dark-dimmed-DH5Ifo-i.js"),[])},{id:"github-dark-high-contrast",displayName:"GitHub Dark High Contrast",type:"dark",import:()=>fe(()=>import("./github-dark-high-contrast-E3gJ1_iC.js"),[])},{id:"github-light",displayName:"GitHub Light",type:"light",import:()=>fe(()=>import("./github-light-DAi9KRSo.js"),[])},{id:"github-light-default",displayName:"GitHub Light Default",type:"light",import:()=>fe(()=>import("./github-light-default-D7oLnXFd.js"),[])},{id:"github-light-high-contrast",displayName:"GitHub Light High Contrast",type:"light",import:()=>fe(()=>import("./github-light-high-contrast-BfjtVDDH.js"),[])},{id:"houston",displayName:"Houston",type:"dark",import:()=>fe(()=>import("./houston-DnULxvSX.js"),[])},{id:"kanagawa-dragon",displayName:"Kanagawa Dragon",type:"dark",import:()=>fe(()=>import("./kanagawa-dragon-CkXjmgJE.js"),[])},{id:"kanagawa-lotus",displayName:"Kanagawa Lotus",type:"light",import:()=>fe(()=>import("./kanagawa-lotus-CfQXZHmo.js"),[])},{id:"kanagawa-wave",displayName:"Kanagawa Wave",type:"dark",import:()=>fe(()=>import("./kanagawa-wave-DWedfzmr.js"),[])},{id:"laserwave",displayName:"LaserWave",type:"dark",import:()=>fe(()=>import("./laserwave-DUszq2jm.js"),[])},{id:"light-plus",displayName:"Light Plus",type:"light",import:()=>fe(()=>import("./light-plus-B7mTdjB0.js"),[])},{id:"material-theme",displayName:"Material Theme",type:"dark",import:()=>fe(()=>import("./material-theme-D5KoaKCx.js"),[])},{id:"material-theme-darker",displayName:"Material Theme Darker",type:"dark",import:()=>fe(()=>import("./material-theme-darker-BfHTSMKl.js"),[])},{id:"material-theme-lighter",displayName:"Material Theme Lighter",type:"light",import:()=>fe(()=>import("./material-theme-lighter-B0m2ddpp.js"),[])},{id:"material-theme-ocean",displayName:"Material Theme Ocean",type:"dark",import:()=>fe(()=>import("./material-theme-ocean-CyktbL80.js"),[])},{id:"material-theme-palenight",displayName:"Material Theme Palenight",type:"dark",import:()=>fe(()=>import("./material-theme-palenight-Csfq5Kiy.js"),[])},{id:"min-dark",displayName:"Min Dark",type:"dark",import:()=>fe(()=>import("./min-dark-CafNBF8u.js"),[])},{id:"min-light",displayName:"Min Light",type:"light",import:()=>fe(()=>import("./min-light-CTRr51gU.js"),[])},{id:"monokai",displayName:"Monokai",type:"dark",import:()=>fe(()=>import("./monokai-D4h5O-jR.js"),[])},{id:"night-owl",displayName:"Night Owl",type:"dark",import:()=>fe(()=>import("./night-owl-C39BiMTA.js"),[])},{id:"nord",displayName:"Nord",type:"dark",import:()=>fe(()=>import("./nord-Ddv68eIx.js"),[])},{id:"one-dark-pro",displayName:"One Dark Pro",type:"dark",import:()=>fe(()=>import("./one-dark-pro-GBQ2dnAY.js"),[])},{id:"one-light",displayName:"One Light",type:"light",import:()=>fe(()=>import("./one-light-PoHY5YXO.js"),[])},{id:"plastic",displayName:"Plastic",type:"dark",import:()=>fe(()=>import("./plastic-3e1v2bzS.js"),[])},{id:"poimandres",displayName:"Poimandres",type:"dark",import:()=>fe(()=>import("./poimandres-CS3Unz2-.js"),[])},{id:"red",displayName:"Red",type:"dark",import:()=>fe(()=>import("./red-bN70gL4F.js"),[])},{id:"rose-pine",displayName:"Rosé Pine",type:"dark",import:()=>fe(()=>import("./rose-pine-CmCqftbK.js"),[])},{id:"rose-pine-dawn",displayName:"Rosé Pine Dawn",type:"light",import:()=>fe(()=>import("./rose-pine-dawn-Ds-gbosJ.js"),[])},{id:"rose-pine-moon",displayName:"Rosé Pine Moon",type:"dark",import:()=>fe(()=>import("./rose-pine-moon-CjDtw9vr.js"),[])},{id:"slack-dark",displayName:"Slack Dark",type:"dark",import:()=>fe(()=>import("./slack-dark-BthQWCQV.js"),[])},{id:"slack-ochin",displayName:"Slack Ochin",type:"light",import:()=>fe(()=>import("./slack-ochin-DqwNpetd.js"),[])},{id:"snazzy-light",displayName:"Snazzy Light",type:"light",import:()=>fe(()=>import("./snazzy-light-Bw305WKR.js"),[])},{id:"solarized-dark",displayName:"Solarized Dark",type:"dark",import:()=>fe(()=>import("./solarized-dark-DXbdFlpD.js"),[])},{id:"solarized-light",displayName:"Solarized Light",type:"light",import:()=>fe(()=>import("./solarized-light-L9t79GZl.js"),[])},{id:"synthwave-84",displayName:"Synthwave '84",type:"dark",import:()=>fe(()=>import("./synthwave-84-CbfX1IO0.js"),[])},{id:"tokyo-night",displayName:"Tokyo Night",type:"dark",import:()=>fe(()=>import("./tokyo-night-DBQeEorK.js"),[])},{id:"vesper",displayName:"Vesper",type:"dark",import:()=>fe(()=>import("./vesper-BEBZ7ncR.js"),[])},{id:"vitesse-black",displayName:"Vitesse Black",type:"dark",import:()=>fe(()=>import("./vitesse-black-Bkuqu6BP.js"),[])},{id:"vitesse-dark",displayName:"Vitesse Dark",type:"dark",import:()=>fe(()=>import("./vitesse-dark-D0r3Knsf.js"),[])},{id:"vitesse-light",displayName:"Vitesse Light",type:"light",import:()=>fe(()=>import("./vitesse-light-CVO1_9PV.js"),[])}],gue=Object.fromEntries(pue.map(t=>[t.id,t.import]));let Al=class extends Error{constructor(e){super(e),this.name="ShikiError"}},uA=class extends Error{constructor(e){super(e),this.name="ShikiError"}};function mue(){return 2147483648}function xue(){return typeof performance<"u"?performance.now():Date.now()}const yue=(t,e)=>t+(e-t%e)%e;async function vue(t){let e,r;const n={};function i(f){r=f,n.HEAPU8=new Uint8Array(f),n.HEAPU32=new Uint32Array(f)}function a(f,g,m){n.HEAPU8.copyWithin(f,g,g+m)}function s(f){try{return e.grow(f-r.byteLength+65535>>>16),i(e.buffer),1}catch{}}function o(f){const g=n.HEAPU8.length;f=f>>>0;const m=mue();if(f>m)return!1;for(let v=1;v<=4;v*=2){let b=g*(1+.2/v);b=Math.min(b,f+100663296);const w=Math.min(m,yue(Math.max(f,b),65536));if(s(w))return!0}return!1}const l=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function c(f,g,m=1024){const v=g+m;let b=g;for(;f[b]&&!(b>=v);)++b;if(b-g>16&&f.buffer&&l)return l.decode(f.subarray(g,b));let w="";for(;g>10,56320|_&1023)}}return w}function u(f,g){return f?c(n.HEAPU8,f,g):""}const h={emscripten_get_now:xue,emscripten_memcpy_big:a,emscripten_resize_heap:o,fd_write:()=>0};async function d(){const g=await t({env:h,wasi_snapshot_preview1:h});e=g.memory,i(e.buffer),Object.assign(n,g),n.UTF8ToString=u}return await d(),n}var bue=Object.defineProperty,wue=(t,e,r)=>e in t?bue(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Qn=(t,e,r)=>(wue(t,typeof e!="symbol"?e+"":e,r),r);let ri=null;function Oue(t){throw new uA(t.UTF8ToString(t.getLastOnigError()))}class G2{constructor(e){Qn(this,"utf16Length"),Qn(this,"utf8Length"),Qn(this,"utf16Value"),Qn(this,"utf8Value"),Qn(this,"utf16OffsetToUtf8"),Qn(this,"utf8OffsetToUtf16");const r=e.length,n=G2._utf8ByteLength(e),i=n!==r,a=i?new Uint32Array(r+1):null;i&&(a[r]=n);const s=i?new Uint32Array(n+1):null;i&&(s[n]=r);const o=new Uint8Array(n);let l=0;for(let c=0;c=55296&&u<=56319&&c+1=56320&&f<=57343&&(h=(u-55296<<10)+65536|f-56320,d=!0)}i&&(a[c]=l,d&&(a[c+1]=l),h<=127?s[l+0]=c:h<=2047?(s[l+0]=c,s[l+1]=c):h<=65535?(s[l+0]=c,s[l+1]=c,s[l+2]=c):(s[l+0]=c,s[l+1]=c,s[l+2]=c,s[l+3]=c)),h<=127?o[l++]=h:h<=2047?(o[l++]=192|(h&1984)>>>6,o[l++]=128|(h&63)>>>0):h<=65535?(o[l++]=224|(h&61440)>>>12,o[l++]=128|(h&4032)>>>6,o[l++]=128|(h&63)>>>0):(o[l++]=240|(h&1835008)>>>18,o[l++]=128|(h&258048)>>>12,o[l++]=128|(h&4032)>>>6,o[l++]=128|(h&63)>>>0),d&&c++}this.utf16Length=r,this.utf8Length=n,this.utf16Value=e,this.utf8Value=o,this.utf16OffsetToUtf8=a,this.utf8OffsetToUtf16=s}static _utf8ByteLength(e){let r=0;for(let n=0,i=e.length;n=55296&&a<=56319&&n+1=56320&&l<=57343&&(s=(a-55296<<10)+65536|l-56320,o=!0)}s<=127?r+=1:s<=2047?r+=2:s<=65535?r+=3:r+=4,o&&n++}return r}createString(e){const r=e.omalloc(this.utf8Length);return e.HEAPU8.set(this.utf8Value,r),r}}const Do=class{constructor(t){if(Qn(this,"id",++Do.LAST_ID),Qn(this,"_onigBinding"),Qn(this,"content"),Qn(this,"utf16Length"),Qn(this,"utf8Length"),Qn(this,"utf16OffsetToUtf8"),Qn(this,"utf8OffsetToUtf16"),Qn(this,"ptr"),!ri)throw new uA("Must invoke loadWasm first.");this._onigBinding=ri,this.content=t;const e=new G2(t);this.utf16Length=e.utf16Length,this.utf8Length=e.utf8Length,this.utf16OffsetToUtf8=e.utf16OffsetToUtf8,this.utf8OffsetToUtf16=e.utf8OffsetToUtf16,this.utf8Length<1e4&&!Do._sharedPtrInUse?(Do._sharedPtr||(Do._sharedPtr=ri.omalloc(1e4)),Do._sharedPtrInUse=!0,ri.HEAPU8.set(e.utf8Value,Do._sharedPtr),this.ptr=Do._sharedPtr):this.ptr=e.createString(ri)}convertUtf8OffsetToUtf16(t){return this.utf8OffsetToUtf16?t<0?0:t>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[t]:t}convertUtf16OffsetToUtf8(t){return this.utf16OffsetToUtf8?t<0?0:t>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[t]:t}dispose(){this.ptr===Do._sharedPtr?Do._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};let qm=Do;Qn(qm,"LAST_ID",0);Qn(qm,"_sharedPtr",0);Qn(qm,"_sharedPtrInUse",!1);class kue{constructor(e){if(Qn(this,"_onigBinding"),Qn(this,"_ptr"),!ri)throw new uA("Must invoke loadWasm first.");const r=[],n=[];for(let o=0,l=e.length;o{let n=t;return n=await n,typeof n=="function"&&(n=await n(r)),typeof n=="function"&&(n=await n(r)),_ue(n)?n=await n.instantiator(r):Sue(n)?n=await n.default(r):(Tue(n)&&(n=n.data),Cue(n)?typeof WebAssembly.instantiateStreaming=="function"?n=await Aue(n)(r):n=await Nue(n)(r):Eue(n)?n=await P_(n)(r):n instanceof WebAssembly.Module?n=await P_(n)(r):"default"in n&&n.default instanceof WebAssembly.Module&&(n=await P_(n.default)(r))),"instance"in n&&(n=n.instance),"exports"in n&&(n=n.exports),n})}return R1=e(),R1}function P_(t){return e=>WebAssembly.instantiate(t,e)}function Aue(t){return e=>WebAssembly.instantiateStreaming(t,e)}function Nue(t){return async e=>{const r=await t.arrayBuffer();return WebAssembly.instantiate(r,e)}}let Pue;function Rue(){return Pue}async function lQ(t){return t&&await Due(t),{createScanner(e){return new kue(e.map(r=>typeof r=="string"?r:r.source))},createString(e){return new qm(e)}}}function Fue(t){return hA(t)}function hA(t){return Array.isArray(t)?Lue(t):t instanceof RegExp?t:typeof t=="object"?Mue(t):t}function Lue(t){let e=[];for(let r=0,n=t.length;r{for(let n in r)t[n]=r[n]}),t}function uQ(t){const e=~t.lastIndexOf("/")||~t.lastIndexOf("\\");return e===0?t:~e===t.length-1?uQ(t.substring(0,t.length-1)):t.substr(~e+1)}var R_=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,F1=class{static hasCaptures(t){return t===null?!1:(R_.lastIndex=0,R_.test(t))}static replaceCaptures(t,e,r){return t.replace(R_,(n,i,a,s)=>{let o=r[parseInt(i||a,10)];if(o){let l=e.substring(o.start,o.end);for(;l[0]===".";)l=l.substring(1);switch(s){case"downcase":return l.toLowerCase();case"upcase":return l.toUpperCase();default:return l}}else return n})}};function hQ(t,e){return te?1:0}function dQ(t,e){if(t===null&&e===null)return 0;if(!t)return-1;if(!e)return 1;let r=t.length,n=e.length;if(r===n){for(let i=0;ithis._root.match(e)));this._colorMap=e,this._defaults=r,this._root=n}static createFromRawTheme(e,r){return this.createFromParsedTheme(jue(e),r)}static createFromParsedTheme(e,r){return Uue(e,r)}getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;const r=e.scopeName,i=this._cachedMatchRoot.get(r).find(a=>$ue(e.parent,a.parentScopes));return i?new gQ(i.fontStyle,i.foreground,i.background):null}},F_=class Zy{constructor(e,r){this.parent=e,this.scopeName=r}static push(e,r){for(const n of r)e=new Zy(e,n);return e}static from(...e){let r=null;for(let n=0;n"){if(r===e.length-1)return!1;n=e[++r],i=!0}for(;t&&!Iue(t.scopeName,n);){if(i)return!1;t=t.parent}if(!t)return!1;t=t.parent}return!0}function Iue(t,e){return e===t||t.startsWith(e)&&t[e.length]==="."}var gQ=class{constructor(t,e,r){this.fontStyle=t,this.foregroundId=e,this.backgroundId=r}};function jue(t){if(!t)return[];if(!t.settings||!Array.isArray(t.settings))return[];let e=t.settings,r=[],n=0;for(let i=0,a=e.length;i1&&(v=g.slice(0,g.length-1),v.reverse()),r[n++]=new Bue(m,v,i,l,c,u)}}return r}var Bue=class{constructor(t,e,r,n,i,a){this.scope=t,this.parentScopes=e,this.index=r,this.fontStyle=n,this.foreground=i,this.background=a}},Ol=(t=>(t[t.NotSet=-1]="NotSet",t[t.None=0]="None",t[t.Italic=1]="Italic",t[t.Bold=2]="Bold",t[t.Underline=4]="Underline",t[t.Strikethrough=8]="Strikethrough",t))(Ol||{});function Uue(t,e){t.sort((l,c)=>{let u=hQ(l.scope,c.scope);return u!==0||(u=dQ(l.parentScopes,c.parentScopes),u!==0)?u:l.index-c.index});let r=0,n="#000000",i="#ffffff";for(;t.length>=1&&t[0].scope==="";){let l=t.shift();l.fontStyle!==-1&&(r=l.fontStyle),l.foreground!==null&&(n=l.foreground),l.background!==null&&(i=l.background)}let a=new Que(e),s=new gQ(r,a.getId(n),a.getId(i)),o=new zue(new qC(0,null,-1,0,0),[]);for(let l=0,c=t.length;le?console.log("how did this happen?"):this.scopeDepth=e,r!==-1&&(this.fontStyle=r),n!==0&&(this.foreground=n),i!==0&&(this.background=i)}},zue=class XC{constructor(e,r=[],n={}){Me(this,"_rulesWithParentScopes");this._mainRule=e,this._children=n,this._rulesWithParentScopes=r}static _cmpBySpecificity(e,r){if(e.scopeDepth!==r.scopeDepth)return r.scopeDepth-e.scopeDepth;let n=0,i=0;for(;e.parentScopes[n]===">"&&n++,r.parentScopes[i]===">"&&i++,!(n>=e.parentScopes.length||i>=r.parentScopes.length);){const a=r.parentScopes[i].length-e.parentScopes[n].length;if(a!==0)return a;n++,i++}return r.parentScopes.length-e.parentScopes.length}match(e){if(e!==""){let n=e.indexOf("."),i,a;if(n===-1?(i=e,a=""):(i=e.substring(0,n),a=e.substring(n+1)),this._children.hasOwnProperty(i))return this._children[i].match(a)}const r=this._rulesWithParentScopes.concat(this._mainRule);return r.sort(XC._cmpBySpecificity),r}insert(e,r,n,i,a,s){if(r===""){this._doInsertHere(e,n,i,a,s);return}let o=r.indexOf("."),l,c;o===-1?(l=r,c=""):(l=r.substring(0,o),c=r.substring(o+1));let u;this._children.hasOwnProperty(l)?u=this._children[l]:(u=new XC(this._mainRule.clone(),qC.cloneArr(this._rulesWithParentScopes)),this._children[l]=u),u.insert(e+1,c,n,i,a,s)}_doInsertHere(e,r,n,i,a){if(r===null){this._mainRule.acceptOverwrite(e,n,i,a);return}for(let s=0,o=this._rulesWithParentScopes.length;s>>0}static getTokenType(e){return(e&768)>>>8}static containsBalancedBrackets(e){return(e&1024)!==0}static getFontStyle(e){return(e&30720)>>>11}static getForeground(e){return(e&16744448)>>>15}static getBackground(e){return(e&4278190080)>>>24}static set(e,r,n,i,a,s,o){let l=ps.getLanguageId(e),c=ps.getTokenType(e),u=ps.containsBalancedBrackets(e)?1:0,h=ps.getFontStyle(e),d=ps.getForeground(e),f=ps.getBackground(e);return r!==0&&(l=r),n!==8&&(c=n),i!==null&&(u=i?1:0),a!==-1&&(h=a),s!==0&&(d=s),o!==0&&(f=o),(l<<0|c<<8|u<<10|h<<11|d<<15|f<<24)>>>0}};function ob(t,e){const r=[],n=Vue(t);let i=n.next();for(;i!==null;){let l=0;if(i.length===2&&i.charAt(1)===":"){switch(i.charAt(0)){case"R":l=1;break;case"L":l=-1;break;default:console.log(`Unknown priority ${i} in scope selector`)}i=n.next()}let c=s();if(r.push({matcher:c,priority:l}),i!==",")break;i=n.next()}return r;function a(){if(i==="-"){i=n.next();const l=a();return c=>!!l&&!l(c)}if(i==="("){i=n.next();const l=o();return i===")"&&(i=n.next()),l}if(ZR(i)){const l=[];do l.push(i),i=n.next();while(ZR(i));return c=>e(l,c)}return null}function s(){const l=[];let c=a();for(;c;)l.push(c),c=a();return u=>l.every(h=>h(u))}function o(){const l=[];let c=s();for(;c&&(l.push(c),i==="|"||i===",");){do i=n.next();while(i==="|"||i===",");c=s()}return u=>l.some(h=>h(u))}}function ZR(t){return!!t&&!!t.match(/[\w\.:]+/)}function Vue(t){let e=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,r=e.exec(t);return{next:()=>{if(!r)return null;const n=r[0];return r=e.exec(t),n}}}function xQ(t){typeof t.dispose=="function"&&t.dispose()}var zg=class{constructor(t){this.scopeName=t}toKey(){return this.scopeName}},que=class{constructor(t,e){this.scopeName=t,this.ruleName=e}toKey(){return`${this.scopeName}#${this.ruleName}`}},Xue=class{constructor(){Me(this,"_references",[]);Me(this,"_seenReferenceKeys",new Set);Me(this,"visitedRule",new Set)}get references(){return this._references}add(t){const e=t.toKey();this._seenReferenceKeys.has(e)||(this._seenReferenceKeys.add(e),this._references.push(t))}},Zue=class{constructor(t,e){Me(this,"seenFullScopeRequests",new Set);Me(this,"seenPartialScopeRequests",new Set);Me(this,"Q");this.repo=t,this.initialScopeName=e,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new zg(this.initialScopeName)]}processQueue(){const t=this.Q;this.Q=[];const e=new Xue;for(const r of t)Hue(r,this.initialScopeName,this.repo,e);for(const r of e.references)if(r instanceof zg){if(this.seenFullScopeRequests.has(r.scopeName))continue;this.seenFullScopeRequests.add(r.scopeName),this.Q.push(r)}else{if(this.seenFullScopeRequests.has(r.scopeName)||this.seenPartialScopeRequests.has(r.toKey()))continue;this.seenPartialScopeRequests.add(r.toKey()),this.Q.push(r)}}};function Hue(t,e,r,n){const i=r.lookup(t.scopeName);if(!i){if(t.scopeName===e)throw new Error(`No grammar provided for <${e}>`);return}const a=r.lookup(e);t instanceof zg?Hy({baseGrammar:a,selfGrammar:i},n):ZC(t.ruleName,{baseGrammar:a,selfGrammar:i,repository:i.repository},n);const s=r.injections(t.scopeName);if(s)for(const o of s)n.add(new zg(o))}function ZC(t,e,r){if(e.repository&&e.repository[t]){const n=e.repository[t];lb([n],e,r)}}function Hy(t,e){t.selfGrammar.patterns&&Array.isArray(t.selfGrammar.patterns)&&lb(t.selfGrammar.patterns,{...t,repository:t.selfGrammar.repository},e),t.selfGrammar.injections&&lb(Object.values(t.selfGrammar.injections),{...t,repository:t.selfGrammar.repository},e)}function lb(t,e,r){for(const n of t){if(r.visitedRule.has(n))continue;r.visitedRule.add(n);const i=n.repository?cQ({},e.repository,n.repository):e.repository;Array.isArray(n.patterns)&&lb(n.patterns,{...e,repository:i},r);const a=n.include;if(!a)continue;const s=yQ(a);switch(s.kind){case 0:Hy({...e,selfGrammar:e.baseGrammar},r);break;case 1:Hy(e,r);break;case 2:ZC(s.ruleName,{...e,repository:i},r);break;case 3:case 4:const o=s.scopeName===e.selfGrammar.scopeName?e.selfGrammar:s.scopeName===e.baseGrammar.scopeName?e.baseGrammar:void 0;if(o){const l={baseGrammar:e.baseGrammar,selfGrammar:o,repository:i};s.kind===4?ZC(s.ruleName,l,r):Hy(l,r)}else s.kind===4?r.add(new que(s.scopeName,s.ruleName)):r.add(new zg(s.scopeName));break}}}var Gue=class{constructor(){Me(this,"kind",0)}},Yue=class{constructor(){Me(this,"kind",1)}},Kue=class{constructor(t){Me(this,"kind",2);this.ruleName=t}},Jue=class{constructor(t){Me(this,"kind",3);this.scopeName=t}},ehe=class{constructor(t,e){Me(this,"kind",4);this.scopeName=t,this.ruleName=e}};function yQ(t){if(t==="$base")return new Gue;if(t==="$self")return new Yue;const e=t.indexOf("#");if(e===-1)return new Jue(t);if(e===0)return new Kue(t.substring(1));{const r=t.substring(0,e),n=t.substring(e+1);return new ehe(r,n)}}var the=/\\(\d+)/,HR=/\\(\d+)/g,rhe=-1,vQ=-2;var Xm=class{constructor(e,r,n,i){Me(this,"$location");Me(this,"id");Me(this,"_nameIsCapturing");Me(this,"_name");Me(this,"_contentNameIsCapturing");Me(this,"_contentName");this.$location=e,this.id=r,this._name=n||null,this._nameIsCapturing=F1.hasCaptures(this._name),this._contentName=i||null,this._contentNameIsCapturing=F1.hasCaptures(this._contentName)}get debugName(){const e=this.$location?`${uQ(this.$location.filename)}:${this.$location.line}`:"unknown";return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,r){return!this._nameIsCapturing||this._name===null||e===null||r===null?this._name:F1.replaceCaptures(this._name,e,r)}getContentName(e,r){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:F1.replaceCaptures(this._contentName,e,r)}},nhe=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,i);Me(this,"retokenizeCapturedWithRuleId");this.retokenizeCapturedWithRuleId=a}dispose(){}collectPatterns(e,r){throw new Error("Not supported!")}compile(e,r){throw new Error("Not supported!")}compileAG(e,r,n,i){throw new Error("Not supported!")}},ihe=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,null);Me(this,"_match");Me(this,"captures");Me(this,"_cachedCompiledPatterns");this._match=new Vg(i,this.id),this.captures=a,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,r){r.push(this._match)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new qg,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},GR=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,i);Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");this.patterns=a.patterns,this.hasMissingPatterns=a.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}collectPatterns(e,r){for(const n of this.patterns)e.getRule(n).collectPatterns(e,r)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new qg,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},HC=class extends Xm{constructor(e,r,n,i,a,s,o,l,c,u){super(e,r,n,i);Me(this,"_begin");Me(this,"beginCaptures");Me(this,"_end");Me(this,"endHasBackReferences");Me(this,"endCaptures");Me(this,"applyEndPatternLast");Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");this._begin=new Vg(a,this.id),this.beginCaptures=s,this._end=new Vg(o||"￿",-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=l,this.applyEndPatternLast=c||!1,this.patterns=u.patterns,this.hasMissingPatterns=u.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,r){return this._end.resolveBackReferences(e,r)}collectPatterns(e,r){r.push(this._begin)}compile(e,r){return this._getCachedCompiledPatterns(e,r).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e,r).compileAG(e,n,i)}_getCachedCompiledPatterns(e,r){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new qg;for(const n of this.patterns)e.getRule(n).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,r):this._cachedCompiledPatterns.setSource(0,r)),this._cachedCompiledPatterns}},cb=class extends Xm{constructor(e,r,n,i,a,s,o,l,c){super(e,r,n,i);Me(this,"_begin");Me(this,"beginCaptures");Me(this,"whileCaptures");Me(this,"_while");Me(this,"whileHasBackReferences");Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");Me(this,"_cachedCompiledWhilePatterns");this._begin=new Vg(a,this.id),this.beginCaptures=s,this.whileCaptures=l,this._while=new Vg(o,vQ),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null),this._cachedCompiledWhilePatterns&&(this._cachedCompiledWhilePatterns.dispose(),this._cachedCompiledWhilePatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,r){return this._while.resolveBackReferences(e,r)}collectPatterns(e,r){r.push(this._begin)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new qg;for(const r of this.patterns)e.getRule(r).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,r){return this._getCachedCompiledWhilePatterns(e,r).compile(e)}compileWhileAG(e,r,n,i){return this._getCachedCompiledWhilePatterns(e,r).compileAG(e,n,i)}_getCachedCompiledWhilePatterns(e,r){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new qg,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,r||"￿"),this._cachedCompiledWhilePatterns}},bQ=class Si{static createCaptureRule(e,r,n,i,a){return e.registerRule(s=>new nhe(r,s,n,i,a))}static getCompiledRuleId(e,r,n){return e.id||r.registerRule(i=>{if(e.id=i,e.match)return new ihe(e.$vscodeTextmateLocation,e.id,e.name,e.match,Si._compileCaptures(e.captures,r,n));if(typeof e.begin>"u"){e.repository&&(n=cQ({},n,e.repository));let a=e.patterns;return typeof a>"u"&&e.include&&(a=[{include:e.include}]),new GR(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,Si._compilePatterns(a,r,n))}return e.while?new cb(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,e.begin,Si._compileCaptures(e.beginCaptures||e.captures,r,n),e.while,Si._compileCaptures(e.whileCaptures||e.captures,r,n),Si._compilePatterns(e.patterns,r,n)):new HC(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,e.begin,Si._compileCaptures(e.beginCaptures||e.captures,r,n),e.end,Si._compileCaptures(e.endCaptures||e.captures,r,n),e.applyEndPatternLast,Si._compilePatterns(e.patterns,r,n))}),e.id}static _compileCaptures(e,r,n){let i=[];if(e){let a=0;for(const s in e){if(s==="$vscodeTextmateLocation")continue;const o=parseInt(s,10);o>a&&(a=o)}for(let s=0;s<=a;s++)i[s]=null;for(const s in e){if(s==="$vscodeTextmateLocation")continue;const o=parseInt(s,10);let l=0;e[s].patterns&&(l=Si.getCompiledRuleId(e[s],r,n)),i[o]=Si.createCaptureRule(r,e[s].$vscodeTextmateLocation,e[s].name,e[s].contentName,l)}}return i}static _compilePatterns(e,r,n){let i=[];if(e)for(let a=0,s=e.length;ae.substring(i.start,i.end));return HR.lastIndex=0,this.source.replace(HR,(i,a)=>fQ(n[parseInt(a,10)]||""))}_buildAnchorCache(){if(typeof this.source!="string")throw new Error("This method should only be called if the source is a string");let e=[],r=[],n=[],i=[],a,s,o,l;for(a=0,s=this.source.length;ar.source);this._cached=new YR(t,e,this._items.map(r=>r.ruleId))}return this._cached}compileAG(t,e,r){return this._hasAnchors?e?r?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(t,e,r)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(t,e,r)),this._anchorCache.A1_G0):r?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(t,e,r)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(t,e,r)),this._anchorCache.A0_G0):this.compile(t)}_resolveAnchors(t,e,r){let n=this._items.map(i=>i.resolveAnchors(e,r));return new YR(t,n,this._items.map(i=>i.ruleId))}},YR=class{constructor(t,e,r){Me(this,"scanner");this.regExps=e,this.rules=r,this.scanner=t.createOnigScanner(e)}dispose(){typeof this.scanner.dispose=="function"&&this.scanner.dispose()}toString(){const t=[];for(let e=0,r=this.rules.length;e{const r=this._scopeToLanguage(e),n=this._toStandardTokenType(e);return new L_(r,n)}));this._defaultAttributes=new L_(e,8),this._embeddedLanguagesMatcher=new she(Object.entries(r||{}))}getDefaultAttributes(){return this._defaultAttributes}getBasicScopeAttributes(e){return e===null?wl._NULL_SCOPE_METADATA:this._getBasicScopeAttributes.get(e)}_scopeToLanguage(e){return this._embeddedLanguagesMatcher.match(e)||0}_toStandardTokenType(e){const r=e.match(wl.STANDARD_TOKEN_TYPE_REGEXP);if(!r)return 8;switch(r[1]){case"comment":return 1;case"string":return 2;case"regex":return 3;case"meta.embedded":return 0}throw new Error("Unexpected match for standard token type!")}},Me(wl,"_NULL_SCOPE_METADATA",new L_(0,0)),Me(wl,"STANDARD_TOKEN_TYPE_REGEXP",/\b(comment|string|regex|meta\.embedded)\b/),wl),she=class{constructor(t){Me(this,"values");Me(this,"scopesRegExp");if(t.length===0)this.values=null,this.scopesRegExp=null;else{this.values=new Map(t);const e=t.map(([r,n])=>fQ(r));e.sort(),e.reverse(),this.scopesRegExp=new RegExp(`^((${e.join(")|(")}))($|\\.)`,"")}}match(t){if(!this.scopesRegExp)return;const e=t.match(this.scopesRegExp);if(e)return this.values.get(e[1])}},KR=class{constructor(t,e){this.stack=t,this.stoppedEarly=e}};function OQ(t,e,r,n,i,a,s,o){const l=e.content.length;let c=!1,u=-1;if(s){const f=ohe(t,e,r,n,i,a);i=f.stack,n=f.linePos,r=f.isFirstLine,u=f.anchorPosition}const h=Date.now();for(;!c;){if(o!==0&&Date.now()-h>o)return new KR(i,!0);d()}return new KR(i,!1);function d(){const f=lhe(t,e,r,n,i,u);if(!f){a.produce(i,l),c=!0;return}const g=f.captureIndices,m=f.matchedRuleId,v=g&&g.length>0?g[0].end>n:!1;if(m===rhe){const b=i.getRule(t);a.produce(i,g[0].start),i=i.withContentNameScopesList(i.nameScopesList),B0(t,e,r,i,a,b.endCaptures,g),a.produce(i,g[0].end);const w=i;if(i=i.parent,u=w.getAnchorPos(),!v&&w.getEnterPos()===n){i=w,a.produce(i,l),c=!0;return}}else{const b=t.getRule(m);a.produce(i,g[0].start);const w=i,O=b.getName(e.content,g),S=i.contentNameScopesList.pushAttributed(O,t);if(i=i.push(m,n,u,g[0].end===l,null,S,S),b instanceof HC){const T=b;B0(t,e,r,i,a,T.beginCaptures,g),a.produce(i,g[0].end),u=g[0].end;const _=T.getContentName(e.content,g),C=S.pushAttributed(_,t);if(i=i.withContentNameScopesList(C),T.endHasBackReferences&&(i=i.withEndRule(T.getEndWithResolvedBackReferences(e.content,g))),!v&&w.hasSameRuleAs(i)){i=i.pop(),a.produce(i,l),c=!0;return}}else if(b instanceof cb){const T=b;B0(t,e,r,i,a,T.beginCaptures,g),a.produce(i,g[0].end),u=g[0].end;const _=T.getContentName(e.content,g),C=S.pushAttributed(_,t);if(i=i.withContentNameScopesList(C),T.whileHasBackReferences&&(i=i.withEndRule(T.getWhileWithResolvedBackReferences(e.content,g))),!v&&w.hasSameRuleAs(i)){i=i.pop(),a.produce(i,l),c=!0;return}}else if(B0(t,e,r,i,a,b.captures,g),a.produce(i,g[0].end),i=i.pop(),!v){i=i.safePop(),a.produce(i,l),c=!0;return}}g[0].end>n&&(n=g[0].end,r=!1)}}function ohe(t,e,r,n,i,a){let s=i.beginRuleCapturedEOL?0:-1;const o=[];for(let l=i;l;l=l.pop()){const c=l.getRule(t);c instanceof cb&&o.push({rule:c,stack:l})}for(let l=o.pop();l;l=o.pop()){const{ruleScanner:c,findOptions:u}=hhe(l.rule,t,l.stack.endRule,r,n===s),h=c.findNextMatchSync(e,n,u);if(h){if(h.ruleId!==vQ){i=l.stack.pop();break}h.captureIndices&&h.captureIndices.length&&(a.produce(l.stack,h.captureIndices[0].start),B0(t,e,r,l.stack,a,l.rule.whileCaptures,h.captureIndices),a.produce(l.stack,h.captureIndices[0].end),s=h.captureIndices[0].end,h.captureIndices[0].end>n&&(n=h.captureIndices[0].end,r=!1))}else{i=l.stack.pop();break}}return{stack:i,linePos:n,anchorPosition:s,isFirstLine:r}}function lhe(t,e,r,n,i,a){const s=che(t,e,r,n,i,a),o=t.getInjections();if(o.length===0)return s;const l=uhe(o,t,e,r,n,i,a);if(!l)return s;if(!s)return l;const c=s.captureIndices[0].start,u=l.captureIndices[0].start;return u=o)&&(o=O,l=w.captureIndices,c=w.ruleId,u=g.priority,o===i))break}return l?{priorityMatch:u===-1,captureIndices:l,matchedRuleId:c}:null}function kQ(t,e,r,n,i){return{ruleScanner:t.compileAG(e,r,n,i),findOptions:0}}function hhe(t,e,r,n,i){return{ruleScanner:t.compileWhileAG(e,r,n,i),findOptions:0}}function B0(t,e,r,n,i,a,s){if(a.length===0)return;const o=e.content,l=Math.min(a.length,s.length),c=[],u=s[0].end;for(let h=0;hu)break;for(;c.length>0&&c[c.length-1].endPos<=f.start;)i.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop();if(c.length>0?i.produceFromScopes(c[c.length-1].scopes,f.start):i.produce(n,f.start),d.retokenizeCapturedWithRuleId){const m=d.getName(o,s),v=n.contentNameScopesList.pushAttributed(m,t),b=d.getContentName(o,s),w=v.pushAttributed(b,t),O=n.push(d.retokenizeCapturedWithRuleId,f.start,-1,!1,null,v,w),S=t.createOnigString(o.substring(0,f.end));OQ(t,S,r&&f.start===0,f.start,O,i,!1,0),xQ(S);continue}const g=d.getName(o,s);if(g!==null){const v=(c.length>0?c[c.length-1].scopes:n.contentNameScopesList).pushAttributed(g,t);c.push(new dhe(v,f.end))}}for(;c.length>0;)i.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop()}var dhe=class{constructor(t,e){Me(this,"scopes");Me(this,"endPos");this.scopes=t,this.endPos=e}};function fhe(t,e,r,n,i,a,s,o){return new ghe(t,e,r,n,i,a,s,o)}function JR(t,e,r,n,i){const a=ob(e,ub),s=bQ.getCompiledRuleId(r,n,i.repository);for(const o of a)t.push({debugSelector:e,matcher:o.matcher,ruleId:s,grammar:i,priority:o.priority})}function ub(t,e){if(e.length{for(let i=r;ir&&t.substr(0,r)===e&&t[r]==="."}var ghe=class{constructor(t,e,r,n,i,a,s,o){Me(this,"_rootId");Me(this,"_lastRuleId");Me(this,"_ruleId2desc");Me(this,"_includedGrammars");Me(this,"_grammarRepository");Me(this,"_grammar");Me(this,"_injections");Me(this,"_basicScopeAttributesProvider");Me(this,"_tokenTypeMatchers");if(this._rootScopeName=t,this.balancedBracketSelectors=a,this._onigLib=o,this._basicScopeAttributesProvider=new ahe(r,n),this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=s,this._grammar=eF(e,null),this._injections=null,this._tokenTypeMatchers=[],i)for(const l of Object.keys(i)){const c=ob(l,ub);for(const u of c)this._tokenTypeMatchers.push({matcher:u.matcher,type:i[l]})}}get themeProvider(){return this._grammarRepository}dispose(){for(const t of this._ruleId2desc)t&&t.dispose()}createOnigScanner(t){return this._onigLib.createOnigScanner(t)}createOnigString(t){return this._onigLib.createOnigString(t)}getMetadataForScope(t){return this._basicScopeAttributesProvider.getBasicScopeAttributes(t)}_collectInjections(){const t={lookup:i=>i===this._rootScopeName?this._grammar:this.getExternalGrammar(i),injections:i=>this._grammarRepository.injections(i)},e=[],r=this._rootScopeName,n=t.lookup(r);if(n){const i=n.injections;if(i)for(let s in i)JR(e,s,i[s],this,n);const a=this._grammarRepository.injections(r);a&&a.forEach(s=>{const o=this.getExternalGrammar(s);if(o){const l=o.injectionSelector;l&&JR(e,l,o,this,o)}})}return e.sort((i,a)=>i.priority-a.priority),e}getInjections(){return this._injections===null&&(this._injections=this._collectInjections()),this._injections}registerRule(t){const e=++this._lastRuleId,r=t(e);return this._ruleId2desc[e]=r,r}getRule(t){return this._ruleId2desc[t]}getExternalGrammar(t,e){if(this._includedGrammars[t])return this._includedGrammars[t];if(this._grammarRepository){const r=this._grammarRepository.lookup(t);if(r)return this._includedGrammars[t]=eF(r,e&&e.$base),this._includedGrammars[t]}}tokenizeLine(t,e,r=0){const n=this._tokenize(t,e,!1,r);return{tokens:n.lineTokens.getResult(n.ruleStack,n.lineLength),ruleStack:n.ruleStack,stoppedEarly:n.stoppedEarly}}tokenizeLine2(t,e,r=0){const n=this._tokenize(t,e,!0,r);return{tokens:n.lineTokens.getBinaryResult(n.ruleStack,n.lineLength),ruleStack:n.ruleStack,stoppedEarly:n.stoppedEarly}}_tokenize(t,e,r,n){this._rootId===-1&&(this._rootId=bQ.getCompiledRuleId(this._grammar.repository.$self,this,this._grammar.repository),this.getInjections());let i;if(!e||e===GC.NULL){i=!0;const c=this._basicScopeAttributesProvider.getDefaultAttributes(),u=this.themeProvider.getDefaults(),h=yf.set(0,c.languageId,c.tokenType,null,u.fontStyle,u.foregroundId,u.backgroundId),d=this.getRule(this._rootId).getName(null,null);let f;d?f=dg.createRootAndLookUpScopeName(d,h,this):f=dg.createRoot("unknown",h),e=new GC(null,this._rootId,-1,-1,!1,null,f,f)}else i=!1,e.reset();t=t+` -`;const a=this.createOnigString(t),s=a.content.length,o=new xhe(r,t,this._tokenTypeMatchers,this.balancedBracketSelectors),l=OQ(this,a,i,0,e,o,!0,n);return xQ(a),{lineLength:s,lineTokens:o,ruleStack:l.stack,stoppedEarly:l.stoppedEarly}}};function eF(t,e){return t=Fue(t),t.repository=t.repository||{},t.repository.$self={$vscodeTextmateLocation:t.$vscodeTextmateLocation,patterns:t.patterns,name:t.scopeName},t.repository.$base=e||t.repository.$self,t}var dg=class Ao{constructor(e,r,n){this.parent=e,this.scopePath=r,this.tokenAttributes=n}static fromExtension(e,r){let n=e,i=(e==null?void 0:e.scopePath)??null;for(const a of r)i=F_.push(i,a.scopeNames),n=new Ao(n,i,a.encodedTokenAttributes);return n}static createRoot(e,r){return new Ao(null,new F_(null,e),r)}static createRootAndLookUpScopeName(e,r,n){const i=n.getMetadataForScope(e),a=new F_(null,e),s=n.themeProvider.themeMatch(a),o=Ao.mergeAttributes(r,i,s);return new Ao(null,a,o)}get scopeName(){return this.scopePath.scopeName}toString(){return this.getScopeNames().join(" ")}equals(e){return Ao.equals(this,e)}static equals(e,r){do{if(e===r||!e&&!r)return!0;if(!e||!r||e.scopeName!==r.scopeName||e.tokenAttributes!==r.tokenAttributes)return!1;e=e.parent,r=r.parent}while(!0)}static mergeAttributes(e,r,n){let i=-1,a=0,s=0;return n!==null&&(i=n.fontStyle,a=n.foregroundId,s=n.backgroundId),yf.set(e,r.languageId,r.tokenType,null,i,a,s)}pushAttributed(e,r){if(e===null)return this;if(e.indexOf(" ")===-1)return Ao._pushAttributed(this,e,r);const n=e.split(/ /g);let i=this;for(const a of n)i=Ao._pushAttributed(i,a,r);return i}static _pushAttributed(e,r,n){const i=n.getMetadataForScope(r),a=e.scopePath.push(r),s=n.themeProvider.themeMatch(a),o=Ao.mergeAttributes(e.tokenAttributes,i,s);return new Ao(e,a,o)}getScopeNames(){return this.scopePath.getSegments()}getExtensionIfDefined(e){var i;const r=[];let n=this;for(;n&&n!==e;)r.push({encodedTokenAttributes:n.tokenAttributes,scopeNames:n.scopePath.getExtensionIfDefined(((i=n.parent)==null?void 0:i.scopePath)??null)}),n=n.parent;return n===e?r.reverse():void 0}},vs,GC=(vs=class{constructor(e,r,n,i,a,s,o,l){Me(this,"_stackElementBrand");Me(this,"_enterPos");Me(this,"_anchorPos");Me(this,"depth");this.parent=e,this.ruleId=r,this.beginRuleCapturedEOL=a,this.endRule=s,this.nameScopesList=o,this.contentNameScopesList=l,this.depth=this.parent?this.parent.depth+1:1,this._enterPos=n,this._anchorPos=i}equals(e){return e===null?!1:vs._equals(this,e)}static _equals(e,r){return e===r?!0:this._structuralEquals(e,r)?dg.equals(e.contentNameScopesList,r.contentNameScopesList):!1}static _structuralEquals(e,r){do{if(e===r||!e&&!r)return!0;if(!e||!r||e.depth!==r.depth||e.ruleId!==r.ruleId||e.endRule!==r.endRule)return!1;e=e.parent,r=r.parent}while(!0)}clone(){return this}static _reset(e){for(;e;)e._enterPos=-1,e._anchorPos=-1,e=e.parent}reset(){vs._reset(this)}pop(){return this.parent}safePop(){return this.parent?this.parent:this}push(e,r,n,i,a,s,o){return new vs(this,e,r,n,i,a,s,o)}getEnterPos(){return this._enterPos}getAnchorPos(){return this._anchorPos}getRule(e){return e.getRule(this.ruleId)}toString(){const e=[];return this._writeString(e,0),"["+e.join(",")+"]"}_writeString(e,r){var n,i;return this.parent&&(r=this.parent._writeString(e,r)),e[r++]=`(${this.ruleId}, ${(n=this.nameScopesList)==null?void 0:n.toString()}, ${(i=this.contentNameScopesList)==null?void 0:i.toString()})`,r}withContentNameScopesList(e){return this.contentNameScopesList===e?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,e)}withEndRule(e){return this.endRule===e?this:new vs(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,e,this.nameScopesList,this.contentNameScopesList)}hasSameRuleAs(e){let r=this;for(;r&&r._enterPos===e._enterPos;){if(r.ruleId===e.ruleId)return!0;r=r.parent}return!1}toStateStackFrame(){var e,r,n;return{ruleId:this.ruleId,beginRuleCapturedEOL:this.beginRuleCapturedEOL,endRule:this.endRule,nameScopesList:((r=this.nameScopesList)==null?void 0:r.getExtensionIfDefined(((e=this.parent)==null?void 0:e.nameScopesList)??null))??[],contentNameScopesList:((n=this.contentNameScopesList)==null?void 0:n.getExtensionIfDefined(this.nameScopesList))??[]}}static pushFrame(e,r){const n=dg.fromExtension((e==null?void 0:e.nameScopesList)??null,r.nameScopesList);return new vs(e,r.ruleId,r.enterPos??-1,r.anchorPos??-1,r.beginRuleCapturedEOL,r.endRule,n,dg.fromExtension(n,r.contentNameScopesList))}},Me(vs,"NULL",new vs(null,0,0,0,!1,null,null,null)),vs),mhe=class{constructor(t,e){Me(this,"balancedBracketScopes");Me(this,"unbalancedBracketScopes");Me(this,"allowAny",!1);this.balancedBracketScopes=t.flatMap(r=>r==="*"?(this.allowAny=!0,[]):ob(r,ub).map(n=>n.matcher)),this.unbalancedBracketScopes=e.flatMap(r=>ob(r,ub).map(n=>n.matcher))}get matchesAlways(){return this.allowAny&&this.unbalancedBracketScopes.length===0}get matchesNever(){return this.balancedBracketScopes.length===0&&!this.allowAny}match(t){for(const e of this.unbalancedBracketScopes)if(e(t))return!1;for(const e of this.balancedBracketScopes)if(e(t))return!0;return this.allowAny}},xhe=class{constructor(t,e,r,n){Me(this,"_emitBinaryTokens");Me(this,"_lineText");Me(this,"_tokens");Me(this,"_binaryTokens");Me(this,"_lastTokenEndIndex");Me(this,"_tokenTypeOverrides");this.balancedBracketSelectors=n,this._emitBinaryTokens=t,this._tokenTypeOverrides=r,this._lineText=null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}produce(t,e){this.produceFromScopes(t.contentNameScopesList,e)}produceFromScopes(t,e){var n;if(this._lastTokenEndIndex>=e)return;if(this._emitBinaryTokens){let i=(t==null?void 0:t.tokenAttributes)??0,a=!1;if((n=this.balancedBracketSelectors)!=null&&n.matchesAlways&&(a=!0),this._tokenTypeOverrides.length>0||this.balancedBracketSelectors&&!this.balancedBracketSelectors.matchesAlways&&!this.balancedBracketSelectors.matchesNever){const s=(t==null?void 0:t.getScopeNames())??[];for(const o of this._tokenTypeOverrides)o.matcher(s)&&(i=yf.set(i,0,o.type,null,-1,0,0));this.balancedBracketSelectors&&(a=this.balancedBracketSelectors.match(s))}if(a&&(i=yf.set(i,0,8,a,-1,0,0)),this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-1]===i){this._lastTokenEndIndex=e;return}this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(i),this._lastTokenEndIndex=e;return}const r=(t==null?void 0:t.getScopeNames())??[];this._tokens.push({startIndex:this._lastTokenEndIndex,endIndex:e,scopes:r}),this._lastTokenEndIndex=e}getResult(t,e){return this._tokens.length>0&&this._tokens[this._tokens.length-1].startIndex===e-1&&this._tokens.pop(),this._tokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(t,e),this._tokens[this._tokens.length-1].startIndex=0),this._tokens}getBinaryResult(t,e){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===e-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),this._binaryTokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(t,e),this._binaryTokens[this._binaryTokens.length-2]=0);const r=new Uint32Array(this._binaryTokens.length);for(let n=0,i=this._binaryTokens.length;n0;)s.Q.map(o=>this._loadSingleGrammar(o.scopeName)),s.processQueue();return this._grammarForScopeName(e,r,n,i,a)}_loadSingleGrammar(e){this._ensureGrammarCache.has(e)||(this._doLoadSingleGrammar(e),this._ensureGrammarCache.set(e,!0))}_doLoadSingleGrammar(e){const r=this._options.loadGrammar(e);if(r){const n=typeof this._options.getInjections=="function"?this._options.getInjections(e):void 0;this._syncRegistry.addGrammar(r,n)}}addGrammar(e,r=[],n=0,i=null){return this._syncRegistry.addGrammar(e,r),this._grammarForScopeName(e.scopeName,n,i)}_grammarForScopeName(e,r=0,n=null,i=null,a=null){return this._syncRegistry.grammarForScopeName(e,r,n,i,a)}},YC=GC.NULL;const bhe=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"];let Zm=class{constructor(e,r,n){this.normal=r,this.property=e,n&&(this.space=n)}};Zm.prototype.normal={};Zm.prototype.property={};Zm.prototype.space=void 0;function _Q(t,e){const r={},n={};for(const i of t)Object.assign(r,i.property),Object.assign(n,i.normal);return new Zm(r,n,e)}function KC(t){return t.toLowerCase()}class Pa{constructor(e,r){this.attribute=r,this.property=e}}Pa.prototype.attribute="";Pa.prototype.booleanish=!1;Pa.prototype.boolean=!1;Pa.prototype.commaOrSpaceSeparated=!1;Pa.prototype.commaSeparated=!1;Pa.prototype.defined=!1;Pa.prototype.mustUseProperty=!1;Pa.prototype.number=!1;Pa.prototype.overloadedBoolean=!1;Pa.prototype.property="";Pa.prototype.spaceSeparated=!1;Pa.prototype.space=void 0;let whe=0;const sr=Eh(),Nn=Eh(),JC=Eh(),pt=Eh(),qr=Eh(),Qd=Eh(),Wa=Eh();function Eh(){return 2**++whe}const eE=Object.freeze(Object.defineProperty({__proto__:null,boolean:sr,booleanish:Nn,commaOrSpaceSeparated:Wa,commaSeparated:Qd,number:pt,overloadedBoolean:JC,spaceSeparated:qr},Symbol.toStringTag,{value:"Module"})),M_=Object.keys(eE);class dA extends Pa{constructor(e,r,n,i){let a=-1;if(super(e,r),tF(this,"space",i),typeof n=="number")for(;++a4&&r.slice(0,4)==="data"&&She.test(e)){if(e.charAt(4)==="-"){const a=e.slice(5).replace(rF,Ehe);n="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=e.slice(4);if(!rF.test(a)){let s=a.replace(_he,Che);s.charAt(0)!=="-"&&(s="-"+s),e="data"+s}}i=dA}return new i(n,e)}function Che(t){return"-"+t.toLowerCase()}function Ehe(t){return t.charAt(1).toUpperCase()}const Dhe=_Q([SQ,Ohe,EQ,DQ,AQ],"html"),NQ=_Q([SQ,khe,EQ,DQ,AQ],"svg"),nF={}.hasOwnProperty;function Ahe(t,e){const r=e||{};function n(i,...a){let s=n.invalid;const o=n.handlers;if(i&&nF.call(i,t)){const l=String(i[t]);s=nF.call(o,l)?o[l]:n.unknown}if(s)return s.call(this,i,...a)}return n.handlers=r.handlers||{},n.invalid=r.invalid,n.unknown=r.unknown,n}const Nhe=/["&'<>`]/g,Phe=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Rhe=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,Fhe=/[|\\{}()[\]^$+*?.]/g,iF=new WeakMap;function Lhe(t,e){if(t=t.replace(e.subset?Mhe(e.subset):Nhe,n),e.subset||e.escapeOnly)return t;return t.replace(Phe,r).replace(Rhe,n);function r(i,a,s){return e.format((i.charCodeAt(0)-55296)*1024+i.charCodeAt(1)-56320+65536,s.charCodeAt(a+2),e)}function n(i,a,s){return e.format(i.charCodeAt(0),s.charCodeAt(a+1),e)}}function Mhe(t){let e=iF.get(t);return e||(e=$he(t),iF.set(t,e)),e}function $he(t){const e=[];let r=-1;for(;++r",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›",euro:"€"},Whe=["cent","copy","divide","gt","lt","not","para","times"],PQ={}.hasOwnProperty,tE={};let L1;for(L1 in $_)PQ.call($_,L1)&&(tE[$_[L1]]=L1);const zhe=/[^\dA-Za-z]/;function Vhe(t,e,r,n){const i=String.fromCharCode(t);if(PQ.call(tE,i)){const a=tE[i],s="&"+a;return r&&Qhe.includes(a)&&!Whe.includes(a)&&(!n||e&&e!==61&&zhe.test(String.fromCharCode(e)))?s:s+";"}return""}function qhe(t,e,r){let n=jhe(t,e,r.omitOptionalSemicolons),i;if((r.useNamedReferences||r.useShortestReferences)&&(i=Vhe(t,e,r.omitOptionalSemicolons,r.attribute)),(r.useShortestReferences||!i)&&r.useShortestReferences){const a=Uhe(t,e,r.omitOptionalSemicolons);a.length|^->||--!>|"],Hhe=["<",">"];function Ghe(t,e,r,n){return n.settings.bogusComments?"":"";function i(a){return Wd(a,Object.assign({},n.settings.characterReferences,{subset:Hhe}))}}function Yhe(t,e,r,n){return""}function aF(t,e){const r=String(t);if(typeof e!="string")throw new TypeError("Expected character");let n=0,i=r.indexOf(e);for(;i!==-1;)n++,i=r.indexOf(e,i+e.length);return n}function Khe(t,e){const r=e||{};return(t[t.length-1]===""?[...t,""]:t).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}function Jhe(t){return t.join(" ").trim()}const ede=/[ \t\n\f\r]/g;function fA(t){return typeof t=="object"?t.type==="text"?sF(t.value):!1:sF(t)}function sF(t){return t.replace(ede,"")===""}const Yn=FQ(1),RQ=FQ(-1),tde=[];function FQ(t){return e;function e(r,n,i){const a=r?r.children:tde;let s=(n||0)+t,o=a[s];if(!i)for(;o&&fA(o);)s+=t,o=a[s];return o}}const rde={}.hasOwnProperty;function LQ(t){return e;function e(r,n,i){return rde.call(t,r.tagName)&&t[r.tagName](r,n,i)}}const pA=LQ({body:ide,caption:I_,colgroup:I_,dd:lde,dt:ode,head:I_,html:nde,li:sde,optgroup:cde,option:ude,p:ade,rp:oF,rt:oF,tbody:dde,td:lF,tfoot:fde,th:lF,thead:hde,tr:pde});function I_(t,e,r){const n=Yn(r,e,!0);return!n||n.type!=="comment"&&!(n.type==="text"&&fA(n.value.charAt(0)))}function nde(t,e,r){const n=Yn(r,e);return!n||n.type!=="comment"}function ide(t,e,r){const n=Yn(r,e);return!n||n.type!=="comment"}function ade(t,e,r){const n=Yn(r,e);return n?n.type==="element"&&(n.tagName==="address"||n.tagName==="article"||n.tagName==="aside"||n.tagName==="blockquote"||n.tagName==="details"||n.tagName==="div"||n.tagName==="dl"||n.tagName==="fieldset"||n.tagName==="figcaption"||n.tagName==="figure"||n.tagName==="footer"||n.tagName==="form"||n.tagName==="h1"||n.tagName==="h2"||n.tagName==="h3"||n.tagName==="h4"||n.tagName==="h5"||n.tagName==="h6"||n.tagName==="header"||n.tagName==="hgroup"||n.tagName==="hr"||n.tagName==="main"||n.tagName==="menu"||n.tagName==="nav"||n.tagName==="ol"||n.tagName==="p"||n.tagName==="pre"||n.tagName==="section"||n.tagName==="table"||n.tagName==="ul"):!r||!(r.type==="element"&&(r.tagName==="a"||r.tagName==="audio"||r.tagName==="del"||r.tagName==="ins"||r.tagName==="map"||r.tagName==="noscript"||r.tagName==="video"))}function sde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="li"}function ode(t,e,r){const n=Yn(r,e);return!!(n&&n.type==="element"&&(n.tagName==="dt"||n.tagName==="dd"))}function lde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="dt"||n.tagName==="dd")}function oF(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="rp"||n.tagName==="rt")}function cde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="optgroup"}function ude(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="option"||n.tagName==="optgroup")}function hde(t,e,r){const n=Yn(r,e);return!!(n&&n.type==="element"&&(n.tagName==="tbody"||n.tagName==="tfoot"))}function dde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="tbody"||n.tagName==="tfoot")}function fde(t,e,r){return!Yn(r,e)}function pde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="tr"}function lF(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="td"||n.tagName==="th")}const gde=LQ({body:yde,colgroup:vde,head:xde,html:mde,tbody:bde});function mde(t){const e=Yn(t,-1);return!e||e.type!=="comment"}function xde(t){const e=new Set;for(const n of t.children)if(n.type==="element"&&(n.tagName==="base"||n.tagName==="title")){if(e.has(n.tagName))return!1;e.add(n.tagName)}const r=t.children[0];return!r||r.type==="element"}function yde(t){const e=Yn(t,-1,!0);return!e||e.type!=="comment"&&!(e.type==="text"&&fA(e.value.charAt(0)))&&!(e.type==="element"&&(e.tagName==="meta"||e.tagName==="link"||e.tagName==="script"||e.tagName==="style"||e.tagName==="template"))}function vde(t,e,r){const n=RQ(r,e),i=Yn(t,-1,!0);return r&&n&&n.type==="element"&&n.tagName==="colgroup"&&pA(n,r.children.indexOf(n),r)?!1:!!(i&&i.type==="element"&&i.tagName==="col")}function bde(t,e,r){const n=RQ(r,e),i=Yn(t,-1);return r&&n&&n.type==="element"&&(n.tagName==="thead"||n.tagName==="tbody")&&pA(n,r.children.indexOf(n),r)?!1:!!(i&&i.type==="element"&&i.tagName==="tr")}const M1={name:[[` + rounded-lg border border-gray-300 dark:border-gray-600 text-sm transition-colors`,title:"Open Setup Page",children:[x.jsx(wce,{className:"w-4 h-4 text-gray-600 dark:text-gray-400"}),x.jsx("span",{children:"Setup"})]}),x.jsxs("button",{onClick:N,className:`flex items-center gap-1.5 px-2.5 py-1.5 bg-gradient-to-r from-blue-500 to-purple-500 + hover:from-blue-600 hover:to-purple-600 rounded-lg text-sm text-white transition-all`,title:"Open Quickstart Wizard",children:[x.jsx(BC,{className:"w-4 h-4"}),x.jsx("span",{children:"Quickstart"})]}),x.jsx("button",{className:"p-1.5 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors",title:"Settings",children:x.jsx(Zs,{className:"w-4 h-4 text-gray-500 dark:text-gray-400"})})]})}const uue="modulepreload",hue=function(t){return"/"+t},qR={},fe=function(e,r,n){let i=Promise.resolve();if(r&&r.length>0){let s=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=s(r.map(c=>{if(c=hue(c),c in qR)return;qR[c]=!0;const u=c.endsWith(".css"),h=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${h}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":uue,u||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((f,g)=>{d.addEventListener("load",f),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function a(s){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=s,window.dispatchEvent(o),!o.defaultPrevented)throw s}return i.then(s=>{for(const o of s||[])o.status==="rejected"&&a(o.reason);return e().catch(a)})},lQ=[{id:"abap",name:"ABAP",import:()=>fe(()=>import("./abap-DsBKuouk.js"),[])},{id:"actionscript-3",name:"ActionScript",import:()=>fe(()=>import("./actionscript-3-D_z4Izcz.js"),[])},{id:"ada",name:"Ada",import:()=>fe(()=>import("./ada-727ZlQH0.js"),[])},{id:"angular-html",name:"Angular HTML",import:()=>fe(()=>import("./angular-html-LfdN0zeE.js").then(t=>t.f),__vite__mapDeps([0,1,2,3]))},{id:"angular-ts",name:"Angular TypeScript",import:()=>fe(()=>import("./angular-ts-CKsD7JZE.js"),__vite__mapDeps([4,0,1,2,3,5]))},{id:"apache",name:"Apache Conf",import:()=>fe(()=>import("./apache-Dn00JSTd.js"),[])},{id:"apex",name:"Apex",import:()=>fe(()=>import("./apex-COJ4H7py.js"),[])},{id:"apl",name:"APL",import:()=>fe(()=>import("./apl-BBq3IX1j.js"),__vite__mapDeps([6,1,2,3,7,8,9]))},{id:"applescript",name:"AppleScript",import:()=>fe(()=>import("./applescript-Bu5BbsvL.js"),[])},{id:"ara",name:"Ara",import:()=>fe(()=>import("./ara-7O62HKoU.js"),[])},{id:"asciidoc",name:"AsciiDoc",aliases:["adoc"],import:()=>fe(()=>import("./asciidoc-BPT9niGB.js"),[])},{id:"asm",name:"Assembly",import:()=>fe(()=>import("./asm-Dhn9LcZ4.js"),[])},{id:"astro",name:"Astro",import:()=>fe(()=>import("./astro-CqkE3fuf.js"),__vite__mapDeps([10,9,2,11,3,12]))},{id:"awk",name:"AWK",import:()=>fe(()=>import("./awk-eg146-Ew.js"),[])},{id:"ballerina",name:"Ballerina",import:()=>fe(()=>import("./ballerina-Du268qiB.js"),[])},{id:"bat",name:"Batch File",aliases:["batch"],import:()=>fe(()=>import("./bat-fje9CFhw.js"),[])},{id:"beancount",name:"Beancount",import:()=>fe(()=>import("./beancount-BwXTMy5W.js"),[])},{id:"berry",name:"Berry",aliases:["be"],import:()=>fe(()=>import("./berry-3xVqZejG.js"),[])},{id:"bibtex",name:"BibTeX",import:()=>fe(()=>import("./bibtex-xW4inM5L.js"),[])},{id:"bicep",name:"Bicep",import:()=>fe(()=>import("./bicep-DHo0CJ0O.js"),[])},{id:"blade",name:"Blade",import:()=>fe(()=>import("./blade-a8OxSdnT.js"),__vite__mapDeps([13,1,2,3,7,8,14,9]))},{id:"bsl",name:"1C (Enterprise)",aliases:["1c"],import:()=>fe(()=>import("./bsl-Dgyn0ogV.js"),__vite__mapDeps([15,16]))},{id:"c",name:"C",import:()=>fe(()=>import("./c-C3t2pwGQ.js"),[])},{id:"cadence",name:"Cadence",aliases:["cdc"],import:()=>fe(()=>import("./cadence-DNquZEk8.js"),[])},{id:"cairo",name:"Cairo",import:()=>fe(()=>import("./cairo--RitsXJZ.js"),__vite__mapDeps([17,18]))},{id:"clarity",name:"Clarity",import:()=>fe(()=>import("./clarity-BHOwM8T6.js"),[])},{id:"clojure",name:"Clojure",aliases:["clj"],import:()=>fe(()=>import("./clojure-DxSadP1t.js"),[])},{id:"cmake",name:"CMake",import:()=>fe(()=>import("./cmake-DbXoA79R.js"),[])},{id:"cobol",name:"COBOL",import:()=>fe(()=>import("./cobol-PTqiYgYu.js"),__vite__mapDeps([19,1,2,3,8]))},{id:"codeowners",name:"CODEOWNERS",import:()=>fe(()=>import("./codeowners-Bp6g37R7.js"),[])},{id:"codeql",name:"CodeQL",aliases:["ql"],import:()=>fe(()=>import("./codeql-sacFqUAJ.js"),[])},{id:"coffee",name:"CoffeeScript",aliases:["coffeescript"],import:()=>fe(()=>import("./coffee-dyiR41kL.js"),__vite__mapDeps([20,2]))},{id:"common-lisp",name:"Common Lisp",aliases:["lisp"],import:()=>fe(()=>import("./common-lisp-C7gG9l05.js"),[])},{id:"coq",name:"Coq",import:()=>fe(()=>import("./coq-Dsg_Bt_b.js"),[])},{id:"cpp",name:"C++",aliases:["c++"],import:()=>fe(()=>import("./cpp-BksuvNSY.js"),__vite__mapDeps([21,22,23,24,14]))},{id:"crystal",name:"Crystal",import:()=>fe(()=>import("./crystal-DtDmRg-F.js"),__vite__mapDeps([25,1,2,3,14,24,26]))},{id:"csharp",name:"C#",aliases:["c#","cs"],import:()=>fe(()=>import("./csharp-D9R-vmeu.js"),[])},{id:"css",name:"CSS",import:()=>fe(()=>import("./css-BPhBrDlE.js"),[])},{id:"csv",name:"CSV",import:()=>fe(()=>import("./csv-B0qRVHPH.js"),[])},{id:"cue",name:"CUE",import:()=>fe(()=>import("./cue-DtFQj3wx.js"),[])},{id:"cypher",name:"Cypher",aliases:["cql"],import:()=>fe(()=>import("./cypher-m2LEI-9-.js"),[])},{id:"d",name:"D",import:()=>fe(()=>import("./d-BoXegm-a.js"),[])},{id:"dart",name:"Dart",import:()=>fe(()=>import("./dart-B9wLZaAG.js"),[])},{id:"dax",name:"DAX",import:()=>fe(()=>import("./dax-ClGRhx96.js"),[])},{id:"desktop",name:"Desktop",import:()=>fe(()=>import("./desktop-DEIpsLCJ.js"),[])},{id:"diff",name:"Diff",import:()=>fe(()=>import("./diff-BgYniUM_.js"),[])},{id:"docker",name:"Dockerfile",aliases:["dockerfile"],import:()=>fe(()=>import("./docker-COcR7UxN.js"),[])},{id:"dotenv",name:"dotEnv",import:()=>fe(()=>import("./dotenv-BjQB5zDj.js"),[])},{id:"dream-maker",name:"Dream Maker",import:()=>fe(()=>import("./dream-maker-C-nORZOA.js"),[])},{id:"edge",name:"Edge",import:()=>fe(()=>import("./edge-D5gP-w-T.js"),__vite__mapDeps([27,11,1,2,3,28]))},{id:"elixir",name:"Elixir",import:()=>fe(()=>import("./elixir-CLiX3zqd.js"),__vite__mapDeps([29,1,2,3]))},{id:"elm",name:"Elm",import:()=>fe(()=>import("./elm-CmHSxxaM.js"),__vite__mapDeps([30,23,24]))},{id:"emacs-lisp",name:"Emacs Lisp",aliases:["elisp"],import:()=>fe(()=>import("./emacs-lisp-BX77sIaO.js"),[])},{id:"erb",name:"ERB",import:()=>fe(()=>import("./erb-BYTLMnw6.js"),__vite__mapDeps([31,1,2,3,32,33,7,8,14,34,11,35,36,21,22,23,24,26,37,38]))},{id:"erlang",name:"Erlang",aliases:["erl"],import:()=>fe(()=>import("./erlang-B-DoSBHF.js"),[])},{id:"fennel",name:"Fennel",import:()=>fe(()=>import("./fennel-bCA53EVm.js"),[])},{id:"fish",name:"Fish",import:()=>fe(()=>import("./fish-w-ucz2PV.js"),[])},{id:"fluent",name:"Fluent",aliases:["ftl"],import:()=>fe(()=>import("./fluent-Dayu4EKP.js"),[])},{id:"fortran-fixed-form",name:"Fortran (Fixed Form)",aliases:["f","for","f77"],import:()=>fe(()=>import("./fortran-fixed-form-TqA4NnZg.js"),__vite__mapDeps([39,40]))},{id:"fortran-free-form",name:"Fortran (Free Form)",aliases:["f90","f95","f03","f08","f18"],import:()=>fe(()=>import("./fortran-free-form-DKXYxT9g.js"),[])},{id:"fsharp",name:"F#",aliases:["f#","fs"],import:()=>fe(()=>import("./fsharp-XplgxFYe.js"),__vite__mapDeps([41,42]))},{id:"gdresource",name:"GDResource",import:()=>fe(()=>import("./gdresource-BHYsBjWJ.js"),__vite__mapDeps([43,44,45]))},{id:"gdscript",name:"GDScript",import:()=>fe(()=>import("./gdscript-DfxzS6Rs.js"),[])},{id:"gdshader",name:"GDShader",import:()=>fe(()=>import("./gdshader-SKMF96pI.js"),[])},{id:"genie",name:"Genie",import:()=>fe(()=>import("./genie-ajMbGru0.js"),[])},{id:"gherkin",name:"Gherkin",import:()=>fe(()=>import("./gherkin--30QC5Em.js"),[])},{id:"git-commit",name:"Git Commit Message",import:()=>fe(()=>import("./git-commit-i4q6IMui.js"),__vite__mapDeps([46,47]))},{id:"git-rebase",name:"Git Rebase Message",import:()=>fe(()=>import("./git-rebase-B-v9cOL2.js"),__vite__mapDeps([48,26]))},{id:"gleam",name:"Gleam",import:()=>fe(()=>import("./gleam-B430Bg39.js"),[])},{id:"glimmer-js",name:"Glimmer JS",aliases:["gjs"],import:()=>fe(()=>import("./glimmer-js-D-cwc0-E.js"),__vite__mapDeps([49,2,11,3,1]))},{id:"glimmer-ts",name:"Glimmer TS",aliases:["gts"],import:()=>fe(()=>import("./glimmer-ts-pgjy16dm.js"),__vite__mapDeps([50,11,3,2,1]))},{id:"glsl",name:"GLSL",import:()=>fe(()=>import("./glsl-DBO2IWDn.js"),__vite__mapDeps([23,24]))},{id:"gnuplot",name:"Gnuplot",import:()=>fe(()=>import("./gnuplot-CM8KxXT1.js"),[])},{id:"go",name:"Go",import:()=>fe(()=>import("./go-B1SYOhNW.js"),[])},{id:"graphql",name:"GraphQL",aliases:["gql"],import:()=>fe(()=>import("./graphql-cDcHW_If.js"),__vite__mapDeps([34,2,11,35,36]))},{id:"groovy",name:"Groovy",import:()=>fe(()=>import("./groovy-DkBy-JyN.js"),[])},{id:"hack",name:"Hack",import:()=>fe(()=>import("./hack-D1yCygmZ.js"),__vite__mapDeps([51,1,2,3,14]))},{id:"haml",name:"Ruby Haml",import:()=>fe(()=>import("./haml-B2EZWmdv.js"),__vite__mapDeps([33,2,3]))},{id:"handlebars",name:"Handlebars",aliases:["hbs"],import:()=>fe(()=>import("./handlebars-BQGss363.js"),__vite__mapDeps([52,1,2,3,38]))},{id:"haskell",name:"Haskell",aliases:["hs"],import:()=>fe(()=>import("./haskell-BILxekzW.js"),[])},{id:"haxe",name:"Haxe",import:()=>fe(()=>import("./haxe-C5wWYbrZ.js"),[])},{id:"hcl",name:"HashiCorp HCL",import:()=>fe(()=>import("./hcl-HzYwdGDm.js"),[])},{id:"hjson",name:"Hjson",import:()=>fe(()=>import("./hjson-T-Tgc4AT.js"),[])},{id:"hlsl",name:"HLSL",import:()=>fe(()=>import("./hlsl-ifBTmRxC.js"),[])},{id:"html",name:"HTML",import:()=>fe(()=>import("./html-C2L_23MC.js"),__vite__mapDeps([1,2,3]))},{id:"html-derivative",name:"HTML (Derivative)",import:()=>fe(()=>import("./html-derivative-CSfWNPLT.js"),__vite__mapDeps([28,1,2,3]))},{id:"http",name:"HTTP",import:()=>fe(()=>import("./http-FRrOvY1W.js"),__vite__mapDeps([53,26,9,7,8,34,2,11,35,36]))},{id:"hxml",name:"HXML",import:()=>fe(()=>import("./hxml-TIA70rKU.js"),__vite__mapDeps([54,55]))},{id:"hy",name:"Hy",import:()=>fe(()=>import("./hy-BMj5Y0dO.js"),[])},{id:"imba",name:"Imba",import:()=>fe(()=>import("./imba-bv_oIlVt.js"),__vite__mapDeps([56,11]))},{id:"ini",name:"INI",aliases:["properties"],import:()=>fe(()=>import("./ini-BjABl1g7.js"),[])},{id:"java",name:"Java",import:()=>fe(()=>import("./java-xI-RfyKK.js"),[])},{id:"javascript",name:"JavaScript",aliases:["js"],import:()=>fe(()=>import("./javascript-ySlJ1b_l.js"),[])},{id:"jinja",name:"Jinja",import:()=>fe(()=>import("./jinja-DGy0s7-h.js"),__vite__mapDeps([57,1,2,3]))},{id:"jison",name:"Jison",import:()=>fe(()=>import("./jison-BqZprYcd.js"),__vite__mapDeps([58,2]))},{id:"json",name:"JSON",import:()=>fe(()=>import("./json-BQoSv7ci.js"),[])},{id:"json5",name:"JSON5",import:()=>fe(()=>import("./json5-w8dY5SsB.js"),[])},{id:"jsonc",name:"JSON with Comments",import:()=>fe(()=>import("./jsonc-TU54ms6u.js"),[])},{id:"jsonl",name:"JSON Lines",import:()=>fe(()=>import("./jsonl-DREVFZK8.js"),[])},{id:"jsonnet",name:"Jsonnet",import:()=>fe(()=>import("./jsonnet-BfivnA6A.js"),[])},{id:"jssm",name:"JSSM",aliases:["fsl"],import:()=>fe(()=>import("./jssm-P4WzXJd0.js"),[])},{id:"jsx",name:"JSX",import:()=>fe(()=>import("./jsx-BAng5TT0.js"),[])},{id:"julia",name:"Julia",aliases:["jl"],import:()=>fe(()=>import("./julia-BBuGR-5E.js"),__vite__mapDeps([59,21,22,23,24,14,18,2,60]))},{id:"kotlin",name:"Kotlin",aliases:["kt","kts"],import:()=>fe(()=>import("./kotlin-B5lbUyaz.js"),[])},{id:"kusto",name:"Kusto",aliases:["kql"],import:()=>fe(()=>import("./kusto-mebxcVVE.js"),[])},{id:"latex",name:"LaTeX",import:()=>fe(()=>import("./latex-C-cWTeAZ.js"),__vite__mapDeps([61,62,60]))},{id:"lean",name:"Lean 4",aliases:["lean4"],import:()=>fe(()=>import("./lean-XBlWyCtg.js"),[])},{id:"less",name:"Less",import:()=>fe(()=>import("./less-BfCpw3nA.js"),[])},{id:"liquid",name:"Liquid",import:()=>fe(()=>import("./liquid-D3W5UaiH.js"),__vite__mapDeps([63,1,2,3,9]))},{id:"log",name:"Log file",import:()=>fe(()=>import("./log-Cc5clBb7.js"),[])},{id:"logo",name:"Logo",import:()=>fe(()=>import("./logo-IuBKFhSY.js"),[])},{id:"lua",name:"Lua",import:()=>fe(()=>import("./lua-CvWAzNxB.js"),__vite__mapDeps([37,24]))},{id:"luau",name:"Luau",import:()=>fe(()=>import("./luau-Du5NY7AG.js"),[])},{id:"make",name:"Makefile",aliases:["makefile"],import:()=>fe(()=>import("./make-Bvotw-X0.js"),[])},{id:"markdown",name:"Markdown",aliases:["md"],import:()=>fe(()=>import("./markdown-UIAJJxZW.js"),[])},{id:"marko",name:"Marko",import:()=>fe(()=>import("./marko-z0MBrx5-.js"),__vite__mapDeps([64,3,65,5,2]))},{id:"matlab",name:"MATLAB",import:()=>fe(()=>import("./matlab-D9-PGadD.js"),[])},{id:"mdc",name:"MDC",import:()=>fe(()=>import("./mdc-DB_EDNY_.js"),__vite__mapDeps([66,42,38,28,1,2,3]))},{id:"mdx",name:"MDX",import:()=>fe(()=>import("./mdx-sdHcTMYB.js"),[])},{id:"mermaid",name:"Mermaid",aliases:["mmd"],import:()=>fe(()=>import("./mermaid-Ci6OQyBP.js"),[])},{id:"mipsasm",name:"MIPS Assembly",aliases:["mips"],import:()=>fe(()=>import("./mipsasm-BC5c_5Pe.js"),[])},{id:"mojo",name:"Mojo",import:()=>fe(()=>import("./mojo-Tz6hzZYG.js"),[])},{id:"move",name:"Move",import:()=>fe(()=>import("./move-DB_GagMm.js"),[])},{id:"narrat",name:"Narrat Language",aliases:["nar"],import:()=>fe(()=>import("./narrat-DLbgOhZU.js"),[])},{id:"nextflow",name:"Nextflow",aliases:["nf"],import:()=>fe(()=>import("./nextflow-B0XVJmRM.js"),[])},{id:"nginx",name:"Nginx",import:()=>fe(()=>import("./nginx-D_VnBJ67.js"),__vite__mapDeps([67,37,24]))},{id:"nim",name:"Nim",import:()=>fe(()=>import("./nim-ZlGxZxc3.js"),__vite__mapDeps([68,24,1,2,3,7,8,23,42]))},{id:"nix",name:"Nix",import:()=>fe(()=>import("./nix-shcSOmrb.js"),[])},{id:"nushell",name:"nushell",aliases:["nu"],import:()=>fe(()=>import("./nushell-D4Tzg5kh.js"),[])},{id:"objective-c",name:"Objective-C",aliases:["objc"],import:()=>fe(()=>import("./objective-c-Deuh7S70.js"),[])},{id:"objective-cpp",name:"Objective-C++",import:()=>fe(()=>import("./objective-cpp-BUEGK8hf.js"),[])},{id:"ocaml",name:"OCaml",import:()=>fe(()=>import("./ocaml-BNioltXt.js"),[])},{id:"pascal",name:"Pascal",import:()=>fe(()=>import("./pascal-JqZropPD.js"),[])},{id:"perl",name:"Perl",import:()=>fe(()=>import("./perl-CHQXSrWU.js"),__vite__mapDeps([69,1,2,3,7,8,14]))},{id:"php",name:"PHP",import:()=>fe(()=>import("./php-B5ebYQev.js"),__vite__mapDeps([70,1,2,3,7,8,14,9]))},{id:"plsql",name:"PL/SQL",import:()=>fe(()=>import("./plsql-LKU2TuZ1.js"),[])},{id:"po",name:"Gettext PO",aliases:["pot","potx"],import:()=>fe(()=>import("./po-BFLt1xDp.js"),[])},{id:"polar",name:"Polar",import:()=>fe(()=>import("./polar-DKykz6zU.js"),[])},{id:"postcss",name:"PostCSS",import:()=>fe(()=>import("./postcss-B3ZDOciz.js"),[])},{id:"powerquery",name:"PowerQuery",import:()=>fe(()=>import("./powerquery-CSHBycmS.js"),[])},{id:"powershell",name:"PowerShell",aliases:["ps","ps1"],import:()=>fe(()=>import("./powershell-BIEUsx6d.js"),[])},{id:"prisma",name:"Prisma",import:()=>fe(()=>import("./prisma-B48N-Iqd.js"),[])},{id:"prolog",name:"Prolog",import:()=>fe(()=>import("./prolog-BY-TUvya.js"),[])},{id:"proto",name:"Protocol Buffer 3",aliases:["protobuf"],import:()=>fe(()=>import("./proto-zocC4JxJ.js"),[])},{id:"pug",name:"Pug",aliases:["jade"],import:()=>fe(()=>import("./pug-CM9l7STV.js"),__vite__mapDeps([71,2,3,1]))},{id:"puppet",name:"Puppet",import:()=>fe(()=>import("./puppet-Cza_XSSt.js"),[])},{id:"purescript",name:"PureScript",import:()=>fe(()=>import("./purescript-Bg-kzb6g.js"),[])},{id:"python",name:"Python",aliases:["py"],import:()=>fe(()=>import("./python-DhUJRlN_.js"),[])},{id:"qml",name:"QML",import:()=>fe(()=>import("./qml-D8XfuvdV.js"),__vite__mapDeps([72,2]))},{id:"qmldir",name:"QML Directory",import:()=>fe(()=>import("./qmldir-C8lEn-DE.js"),[])},{id:"qss",name:"Qt Style Sheets",import:()=>fe(()=>import("./qss-DhMKtDLN.js"),[])},{id:"r",name:"R",import:()=>fe(()=>import("./r-CwjWoCRV.js"),[])},{id:"racket",name:"Racket",import:()=>fe(()=>import("./racket-CzouJOBO.js"),[])},{id:"raku",name:"Raku",aliases:["perl6"],import:()=>fe(()=>import("./raku-B1bQXN8T.js"),[])},{id:"razor",name:"ASP.NET Razor",import:()=>fe(()=>import("./razor-CNLDkMZG.js"),__vite__mapDeps([73,1,2,3,74]))},{id:"reg",name:"Windows Registry Script",import:()=>fe(()=>import("./reg-5LuOXUq_.js"),[])},{id:"regexp",name:"RegExp",aliases:["regex"],import:()=>fe(()=>import("./regexp-DWJ3fJO_.js"),[])},{id:"rel",name:"Rel",import:()=>fe(()=>import("./rel-DJlmqQ1C.js"),[])},{id:"riscv",name:"RISC-V",import:()=>fe(()=>import("./riscv-QhoSD0DR.js"),[])},{id:"rst",name:"reStructuredText",import:()=>fe(()=>import("./rst-4NLicBqY.js"),__vite__mapDeps([75,28,1,2,3,21,22,23,24,14,18,26,38,76,32,33,7,8,34,11,35,36,37]))},{id:"ruby",name:"Ruby",aliases:["rb"],import:()=>fe(()=>import("./ruby-DeZ3UC14.js"),__vite__mapDeps([32,1,2,3,33,7,8,14,34,11,35,36,21,22,23,24,26,37,38]))},{id:"rust",name:"Rust",aliases:["rs"],import:()=>fe(()=>import("./rust-Be6lgOlo.js"),[])},{id:"sas",name:"SAS",import:()=>fe(()=>import("./sas-BmTFh92c.js"),__vite__mapDeps([77,14]))},{id:"sass",name:"Sass",import:()=>fe(()=>import("./sass-BJ4Li9vH.js"),[])},{id:"scala",name:"Scala",import:()=>fe(()=>import("./scala-DQVVAn-B.js"),[])},{id:"scheme",name:"Scheme",import:()=>fe(()=>import("./scheme-BJGe-b2p.js"),[])},{id:"scss",name:"SCSS",import:()=>fe(()=>import("./scss-C31hgJw-.js"),__vite__mapDeps([5,3]))},{id:"sdbl",name:"1C (Query)",aliases:["1c-query"],import:()=>fe(()=>import("./sdbl-BLhTXw86.js"),[])},{id:"shaderlab",name:"ShaderLab",aliases:["shader"],import:()=>fe(()=>import("./shaderlab-B7qAK45m.js"),__vite__mapDeps([78,79]))},{id:"shellscript",name:"Shell",aliases:["bash","sh","shell","zsh"],import:()=>fe(()=>import("./shellscript-atvbtKCR.js"),[])},{id:"shellsession",name:"Shell Session",aliases:["console"],import:()=>fe(()=>import("./shellsession-C_rIy8kc.js"),__vite__mapDeps([80,26]))},{id:"smalltalk",name:"Smalltalk",import:()=>fe(()=>import("./smalltalk-DkLiglaE.js"),[])},{id:"solidity",name:"Solidity",import:()=>fe(()=>import("./solidity-C1w2a3ep.js"),[])},{id:"soy",name:"Closure Templates",aliases:["closure-templates"],import:()=>fe(()=>import("./soy-C-lX7w71.js"),__vite__mapDeps([81,1,2,3]))},{id:"sparql",name:"SPARQL",import:()=>fe(()=>import("./sparql-bYkjHRlG.js"),__vite__mapDeps([82,83]))},{id:"splunk",name:"Splunk Query Language",aliases:["spl"],import:()=>fe(()=>import("./splunk-Cf8iN4DR.js"),[])},{id:"sql",name:"SQL",import:()=>fe(()=>import("./sql-COK4E0Yg.js"),[])},{id:"ssh-config",name:"SSH Config",import:()=>fe(()=>import("./ssh-config-BknIz3MU.js"),[])},{id:"stata",name:"Stata",import:()=>fe(()=>import("./stata-DorPZHa4.js"),__vite__mapDeps([84,14]))},{id:"stylus",name:"Stylus",aliases:["styl"],import:()=>fe(()=>import("./stylus-BeQkCIfX.js"),[])},{id:"svelte",name:"Svelte",import:()=>fe(()=>import("./svelte-MSaWC3Je.js"),__vite__mapDeps([85,2,11,3,12]))},{id:"swift",name:"Swift",import:()=>fe(()=>import("./swift-BSxZ-RaX.js"),[])},{id:"system-verilog",name:"SystemVerilog",import:()=>fe(()=>import("./system-verilog-C7L56vO4.js"),[])},{id:"systemd",name:"Systemd Units",import:()=>fe(()=>import("./systemd-CUnW07Te.js"),[])},{id:"talonscript",name:"TalonScript",aliases:["talon"],import:()=>fe(()=>import("./talonscript-C1XDQQGZ.js"),[])},{id:"tasl",name:"Tasl",import:()=>fe(()=>import("./tasl-CQjiPCtT.js"),[])},{id:"tcl",name:"Tcl",import:()=>fe(()=>import("./tcl-DQ1-QYvQ.js"),[])},{id:"templ",name:"Templ",import:()=>fe(()=>import("./templ-dwX3ZSMB.js"),__vite__mapDeps([86,87,2,3]))},{id:"terraform",name:"Terraform",aliases:["tf","tfvars"],import:()=>fe(()=>import("./terraform-BbSNqyBO.js"),[])},{id:"tex",name:"TeX",import:()=>fe(()=>import("./tex-rYs2v40G.js"),__vite__mapDeps([62,60]))},{id:"toml",name:"TOML",import:()=>fe(()=>import("./toml-CB2ApiWb.js"),[])},{id:"ts-tags",name:"TypeScript with Tags",aliases:["lit"],import:()=>fe(()=>import("./ts-tags-CipyTH0X.js"),__vite__mapDeps([88,11,3,2,23,24,1,14,7,8]))},{id:"tsv",name:"TSV",import:()=>fe(()=>import("./tsv-B_m7g4N7.js"),[])},{id:"tsx",name:"TSX",import:()=>fe(()=>import("./tsx-B6W0miNI.js"),[])},{id:"turtle",name:"Turtle",import:()=>fe(()=>import("./turtle-BMR_PYu6.js"),[])},{id:"twig",name:"Twig",import:()=>fe(()=>import("./twig-NC5TFiHP.js"),__vite__mapDeps([89,3,2,5,70,1,7,8,14,9,18,32,33,34,11,35,36,21,22,23,24,26,37,38]))},{id:"typescript",name:"TypeScript",aliases:["ts"],import:()=>fe(()=>import("./typescript-Dj6nwHGl.js"),[])},{id:"typespec",name:"TypeSpec",aliases:["tsp"],import:()=>fe(()=>import("./typespec-BpWG_bgh.js"),[])},{id:"typst",name:"Typst",aliases:["typ"],import:()=>fe(()=>import("./typst-BVUVsWT6.js"),[])},{id:"v",name:"V",import:()=>fe(()=>import("./v-CAQ2eGtk.js"),[])},{id:"vala",name:"Vala",import:()=>fe(()=>import("./vala-BFOHcciG.js"),[])},{id:"vb",name:"Visual Basic",aliases:["cmd"],import:()=>fe(()=>import("./vb-CdO5JTpU.js"),[])},{id:"verilog",name:"Verilog",import:()=>fe(()=>import("./verilog-CJaU5se_.js"),[])},{id:"vhdl",name:"VHDL",import:()=>fe(()=>import("./vhdl-DYoNaHQp.js"),[])},{id:"viml",name:"Vim Script",aliases:["vim","vimscript"],import:()=>fe(()=>import("./viml-m4uW47V2.js"),[])},{id:"vue",name:"Vue",import:()=>fe(()=>import("./vue-BuYVFjOK.js"),__vite__mapDeps([90,1,2,3,11,9,28]))},{id:"vue-html",name:"Vue HTML",import:()=>fe(()=>import("./vue-html-xdeiXROB.js"),__vite__mapDeps([91,90,1,2,3,11,9,28]))},{id:"vyper",name:"Vyper",aliases:["vy"],import:()=>fe(()=>import("./vyper-nyqBNV6O.js"),[])},{id:"wasm",name:"WebAssembly",import:()=>fe(()=>import("./wasm-C6j12Q_x.js"),[])},{id:"wenyan",name:"Wenyan",aliases:["文言"],import:()=>fe(()=>import("./wenyan-7A4Fjokl.js"),[])},{id:"wgsl",name:"WGSL",import:()=>fe(()=>import("./wgsl-CB0Krxn9.js"),[])},{id:"wikitext",name:"Wikitext",aliases:["mediawiki","wiki"],import:()=>fe(()=>import("./wikitext-DCE3LsBG.js"),[])},{id:"wolfram",name:"Wolfram",aliases:["wl"],import:()=>fe(()=>import("./wolfram-C3FkfJm5.js"),[])},{id:"xml",name:"XML",import:()=>fe(()=>import("./xml-e3z08dGr.js"),__vite__mapDeps([7,8]))},{id:"xsl",name:"XSL",import:()=>fe(()=>import("./xsl-Dd0NUgwM.js"),__vite__mapDeps([92,7,8]))},{id:"yaml",name:"YAML",aliases:["yml"],import:()=>fe(()=>import("./yaml-CVw76BM1.js"),[])},{id:"zenscript",name:"ZenScript",import:()=>fe(()=>import("./zenscript-HnGAYVZD.js"),[])},{id:"zig",name:"Zig",import:()=>fe(()=>import("./zig-BVz_zdnA.js"),[])}],due=Object.fromEntries(lQ.map(t=>[t.id,t.import])),fue=Object.fromEntries(lQ.flatMap(t=>{var e;return((e=t.aliases)==null?void 0:e.map(r=>[r,t.import]))||[]})),pue={...due,...fue},gue=[{id:"andromeeda",displayName:"Andromeeda",type:"dark",import:()=>fe(()=>import("./andromeeda-C3khCPGq.js"),[])},{id:"aurora-x",displayName:"Aurora X",type:"dark",import:()=>fe(()=>import("./aurora-x-D-2ljcwZ.js"),[])},{id:"ayu-dark",displayName:"Ayu Dark",type:"dark",import:()=>fe(()=>import("./ayu-dark-Cv9koXgw.js"),[])},{id:"catppuccin-frappe",displayName:"Catppuccin Frappé",type:"dark",import:()=>fe(()=>import("./catppuccin-frappe-CD_QflpE.js"),[])},{id:"catppuccin-latte",displayName:"Catppuccin Latte",type:"light",import:()=>fe(()=>import("./catppuccin-latte-DRW-0cLl.js"),[])},{id:"catppuccin-macchiato",displayName:"Catppuccin Macchiato",type:"dark",import:()=>fe(()=>import("./catppuccin-macchiato-C-_shW-Y.js"),[])},{id:"catppuccin-mocha",displayName:"Catppuccin Mocha",type:"dark",import:()=>fe(()=>import("./catppuccin-mocha-LGGdnPYs.js"),[])},{id:"dark-plus",displayName:"Dark Plus",type:"dark",import:()=>fe(()=>import("./dark-plus-C3mMm8J8.js"),[])},{id:"dracula",displayName:"Dracula Theme",type:"dark",import:()=>fe(()=>import("./dracula-BzJJZx-M.js"),[])},{id:"dracula-soft",displayName:"Dracula Theme Soft",type:"dark",import:()=>fe(()=>import("./dracula-soft-BXkSAIEj.js"),[])},{id:"everforest-dark",displayName:"Everforest Dark",type:"dark",import:()=>fe(()=>import("./everforest-dark-BgDCqdQA.js"),[])},{id:"everforest-light",displayName:"Everforest Light",type:"light",import:()=>fe(()=>import("./everforest-light-C8M2exoo.js"),[])},{id:"github-dark",displayName:"GitHub Dark",type:"dark",import:()=>fe(()=>import("./github-dark-DHJKELXO.js"),[])},{id:"github-dark-default",displayName:"GitHub Dark Default",type:"dark",import:()=>fe(()=>import("./github-dark-default-Cuk6v7N8.js"),[])},{id:"github-dark-dimmed",displayName:"GitHub Dark Dimmed",type:"dark",import:()=>fe(()=>import("./github-dark-dimmed-DH5Ifo-i.js"),[])},{id:"github-dark-high-contrast",displayName:"GitHub Dark High Contrast",type:"dark",import:()=>fe(()=>import("./github-dark-high-contrast-E3gJ1_iC.js"),[])},{id:"github-light",displayName:"GitHub Light",type:"light",import:()=>fe(()=>import("./github-light-DAi9KRSo.js"),[])},{id:"github-light-default",displayName:"GitHub Light Default",type:"light",import:()=>fe(()=>import("./github-light-default-D7oLnXFd.js"),[])},{id:"github-light-high-contrast",displayName:"GitHub Light High Contrast",type:"light",import:()=>fe(()=>import("./github-light-high-contrast-BfjtVDDH.js"),[])},{id:"houston",displayName:"Houston",type:"dark",import:()=>fe(()=>import("./houston-DnULxvSX.js"),[])},{id:"kanagawa-dragon",displayName:"Kanagawa Dragon",type:"dark",import:()=>fe(()=>import("./kanagawa-dragon-CkXjmgJE.js"),[])},{id:"kanagawa-lotus",displayName:"Kanagawa Lotus",type:"light",import:()=>fe(()=>import("./kanagawa-lotus-CfQXZHmo.js"),[])},{id:"kanagawa-wave",displayName:"Kanagawa Wave",type:"dark",import:()=>fe(()=>import("./kanagawa-wave-DWedfzmr.js"),[])},{id:"laserwave",displayName:"LaserWave",type:"dark",import:()=>fe(()=>import("./laserwave-DUszq2jm.js"),[])},{id:"light-plus",displayName:"Light Plus",type:"light",import:()=>fe(()=>import("./light-plus-B7mTdjB0.js"),[])},{id:"material-theme",displayName:"Material Theme",type:"dark",import:()=>fe(()=>import("./material-theme-D5KoaKCx.js"),[])},{id:"material-theme-darker",displayName:"Material Theme Darker",type:"dark",import:()=>fe(()=>import("./material-theme-darker-BfHTSMKl.js"),[])},{id:"material-theme-lighter",displayName:"Material Theme Lighter",type:"light",import:()=>fe(()=>import("./material-theme-lighter-B0m2ddpp.js"),[])},{id:"material-theme-ocean",displayName:"Material Theme Ocean",type:"dark",import:()=>fe(()=>import("./material-theme-ocean-CyktbL80.js"),[])},{id:"material-theme-palenight",displayName:"Material Theme Palenight",type:"dark",import:()=>fe(()=>import("./material-theme-palenight-Csfq5Kiy.js"),[])},{id:"min-dark",displayName:"Min Dark",type:"dark",import:()=>fe(()=>import("./min-dark-CafNBF8u.js"),[])},{id:"min-light",displayName:"Min Light",type:"light",import:()=>fe(()=>import("./min-light-CTRr51gU.js"),[])},{id:"monokai",displayName:"Monokai",type:"dark",import:()=>fe(()=>import("./monokai-D4h5O-jR.js"),[])},{id:"night-owl",displayName:"Night Owl",type:"dark",import:()=>fe(()=>import("./night-owl-C39BiMTA.js"),[])},{id:"nord",displayName:"Nord",type:"dark",import:()=>fe(()=>import("./nord-Ddv68eIx.js"),[])},{id:"one-dark-pro",displayName:"One Dark Pro",type:"dark",import:()=>fe(()=>import("./one-dark-pro-GBQ2dnAY.js"),[])},{id:"one-light",displayName:"One Light",type:"light",import:()=>fe(()=>import("./one-light-PoHY5YXO.js"),[])},{id:"plastic",displayName:"Plastic",type:"dark",import:()=>fe(()=>import("./plastic-3e1v2bzS.js"),[])},{id:"poimandres",displayName:"Poimandres",type:"dark",import:()=>fe(()=>import("./poimandres-CS3Unz2-.js"),[])},{id:"red",displayName:"Red",type:"dark",import:()=>fe(()=>import("./red-bN70gL4F.js"),[])},{id:"rose-pine",displayName:"Rosé Pine",type:"dark",import:()=>fe(()=>import("./rose-pine-CmCqftbK.js"),[])},{id:"rose-pine-dawn",displayName:"Rosé Pine Dawn",type:"light",import:()=>fe(()=>import("./rose-pine-dawn-Ds-gbosJ.js"),[])},{id:"rose-pine-moon",displayName:"Rosé Pine Moon",type:"dark",import:()=>fe(()=>import("./rose-pine-moon-CjDtw9vr.js"),[])},{id:"slack-dark",displayName:"Slack Dark",type:"dark",import:()=>fe(()=>import("./slack-dark-BthQWCQV.js"),[])},{id:"slack-ochin",displayName:"Slack Ochin",type:"light",import:()=>fe(()=>import("./slack-ochin-DqwNpetd.js"),[])},{id:"snazzy-light",displayName:"Snazzy Light",type:"light",import:()=>fe(()=>import("./snazzy-light-Bw305WKR.js"),[])},{id:"solarized-dark",displayName:"Solarized Dark",type:"dark",import:()=>fe(()=>import("./solarized-dark-DXbdFlpD.js"),[])},{id:"solarized-light",displayName:"Solarized Light",type:"light",import:()=>fe(()=>import("./solarized-light-L9t79GZl.js"),[])},{id:"synthwave-84",displayName:"Synthwave '84",type:"dark",import:()=>fe(()=>import("./synthwave-84-CbfX1IO0.js"),[])},{id:"tokyo-night",displayName:"Tokyo Night",type:"dark",import:()=>fe(()=>import("./tokyo-night-DBQeEorK.js"),[])},{id:"vesper",displayName:"Vesper",type:"dark",import:()=>fe(()=>import("./vesper-BEBZ7ncR.js"),[])},{id:"vitesse-black",displayName:"Vitesse Black",type:"dark",import:()=>fe(()=>import("./vitesse-black-Bkuqu6BP.js"),[])},{id:"vitesse-dark",displayName:"Vitesse Dark",type:"dark",import:()=>fe(()=>import("./vitesse-dark-D0r3Knsf.js"),[])},{id:"vitesse-light",displayName:"Vitesse Light",type:"light",import:()=>fe(()=>import("./vitesse-light-CVO1_9PV.js"),[])}],mue=Object.fromEntries(gue.map(t=>[t.id,t.import]));let Al=class extends Error{constructor(e){super(e),this.name="ShikiError"}},uA=class extends Error{constructor(e){super(e),this.name="ShikiError"}};function xue(){return 2147483648}function yue(){return typeof performance<"u"?performance.now():Date.now()}const vue=(t,e)=>t+(e-t%e)%e;async function bue(t){let e,r;const n={};function i(f){r=f,n.HEAPU8=new Uint8Array(f),n.HEAPU32=new Uint32Array(f)}function a(f,g,m){n.HEAPU8.copyWithin(f,g,g+m)}function s(f){try{return e.grow(f-r.byteLength+65535>>>16),i(e.buffer),1}catch{}}function o(f){const g=n.HEAPU8.length;f=f>>>0;const m=xue();if(f>m)return!1;for(let v=1;v<=4;v*=2){let b=g*(1+.2/v);b=Math.min(b,f+100663296);const w=Math.min(m,vue(Math.max(f,b),65536));if(s(w))return!0}return!1}const l=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function c(f,g,m=1024){const v=g+m;let b=g;for(;f[b]&&!(b>=v);)++b;if(b-g>16&&f.buffer&&l)return l.decode(f.subarray(g,b));let w="";for(;g>10,56320|_&1023)}}return w}function u(f,g){return f?c(n.HEAPU8,f,g):""}const h={emscripten_get_now:yue,emscripten_memcpy_big:a,emscripten_resize_heap:o,fd_write:()=>0};async function d(){const g=await t({env:h,wasi_snapshot_preview1:h});e=g.memory,i(e.buffer),Object.assign(n,g),n.UTF8ToString=u}return await d(),n}var wue=Object.defineProperty,Oue=(t,e,r)=>e in t?wue(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Qn=(t,e,r)=>(Oue(t,typeof e!="symbol"?e+"":e,r),r);let ri=null;function kue(t){throw new uA(t.UTF8ToString(t.getLastOnigError()))}class G2{constructor(e){Qn(this,"utf16Length"),Qn(this,"utf8Length"),Qn(this,"utf16Value"),Qn(this,"utf8Value"),Qn(this,"utf16OffsetToUtf8"),Qn(this,"utf8OffsetToUtf16");const r=e.length,n=G2._utf8ByteLength(e),i=n!==r,a=i?new Uint32Array(r+1):null;i&&(a[r]=n);const s=i?new Uint32Array(n+1):null;i&&(s[n]=r);const o=new Uint8Array(n);let l=0;for(let c=0;c=55296&&u<=56319&&c+1=56320&&f<=57343&&(h=(u-55296<<10)+65536|f-56320,d=!0)}i&&(a[c]=l,d&&(a[c+1]=l),h<=127?s[l+0]=c:h<=2047?(s[l+0]=c,s[l+1]=c):h<=65535?(s[l+0]=c,s[l+1]=c,s[l+2]=c):(s[l+0]=c,s[l+1]=c,s[l+2]=c,s[l+3]=c)),h<=127?o[l++]=h:h<=2047?(o[l++]=192|(h&1984)>>>6,o[l++]=128|(h&63)>>>0):h<=65535?(o[l++]=224|(h&61440)>>>12,o[l++]=128|(h&4032)>>>6,o[l++]=128|(h&63)>>>0):(o[l++]=240|(h&1835008)>>>18,o[l++]=128|(h&258048)>>>12,o[l++]=128|(h&4032)>>>6,o[l++]=128|(h&63)>>>0),d&&c++}this.utf16Length=r,this.utf8Length=n,this.utf16Value=e,this.utf8Value=o,this.utf16OffsetToUtf8=a,this.utf8OffsetToUtf16=s}static _utf8ByteLength(e){let r=0;for(let n=0,i=e.length;n=55296&&a<=56319&&n+1=56320&&l<=57343&&(s=(a-55296<<10)+65536|l-56320,o=!0)}s<=127?r+=1:s<=2047?r+=2:s<=65535?r+=3:r+=4,o&&n++}return r}createString(e){const r=e.omalloc(this.utf8Length);return e.HEAPU8.set(this.utf8Value,r),r}}const Do=class{constructor(t){if(Qn(this,"id",++Do.LAST_ID),Qn(this,"_onigBinding"),Qn(this,"content"),Qn(this,"utf16Length"),Qn(this,"utf8Length"),Qn(this,"utf16OffsetToUtf8"),Qn(this,"utf8OffsetToUtf16"),Qn(this,"ptr"),!ri)throw new uA("Must invoke loadWasm first.");this._onigBinding=ri,this.content=t;const e=new G2(t);this.utf16Length=e.utf16Length,this.utf8Length=e.utf8Length,this.utf16OffsetToUtf8=e.utf16OffsetToUtf8,this.utf8OffsetToUtf16=e.utf8OffsetToUtf16,this.utf8Length<1e4&&!Do._sharedPtrInUse?(Do._sharedPtr||(Do._sharedPtr=ri.omalloc(1e4)),Do._sharedPtrInUse=!0,ri.HEAPU8.set(e.utf8Value,Do._sharedPtr),this.ptr=Do._sharedPtr):this.ptr=e.createString(ri)}convertUtf8OffsetToUtf16(t){return this.utf8OffsetToUtf16?t<0?0:t>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[t]:t}convertUtf16OffsetToUtf8(t){return this.utf16OffsetToUtf8?t<0?0:t>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[t]:t}dispose(){this.ptr===Do._sharedPtr?Do._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};let qm=Do;Qn(qm,"LAST_ID",0);Qn(qm,"_sharedPtr",0);Qn(qm,"_sharedPtrInUse",!1);class _ue{constructor(e){if(Qn(this,"_onigBinding"),Qn(this,"_ptr"),!ri)throw new uA("Must invoke loadWasm first.");const r=[],n=[];for(let o=0,l=e.length;o{let n=t;return n=await n,typeof n=="function"&&(n=await n(r)),typeof n=="function"&&(n=await n(r)),Sue(n)?n=await n.instantiator(r):Tue(n)?n=await n.default(r):(Cue(n)&&(n=n.data),Eue(n)?typeof WebAssembly.instantiateStreaming=="function"?n=await Nue(n)(r):n=await Pue(n)(r):Due(n)?n=await P_(n)(r):n instanceof WebAssembly.Module?n=await P_(n)(r):"default"in n&&n.default instanceof WebAssembly.Module&&(n=await P_(n.default)(r))),"instance"in n&&(n=n.instance),"exports"in n&&(n=n.exports),n})}return R1=e(),R1}function P_(t){return e=>WebAssembly.instantiate(t,e)}function Nue(t){return e=>WebAssembly.instantiateStreaming(t,e)}function Pue(t){return async e=>{const r=await t.arrayBuffer();return WebAssembly.instantiate(r,e)}}let Rue;function Fue(){return Rue}async function cQ(t){return t&&await Aue(t),{createScanner(e){return new _ue(e.map(r=>typeof r=="string"?r:r.source))},createString(e){return new qm(e)}}}function Lue(t){return hA(t)}function hA(t){return Array.isArray(t)?Mue(t):t instanceof RegExp?t:typeof t=="object"?$ue(t):t}function Mue(t){let e=[];for(let r=0,n=t.length;r{for(let n in r)t[n]=r[n]}),t}function hQ(t){const e=~t.lastIndexOf("/")||~t.lastIndexOf("\\");return e===0?t:~e===t.length-1?hQ(t.substring(0,t.length-1)):t.substr(~e+1)}var R_=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,F1=class{static hasCaptures(t){return t===null?!1:(R_.lastIndex=0,R_.test(t))}static replaceCaptures(t,e,r){return t.replace(R_,(n,i,a,s)=>{let o=r[parseInt(i||a,10)];if(o){let l=e.substring(o.start,o.end);for(;l[0]===".";)l=l.substring(1);switch(s){case"downcase":return l.toLowerCase();case"upcase":return l.toUpperCase();default:return l}}else return n})}};function dQ(t,e){return te?1:0}function fQ(t,e){if(t===null&&e===null)return 0;if(!t)return-1;if(!e)return 1;let r=t.length,n=e.length;if(r===n){for(let i=0;ithis._root.match(e)));this._colorMap=e,this._defaults=r,this._root=n}static createFromRawTheme(e,r){return this.createFromParsedTheme(Bue(e),r)}static createFromParsedTheme(e,r){return Que(e,r)}getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;const r=e.scopeName,i=this._cachedMatchRoot.get(r).find(a=>Iue(e.parent,a.parentScopes));return i?new mQ(i.fontStyle,i.foreground,i.background):null}},F_=class Zy{constructor(e,r){this.parent=e,this.scopeName=r}static push(e,r){for(const n of r)e=new Zy(e,n);return e}static from(...e){let r=null;for(let n=0;n"){if(r===e.length-1)return!1;n=e[++r],i=!0}for(;t&&!jue(t.scopeName,n);){if(i)return!1;t=t.parent}if(!t)return!1;t=t.parent}return!0}function jue(t,e){return e===t||t.startsWith(e)&&t[e.length]==="."}var mQ=class{constructor(t,e,r){this.fontStyle=t,this.foregroundId=e,this.backgroundId=r}};function Bue(t){if(!t)return[];if(!t.settings||!Array.isArray(t.settings))return[];let e=t.settings,r=[],n=0;for(let i=0,a=e.length;i1&&(v=g.slice(0,g.length-1),v.reverse()),r[n++]=new Uue(m,v,i,l,c,u)}}return r}var Uue=class{constructor(t,e,r,n,i,a){this.scope=t,this.parentScopes=e,this.index=r,this.fontStyle=n,this.foreground=i,this.background=a}},Ol=(t=>(t[t.NotSet=-1]="NotSet",t[t.None=0]="None",t[t.Italic=1]="Italic",t[t.Bold=2]="Bold",t[t.Underline=4]="Underline",t[t.Strikethrough=8]="Strikethrough",t))(Ol||{});function Que(t,e){t.sort((l,c)=>{let u=dQ(l.scope,c.scope);return u!==0||(u=fQ(l.parentScopes,c.parentScopes),u!==0)?u:l.index-c.index});let r=0,n="#000000",i="#ffffff";for(;t.length>=1&&t[0].scope==="";){let l=t.shift();l.fontStyle!==-1&&(r=l.fontStyle),l.foreground!==null&&(n=l.foreground),l.background!==null&&(i=l.background)}let a=new Wue(e),s=new mQ(r,a.getId(n),a.getId(i)),o=new Vue(new qC(0,null,-1,0,0),[]);for(let l=0,c=t.length;le?console.log("how did this happen?"):this.scopeDepth=e,r!==-1&&(this.fontStyle=r),n!==0&&(this.foreground=n),i!==0&&(this.background=i)}},Vue=class XC{constructor(e,r=[],n={}){Me(this,"_rulesWithParentScopes");this._mainRule=e,this._children=n,this._rulesWithParentScopes=r}static _cmpBySpecificity(e,r){if(e.scopeDepth!==r.scopeDepth)return r.scopeDepth-e.scopeDepth;let n=0,i=0;for(;e.parentScopes[n]===">"&&n++,r.parentScopes[i]===">"&&i++,!(n>=e.parentScopes.length||i>=r.parentScopes.length);){const a=r.parentScopes[i].length-e.parentScopes[n].length;if(a!==0)return a;n++,i++}return r.parentScopes.length-e.parentScopes.length}match(e){if(e!==""){let n=e.indexOf("."),i,a;if(n===-1?(i=e,a=""):(i=e.substring(0,n),a=e.substring(n+1)),this._children.hasOwnProperty(i))return this._children[i].match(a)}const r=this._rulesWithParentScopes.concat(this._mainRule);return r.sort(XC._cmpBySpecificity),r}insert(e,r,n,i,a,s){if(r===""){this._doInsertHere(e,n,i,a,s);return}let o=r.indexOf("."),l,c;o===-1?(l=r,c=""):(l=r.substring(0,o),c=r.substring(o+1));let u;this._children.hasOwnProperty(l)?u=this._children[l]:(u=new XC(this._mainRule.clone(),qC.cloneArr(this._rulesWithParentScopes)),this._children[l]=u),u.insert(e+1,c,n,i,a,s)}_doInsertHere(e,r,n,i,a){if(r===null){this._mainRule.acceptOverwrite(e,n,i,a);return}for(let s=0,o=this._rulesWithParentScopes.length;s>>0}static getTokenType(e){return(e&768)>>>8}static containsBalancedBrackets(e){return(e&1024)!==0}static getFontStyle(e){return(e&30720)>>>11}static getForeground(e){return(e&16744448)>>>15}static getBackground(e){return(e&4278190080)>>>24}static set(e,r,n,i,a,s,o){let l=ps.getLanguageId(e),c=ps.getTokenType(e),u=ps.containsBalancedBrackets(e)?1:0,h=ps.getFontStyle(e),d=ps.getForeground(e),f=ps.getBackground(e);return r!==0&&(l=r),n!==8&&(c=n),i!==null&&(u=i?1:0),a!==-1&&(h=a),s!==0&&(d=s),o!==0&&(f=o),(l<<0|c<<8|u<<10|h<<11|d<<15|f<<24)>>>0}};function ob(t,e){const r=[],n=que(t);let i=n.next();for(;i!==null;){let l=0;if(i.length===2&&i.charAt(1)===":"){switch(i.charAt(0)){case"R":l=1;break;case"L":l=-1;break;default:console.log(`Unknown priority ${i} in scope selector`)}i=n.next()}let c=s();if(r.push({matcher:c,priority:l}),i!==",")break;i=n.next()}return r;function a(){if(i==="-"){i=n.next();const l=a();return c=>!!l&&!l(c)}if(i==="("){i=n.next();const l=o();return i===")"&&(i=n.next()),l}if(ZR(i)){const l=[];do l.push(i),i=n.next();while(ZR(i));return c=>e(l,c)}return null}function s(){const l=[];let c=a();for(;c;)l.push(c),c=a();return u=>l.every(h=>h(u))}function o(){const l=[];let c=s();for(;c&&(l.push(c),i==="|"||i===",");){do i=n.next();while(i==="|"||i===",");c=s()}return u=>l.some(h=>h(u))}}function ZR(t){return!!t&&!!t.match(/[\w\.:]+/)}function que(t){let e=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,r=e.exec(t);return{next:()=>{if(!r)return null;const n=r[0];return r=e.exec(t),n}}}function yQ(t){typeof t.dispose=="function"&&t.dispose()}var zg=class{constructor(t){this.scopeName=t}toKey(){return this.scopeName}},Xue=class{constructor(t,e){this.scopeName=t,this.ruleName=e}toKey(){return`${this.scopeName}#${this.ruleName}`}},Zue=class{constructor(){Me(this,"_references",[]);Me(this,"_seenReferenceKeys",new Set);Me(this,"visitedRule",new Set)}get references(){return this._references}add(t){const e=t.toKey();this._seenReferenceKeys.has(e)||(this._seenReferenceKeys.add(e),this._references.push(t))}},Hue=class{constructor(t,e){Me(this,"seenFullScopeRequests",new Set);Me(this,"seenPartialScopeRequests",new Set);Me(this,"Q");this.repo=t,this.initialScopeName=e,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new zg(this.initialScopeName)]}processQueue(){const t=this.Q;this.Q=[];const e=new Zue;for(const r of t)Gue(r,this.initialScopeName,this.repo,e);for(const r of e.references)if(r instanceof zg){if(this.seenFullScopeRequests.has(r.scopeName))continue;this.seenFullScopeRequests.add(r.scopeName),this.Q.push(r)}else{if(this.seenFullScopeRequests.has(r.scopeName)||this.seenPartialScopeRequests.has(r.toKey()))continue;this.seenPartialScopeRequests.add(r.toKey()),this.Q.push(r)}}};function Gue(t,e,r,n){const i=r.lookup(t.scopeName);if(!i){if(t.scopeName===e)throw new Error(`No grammar provided for <${e}>`);return}const a=r.lookup(e);t instanceof zg?Hy({baseGrammar:a,selfGrammar:i},n):ZC(t.ruleName,{baseGrammar:a,selfGrammar:i,repository:i.repository},n);const s=r.injections(t.scopeName);if(s)for(const o of s)n.add(new zg(o))}function ZC(t,e,r){if(e.repository&&e.repository[t]){const n=e.repository[t];lb([n],e,r)}}function Hy(t,e){t.selfGrammar.patterns&&Array.isArray(t.selfGrammar.patterns)&&lb(t.selfGrammar.patterns,{...t,repository:t.selfGrammar.repository},e),t.selfGrammar.injections&&lb(Object.values(t.selfGrammar.injections),{...t,repository:t.selfGrammar.repository},e)}function lb(t,e,r){for(const n of t){if(r.visitedRule.has(n))continue;r.visitedRule.add(n);const i=n.repository?uQ({},e.repository,n.repository):e.repository;Array.isArray(n.patterns)&&lb(n.patterns,{...e,repository:i},r);const a=n.include;if(!a)continue;const s=vQ(a);switch(s.kind){case 0:Hy({...e,selfGrammar:e.baseGrammar},r);break;case 1:Hy(e,r);break;case 2:ZC(s.ruleName,{...e,repository:i},r);break;case 3:case 4:const o=s.scopeName===e.selfGrammar.scopeName?e.selfGrammar:s.scopeName===e.baseGrammar.scopeName?e.baseGrammar:void 0;if(o){const l={baseGrammar:e.baseGrammar,selfGrammar:o,repository:i};s.kind===4?ZC(s.ruleName,l,r):Hy(l,r)}else s.kind===4?r.add(new Xue(s.scopeName,s.ruleName)):r.add(new zg(s.scopeName));break}}}var Yue=class{constructor(){Me(this,"kind",0)}},Kue=class{constructor(){Me(this,"kind",1)}},Jue=class{constructor(t){Me(this,"kind",2);this.ruleName=t}},ehe=class{constructor(t){Me(this,"kind",3);this.scopeName=t}},the=class{constructor(t,e){Me(this,"kind",4);this.scopeName=t,this.ruleName=e}};function vQ(t){if(t==="$base")return new Yue;if(t==="$self")return new Kue;const e=t.indexOf("#");if(e===-1)return new ehe(t);if(e===0)return new Jue(t.substring(1));{const r=t.substring(0,e),n=t.substring(e+1);return new the(r,n)}}var rhe=/\\(\d+)/,HR=/\\(\d+)/g,nhe=-1,bQ=-2;var Xm=class{constructor(e,r,n,i){Me(this,"$location");Me(this,"id");Me(this,"_nameIsCapturing");Me(this,"_name");Me(this,"_contentNameIsCapturing");Me(this,"_contentName");this.$location=e,this.id=r,this._name=n||null,this._nameIsCapturing=F1.hasCaptures(this._name),this._contentName=i||null,this._contentNameIsCapturing=F1.hasCaptures(this._contentName)}get debugName(){const e=this.$location?`${hQ(this.$location.filename)}:${this.$location.line}`:"unknown";return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,r){return!this._nameIsCapturing||this._name===null||e===null||r===null?this._name:F1.replaceCaptures(this._name,e,r)}getContentName(e,r){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:F1.replaceCaptures(this._contentName,e,r)}},ihe=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,i);Me(this,"retokenizeCapturedWithRuleId");this.retokenizeCapturedWithRuleId=a}dispose(){}collectPatterns(e,r){throw new Error("Not supported!")}compile(e,r){throw new Error("Not supported!")}compileAG(e,r,n,i){throw new Error("Not supported!")}},ahe=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,null);Me(this,"_match");Me(this,"captures");Me(this,"_cachedCompiledPatterns");this._match=new Vg(i,this.id),this.captures=a,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,r){r.push(this._match)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new qg,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},GR=class extends Xm{constructor(e,r,n,i,a){super(e,r,n,i);Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");this.patterns=a.patterns,this.hasMissingPatterns=a.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}collectPatterns(e,r){for(const n of this.patterns)e.getRule(n).collectPatterns(e,r)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new qg,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},HC=class extends Xm{constructor(e,r,n,i,a,s,o,l,c,u){super(e,r,n,i);Me(this,"_begin");Me(this,"beginCaptures");Me(this,"_end");Me(this,"endHasBackReferences");Me(this,"endCaptures");Me(this,"applyEndPatternLast");Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");this._begin=new Vg(a,this.id),this.beginCaptures=s,this._end=new Vg(o||"￿",-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=l,this.applyEndPatternLast=c||!1,this.patterns=u.patterns,this.hasMissingPatterns=u.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,r){return this._end.resolveBackReferences(e,r)}collectPatterns(e,r){r.push(this._begin)}compile(e,r){return this._getCachedCompiledPatterns(e,r).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e,r).compileAG(e,n,i)}_getCachedCompiledPatterns(e,r){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new qg;for(const n of this.patterns)e.getRule(n).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,r):this._cachedCompiledPatterns.setSource(0,r)),this._cachedCompiledPatterns}},cb=class extends Xm{constructor(e,r,n,i,a,s,o,l,c){super(e,r,n,i);Me(this,"_begin");Me(this,"beginCaptures");Me(this,"whileCaptures");Me(this,"_while");Me(this,"whileHasBackReferences");Me(this,"hasMissingPatterns");Me(this,"patterns");Me(this,"_cachedCompiledPatterns");Me(this,"_cachedCompiledWhilePatterns");this._begin=new Vg(a,this.id),this.beginCaptures=s,this.whileCaptures=l,this._while=new Vg(o,bQ),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null),this._cachedCompiledWhilePatterns&&(this._cachedCompiledWhilePatterns.dispose(),this._cachedCompiledWhilePatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,r){return this._while.resolveBackReferences(e,r)}collectPatterns(e,r){r.push(this._begin)}compile(e,r){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,r,n,i){return this._getCachedCompiledPatterns(e).compileAG(e,n,i)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new qg;for(const r of this.patterns)e.getRule(r).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,r){return this._getCachedCompiledWhilePatterns(e,r).compile(e)}compileWhileAG(e,r,n,i){return this._getCachedCompiledWhilePatterns(e,r).compileAG(e,n,i)}_getCachedCompiledWhilePatterns(e,r){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new qg,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,r||"￿"),this._cachedCompiledWhilePatterns}},wQ=class Si{static createCaptureRule(e,r,n,i,a){return e.registerRule(s=>new ihe(r,s,n,i,a))}static getCompiledRuleId(e,r,n){return e.id||r.registerRule(i=>{if(e.id=i,e.match)return new ahe(e.$vscodeTextmateLocation,e.id,e.name,e.match,Si._compileCaptures(e.captures,r,n));if(typeof e.begin>"u"){e.repository&&(n=uQ({},n,e.repository));let a=e.patterns;return typeof a>"u"&&e.include&&(a=[{include:e.include}]),new GR(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,Si._compilePatterns(a,r,n))}return e.while?new cb(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,e.begin,Si._compileCaptures(e.beginCaptures||e.captures,r,n),e.while,Si._compileCaptures(e.whileCaptures||e.captures,r,n),Si._compilePatterns(e.patterns,r,n)):new HC(e.$vscodeTextmateLocation,e.id,e.name,e.contentName,e.begin,Si._compileCaptures(e.beginCaptures||e.captures,r,n),e.end,Si._compileCaptures(e.endCaptures||e.captures,r,n),e.applyEndPatternLast,Si._compilePatterns(e.patterns,r,n))}),e.id}static _compileCaptures(e,r,n){let i=[];if(e){let a=0;for(const s in e){if(s==="$vscodeTextmateLocation")continue;const o=parseInt(s,10);o>a&&(a=o)}for(let s=0;s<=a;s++)i[s]=null;for(const s in e){if(s==="$vscodeTextmateLocation")continue;const o=parseInt(s,10);let l=0;e[s].patterns&&(l=Si.getCompiledRuleId(e[s],r,n)),i[o]=Si.createCaptureRule(r,e[s].$vscodeTextmateLocation,e[s].name,e[s].contentName,l)}}return i}static _compilePatterns(e,r,n){let i=[];if(e)for(let a=0,s=e.length;ae.substring(i.start,i.end));return HR.lastIndex=0,this.source.replace(HR,(i,a)=>pQ(n[parseInt(a,10)]||""))}_buildAnchorCache(){if(typeof this.source!="string")throw new Error("This method should only be called if the source is a string");let e=[],r=[],n=[],i=[],a,s,o,l;for(a=0,s=this.source.length;ar.source);this._cached=new YR(t,e,this._items.map(r=>r.ruleId))}return this._cached}compileAG(t,e,r){return this._hasAnchors?e?r?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(t,e,r)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(t,e,r)),this._anchorCache.A1_G0):r?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(t,e,r)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(t,e,r)),this._anchorCache.A0_G0):this.compile(t)}_resolveAnchors(t,e,r){let n=this._items.map(i=>i.resolveAnchors(e,r));return new YR(t,n,this._items.map(i=>i.ruleId))}},YR=class{constructor(t,e,r){Me(this,"scanner");this.regExps=e,this.rules=r,this.scanner=t.createOnigScanner(e)}dispose(){typeof this.scanner.dispose=="function"&&this.scanner.dispose()}toString(){const t=[];for(let e=0,r=this.rules.length;e{const r=this._scopeToLanguage(e),n=this._toStandardTokenType(e);return new L_(r,n)}));this._defaultAttributes=new L_(e,8),this._embeddedLanguagesMatcher=new ohe(Object.entries(r||{}))}getDefaultAttributes(){return this._defaultAttributes}getBasicScopeAttributes(e){return e===null?wl._NULL_SCOPE_METADATA:this._getBasicScopeAttributes.get(e)}_scopeToLanguage(e){return this._embeddedLanguagesMatcher.match(e)||0}_toStandardTokenType(e){const r=e.match(wl.STANDARD_TOKEN_TYPE_REGEXP);if(!r)return 8;switch(r[1]){case"comment":return 1;case"string":return 2;case"regex":return 3;case"meta.embedded":return 0}throw new Error("Unexpected match for standard token type!")}},Me(wl,"_NULL_SCOPE_METADATA",new L_(0,0)),Me(wl,"STANDARD_TOKEN_TYPE_REGEXP",/\b(comment|string|regex|meta\.embedded)\b/),wl),ohe=class{constructor(t){Me(this,"values");Me(this,"scopesRegExp");if(t.length===0)this.values=null,this.scopesRegExp=null;else{this.values=new Map(t);const e=t.map(([r,n])=>pQ(r));e.sort(),e.reverse(),this.scopesRegExp=new RegExp(`^((${e.join(")|(")}))($|\\.)`,"")}}match(t){if(!this.scopesRegExp)return;const e=t.match(this.scopesRegExp);if(e)return this.values.get(e[1])}},KR=class{constructor(t,e){this.stack=t,this.stoppedEarly=e}};function kQ(t,e,r,n,i,a,s,o){const l=e.content.length;let c=!1,u=-1;if(s){const f=lhe(t,e,r,n,i,a);i=f.stack,n=f.linePos,r=f.isFirstLine,u=f.anchorPosition}const h=Date.now();for(;!c;){if(o!==0&&Date.now()-h>o)return new KR(i,!0);d()}return new KR(i,!1);function d(){const f=che(t,e,r,n,i,u);if(!f){a.produce(i,l),c=!0;return}const g=f.captureIndices,m=f.matchedRuleId,v=g&&g.length>0?g[0].end>n:!1;if(m===nhe){const b=i.getRule(t);a.produce(i,g[0].start),i=i.withContentNameScopesList(i.nameScopesList),B0(t,e,r,i,a,b.endCaptures,g),a.produce(i,g[0].end);const w=i;if(i=i.parent,u=w.getAnchorPos(),!v&&w.getEnterPos()===n){i=w,a.produce(i,l),c=!0;return}}else{const b=t.getRule(m);a.produce(i,g[0].start);const w=i,O=b.getName(e.content,g),S=i.contentNameScopesList.pushAttributed(O,t);if(i=i.push(m,n,u,g[0].end===l,null,S,S),b instanceof HC){const T=b;B0(t,e,r,i,a,T.beginCaptures,g),a.produce(i,g[0].end),u=g[0].end;const _=T.getContentName(e.content,g),C=S.pushAttributed(_,t);if(i=i.withContentNameScopesList(C),T.endHasBackReferences&&(i=i.withEndRule(T.getEndWithResolvedBackReferences(e.content,g))),!v&&w.hasSameRuleAs(i)){i=i.pop(),a.produce(i,l),c=!0;return}}else if(b instanceof cb){const T=b;B0(t,e,r,i,a,T.beginCaptures,g),a.produce(i,g[0].end),u=g[0].end;const _=T.getContentName(e.content,g),C=S.pushAttributed(_,t);if(i=i.withContentNameScopesList(C),T.whileHasBackReferences&&(i=i.withEndRule(T.getWhileWithResolvedBackReferences(e.content,g))),!v&&w.hasSameRuleAs(i)){i=i.pop(),a.produce(i,l),c=!0;return}}else if(B0(t,e,r,i,a,b.captures,g),a.produce(i,g[0].end),i=i.pop(),!v){i=i.safePop(),a.produce(i,l),c=!0;return}}g[0].end>n&&(n=g[0].end,r=!1)}}function lhe(t,e,r,n,i,a){let s=i.beginRuleCapturedEOL?0:-1;const o=[];for(let l=i;l;l=l.pop()){const c=l.getRule(t);c instanceof cb&&o.push({rule:c,stack:l})}for(let l=o.pop();l;l=o.pop()){const{ruleScanner:c,findOptions:u}=dhe(l.rule,t,l.stack.endRule,r,n===s),h=c.findNextMatchSync(e,n,u);if(h){if(h.ruleId!==bQ){i=l.stack.pop();break}h.captureIndices&&h.captureIndices.length&&(a.produce(l.stack,h.captureIndices[0].start),B0(t,e,r,l.stack,a,l.rule.whileCaptures,h.captureIndices),a.produce(l.stack,h.captureIndices[0].end),s=h.captureIndices[0].end,h.captureIndices[0].end>n&&(n=h.captureIndices[0].end,r=!1))}else{i=l.stack.pop();break}}return{stack:i,linePos:n,anchorPosition:s,isFirstLine:r}}function che(t,e,r,n,i,a){const s=uhe(t,e,r,n,i,a),o=t.getInjections();if(o.length===0)return s;const l=hhe(o,t,e,r,n,i,a);if(!l)return s;if(!s)return l;const c=s.captureIndices[0].start,u=l.captureIndices[0].start;return u=o)&&(o=O,l=w.captureIndices,c=w.ruleId,u=g.priority,o===i))break}return l?{priorityMatch:u===-1,captureIndices:l,matchedRuleId:c}:null}function _Q(t,e,r,n,i){return{ruleScanner:t.compileAG(e,r,n,i),findOptions:0}}function dhe(t,e,r,n,i){return{ruleScanner:t.compileWhileAG(e,r,n,i),findOptions:0}}function B0(t,e,r,n,i,a,s){if(a.length===0)return;const o=e.content,l=Math.min(a.length,s.length),c=[],u=s[0].end;for(let h=0;hu)break;for(;c.length>0&&c[c.length-1].endPos<=f.start;)i.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop();if(c.length>0?i.produceFromScopes(c[c.length-1].scopes,f.start):i.produce(n,f.start),d.retokenizeCapturedWithRuleId){const m=d.getName(o,s),v=n.contentNameScopesList.pushAttributed(m,t),b=d.getContentName(o,s),w=v.pushAttributed(b,t),O=n.push(d.retokenizeCapturedWithRuleId,f.start,-1,!1,null,v,w),S=t.createOnigString(o.substring(0,f.end));kQ(t,S,r&&f.start===0,f.start,O,i,!1,0),yQ(S);continue}const g=d.getName(o,s);if(g!==null){const v=(c.length>0?c[c.length-1].scopes:n.contentNameScopesList).pushAttributed(g,t);c.push(new fhe(v,f.end))}}for(;c.length>0;)i.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop()}var fhe=class{constructor(t,e){Me(this,"scopes");Me(this,"endPos");this.scopes=t,this.endPos=e}};function phe(t,e,r,n,i,a,s,o){return new mhe(t,e,r,n,i,a,s,o)}function JR(t,e,r,n,i){const a=ob(e,ub),s=wQ.getCompiledRuleId(r,n,i.repository);for(const o of a)t.push({debugSelector:e,matcher:o.matcher,ruleId:s,grammar:i,priority:o.priority})}function ub(t,e){if(e.length{for(let i=r;ir&&t.substr(0,r)===e&&t[r]==="."}var mhe=class{constructor(t,e,r,n,i,a,s,o){Me(this,"_rootId");Me(this,"_lastRuleId");Me(this,"_ruleId2desc");Me(this,"_includedGrammars");Me(this,"_grammarRepository");Me(this,"_grammar");Me(this,"_injections");Me(this,"_basicScopeAttributesProvider");Me(this,"_tokenTypeMatchers");if(this._rootScopeName=t,this.balancedBracketSelectors=a,this._onigLib=o,this._basicScopeAttributesProvider=new she(r,n),this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=s,this._grammar=eF(e,null),this._injections=null,this._tokenTypeMatchers=[],i)for(const l of Object.keys(i)){const c=ob(l,ub);for(const u of c)this._tokenTypeMatchers.push({matcher:u.matcher,type:i[l]})}}get themeProvider(){return this._grammarRepository}dispose(){for(const t of this._ruleId2desc)t&&t.dispose()}createOnigScanner(t){return this._onigLib.createOnigScanner(t)}createOnigString(t){return this._onigLib.createOnigString(t)}getMetadataForScope(t){return this._basicScopeAttributesProvider.getBasicScopeAttributes(t)}_collectInjections(){const t={lookup:i=>i===this._rootScopeName?this._grammar:this.getExternalGrammar(i),injections:i=>this._grammarRepository.injections(i)},e=[],r=this._rootScopeName,n=t.lookup(r);if(n){const i=n.injections;if(i)for(let s in i)JR(e,s,i[s],this,n);const a=this._grammarRepository.injections(r);a&&a.forEach(s=>{const o=this.getExternalGrammar(s);if(o){const l=o.injectionSelector;l&&JR(e,l,o,this,o)}})}return e.sort((i,a)=>i.priority-a.priority),e}getInjections(){return this._injections===null&&(this._injections=this._collectInjections()),this._injections}registerRule(t){const e=++this._lastRuleId,r=t(e);return this._ruleId2desc[e]=r,r}getRule(t){return this._ruleId2desc[t]}getExternalGrammar(t,e){if(this._includedGrammars[t])return this._includedGrammars[t];if(this._grammarRepository){const r=this._grammarRepository.lookup(t);if(r)return this._includedGrammars[t]=eF(r,e&&e.$base),this._includedGrammars[t]}}tokenizeLine(t,e,r=0){const n=this._tokenize(t,e,!1,r);return{tokens:n.lineTokens.getResult(n.ruleStack,n.lineLength),ruleStack:n.ruleStack,stoppedEarly:n.stoppedEarly}}tokenizeLine2(t,e,r=0){const n=this._tokenize(t,e,!0,r);return{tokens:n.lineTokens.getBinaryResult(n.ruleStack,n.lineLength),ruleStack:n.ruleStack,stoppedEarly:n.stoppedEarly}}_tokenize(t,e,r,n){this._rootId===-1&&(this._rootId=wQ.getCompiledRuleId(this._grammar.repository.$self,this,this._grammar.repository),this.getInjections());let i;if(!e||e===GC.NULL){i=!0;const c=this._basicScopeAttributesProvider.getDefaultAttributes(),u=this.themeProvider.getDefaults(),h=yf.set(0,c.languageId,c.tokenType,null,u.fontStyle,u.foregroundId,u.backgroundId),d=this.getRule(this._rootId).getName(null,null);let f;d?f=dg.createRootAndLookUpScopeName(d,h,this):f=dg.createRoot("unknown",h),e=new GC(null,this._rootId,-1,-1,!1,null,f,f)}else i=!1,e.reset();t=t+` +`;const a=this.createOnigString(t),s=a.content.length,o=new yhe(r,t,this._tokenTypeMatchers,this.balancedBracketSelectors),l=kQ(this,a,i,0,e,o,!0,n);return yQ(a),{lineLength:s,lineTokens:o,ruleStack:l.stack,stoppedEarly:l.stoppedEarly}}};function eF(t,e){return t=Lue(t),t.repository=t.repository||{},t.repository.$self={$vscodeTextmateLocation:t.$vscodeTextmateLocation,patterns:t.patterns,name:t.scopeName},t.repository.$base=e||t.repository.$self,t}var dg=class Ao{constructor(e,r,n){this.parent=e,this.scopePath=r,this.tokenAttributes=n}static fromExtension(e,r){let n=e,i=(e==null?void 0:e.scopePath)??null;for(const a of r)i=F_.push(i,a.scopeNames),n=new Ao(n,i,a.encodedTokenAttributes);return n}static createRoot(e,r){return new Ao(null,new F_(null,e),r)}static createRootAndLookUpScopeName(e,r,n){const i=n.getMetadataForScope(e),a=new F_(null,e),s=n.themeProvider.themeMatch(a),o=Ao.mergeAttributes(r,i,s);return new Ao(null,a,o)}get scopeName(){return this.scopePath.scopeName}toString(){return this.getScopeNames().join(" ")}equals(e){return Ao.equals(this,e)}static equals(e,r){do{if(e===r||!e&&!r)return!0;if(!e||!r||e.scopeName!==r.scopeName||e.tokenAttributes!==r.tokenAttributes)return!1;e=e.parent,r=r.parent}while(!0)}static mergeAttributes(e,r,n){let i=-1,a=0,s=0;return n!==null&&(i=n.fontStyle,a=n.foregroundId,s=n.backgroundId),yf.set(e,r.languageId,r.tokenType,null,i,a,s)}pushAttributed(e,r){if(e===null)return this;if(e.indexOf(" ")===-1)return Ao._pushAttributed(this,e,r);const n=e.split(/ /g);let i=this;for(const a of n)i=Ao._pushAttributed(i,a,r);return i}static _pushAttributed(e,r,n){const i=n.getMetadataForScope(r),a=e.scopePath.push(r),s=n.themeProvider.themeMatch(a),o=Ao.mergeAttributes(e.tokenAttributes,i,s);return new Ao(e,a,o)}getScopeNames(){return this.scopePath.getSegments()}getExtensionIfDefined(e){var i;const r=[];let n=this;for(;n&&n!==e;)r.push({encodedTokenAttributes:n.tokenAttributes,scopeNames:n.scopePath.getExtensionIfDefined(((i=n.parent)==null?void 0:i.scopePath)??null)}),n=n.parent;return n===e?r.reverse():void 0}},vs,GC=(vs=class{constructor(e,r,n,i,a,s,o,l){Me(this,"_stackElementBrand");Me(this,"_enterPos");Me(this,"_anchorPos");Me(this,"depth");this.parent=e,this.ruleId=r,this.beginRuleCapturedEOL=a,this.endRule=s,this.nameScopesList=o,this.contentNameScopesList=l,this.depth=this.parent?this.parent.depth+1:1,this._enterPos=n,this._anchorPos=i}equals(e){return e===null?!1:vs._equals(this,e)}static _equals(e,r){return e===r?!0:this._structuralEquals(e,r)?dg.equals(e.contentNameScopesList,r.contentNameScopesList):!1}static _structuralEquals(e,r){do{if(e===r||!e&&!r)return!0;if(!e||!r||e.depth!==r.depth||e.ruleId!==r.ruleId||e.endRule!==r.endRule)return!1;e=e.parent,r=r.parent}while(!0)}clone(){return this}static _reset(e){for(;e;)e._enterPos=-1,e._anchorPos=-1,e=e.parent}reset(){vs._reset(this)}pop(){return this.parent}safePop(){return this.parent?this.parent:this}push(e,r,n,i,a,s,o){return new vs(this,e,r,n,i,a,s,o)}getEnterPos(){return this._enterPos}getAnchorPos(){return this._anchorPos}getRule(e){return e.getRule(this.ruleId)}toString(){const e=[];return this._writeString(e,0),"["+e.join(",")+"]"}_writeString(e,r){var n,i;return this.parent&&(r=this.parent._writeString(e,r)),e[r++]=`(${this.ruleId}, ${(n=this.nameScopesList)==null?void 0:n.toString()}, ${(i=this.contentNameScopesList)==null?void 0:i.toString()})`,r}withContentNameScopesList(e){return this.contentNameScopesList===e?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,e)}withEndRule(e){return this.endRule===e?this:new vs(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,e,this.nameScopesList,this.contentNameScopesList)}hasSameRuleAs(e){let r=this;for(;r&&r._enterPos===e._enterPos;){if(r.ruleId===e.ruleId)return!0;r=r.parent}return!1}toStateStackFrame(){var e,r,n;return{ruleId:this.ruleId,beginRuleCapturedEOL:this.beginRuleCapturedEOL,endRule:this.endRule,nameScopesList:((r=this.nameScopesList)==null?void 0:r.getExtensionIfDefined(((e=this.parent)==null?void 0:e.nameScopesList)??null))??[],contentNameScopesList:((n=this.contentNameScopesList)==null?void 0:n.getExtensionIfDefined(this.nameScopesList))??[]}}static pushFrame(e,r){const n=dg.fromExtension((e==null?void 0:e.nameScopesList)??null,r.nameScopesList);return new vs(e,r.ruleId,r.enterPos??-1,r.anchorPos??-1,r.beginRuleCapturedEOL,r.endRule,n,dg.fromExtension(n,r.contentNameScopesList))}},Me(vs,"NULL",new vs(null,0,0,0,!1,null,null,null)),vs),xhe=class{constructor(t,e){Me(this,"balancedBracketScopes");Me(this,"unbalancedBracketScopes");Me(this,"allowAny",!1);this.balancedBracketScopes=t.flatMap(r=>r==="*"?(this.allowAny=!0,[]):ob(r,ub).map(n=>n.matcher)),this.unbalancedBracketScopes=e.flatMap(r=>ob(r,ub).map(n=>n.matcher))}get matchesAlways(){return this.allowAny&&this.unbalancedBracketScopes.length===0}get matchesNever(){return this.balancedBracketScopes.length===0&&!this.allowAny}match(t){for(const e of this.unbalancedBracketScopes)if(e(t))return!1;for(const e of this.balancedBracketScopes)if(e(t))return!0;return this.allowAny}},yhe=class{constructor(t,e,r,n){Me(this,"_emitBinaryTokens");Me(this,"_lineText");Me(this,"_tokens");Me(this,"_binaryTokens");Me(this,"_lastTokenEndIndex");Me(this,"_tokenTypeOverrides");this.balancedBracketSelectors=n,this._emitBinaryTokens=t,this._tokenTypeOverrides=r,this._lineText=null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}produce(t,e){this.produceFromScopes(t.contentNameScopesList,e)}produceFromScopes(t,e){var n;if(this._lastTokenEndIndex>=e)return;if(this._emitBinaryTokens){let i=(t==null?void 0:t.tokenAttributes)??0,a=!1;if((n=this.balancedBracketSelectors)!=null&&n.matchesAlways&&(a=!0),this._tokenTypeOverrides.length>0||this.balancedBracketSelectors&&!this.balancedBracketSelectors.matchesAlways&&!this.balancedBracketSelectors.matchesNever){const s=(t==null?void 0:t.getScopeNames())??[];for(const o of this._tokenTypeOverrides)o.matcher(s)&&(i=yf.set(i,0,o.type,null,-1,0,0));this.balancedBracketSelectors&&(a=this.balancedBracketSelectors.match(s))}if(a&&(i=yf.set(i,0,8,a,-1,0,0)),this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-1]===i){this._lastTokenEndIndex=e;return}this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(i),this._lastTokenEndIndex=e;return}const r=(t==null?void 0:t.getScopeNames())??[];this._tokens.push({startIndex:this._lastTokenEndIndex,endIndex:e,scopes:r}),this._lastTokenEndIndex=e}getResult(t,e){return this._tokens.length>0&&this._tokens[this._tokens.length-1].startIndex===e-1&&this._tokens.pop(),this._tokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(t,e),this._tokens[this._tokens.length-1].startIndex=0),this._tokens}getBinaryResult(t,e){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===e-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),this._binaryTokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(t,e),this._binaryTokens[this._binaryTokens.length-2]=0);const r=new Uint32Array(this._binaryTokens.length);for(let n=0,i=this._binaryTokens.length;n0;)s.Q.map(o=>this._loadSingleGrammar(o.scopeName)),s.processQueue();return this._grammarForScopeName(e,r,n,i,a)}_loadSingleGrammar(e){this._ensureGrammarCache.has(e)||(this._doLoadSingleGrammar(e),this._ensureGrammarCache.set(e,!0))}_doLoadSingleGrammar(e){const r=this._options.loadGrammar(e);if(r){const n=typeof this._options.getInjections=="function"?this._options.getInjections(e):void 0;this._syncRegistry.addGrammar(r,n)}}addGrammar(e,r=[],n=0,i=null){return this._syncRegistry.addGrammar(e,r),this._grammarForScopeName(e.scopeName,n,i)}_grammarForScopeName(e,r=0,n=null,i=null,a=null){return this._syncRegistry.grammarForScopeName(e,r,n,i,a)}},YC=GC.NULL;const whe=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"];let Zm=class{constructor(e,r,n){this.normal=r,this.property=e,n&&(this.space=n)}};Zm.prototype.normal={};Zm.prototype.property={};Zm.prototype.space=void 0;function SQ(t,e){const r={},n={};for(const i of t)Object.assign(r,i.property),Object.assign(n,i.normal);return new Zm(r,n,e)}function KC(t){return t.toLowerCase()}class Pa{constructor(e,r){this.attribute=r,this.property=e}}Pa.prototype.attribute="";Pa.prototype.booleanish=!1;Pa.prototype.boolean=!1;Pa.prototype.commaOrSpaceSeparated=!1;Pa.prototype.commaSeparated=!1;Pa.prototype.defined=!1;Pa.prototype.mustUseProperty=!1;Pa.prototype.number=!1;Pa.prototype.overloadedBoolean=!1;Pa.prototype.property="";Pa.prototype.spaceSeparated=!1;Pa.prototype.space=void 0;let Ohe=0;const sr=Eh(),Nn=Eh(),JC=Eh(),pt=Eh(),qr=Eh(),Qd=Eh(),Wa=Eh();function Eh(){return 2**++Ohe}const eE=Object.freeze(Object.defineProperty({__proto__:null,boolean:sr,booleanish:Nn,commaOrSpaceSeparated:Wa,commaSeparated:Qd,number:pt,overloadedBoolean:JC,spaceSeparated:qr},Symbol.toStringTag,{value:"Module"})),M_=Object.keys(eE);class dA extends Pa{constructor(e,r,n,i){let a=-1;if(super(e,r),tF(this,"space",i),typeof n=="number")for(;++a4&&r.slice(0,4)==="data"&&The.test(e)){if(e.charAt(4)==="-"){const a=e.slice(5).replace(rF,Dhe);n="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=e.slice(4);if(!rF.test(a)){let s=a.replace(She,Ehe);s.charAt(0)!=="-"&&(s="-"+s),e="data"+s}}i=dA}return new i(n,e)}function Ehe(t){return"-"+t.toLowerCase()}function Dhe(t){return t.charAt(1).toUpperCase()}const Ahe=SQ([TQ,khe,DQ,AQ,NQ],"html"),PQ=SQ([TQ,_he,DQ,AQ,NQ],"svg"),nF={}.hasOwnProperty;function Nhe(t,e){const r=e||{};function n(i,...a){let s=n.invalid;const o=n.handlers;if(i&&nF.call(i,t)){const l=String(i[t]);s=nF.call(o,l)?o[l]:n.unknown}if(s)return s.call(this,i,...a)}return n.handlers=r.handlers||{},n.invalid=r.invalid,n.unknown=r.unknown,n}const Phe=/["&'<>`]/g,Rhe=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Fhe=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,Lhe=/[|\\{}()[\]^$+*?.]/g,iF=new WeakMap;function Mhe(t,e){if(t=t.replace(e.subset?$he(e.subset):Phe,n),e.subset||e.escapeOnly)return t;return t.replace(Rhe,r).replace(Fhe,n);function r(i,a,s){return e.format((i.charCodeAt(0)-55296)*1024+i.charCodeAt(1)-56320+65536,s.charCodeAt(a+2),e)}function n(i,a,s){return e.format(i.charCodeAt(0),s.charCodeAt(a+1),e)}}function $he(t){let e=iF.get(t);return e||(e=Ihe(t),iF.set(t,e)),e}function Ihe(t){const e=[];let r=-1;for(;++r",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›",euro:"€"},zhe=["cent","copy","divide","gt","lt","not","para","times"],RQ={}.hasOwnProperty,tE={};let L1;for(L1 in $_)RQ.call($_,L1)&&(tE[$_[L1]]=L1);const Vhe=/[^\dA-Za-z]/;function qhe(t,e,r,n){const i=String.fromCharCode(t);if(RQ.call(tE,i)){const a=tE[i],s="&"+a;return r&&Whe.includes(a)&&!zhe.includes(a)&&(!n||e&&e!==61&&Vhe.test(String.fromCharCode(e)))?s:s+";"}return""}function Xhe(t,e,r){let n=Bhe(t,e,r.omitOptionalSemicolons),i;if((r.useNamedReferences||r.useShortestReferences)&&(i=qhe(t,e,r.omitOptionalSemicolons,r.attribute)),(r.useShortestReferences||!i)&&r.useShortestReferences){const a=Qhe(t,e,r.omitOptionalSemicolons);a.length|^->||--!>|"],Ghe=["<",">"];function Yhe(t,e,r,n){return n.settings.bogusComments?"":"";function i(a){return Wd(a,Object.assign({},n.settings.characterReferences,{subset:Ghe}))}}function Khe(t,e,r,n){return""}function aF(t,e){const r=String(t);if(typeof e!="string")throw new TypeError("Expected character");let n=0,i=r.indexOf(e);for(;i!==-1;)n++,i=r.indexOf(e,i+e.length);return n}function Jhe(t,e){const r=e||{};return(t[t.length-1]===""?[...t,""]:t).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}function ede(t){return t.join(" ").trim()}const tde=/[ \t\n\f\r]/g;function fA(t){return typeof t=="object"?t.type==="text"?sF(t.value):!1:sF(t)}function sF(t){return t.replace(tde,"")===""}const Yn=LQ(1),FQ=LQ(-1),rde=[];function LQ(t){return e;function e(r,n,i){const a=r?r.children:rde;let s=(n||0)+t,o=a[s];if(!i)for(;o&&fA(o);)s+=t,o=a[s];return o}}const nde={}.hasOwnProperty;function MQ(t){return e;function e(r,n,i){return nde.call(t,r.tagName)&&t[r.tagName](r,n,i)}}const pA=MQ({body:ade,caption:I_,colgroup:I_,dd:cde,dt:lde,head:I_,html:ide,li:ode,optgroup:ude,option:hde,p:sde,rp:oF,rt:oF,tbody:fde,td:lF,tfoot:pde,th:lF,thead:dde,tr:gde});function I_(t,e,r){const n=Yn(r,e,!0);return!n||n.type!=="comment"&&!(n.type==="text"&&fA(n.value.charAt(0)))}function ide(t,e,r){const n=Yn(r,e);return!n||n.type!=="comment"}function ade(t,e,r){const n=Yn(r,e);return!n||n.type!=="comment"}function sde(t,e,r){const n=Yn(r,e);return n?n.type==="element"&&(n.tagName==="address"||n.tagName==="article"||n.tagName==="aside"||n.tagName==="blockquote"||n.tagName==="details"||n.tagName==="div"||n.tagName==="dl"||n.tagName==="fieldset"||n.tagName==="figcaption"||n.tagName==="figure"||n.tagName==="footer"||n.tagName==="form"||n.tagName==="h1"||n.tagName==="h2"||n.tagName==="h3"||n.tagName==="h4"||n.tagName==="h5"||n.tagName==="h6"||n.tagName==="header"||n.tagName==="hgroup"||n.tagName==="hr"||n.tagName==="main"||n.tagName==="menu"||n.tagName==="nav"||n.tagName==="ol"||n.tagName==="p"||n.tagName==="pre"||n.tagName==="section"||n.tagName==="table"||n.tagName==="ul"):!r||!(r.type==="element"&&(r.tagName==="a"||r.tagName==="audio"||r.tagName==="del"||r.tagName==="ins"||r.tagName==="map"||r.tagName==="noscript"||r.tagName==="video"))}function ode(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="li"}function lde(t,e,r){const n=Yn(r,e);return!!(n&&n.type==="element"&&(n.tagName==="dt"||n.tagName==="dd"))}function cde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="dt"||n.tagName==="dd")}function oF(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="rp"||n.tagName==="rt")}function ude(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="optgroup"}function hde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="option"||n.tagName==="optgroup")}function dde(t,e,r){const n=Yn(r,e);return!!(n&&n.type==="element"&&(n.tagName==="tbody"||n.tagName==="tfoot"))}function fde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="tbody"||n.tagName==="tfoot")}function pde(t,e,r){return!Yn(r,e)}function gde(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&n.tagName==="tr"}function lF(t,e,r){const n=Yn(r,e);return!n||n.type==="element"&&(n.tagName==="td"||n.tagName==="th")}const mde=MQ({body:vde,colgroup:bde,head:yde,html:xde,tbody:wde});function xde(t){const e=Yn(t,-1);return!e||e.type!=="comment"}function yde(t){const e=new Set;for(const n of t.children)if(n.type==="element"&&(n.tagName==="base"||n.tagName==="title")){if(e.has(n.tagName))return!1;e.add(n.tagName)}const r=t.children[0];return!r||r.type==="element"}function vde(t){const e=Yn(t,-1,!0);return!e||e.type!=="comment"&&!(e.type==="text"&&fA(e.value.charAt(0)))&&!(e.type==="element"&&(e.tagName==="meta"||e.tagName==="link"||e.tagName==="script"||e.tagName==="style"||e.tagName==="template"))}function bde(t,e,r){const n=FQ(r,e),i=Yn(t,-1,!0);return r&&n&&n.type==="element"&&n.tagName==="colgroup"&&pA(n,r.children.indexOf(n),r)?!1:!!(i&&i.type==="element"&&i.tagName==="col")}function wde(t,e,r){const n=FQ(r,e),i=Yn(t,-1);return r&&n&&n.type==="element"&&(n.tagName==="thead"||n.tagName==="tbody")&&pA(n,r.children.indexOf(n),r)?!1:!!(i&&i.type==="element"&&i.tagName==="tr")}const M1={name:[[` \f\r &/=>`.split(""),` \f\r "&'/=>\``.split("")],[`\0 \f\r "&'/<=>`.split(""),`\0 @@ -597,11 +597,11 @@ Error generating stack: `+q.message+` \f\r &>`.split(""),`\0 \f\r "&'<=>\``.split("")],[`\0 \f\r "&'<=>\``.split(""),`\0 -\f\r "&'<=>\``.split("")]],single:[["&'".split(""),"\"&'`".split("")],["\0&'".split(""),"\0\"&'`".split("")]],double:[['"&'.split(""),"\"&'`".split("")],['\0"&'.split(""),"\0\"&'`".split("")]]};function wde(t,e,r,n){const i=n.schema,a=i.space==="svg"?!1:n.settings.omitOptionalTags;let s=i.space==="svg"?n.settings.closeEmptyElements:n.settings.voids.includes(t.tagName.toLowerCase());const o=[];let l;i.space==="html"&&t.tagName==="svg"&&(n.schema=NQ);const c=Ode(n,t.properties),u=n.all(i.space==="html"&&t.tagName==="template"?t.content:t);return n.schema=i,u&&(s=!1),(c||!a||!gde(t,e,r))&&(o.push("<",t.tagName,c?" "+c:""),s&&(i.space==="svg"||n.settings.closeSelfClosing)&&(l=c.charAt(c.length-1),(!n.settings.tightSelfClosing||l==="/"||l&&l!=='"'&&l!=="'")&&o.push(" "),o.push("/")),o.push(">")),o.push(u),!s&&(!a||!pA(t,e,r))&&o.push(""),o.join("")}function Ode(t,e){const r=[];let n=-1,i;if(e){for(i in e)if(e[i]!==null&&e[i]!==void 0){const a=kde(t,i,e[i]);a&&r.push(a)}}for(;++naF(r,t.alternative)&&(s=t.alternative),o=s+Wd(r,Object.assign({},t.settings.characterReferences,{subset:(s==="'"?M1.single:M1.double)[i][a],attribute:!0}))+s),l+(o&&"="+o))}const _de=["<","&"];function MQ(t,e,r,n){return r&&r.type==="element"&&(r.tagName==="script"||r.tagName==="style")?t.value:Wd(t.value,Object.assign({},n.settings.characterReferences,{subset:_de}))}function Sde(t,e,r,n){return n.settings.allowDangerousHtml?t.value:MQ(t,e,r,n)}function Tde(t,e,r,n){return n.all(t)}const Cde=Ahe("type",{invalid:Ede,unknown:Dde,handlers:{comment:Ghe,doctype:Yhe,element:wde,raw:Sde,root:Tde,text:MQ}});function Ede(t){throw new Error("Expected node, not `"+t+"`")}function Dde(t){const e=t;throw new Error("Cannot compile unknown node `"+e.type+"`")}const Ade={},Nde={},Pde=[];function Rde(t,e){const r=Ade,n=r.quote||'"',i=n==='"'?"'":'"';if(n!=='"'&&n!=="'")throw new Error("Invalid quote `"+n+"`, expected `'` or `\"`");return{one:Fde,all:Lde,settings:{omitOptionalTags:r.omitOptionalTags||!1,allowParseErrors:r.allowParseErrors||!1,allowDangerousCharacters:r.allowDangerousCharacters||!1,quoteSmart:r.quoteSmart||!1,preferUnquoted:r.preferUnquoted||!1,tightAttributes:r.tightAttributes||!1,upperDoctype:r.upperDoctype||!1,tightDoctype:r.tightDoctype||!1,bogusComments:r.bogusComments||!1,tightCommaSeparatedLists:r.tightCommaSeparatedLists||!1,tightSelfClosing:r.tightSelfClosing||!1,collapseEmptyAttributes:r.collapseEmptyAttributes||!1,allowDangerousHtml:r.allowDangerousHtml||!1,voids:r.voids||bhe,characterReferences:r.characterReferences||Nde,closeSelfClosing:r.closeSelfClosing||!1,closeEmptyElements:r.closeEmptyElements||!1},schema:r.space==="svg"?NQ:Dhe,quote:n,alternative:i}.one(Array.isArray(t)?{type:"root",children:t}:t,void 0,void 0)}function Fde(t,e,r){return Cde(t,e,r,this)}function Lde(t){const e=[],r=t&&t.children||Pde;let n=-1;for(;++nr&&n.push({...t,content:t.content.slice(r,i),offset:t.offset+r}),r=i;return rn-i);return r.length?t.map(n=>n.flatMap(i=>{const a=r.filter(s=>i.offsets-i.offset).sort((s,o)=>s-o);return a.length?$de(i,a):i})):t}async function BQ(t){return Promise.resolve(typeof t=="function"?t():t).then(e=>e.default||e)}function hb(t,e){const r=typeof t=="string"?{}:{...t.colorReplacements},n=typeof t=="string"?t:t.name;for(const[i,a]of Object.entries((e==null?void 0:e.colorReplacements)||{}))typeof a=="string"?r[i]=a:i===n&&Object.assign(r,a);return r}function Bu(t,e){return t&&((e==null?void 0:e[t==null?void 0:t.toLowerCase()])||t)}function UQ(t){const e={};return t.color&&(e.color=t.color),t.bgColor&&(e["background-color"]=t.bgColor),t.fontStyle&&(t.fontStyle&Ol.Italic&&(e["font-style"]="italic"),t.fontStyle&Ol.Bold&&(e["font-weight"]="bold"),t.fontStyle&Ol.Underline&&(e["text-decoration"]="underline")),e}function jde(t){return typeof t=="string"?t:Object.entries(t).map(([e,r])=>`${e}:${r}`).join(";")}function Bde(t){const e=Y2(t,!0).map(([i])=>i);function r(i){if(i===t.length)return{line:e.length-1,character:e[e.length-1].length};let a=i,s=0;for(const o of e){if(a[n,YC])),e)}getInternalStack(e=this.theme){return this._stacks[e]}get scopes(){return cF(this._stacks[this.theme])}getScopes(e=this.theme){return cF(this._stacks[e])}toJSON(){return{lang:this.lang,theme:this.theme,themes:this.themes,scopes:this.scopes}}}function cF(t){const e=[],r=new Set;function n(i){var s;if(r.has(i))return;r.add(i);const a=(s=i==null?void 0:i.nameScopesList)==null?void 0:s.scopeName;a&&e.push(a),i.parent&&n(i.parent)}return n(t),e}function Ude(t,e){if(!(t instanceof Yf))throw new ea("Invalid grammar state");return t.getInternalStack(e)}function Qde(){const t=new WeakMap;function e(r){if(!t.has(r.meta)){let n=function(s){if(typeof s=="number"){if(s<0||s>r.source.length)throw new ea(`Invalid decoration offset: ${s}. Code length: ${r.source.length}`);return{...i.indexToPos(s),offset:s}}else{const o=i.lines[s.line];if(o===void 0)throw new ea(`Invalid decoration position ${JSON.stringify(s)}. Lines length: ${i.lines.length}`);if(s.character<0||s.character>o.length)throw new ea(`Invalid decoration position ${JSON.stringify(s)}. Line ${s.line} length: ${o.length}`);return{...s,offset:i.posToIndex(s.line,s.character)}}};const i=Bde(r.source),a=(r.options.decorations||[]).map(s=>({...s,start:n(s.start),end:n(s.end)}));Wde(a),t.set(r.meta,{decorations:a,converter:i,source:r.source})}return t.get(r.meta)}return{name:"shiki:decorations",tokens(r){var s;if(!((s=this.options.decorations)!=null&&s.length))return;const i=e(this).decorations.flatMap(o=>[o.start.offset,o.end.offset]);return Ide(r,i)},code(r){var u;if(!((u=this.options.decorations)!=null&&u.length))return;const n=e(this),i=Array.from(r.children).filter(h=>h.type==="element"&&h.tagName==="span");if(i.length!==n.converter.lines.length)throw new ea(`Number of lines in code element (${i.length}) does not match the number of lines in the source (${n.converter.lines.length}). Failed to apply decorations.`);function a(h,d,f,g){const m=i[h];let v="",b=-1,w=-1;if(d===0&&(b=0),f===0&&(w=0),f===Number.POSITIVE_INFINITY&&(w=m.children.length),b===-1||w===-1)for(let S=0;Sb);return h.tagName=d.tagName||"span",h.properties={...h.properties,...g,class:h.properties.class},(v=d.properties)!=null&&v.class&&jQ(h,d.properties.class),h=m(h,f)||h,h}const l=[],c=n.decorations.sort((h,d)=>d.start.offset-h.start.offset);for(const h of c){const{start:d,end:f}=h;if(d.line===f.line)a(d.line,d.character,f.character,h);else if(d.lines(g,h));a(f.line,0,f.character,h)}}l.forEach(h=>h())}}}function Wde(t){for(let e=0;er.end.offset)throw new ea(`Invalid decoration range: ${JSON.stringify(r.start)} - ${JSON.stringify(r.end)}`);for(let n=e+1;nNumber.parseInt(s));a.length===3&&!a.some(s=>Number.isNaN(s))&&(i={type:"rgb",rgb:a})}else if(n==="5"){const a=Number.parseInt(t[e+r]);Number.isNaN(a)||(i={type:"table",index:Number(a)})}return[r,i]}function qde(t){const e=[];for(let r=0;r=90&&i<=97?e.push({type:"setForegroundColor",value:{type:"named",name:Uu[i-90+8]}}):i>=100&&i<=107&&e.push({type:"setBackgroundColor",value:{type:"named",name:Uu[i-100+8]}})}return e}function Xde(){let t=null,e=null,r=new Set;return{parse(n){const i=[];let a=0;do{const s=Vde(n,a),o=s.sequence?n.substring(a,s.startPosition):n.substring(a);if(o.length>0&&i.push({value:o,foreground:t,background:e,decorations:new Set(r)}),s.sequence){const l=qde(s.sequence);for(const c of l)c.type==="resetAll"?(t=null,e=null,r.clear()):c.type==="resetForegroundColor"?t=null:c.type==="resetBackgroundColor"?e=null:c.type==="resetDecoration"&&r.delete(c.value);for(const c of l)c.type==="setForegroundColor"?t=c.value:c.type==="setBackgroundColor"?e=c.value:c.type==="setDecoration"&&r.add(c.value)}a=s.position}while(aMath.max(0,Math.min(l,255)).toString(16).padStart(2,"0")).join("")}`}let n;function i(){if(n)return n;n=[];for(let c=0;c{var l;return[o,(l=t.colors)==null?void 0:l[`terminal.ansi${o[0].toUpperCase()}${o.substring(1)}`]]}))),s=Xde();return i.map(o=>s.parse(o[0]).map(l=>{let c,u;l.decorations.has("reverse")?(c=l.background?a.value(l.background):t.bg,u=l.foreground?a.value(l.foreground):t.fg):(c=l.foreground?a.value(l.foreground):t.fg,u=l.background?a.value(l.background):void 0),c=Bu(c,n),u=Bu(u,n),l.decorations.has("dim")&&(c=Yde(c));let h=Ol.None;return l.decorations.has("bold")&&(h|=Ol.Bold),l.decorations.has("italic")&&(h|=Ol.Italic),l.decorations.has("underline")&&(h|=Ol.Underline),{content:l.value,offset:o[1],color:c,bgColor:u,fontStyle:h}}))}function Yde(t){const e=t.match(/#([0-9a-f]{3})([0-9a-f]{3})?([0-9a-f]{2})?/);if(e)if(e[3]){const n=Math.round(Number.parseInt(e[3],16)/2).toString(16).padStart(2,"0");return`#${e[1]}${e[2]}${n}`}else return e[2]?`#${e[1]}${e[2]}80`:`#${Array.from(e[1]).map(n=>`${n}${n}`).join("")}80`;const r=t.match(/var\((--[\w-]+-ansi-[\w-]+)\)/);return r?`var(${r[1]}-dim)`:t}function xA(t,e,r={}){const{lang:n="text",theme:i=t.getLoadedThemes()[0]}=r;if(gA(n)||mA(i))return Y2(e).map(l=>[{content:l[0],offset:l[1]}]);const{theme:a,colorMap:s}=t.setTheme(i);if(n==="ansi")return Gde(a,e,r);const o=t.getLanguage(n);if(r.grammarState){if(r.grammarState.lang!==o.name)throw new Al(`Grammar state language "${r.grammarState.lang}" does not match highlight language "${o.name}"`);if(!r.grammarState.themes.includes(a.name))throw new Al(`Grammar state themes "${r.grammarState.themes}" do not contain highlight theme "${a.name}"`)}return Jde(e,o,a,s,r)}function Kde(...t){if(t.length===2)return Xg(t[1]);const[e,r,n={}]=t,{lang:i="text",theme:a=e.getLoadedThemes()[0]}=n;if(gA(i)||mA(a))throw new Al("Plain language does not have grammar state");if(i==="ansi")throw new Al("ANSI language does not have grammar state");const{theme:s,colorMap:o}=e.setTheme(a),l=e.getLanguage(i);return new Yf(fb(r,l,s,o,n).stateStack,l.name,s.name)}function Jde(t,e,r,n,i){const a=fb(t,e,r,n,i),s=new Yf(fb(t,e,r,n,i).stateStack,e.name,r.name);return K2(a.tokens,s),a.tokens}function fb(t,e,r,n,i){const a=hb(r,i),{tokenizeMaxLineLength:s=0,tokenizeTimeLimit:o=500}=i,l=Y2(t);let c=i.grammarState?Ude(i.grammarState,r.name)??YC:i.grammarContextCode!=null?fb(i.grammarContextCode,e,r,n,{...i,grammarState:void 0,grammarContextCode:void 0}).stateStack:YC,u=[];const h=[];for(let d=0,f=l.length;d0&&g.length>=s){u=[],h.push([{content:g,offset:m,color:"",fontStyle:0}]);continue}let v,b,w;i.includeExplanation&&(v=e.tokenizeLine(g,c),b=v.tokens,w=0);const O=e.tokenizeLine2(g,c,o),S=O.tokens.length/2;for(let T=0;Tj.trim());break;case"object":V=P.scope;break;default:continue}N.push({settings:P,selectors:V.map(j=>j.split(/ /))})}M.explanation=[];let B=0;for(;_+B({scopeName:e}))}function tfe(t,e){const r=[];for(let n=0,i=e.length;n=0&&i>=0;)hF(t[n],r[i])&&(n-=1),i-=1;return n===-1}function nfe(t,e,r){const n=[];for(const{selectors:i,settings:a}of t)for(const s of i)if(rfe(s,e,r)){n.push(a);break}return n}function zQ(t,e,r){const n=Object.entries(r.themes).filter(l=>l[1]).map(l=>({color:l[0],theme:l[1]})),i=n.map(l=>{const c=xA(t,e,{...r,theme:l.theme}),u=Xg(c),h=typeof l.theme=="string"?l.theme:l.theme.name;return{tokens:c,state:u,theme:h}}),a=ife(...i.map(l=>l.tokens)),s=a[0].map((l,c)=>l.map((u,h)=>{const d={content:u.content,variants:{},offset:u.offset};return"includeExplanation"in r&&r.includeExplanation&&(d.explanation=u.explanation),a.forEach((f,g)=>{const{content:m,explanation:v,offset:b,...w}=f[c][h];d.variants[n[g].color]=w}),d})),o=i[0].state?new Yf(Object.fromEntries(i.map(l=>{var c;return[l.theme,(c=l.state)==null?void 0:c.getInternalStack(l.theme)]})),i[0].state.lang):void 0;return o&&K2(s,o),s}function ife(...t){const e=t.map(()=>[]),r=t.length;for(let n=0;nl[n]),a=e.map(()=>[]);e.forEach((l,c)=>l.push(a[c]));const s=i.map(()=>0),o=i.map(l=>l[0]);for(;o.every(l=>l);){const l=Math.min(...o.map(c=>c.content.length));for(let c=0;cv[1]).map(v=>({color:v[0],theme:v[1]})).sort((v,b)=>v.color===c?-1:b.color===c?1:0);if(h.length===0)throw new Al("`themes` option must not be empty");const d=zQ(t,e,r);if(l=Xg(d),c&&!h.find(v=>v.color===c))throw new Al(`\`themes\` option must contain the defaultColor key \`${c}\``);const f=h.map(v=>t.getTheme(v.theme)),g=h.map(v=>v.color);a=d.map(v=>v.map(b=>afe(b,g,u,c))),l&&K2(a,l);const m=h.map(v=>hb(v.theme,r));i=h.map((v,b)=>(b===0&&c?"":`${u+v.color}:`)+(Bu(f[b].fg,m[b])||"inherit")).join(";"),n=h.map((v,b)=>(b===0&&c?"":`${u+v.color}-bg:`)+(Bu(f[b].bg,m[b])||"inherit")).join(";"),s=`shiki-themes ${f.map(v=>v.name).join(" ")}`,o=c?void 0:[i,n].join(";")}else if("theme"in r){const c=hb(r.theme,r);a=xA(t,e,r);const u=t.getTheme(r.theme);n=Bu(u.bg,c),i=Bu(u.fg,c),s=u.name,l=Xg(a)}else throw new Al("Invalid options, either `theme` or `themes` must be provided");return{tokens:a,fg:i,bg:n,themeName:s,rootStyle:o,grammarState:l}}function afe(t,e,r,n){const i={content:t.content,explanation:t.explanation,offset:t.offset},a=e.map(l=>UQ(t.variants[l])),s=new Set(a.flatMap(l=>Object.keys(l))),o={};return a.forEach((l,c)=>{for(const u of s){const h=l[u]||"inherit";if(c===0&&n)o[u]=h;else{const d=u==="color"?"":u==="background-color"?"-bg":`-${u}`,f=r+e[c]+(u==="color"?"":d);o[f]=h}}}),i.htmlStyle=o,i}function gb(t,e,r,n={meta:{},options:r,codeToHast:(i,a)=>gb(t,i,a),codeToTokens:(i,a)=>pb(t,i,a)}){var f,g;let i=e;for(const m of db(r))i=((f=m.preprocess)==null?void 0:f.call(n,i,r))||i;let{tokens:a,fg:s,bg:o,themeName:l,rootStyle:c,grammarState:u}=pb(t,i,r);const{mergeWhitespaces:h=!0}=r;h===!0?a=ofe(a):h==="never"&&(a=lfe(a));const d={...n,get source(){return i}};for(const m of db(r))a=((g=m.tokens)==null?void 0:g.call(d,a))||a;return sfe(a,{...r,fg:s,bg:o,themeName:l,rootStyle:c},d,u)}function sfe(t,e,r,n=Xg(t)){var g,m,v;const i=db(e),a=[],s={type:"root",children:[]},{structure:o="classic",tabindex:l="0"}=e;let c={type:"element",tagName:"pre",properties:{class:`shiki ${e.themeName||""}`,style:e.rootStyle||`background-color:${e.bg};color:${e.fg}`,...l!==!1&&l!=null?{tabindex:l.toString()}:{},...Object.fromEntries(Array.from(Object.entries(e.meta||{})).filter(([b])=>!b.startsWith("_")))},children:[]},u={type:"element",tagName:"code",properties:{},children:a};const h=[],d={...r,structure:o,addClassToHast:jQ,get source(){return r.source},get tokens(){return t},get options(){return e},get root(){return s},get pre(){return c},get code(){return u},get lines(){return h}};if(t.forEach((b,w)=>{var T,_;w&&(o==="inline"?s.children.push({type:"element",tagName:"br",properties:{},children:[]}):o==="classic"&&a.push({type:"text",value:` -`}));let O={type:"element",tagName:"span",properties:{class:"line"},children:[]},S=0;for(const C of b){let D={type:"element",tagName:"span",properties:{...C.htmlAttrs},children:[{type:"text",value:C.content}]};C.htmlStyle;const A=jde(C.htmlStyle||UQ(C));A&&(D.properties.style=A);for(const I of i)D=((T=I==null?void 0:I.span)==null?void 0:T.call(d,D,w+1,S,O,C))||D;o==="inline"?s.children.push(D):o==="classic"&&O.children.push(D),S+=C.content.length}if(o==="classic"){for(const C of i)O=((_=C==null?void 0:C.line)==null?void 0:_.call(d,O,w+1))||O;h.push(O),a.push(O)}}),o==="classic"){for(const b of i)u=((g=b==null?void 0:b.code)==null?void 0:g.call(d,u))||u;c.children.push(u);for(const b of i)c=((m=b==null?void 0:b.pre)==null?void 0:m.call(d,c))||c;s.children.push(c)}let f=s;for(const b of i)f=((v=b==null?void 0:b.root)==null?void 0:v.call(d,f))||f;return n&&K2(f,n),f}function ofe(t){return t.map(e=>{const r=[];let n="",i=0;return e.forEach((a,s)=>{const l=!(a.fontStyle&&a.fontStyle&Ol.Underline);l&&a.content.match(/^\s+$/)&&e[s+1]?(i||(i=a.offset),n+=a.content):n?(l?r.push({...a,offset:i,content:n+a.content}):r.push({content:n,offset:i},a),i=0,n=""):r.push(a)}),r})}function lfe(t){return t.map(e=>e.flatMap(r=>{if(r.content.match(/^\s+$/))return r;const n=r.content.match(/^(\s*)(.*?)(\s*)$/);if(!n)return r;const[,i,a,s]=n;if(!i&&!s)return r;const o=[{...r,offset:r.offset+i.length,content:a}];return i&&o.unshift({content:i,offset:r.offset}),s&&o.push({content:s,offset:r.offset+i.length+a.length}),o}))}function cfe(t,e,r){var a;const n={meta:{},options:r,codeToHast:(s,o)=>gb(t,s,o),codeToTokens:(s,o)=>pb(t,s,o)};let i=Rde(gb(t,e,r,n));for(const s of db(r))i=((a=s.postprocess)==null?void 0:a.call(n,i,r))||i;return i}const dF={light:"#333333",dark:"#bbbbbb"},fF={light:"#fffffe",dark:"#1e1e1e"},pF="__shiki_resolved";function yA(t){var o,l,c,u,h;if(t!=null&&t[pF])return t;const e={...t};e.tokenColors&&!e.settings&&(e.settings=e.tokenColors,delete e.tokenColors),e.type||(e.type="dark"),e.colorReplacements={...e.colorReplacements},e.settings||(e.settings=[]);let{bg:r,fg:n}=e;if(!r||!n){const d=e.settings?e.settings.find(f=>!f.name&&!f.scope):void 0;(o=d==null?void 0:d.settings)!=null&&o.foreground&&(n=d.settings.foreground),(l=d==null?void 0:d.settings)!=null&&l.background&&(r=d.settings.background),!n&&((c=e==null?void 0:e.colors)!=null&&c["editor.foreground"])&&(n=e.colors["editor.foreground"]),!r&&((u=e==null?void 0:e.colors)!=null&&u["editor.background"])&&(r=e.colors["editor.background"]),n||(n=e.type==="light"?dF.light:dF.dark),r||(r=e.type==="light"?fF.light:fF.dark),e.fg=n,e.bg=r}e.settings[0]&&e.settings[0].settings&&!e.settings[0].scope||e.settings.unshift({settings:{foreground:e.fg,background:e.bg}});let i=0;const a=new Map;function s(d){var g;if(a.has(d))return a.get(d);i+=1;const f=`#${i.toString(16).padStart(8,"0").toLowerCase()}`;return(g=e.colorReplacements)!=null&&g[`#${f}`]?s(d):(a.set(d,f),f)}e.settings=e.settings.map(d=>{var v,b;const f=((v=d.settings)==null?void 0:v.foreground)&&!d.settings.foreground.startsWith("#"),g=((b=d.settings)==null?void 0:b.background)&&!d.settings.background.startsWith("#");if(!f&&!g)return d;const m={...d,settings:{...d.settings}};if(f){const w=s(d.settings.foreground);e.colorReplacements[w]=d.settings.foreground,m.settings.foreground=w}if(g){const w=s(d.settings.background);e.colorReplacements[w]=d.settings.background,m.settings.background=w}return m});for(const d of Object.keys(e.colors||{}))if((d==="editor.foreground"||d==="editor.background"||d.startsWith("terminal.ansi"))&&!((h=e.colors[d])!=null&&h.startsWith("#"))){const f=s(e.colors[d]);e.colorReplacements[f]=e.colors[d],e.colors[d]=f}return Object.defineProperty(e,pF,{enumerable:!1,writable:!1,value:!0}),e}async function VQ(t){return Array.from(new Set((await Promise.all(t.filter(e=>!$Q(e)).map(async e=>await BQ(e).then(r=>Array.isArray(r)?r:[r])))).flat()))}async function qQ(t){return(await Promise.all(t.map(async r=>IQ(r)?null:yA(await BQ(r))))).filter(r=>!!r)}class ufe extends vhe{constructor(r,n,i,a={}){super(r);Me(this,"_resolvedThemes",new Map);Me(this,"_resolvedGrammars",new Map);Me(this,"_langMap",new Map);Me(this,"_langGraph",new Map);Me(this,"_textmateThemeCache",new WeakMap);Me(this,"_loadedThemesCache",null);Me(this,"_loadedLanguagesCache",null);this._resolver=r,this._themes=n,this._langs=i,this._alias=a,this._themes.map(s=>this.loadTheme(s)),this.loadLanguages(this._langs)}getTheme(r){return typeof r=="string"?this._resolvedThemes.get(r):this.loadTheme(r)}loadTheme(r){const n=yA(r);return n.name&&(this._resolvedThemes.set(n.name,n),this._loadedThemesCache=null),n}getLoadedThemes(){return this._loadedThemesCache||(this._loadedThemesCache=[...this._resolvedThemes.keys()]),this._loadedThemesCache}setTheme(r){let n=this._textmateThemeCache.get(r);n||(n=sb.createFromRawTheme(r),this._textmateThemeCache.set(r,n)),this._syncRegistry.setTheme(n)}getGrammar(r){if(this._alias[r]){const n=new Set([r]);for(;this._alias[r];){if(r=this._alias[r],n.has(r))throw new ea(`Circular alias \`${Array.from(n).join(" -> ")} -> ${r}\``);n.add(r)}}return this._resolvedGrammars.get(r)}loadLanguage(r){var s,o,l,c;if(this.getGrammar(r.name))return;const n=new Set([...this._langMap.values()].filter(u=>{var h;return(h=u.embeddedLangsLazy)==null?void 0:h.includes(r.name)}));this._resolver.addLanguage(r);const i={balancedBracketSelectors:r.balancedBracketSelectors||["*"],unbalancedBracketSelectors:r.unbalancedBracketSelectors||[]};this._syncRegistry._rawGrammars.set(r.scopeName,r);const a=this.loadGrammarWithConfiguration(r.scopeName,1,i);if(a.name=r.name,this._resolvedGrammars.set(r.name,a),r.aliases&&r.aliases.forEach(u=>{this._alias[u]=r.name}),this._loadedLanguagesCache=null,n.size)for(const u of n)this._resolvedGrammars.delete(u.name),this._loadedLanguagesCache=null,(o=(s=this._syncRegistry)==null?void 0:s._injectionGrammars)==null||o.delete(u.scopeName),(c=(l=this._syncRegistry)==null?void 0:l._grammars)==null||c.delete(u.scopeName),this.loadLanguage(this._langMap.get(u.name))}dispose(){super.dispose(),this._resolvedThemes.clear(),this._resolvedGrammars.clear(),this._langMap.clear(),this._langGraph.clear(),this._loadedThemesCache=null}loadLanguages(r){for(const a of r)this.resolveEmbeddedLanguages(a);const n=Array.from(this._langGraph.entries()),i=n.filter(([a,s])=>!s);if(i.length){const a=n.filter(([s,o])=>{var l;return o&&((l=o.embeddedLangs)==null?void 0:l.some(c=>i.map(([u])=>u).includes(c)))}).filter(s=>!i.includes(s));throw new ea(`Missing languages ${i.map(([s])=>`\`${s}\``).join(", ")}, required by ${a.map(([s])=>`\`${s}\``).join(", ")}`)}for(const[a,s]of n)this._resolver.addLanguage(s);for(const[a,s]of n)this.loadLanguage(s)}getLoadedLanguages(){return this._loadedLanguagesCache||(this._loadedLanguagesCache=[...new Set([...this._resolvedGrammars.keys(),...Object.keys(this._alias)])]),this._loadedLanguagesCache}resolveEmbeddedLanguages(r){if(this._langMap.set(r.name,r),this._langGraph.set(r.name,r),r.embeddedLangs)for(const n of r.embeddedLangs)this._langGraph.set(n,this._langMap.get(n))}}class hfe{constructor(e,r){Me(this,"_langs",new Map);Me(this,"_scopeToLang",new Map);Me(this,"_injections",new Map);Me(this,"_onigLib");this._onigLib={createOnigScanner:n=>e.createScanner(n),createOnigString:n=>e.createString(n)},r.forEach(n=>this.addLanguage(n))}get onigLib(){return this._onigLib}getLangRegistration(e){return this._langs.get(e)}loadGrammar(e){return this._scopeToLang.get(e)}addLanguage(e){this._langs.set(e.name,e),e.aliases&&e.aliases.forEach(r=>{this._langs.set(r,e)}),this._scopeToLang.set(e.scopeName,e),e.injectTo&&e.injectTo.forEach(r=>{this._injections.get(r)||this._injections.set(r,[]),this._injections.get(r).push(e.scopeName)})}getInjections(e){const r=e.split(".");let n=[];for(let i=1;i<=r.length;i++){const a=r.slice(0,i).join(".");n=[...n,...this._injections.get(a)||[]]}return n}}let Yp=0;function dfe(t){Yp+=1,t.warnings!==!1&&Yp>=10&&Yp%10===0&&console.warn(`[Shiki] ${Yp} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \`highlighter.dispose()\` to release unused instances.`);let e=!1;if(!t.engine)throw new ea("`engine` option is required for synchronous mode");const r=(t.langs||[]).flat(1),n=(t.themes||[]).flat(1).map(yA),i=new hfe(t.engine,r),a=new ufe(i,n,r,t.langAlias);let s;function o(w){v();const O=a.getGrammar(typeof w=="string"?w:w.name);if(!O)throw new ea(`Language \`${w}\` not found, you may need to load it first`);return O}function l(w){if(w==="none")return{bg:"",fg:"",name:"none",settings:[],type:"dark"};v();const O=a.getTheme(w);if(!O)throw new ea(`Theme \`${w}\` not found, you may need to load it first`);return O}function c(w){v();const O=l(w);s!==w&&(a.setTheme(O),s=w);const S=a.getColorMap();return{theme:O,colorMap:S}}function u(){return v(),a.getLoadedThemes()}function h(){return v(),a.getLoadedLanguages()}function d(...w){v(),a.loadLanguages(w.flat(1))}async function f(...w){return d(await VQ(w))}function g(...w){v();for(const O of w.flat(1))a.loadTheme(O)}async function m(...w){return v(),g(await qQ(w))}function v(){if(e)throw new ea("Shiki instance has been disposed")}function b(){e||(e=!0,a.dispose(),Yp-=1)}return{setTheme:c,getTheme:l,getLanguage:o,getLoadedThemes:u,getLoadedLanguages:h,loadLanguage:f,loadLanguageSync:d,loadTheme:m,loadThemeSync:g,dispose:b,[Symbol.dispose]:b}}async function ffe(t={}){t.loadWasm;const[e,r,n]=await Promise.all([qQ(t.themes||[]),VQ(t.langs||[]),t.engine||lQ(t.loadWasm||Rue())]);return dfe({...t,themes:e,langs:r,engine:n})}async function pfe(t={}){const e=await ffe(t);return{getLastGrammarState:(...r)=>Kde(e,...r),codeToTokensBase:(r,n)=>xA(e,r,n),codeToTokensWithThemes:(r,n)=>zQ(e,r,n),codeToTokens:(r,n)=>pb(e,r,n),codeToHast:(r,n)=>gb(e,r,n),codeToHtml:(r,n)=>cfe(e,r,n),...e,getInternalContext:()=>e}}function gfe(t,e,r){let n,i,a;{const o=t;n=o.langs,i=o.themes,a=o.engine}async function s(o){function l(f){if(typeof f=="string"){if($Q(f))return[];const g=n[f];if(!g)throw new Al(`Language \`${f}\` is not included in this bundle. You may want to load it from external source.`);return g}return f}function c(f){if(IQ(f))return"none";if(typeof f=="string"){const g=i[f];if(!g)throw new Al(`Theme \`${f}\` is not included in this bundle. You may want to load it from external source.`);return g}return f}const u=(o.themes??[]).map(f=>c(f)),h=(o.langs??[]).map(f=>l(f)),d=await pfe({engine:o.engine??a(),...o,themes:u,langs:h});return{...d,loadLanguage(...f){return d.loadLanguage(...f.map(l))},loadTheme(...f){return d.loadTheme(...f.map(c))}}}return s}function mfe(t){let e;async function r(n={}){if(e){const i=await e;return await Promise.all([i.loadTheme(...n.themes||[]),i.loadLanguage(...n.langs||[])]),i}else return e=t({...n,themes:n.themes||[],langs:n.langs||[]}),e}return r}function xfe(t){const e=mfe(t);return{getSingletonHighlighter(r){return e(r)},async codeToHtml(r,n){return(await e({langs:[n.lang],themes:"theme"in n?[n.theme]:Object.values(n.themes)})).codeToHtml(r,n)},async codeToHast(r,n){return(await e({langs:[n.lang],themes:"theme"in n?[n.theme]:Object.values(n.themes)})).codeToHast(r,n)},async codeToTokens(r,n){return(await e({langs:[n.lang],themes:"theme"in n?[n.theme]:Object.values(n.themes)})).codeToTokens(r,n)},async codeToTokensBase(r,n){return(await e({langs:[n.lang],themes:[n.theme]})).codeToTokensBase(r,n)},async codeToTokensWithThemes(r,n){return(await e({langs:[n.lang],themes:Object.values(n.themes).filter(Boolean)})).codeToTokensWithThemes(r,n)},async getLastGrammarState(r,n){return(await e({langs:[n.lang],themes:[n.theme]})).getLastGrammarState(r,n)}}}const yfe=gfe({langs:fue,themes:gue,engine:()=>lQ(fe(()=>import("./wasm-CG6Dc4jp.js"),[]))}),{codeToHtml:XQ}=xfe(yfe),gF={jsx:"react",tsx:"react",vue:"react",html:"html",htm:"html",svg:"svg",mermaid:"mermaid",mmd:"mermaid",md:"markdown",markdown:"markdown",pdf:"pdf",png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",mp4:"video",webm:"video",mov:"video",docx:"docx",xlsx:"xlsx",pptx:"pptx"},mF={"text/html":"html","image/svg+xml":"svg","text/markdown":"markdown","application/pdf":"pdf","image/png":"image","image/jpeg":"image","image/gif":"image","image/webp":"image","video/mp4":"video","video/webm":"video","video/quicktime":"video","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx"},ZQ={react:{canPreview:!0,label:"React Component",icon:"⚛️"},html:{canPreview:!0,label:"HTML Preview",icon:"🌐"},svg:{canPreview:!0,label:"SVG Preview",icon:"🎨"},mermaid:{canPreview:!0,label:"Mermaid Diagram",icon:"📊"},markdown:{canPreview:!0,label:"Markdown Preview",icon:"📝"},pdf:{canPreview:!0,label:"PDF Document",icon:"📄"},image:{canPreview:!0,label:"Image",icon:"🖼️"},video:{canPreview:!0,label:"Video",icon:"🎬"},docx:{canPreview:!0,label:"Word Document",icon:"📘"},xlsx:{canPreview:!0,label:"Excel Spreadsheet",icon:"📊"},pptx:{canPreview:!0,label:"PowerPoint",icon:"📽️"},code:{canPreview:!1,label:"Source Code",icon:"💻"}};function vfe(t){const e=t.split(".");return e.length>1?e.pop().toLowerCase():""}function J2(t,e,r){const n=vfe(t);if(n&&gF[n])return gF[n];if(e&&mF[e])return mF[e];if(r){const i=r.trim();if(i.startsWith("")||i.startsWith("]*rel=["']stylesheet["'][^>]*href=["']([^"']+)["'][^>]*\/?>/gi,(n,i)=>{const a=i.split("/").pop()||i,s=e[a]||e[i];return s&&!s.startsWith("data:")?``:n}),r=r.replace(/]*href=["']([^"']+)["'][^>]*rel=["']stylesheet["'][^>]*\/?>/gi,(n,i)=>{const a=i.split("/").pop()||i,s=e[a]||e[i];return s&&!s.startsWith("data:")?``:n}),r=r.replace(/]*src=["']([^"']+)["'][^>]*><\/script>/gi,(n,i)=>{const a=i.split("/").pop()||i,s=e[a]||e[i];return s&&!s.startsWith("data:")?` -> \n result = result.replace(\n /]*src=[\"']([^\"']+)[\"'][^>]*><\\/script>/gi,\n (match, src) => {\n const fileName = src.split('/').pop() || src;\n const jsContent = relatedFiles[fileName] || relatedFiles[src];\n if (jsContent && !jsContent.startsWith('data:')) {\n return ``;\n }\n return match; // Keep original if file not found\n }\n );\n\n // Inline images: -> \n result = result.replace(\n /]*)src=[\"']([^\"']+)[\"']([^>]*)>/gi,\n (match, before, src, after) => {\n // Skip if already a data URL or external URL\n if (src.startsWith('data:') || src.startsWith('http://') || src.startsWith('https://')) {\n return match;\n }\n const fileName = src.split('/').pop() || src;\n const imageDataUrl = relatedFiles[src] || relatedFiles[fileName] || relatedFiles[`./${src}`];\n if (imageDataUrl && imageDataUrl.startsWith('data:')) {\n return ``;\n }\n return match; // Keep original if file not found\n }\n );\n\n // Also handle CSS background-image: url() references\n result = result.replace(\n /url\\([\"']?([^\"')]+)[\"']?\\)/gi,\n (match, url) => {\n // Skip if already a data URL or external URL\n if (url.startsWith('data:') || url.startsWith('http://') || url.startsWith('https://')) {\n return match;\n }\n const fileName = url.split('/').pop() || url;\n const imageDataUrl = relatedFiles[url] || relatedFiles[fileName] || relatedFiles[`./${url}`];\n if (imageDataUrl && imageDataUrl.startsWith('data:')) {\n return `url(\"${imageDataUrl}\")`;\n }\n return match;\n }\n );\n\n return result;\n}\n\nexport function HtmlPreview({\n content,\n fileName,\n relatedFiles = {},\n sessionId,\n agentId,\n filePath,\n workspacePath,\n}: HtmlPreviewProps) {\n // Determine if we should use live preview mode (with working relative links)\n const useLivePreview = Boolean(sessionId && agentId && filePath);\n\n // Build the live preview URL\n const livePreviewUrl = useMemo(() => {\n if (!useLivePreview) return null;\n // Include workspace query param for historical workspaces\n const baseUrl = `/workspace-preview/${sessionId}/${agentId}/${filePath}`;\n if (workspacePath) {\n return `${baseUrl}?workspace=${encodeURIComponent(workspacePath)}`;\n }\n return baseUrl;\n }, [useLivePreview, sessionId, agentId, filePath, workspacePath]);\n\n // Prepare the HTML content with inlined CSS/JS (only used in srcDoc mode)\n const preparedContent = useMemo(() => {\n if (useLivePreview) return ''; // Not needed for live preview\n\n let processedContent = content;\n\n // Inline related CSS and JS files\n if (Object.keys(relatedFiles).length > 0) {\n processedContent = inlineRelatedFiles(processedContent, relatedFiles);\n }\n\n // If content already has full HTML structure, use as-is\n if (processedContent.includes('\n\n\n \n \n \n\n\n${processedContent}\n\n`;\n }, [content, relatedFiles, useLivePreview]);\n\n return (\n
\n {/* Header */}\n
\n \n HTML Preview\n - {fileName}\n {useLivePreview && (\n (Live - links work)\n )}\n
\n\n {/* Preview iframe - use src for live preview, srcDoc for inline */}\n
\n {useLivePreview ? (\n \n ) : (\n \n )}\n
\n
\n );\n}\n\nexport default HtmlPreview;\n","/**\n * SVG Preview Component\n *\n * Renders SVG content in a sandboxed iframe with no script execution.\n */\n\nimport { useMemo } from 'react';\nimport { Palette } from 'lucide-react';\n\ninterface SvgPreviewProps {\n content: string;\n fileName: string;\n}\n\nexport function SvgPreview({ content, fileName }: SvgPreviewProps) {\n // Wrap SVG in a minimal HTML document for proper rendering\n const htmlContent = useMemo(() => {\n return `\n\n\n\n \n \n\n\n${content}\n\n`;\n }, [content]);\n\n return (\n
\n {/* Header */}\n
\n \n SVG Preview\n - {fileName}\n
\n\n {/* Preview iframe - no scripts allowed for SVG */}\n \n
\n );\n}\n\nexport default SvgPreview;\n","/**\n * Image Preview Component\n *\n * Displays images with zoom capability.\n * Supports PNG, JPG, GIF, WebP formats.\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport { Image as ImageIcon, ZoomIn, ZoomOut, RotateCw } from 'lucide-react';\n\ninterface ImagePreviewProps {\n content: string; // Base64 encoded image data or data URL\n fileName: string;\n mimeType?: string;\n}\n\nexport function ImagePreview({ content, fileName, mimeType }: ImagePreviewProps) {\n const [zoom, setZoom] = useState(100);\n const [rotation, setRotation] = useState(0);\n const [loadError, setLoadError] = useState(null);\n\n // Create image source URL\n const imageSrc = useMemo(() => {\n if (!content) {\n if (import.meta.env.DEV) {\n console.warn('ImagePreview: No content provided');\n }\n return '';\n }\n\n // If content is already a data URL, use it directly\n if (content.startsWith('data:')) {\n return content;\n }\n\n // Validate base64 format before constructing data URL\n // Remove whitespace first\n const cleanContent = content.replace(/\\s/g, '');\n\n // Check if it looks like base64 (only contains valid chars)\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(cleanContent)) {\n console.error('ImagePreview: Content does not look like valid base64:', {\n contentLength: content.length,\n firstChars: content.substring(0, 50),\n });\n return '';\n }\n\n // Otherwise, assume it's base64 and construct data URL\n const type = mimeType || 'image/png';\n return `data:${type};base64,${cleanContent}`;\n }, [content, mimeType]);\n\n const handleImageError = () => {\n console.error('ImagePreview: Image failed to load', {\n contentLength: content?.length,\n mimeType,\n });\n setLoadError('Failed to load image');\n };\n\n const handleZoomIn = useCallback(() => {\n setZoom((prev) => Math.min(prev + 25, 300));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setZoom((prev) => Math.max(prev - 25, 25));\n }, []);\n\n const handleRotate = useCallback(() => {\n setRotation((prev) => (prev + 90) % 360);\n }, []);\n\n return (\n
\n {/* Header */}\n
\n
\n \n Image Preview\n - {fileName}\n
\n\n {/* Controls */}\n
\n \n \n \n {zoom}%\n \n \n \n \n \n \n
\n
\n\n {/* Image container */}\n
\n {loadError ? (\n
\n \n

{loadError}

\n

Content length: {content?.length || 0}

\n
\n ) : imageSrc ? (\n \n ) : (\n
\n \n

No image content

\n
\n )}\n
\n
\n );\n}\n\nexport default ImagePreview;\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n\n// src/defaults.ts\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = { exec: () => null };\nfunction edit(regex, opt = \"\") {\n let source = typeof regex === \"string\" ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === \"string\" ? val : val.source;\n valSource = valSource.replace(other.caret, \"$1\");\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nvar other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^
/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /|$))/;\nvar html = edit(\n \"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|\\\\n*|$)|\\\\n*|$)|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\n \"i\"\n).replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\nvar gfmTable = edit(\n \"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"\n).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n ...blockNormal,\n html: edit(\n `^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`\n ).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\n \"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\n \"gu\"\n).replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\n \"^comment|^|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^|^\"\n).replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n _backpedal: noopTest,\n // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\nvar inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n};\nvar getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n if (encode) {\n if (other.escapeTest.test(html2)) {\n return html2.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html2)) {\n return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html2;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, \"%\");\n } catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n if (escaped) {\n return \"|\";\n } else {\n return \" |\";\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push(\"\");\n }\n }\n for (; i < cells.length; i++) {\n cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n }\n return cells;\n}\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return \"\";\n }\n let suffLen = 0;\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n const href = link2.href;\n const title = link2.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n lexer2.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n raw,\n href,\n title,\n text,\n tokens: lexer2.inlineTokens(text)\n };\n lexer2.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text.split(\"\\n\").map((node) => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n options;\n rules;\n // set by the lexer\n lexer;\n // set by the lexer\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: \"space\",\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n return {\n type: \"code\",\n raw: cap[0],\n codeBlockStyle: \"indented\",\n text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n return {\n type: \"code\",\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, \"#\");\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n text = trimmed.trim();\n }\n }\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: \"hr\",\n raw: rtrim(cap[0], \"\\n\")\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n let raw = \"\";\n let text = \"\";\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join(\"\\n\");\n const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n text = text ? `${text}\n${currentText}` : currentText;\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"code\") {\n break;\n } else if (lastToken?.type === \"blockquote\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === \"list\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n continue;\n }\n }\n return {\n type: \"blockquote\",\n raw,\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list2 = {\n type: \"list\",\n raw: \"\",\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : \"\",\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : \"[*+-]\";\n }\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n while (src) {\n let endEarly = false;\n let raw = \"\";\n let itemContents = \"\";\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, (t) => \" \".repeat(3 * t.length));\n let nextLine = src.split(\"\\n\", 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar);\n indent = indent > 4 ? 1 : indent;\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n raw += nextLine + \"\\n\";\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n while (src) {\n const rawLine = src.split(\"\\n\", 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \" \");\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \" \");\n }\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n } else {\n if (blankLine) {\n break;\n }\n if (line.replace(this.rules.other.tabCharGlobal, \" \").search(this.rules.other.nonSpaceChar) >= 4) {\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += \"\\n\" + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n blankLine = true;\n }\n raw += rawLine + \"\\n\";\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list2.loose) {\n if (endsWithBlankLine) {\n list2.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== \"[ ] \";\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n }\n }\n list2.items.push({\n type: \"list_item\",\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list2.raw += raw;\n }\n const lastItem = list2.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n return;\n }\n list2.raw = list2.raw.trimEnd();\n for (let i = 0; i < list2.items.length; i++) {\n this.lexer.state.top = false;\n list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n if (!list2.loose) {\n const spacers = list2.items[i].tokens.filter((t) => t.type === \"space\");\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t) => this.rules.other.anyLine.test(t.raw));\n list2.loose = hasMultipleLineBreaks;\n }\n }\n if (list2.loose) {\n for (let i = 0; i < list2.items.length; i++) {\n list2.items[i].loose = true;\n }\n }\n return list2;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: \"html\",\n block: true,\n raw: cap[0],\n pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n return {\n type: \"def\",\n tag: tag2,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n const item = {\n type: \"table\",\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push(\"right\");\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push(\"center\");\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push(\"left\");\n } else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i]\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i]\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n return {\n type: \"paragraph\",\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: \"escape\",\n raw: cap[0],\n text: cap[1]\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: \"html\",\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n return;\n }\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n const lastParenIndex = findClosingBracket(cap[2], \"()\");\n if (lastParenIndex === -2) {\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = \"\";\n }\n }\n let href = cap[2];\n let title = \"\";\n if (this.options.pedantic) {\n const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n if (link2) {\n href = link2[1];\n title = link2[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : \"\";\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n const link2 = links[linkString.toLowerCase()];\n if (!link2) {\n const text = cap[0].charAt(0);\n return {\n type: \"text\",\n raw: text,\n text\n };\n }\n return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = \"\") {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n const nextChar = match[1] || match[2] || \"\";\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue;\n rLength = [...rDelim].length;\n if (match[3] || match[4]) {\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue;\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0) continue;\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n if (Math.min(lLength, rLength) % 2) {\n const text2 = raw.slice(1, -1);\n return {\n type: \"em\",\n raw,\n text: text2,\n tokens: this.lexer.inlineTokens(text2)\n };\n }\n const text = raw.slice(2, -2);\n return {\n type: \"strong\",\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: \"codespan\",\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: \"br\",\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: \"del\",\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[1];\n href = \"mailto:\" + text;\n } else {\n text = cap[1];\n href = text;\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[0];\n href = \"mailto:\" + text;\n } else {\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === \"www.\") {\n href = \"http://\" + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n escaped\n };\n }\n }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options2) {\n this.tokens = [];\n this.tokens.links = /* @__PURE__ */ Object.create(null);\n this.options = options2 || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, \"\\n\");\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, \" \").replace(other.spaceLine, \"\");\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== void 0) {\n lastToken.raw += \"\\n\";\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let maskedSrc = src;\n let match = null;\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = \"\";\n while (src) {\n if (!keepPrevChar) {\n prevChar = \"\";\n }\n keepPrevChar = false;\n let token;\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === \"text\" && lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== \"_\") {\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n options;\n parser;\n // set by the parser\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(token) {\n return \"\";\n }\n code({ text, lang, escaped }) {\n const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n if (!langString) {\n return \"
\" + (escaped ? code : escape2(code, true)) + \"
\\n\";\n }\n return '
' + (escaped ? code : escape2(code, true)) + \"
\\n\";\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `
\n${body}
\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `${this.parser.parseInline(tokens)}\n`;\n }\n hr(token) {\n return \"
\\n\";\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = \"\";\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? \"ol\" : \"ul\";\n const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n return \"<\" + type + startAttr + \">\\n\" + body + \"\\n\";\n }\n listitem(item) {\n let itemBody = \"\";\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === \"paragraph\") {\n item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: \"text\",\n raw: checkbox + \" \",\n text: checkbox + \" \",\n escaped: true\n });\n }\n } else {\n itemBody += checkbox + \" \";\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `
  • ${itemBody}
  • \n`;\n }\n checkbox({ checked }) {\n return \"';\n }\n paragraph({ tokens }) {\n return `

    ${this.parser.parseInline(tokens)}

    \n`;\n }\n table(token) {\n let header = \"\";\n let cell = \"\";\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = \"\";\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = \"\";\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body) body = `${body}`;\n return \"\\n\\n\" + header + \"\\n\" + body + \"
    \\n\";\n }\n tablerow({ text }) {\n return `\n${text}\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? \"th\" : \"td\";\n const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n return tag2 + content + `\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n em({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n codespan({ text }) {\n return `${escape2(text, true)}`;\n }\n br(token) {\n return \"
    \";\n }\n del({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '
    \" + text + \"\";\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape2(text);\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n\";\n return out;\n }\n text(token) {\n return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return \"\" + text;\n }\n image({ text }) {\n return \"\" + text;\n }\n br() {\n return \"\";\n }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n options;\n renderer;\n textRenderer;\n constructor(options2) {\n this.options = options2 || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"space\": {\n out += this.renderer.space(token);\n continue;\n }\n case \"hr\": {\n out += this.renderer.hr(token);\n continue;\n }\n case \"heading\": {\n out += this.renderer.heading(token);\n continue;\n }\n case \"code\": {\n out += this.renderer.code(token);\n continue;\n }\n case \"table\": {\n out += this.renderer.table(token);\n continue;\n }\n case \"blockquote\": {\n out += this.renderer.blockquote(token);\n continue;\n }\n case \"list\": {\n out += this.renderer.list(token);\n continue;\n }\n case \"html\": {\n out += this.renderer.html(token);\n continue;\n }\n case \"paragraph\": {\n out += this.renderer.paragraph(token);\n continue;\n }\n case \"text\": {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n textToken = tokens[++i];\n body += \"\\n\" + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: \"paragraph\",\n raw: body,\n text: body,\n tokens: [{ type: \"text\", raw: body, text: body, escaped: true }]\n });\n } else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"escape\": {\n out += renderer.text(token);\n break;\n }\n case \"html\": {\n out += renderer.html(token);\n break;\n }\n case \"link\": {\n out += renderer.link(token);\n break;\n }\n case \"image\": {\n out += renderer.image(token);\n break;\n }\n case \"strong\": {\n out += renderer.strong(token);\n break;\n }\n case \"em\": {\n out += renderer.em(token);\n break;\n }\n case \"codespan\": {\n out += renderer.codespan(token);\n break;\n }\n case \"br\": {\n out += renderer.br(token);\n break;\n }\n case \"del\": {\n out += renderer.del(token);\n break;\n }\n case \"text\": {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\n// src/Hooks.ts\nvar _Hooks = class {\n options;\n block;\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n static passThroughHooks = /* @__PURE__ */ new Set([\n \"preprocess\",\n \"postprocess\",\n \"processAllTokens\"\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html2) {\n return html2;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n};\n\n// src/Instance.ts\nvar Marked = class {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case \"table\": {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case \"list\": {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens2 = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens2, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n const opts = { ...pack };\n opts.async = this.defaults.async || opts.async || false;\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error(\"extension name required\");\n }\n if (\"renderer\" in ext) {\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n extensions.renderers[ext.name] = function(...args2) {\n let ret = ext.renderer.apply(this, args2);\n if (ret === false) {\n ret = prevRenderer.apply(this, args2);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (\"tokenizer\" in ext) {\n if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n if (ext.level === \"block\") {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === \"inline\") {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (\"childTokens\" in ext && ext.childTokens) {\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if ([\"options\", \"parser\"].includes(prop)) {\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n renderer[rendererProp] = (...args2) => {\n let ret = rendererFunc.apply(renderer, args2);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args2);\n }\n return ret || \"\";\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n tokenizer[tokenizerProp] = (...args2) => {\n let ret = tokenizerFunc.apply(tokenizer, args2);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args2);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if ([\"options\", \"block\"].includes(prop)) {\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => {\n return prevHook.call(hooks, ret2);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[hooksProp] = (...args2) => {\n let ret = hooksFunc.apply(hooks, args2);\n if (ret === false) {\n ret = prevHook.apply(hooks, args2);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n if (pack.walkTokens) {\n const walkTokens2 = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens2) {\n values = values.concat(walkTokens2.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options2) {\n return _Lexer.lex(src, options2 ?? this.defaults);\n }\n parser(tokens, options2) {\n return _Parser.parse(tokens, options2 ?? this.defaults);\n }\n parseMarkdown(blockType) {\n const parse2 = (src, options2) => {\n const origOpt = { ...options2 };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n }\n if (typeof src === \"undefined\" || src === null) {\n return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n }\n if (typeof src !== \"string\") {\n return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer2(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html2 = parser2(tokens, opt);\n if (opt.hooks) {\n html2 = opt.hooks.postprocess(html2);\n }\n return html2;\n } catch (e) {\n return throwError(e);\n }\n };\n return parse2;\n }\n onError(silent, async) {\n return (e) => {\n e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n if (silent) {\n const msg = \"

    An error occurred:

    \" + escape2(e.message + \"\", true) + \"
    \";\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function(options2) {\n markedInstance.setOptions(options2);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function(...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.walkTokens = function(tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport {\n _Hooks as Hooks,\n _Lexer as Lexer,\n Marked,\n _Parser as Parser,\n _Renderer as Renderer,\n _TextRenderer as TextRenderer,\n _Tokenizer as Tokenizer,\n _defaults as defaults,\n _getDefaults as getDefaults,\n lexer,\n marked,\n options,\n parse,\n parseInline,\n parser,\n setOptions,\n use,\n walkTokens\n};\n//# sourceMappingURL=marked.esm.js.map\n","/**\n * Markdown Preview Component\n *\n * Renders Markdown content as HTML using the marked library.\n */\n\nimport { useMemo } from 'react';\nimport { FileText } from 'lucide-react';\nimport { marked } from 'marked';\n\ninterface MarkdownPreviewProps {\n content: string;\n fileName: string;\n}\n\nexport function MarkdownPreview({ content, fileName }: MarkdownPreviewProps) {\n // Convert markdown to HTML\n const htmlContent = useMemo(() => {\n // Configure marked for safety\n marked.setOptions({\n gfm: true, // GitHub Flavored Markdown\n breaks: true, // Convert line breaks to
    \n });\n\n try {\n const renderedMarkdown = marked.parse(content);\n return `\n\n\n\n \n \n\n\n${renderedMarkdown}\n\n`;\n } catch (error) {\n console.error('Markdown parsing error:', error);\n return `
    ${content}
    `;\n }\n }, [content]);\n\n return (\n
    \n {/* Header */}\n
    \n \n Markdown Preview\n - {fileName}\n
    \n\n {/* Preview iframe */}\n \n
    \n );\n}\n\nexport default MarkdownPreview;\n","/**\n * PDF Preview Component\n *\n * Displays PDF documents using the native browser PDF viewer.\n * Uses Blob URLs for better handling of large files.\n */\n\nimport { useEffect, useState } from 'react';\nimport { FileText, Loader2 } from 'lucide-react';\n\ninterface PdfPreviewProps {\n content: string; // Base64 encoded PDF data or data URL\n fileName: string;\n}\n\nexport function PdfPreview({ content, fileName }: PdfPreviewProps) {\n const [blobUrl, setBlobUrl] = useState(null);\n const [error, setError] = useState(null);\n\n // Convert base64 to Blob URL for better large file handling\n useEffect(() => {\n if (import.meta.env.DEV) {\n console.log('PdfPreview received content:', {\n fileName,\n contentLength: content?.length,\n contentPreview: content?.substring(0, 100),\n startsWithData: content?.startsWith('data:'),\n });\n }\n\n // Validate content before attempting to decode\n if (!content || content.length === 0) {\n setError('No content received for PDF preview');\n setBlobUrl(null);\n return;\n }\n\n try {\n // Extract base64 data\n let base64Data = content;\n if (content.startsWith('data:')) {\n base64Data = content.split(',')[1] || content;\n }\n\n // Validate base64 format (should only contain valid base64 chars)\n // Remove any whitespace first\n base64Data = base64Data.replace(/\\s/g, '');\n\n // Check if it looks like base64 (only contains valid chars)\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64Data)) {\n console.error('PdfPreview: Content does not look like valid base64:', {\n firstChars: base64Data.substring(0, 50),\n lastChars: base64Data.substring(base64Data.length - 50),\n });\n setError('Invalid PDF data format - content is not valid base64');\n setBlobUrl(null);\n return;\n }\n\n // Decode base64 to binary\n const binaryString = atob(base64Data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Create Blob and URL\n const blob = new Blob([bytes], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n if (import.meta.env.DEV) {\n console.log('PdfPreview created blob URL, size:', blob.size);\n }\n setBlobUrl(url);\n setError(null);\n\n // Cleanup on unmount or content change\n return () => {\n URL.revokeObjectURL(url);\n };\n } catch (err) {\n console.error('PdfPreview failed to create blob:', err);\n setError(err instanceof Error ? err.message : 'Failed to load PDF');\n setBlobUrl(null);\n }\n }, [content, fileName]);\n\n return (\n
    \n {/* Header */}\n
    \n \n PDF Document\n - {fileName}\n
    \n\n {/* Loading state */}\n {!blobUrl && !error && (\n
    \n \n
    \n )}\n\n {/* Error state */}\n {error && (\n
    \n Failed to load PDF: {error}\n
    \n )}\n\n {/* PDF viewer using iframe with blob URL */}\n {blobUrl && (\n \n )}\n
    \n );\n}\n\nexport default PdfPreview;\n","// package.json\nvar package_default = {\n name: \"mermaid\",\n version: \"11.12.2\",\n description: \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.\",\n type: \"module\",\n module: \"./dist/mermaid.core.mjs\",\n types: \"./dist/mermaid.d.ts\",\n exports: {\n \".\": {\n types: \"./dist/mermaid.d.ts\",\n import: \"./dist/mermaid.core.mjs\",\n default: \"./dist/mermaid.core.mjs\"\n },\n \"./*\": \"./*\"\n },\n keywords: [\n \"diagram\",\n \"markdown\",\n \"flowchart\",\n \"sequence diagram\",\n \"gantt\",\n \"class diagram\",\n \"git graph\",\n \"mindmap\",\n \"packet diagram\",\n \"c4 diagram\",\n \"er diagram\",\n \"pie chart\",\n \"pie diagram\",\n \"quadrant chart\",\n \"requirement diagram\",\n \"graph\"\n ],\n scripts: {\n clean: \"rimraf dist\",\n dev: \"pnpm -w dev\",\n \"docs:code\": \"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup\",\n \"docs:build\": \"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts\",\n \"docs:verify\": \"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify\",\n \"docs:pre:vitepress\": \"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts\",\n \"docs:build:vitepress\": \"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing\",\n \"docs:dev\": 'pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev\" \"tsx scripts/docs.cli.mts --watch --vitepress\"',\n \"docs:dev:docker\": 'pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev:docker\" \"tsx scripts/docs.cli.mts --watch --vitepress\"',\n \"docs:serve\": \"pnpm docs:build:vitepress && vitepress serve src/vitepress\",\n \"docs:spellcheck\": 'cspell \"src/docs/**/*.md\"',\n \"docs:release-version\": \"tsx scripts/update-release-version.mts\",\n \"docs:verify-version\": \"tsx scripts/update-release-version.mts --verify\",\n \"types:build-config\": \"tsx scripts/create-types-from-json-schema.mts\",\n \"types:verify-config\": \"tsx scripts/create-types-from-json-schema.mts --verify\",\n checkCircle: \"npx madge --circular ./src\",\n prepublishOnly: \"pnpm docs:verify-version\"\n },\n repository: {\n type: \"git\",\n url: \"https://github.com/mermaid-js/mermaid\"\n },\n author: \"Knut Sveidqvist\",\n license: \"MIT\",\n standard: {\n ignore: [\n \"**/parser/*.js\",\n \"dist/**/*.js\",\n \"cypress/**/*.js\"\n ],\n globals: [\n \"page\"\n ]\n },\n dependencies: {\n \"@braintree/sanitize-url\": \"^7.1.1\",\n \"@iconify/utils\": \"^3.0.1\",\n \"@mermaid-js/parser\": \"workspace:^\",\n \"@types/d3\": \"^7.4.3\",\n cytoscape: \"^3.29.3\",\n \"cytoscape-cose-bilkent\": \"^4.1.0\",\n \"cytoscape-fcose\": \"^2.2.0\",\n d3: \"^7.9.0\",\n \"d3-sankey\": \"^0.12.3\",\n \"dagre-d3-es\": \"7.0.13\",\n dayjs: \"^1.11.18\",\n dompurify: \"^3.2.5\",\n katex: \"^0.16.22\",\n khroma: \"^2.1.0\",\n \"lodash-es\": \"^4.17.21\",\n marked: \"^16.2.1\",\n roughjs: \"^4.6.6\",\n stylis: \"^4.3.6\",\n \"ts-dedent\": \"^2.2.0\",\n uuid: \"^11.1.0\"\n },\n devDependencies: {\n \"@adobe/jsonschema2md\": \"^8.0.5\",\n \"@iconify/types\": \"^2.0.0\",\n \"@types/cytoscape\": \"^3.21.9\",\n \"@types/cytoscape-fcose\": \"^2.2.4\",\n \"@types/d3-sankey\": \"^0.12.4\",\n \"@types/d3-scale\": \"^4.0.9\",\n \"@types/d3-scale-chromatic\": \"^3.1.0\",\n \"@types/d3-selection\": \"^3.0.11\",\n \"@types/d3-shape\": \"^3.1.7\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/katex\": \"^0.16.7\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/micromatch\": \"^4.0.9\",\n \"@types/stylis\": \"^4.2.7\",\n \"@types/uuid\": \"^10.0.0\",\n ajv: \"^8.17.1\",\n canvas: \"^3.1.2\",\n chokidar: \"3.6.0\",\n concurrently: \"^9.1.2\",\n \"csstree-validator\": \"^4.0.1\",\n globby: \"^14.1.0\",\n jison: \"^0.4.18\",\n \"js-base64\": \"^3.7.8\",\n jsdom: \"^26.1.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n micromatch: \"^4.0.8\",\n \"path-browserify\": \"^1.0.1\",\n prettier: \"^3.5.3\",\n remark: \"^15.0.1\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n rimraf: \"^6.0.1\",\n \"start-server-and-test\": \"^2.0.13\",\n \"type-fest\": \"^4.35.0\",\n typedoc: \"^0.28.12\",\n \"typedoc-plugin-markdown\": \"^4.8.1\",\n typescript: \"~5.7.3\",\n \"unist-util-flatmap\": \"^1.0.0\",\n \"unist-util-visit\": \"^5.0.0\",\n vitepress: \"^1.6.4\",\n \"vitepress-plugin-search\": \"1.0.4-alpha.22\"\n },\n files: [\n \"dist/\",\n \"README.md\"\n ],\n publishConfig: {\n access: \"public\"\n }\n};\n\nexport {\n package_default\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t) __defProp(target, \"name\", { value, configurable: true });\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/logger.ts\nimport dayjs from \"dayjs\";\nvar LEVELS = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n};\nvar log = {\n trace: /* @__PURE__ */ __name((..._args) => {\n }, \"trace\"),\n debug: /* @__PURE__ */ __name((..._args) => {\n }, \"debug\"),\n info: /* @__PURE__ */ __name((..._args) => {\n }, \"info\"),\n warn: /* @__PURE__ */ __name((..._args) => {\n }, \"warn\"),\n error: /* @__PURE__ */ __name((..._args) => {\n }, \"error\"),\n fatal: /* @__PURE__ */ __name((..._args) => {\n }, \"fatal\")\n};\nvar setLogLevel = /* @__PURE__ */ __name(function(level = \"fatal\") {\n let numericLevel = LEVELS.fatal;\n if (typeof level === \"string\") {\n if (level.toLowerCase() in LEVELS) {\n numericLevel = LEVELS[level];\n }\n } else if (typeof level === \"number\") {\n numericLevel = level;\n }\n log.trace = () => {\n };\n log.debug = () => {\n };\n log.info = () => {\n };\n log.warn = () => {\n };\n log.error = () => {\n };\n log.fatal = () => {\n };\n if (numericLevel <= LEVELS.fatal) {\n log.fatal = console.error ? console.error.bind(console, format(\"FATAL\"), \"color: orange\") : console.log.bind(console, \"\\x1B[35m\", format(\"FATAL\"));\n }\n if (numericLevel <= LEVELS.error) {\n log.error = console.error ? console.error.bind(console, format(\"ERROR\"), \"color: orange\") : console.log.bind(console, \"\\x1B[31m\", format(\"ERROR\"));\n }\n if (numericLevel <= LEVELS.warn) {\n log.warn = console.warn ? console.warn.bind(console, format(\"WARN\"), \"color: orange\") : console.log.bind(console, `\\x1B[33m`, format(\"WARN\"));\n }\n if (numericLevel <= LEVELS.info) {\n log.info = console.info ? console.info.bind(console, format(\"INFO\"), \"color: lightblue\") : console.log.bind(console, \"\\x1B[34m\", format(\"INFO\"));\n }\n if (numericLevel <= LEVELS.debug) {\n log.debug = console.debug ? console.debug.bind(console, format(\"DEBUG\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"DEBUG\"));\n }\n if (numericLevel <= LEVELS.trace) {\n log.trace = console.debug ? console.debug.bind(console, format(\"TRACE\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"TRACE\"));\n }\n}, \"setLogLevel\");\nvar format = /* @__PURE__ */ __name((level) => {\n const time = dayjs().format(\"ss.SSS\");\n return `%c${time} : ${level} : `;\n}, \"format\");\n\nexport {\n __name,\n __export,\n log,\n setLogLevel\n};\n","/* IMPORT */\n/* MAIN */\nconst Channel = {\n /* CLAMP */\n min: {\n r: 0,\n g: 0,\n b: 0,\n s: 0,\n l: 0,\n a: 0\n },\n max: {\n r: 255,\n g: 255,\n b: 255,\n h: 360,\n s: 100,\n l: 100,\n a: 1\n },\n clamp: {\n r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),\n g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),\n b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),\n h: (h) => h % 360,\n s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),\n l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),\n a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)\n },\n /* CONVERSION */\n //SOURCE: https://planetcalc.com/7779\n toLinear: (c) => {\n const n = c / 255;\n return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;\n },\n //SOURCE: https://gist.github.com/mjackson/5311256\n hue2rgb: (p, q, t) => {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n },\n hsl2rgb: ({ h, s, l }, channel) => {\n if (!s)\n return l * 2.55; // Achromatic\n h /= 360;\n s /= 100;\n l /= 100;\n const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);\n const p = 2 * l - q;\n switch (channel) {\n case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;\n case 'g': return Channel.hue2rgb(p, q, h) * 255;\n case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;\n }\n },\n rgb2hsl: ({ r, g, b }, channel) => {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n if (channel === 'l')\n return l * 100;\n if (max === min)\n return 0; // Achromatic\n const d = max - min;\n const s = (l > .5) ? d / (2 - max - min) : d / (max + min);\n if (channel === 's')\n return s * 100;\n switch (max) {\n case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;\n case g: return ((b - r) / d + 2) * 60;\n case b: return ((r - g) / d + 4) * 60;\n default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement\n }\n }\n};\n/* EXPORT */\nexport default Channel;\n","/* MAIN */\nconst Lang = {\n /* API */\n clamp: (number, lower, upper) => {\n if (lower > upper)\n return Math.min(lower, Math.max(upper, number));\n return Math.min(upper, Math.max(lower, number));\n },\n round: (number) => {\n return Math.round(number * 10000000000) / 10000000000;\n }\n};\n/* EXPORT */\nexport default Lang;\n","/* MAIN */\nconst Unit = {\n /* API */\n dec2hex: (dec) => {\n const hex = Math.round(dec).toString(16);\n return hex.length > 1 ? hex : `0${hex}`;\n }\n};\n/* EXPORT */\nexport default Unit;\n","/* IMPORT */\nimport channel from './channel.js';\nimport lang from './lang.js';\nimport unit from './unit.js';\n/* MAIN */\nconst Utils = {\n channel,\n lang,\n unit\n};\n/* EXPORT */\nexport default Utils;\n","/* IMPORT */\nimport _ from './utils/index.js';\n/* MAIN */\nconst DEC2HEX = {};\nfor (let i = 0; i <= 255; i++)\n DEC2HEX[i] = _.unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance\nconst TYPE = {\n ALL: 0,\n RGB: 1,\n HSL: 2\n};\n/* EXPORT */\nexport { DEC2HEX, TYPE };\n","/* IMPORT */\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Type {\n constructor() {\n /* VARIABLES */\n this.type = TYPE.ALL;\n }\n /* API */\n get() {\n return this.type;\n }\n set(type) {\n if (this.type && this.type !== type)\n throw new Error('Cannot change both RGB and HSL channels at the same time');\n this.type = type;\n }\n reset() {\n this.type = TYPE.ALL;\n }\n is(type) {\n return this.type === type;\n }\n}\n/* EXPORT */\nexport default Type;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Type from './type.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Channels {\n /* CONSTRUCTOR */\n constructor(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type = new Type();\n }\n /* API */\n set(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type.type = TYPE.ALL;\n return this;\n }\n /* HELPERS */\n _ensureHSL() {\n const data = this.data;\n const { h, s, l } = data;\n if (h === undefined)\n data.h = _.channel.rgb2hsl(data, 'h');\n if (s === undefined)\n data.s = _.channel.rgb2hsl(data, 's');\n if (l === undefined)\n data.l = _.channel.rgb2hsl(data, 'l');\n }\n _ensureRGB() {\n const data = this.data;\n const { r, g, b } = data;\n if (r === undefined)\n data.r = _.channel.hsl2rgb(data, 'r');\n if (g === undefined)\n data.g = _.channel.hsl2rgb(data, 'g');\n if (b === undefined)\n data.b = _.channel.hsl2rgb(data, 'b');\n }\n /* GETTERS */\n get r() {\n const data = this.data;\n const r = data.r;\n if (!this.type.is(TYPE.HSL) && r !== undefined)\n return r;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'r');\n }\n get g() {\n const data = this.data;\n const g = data.g;\n if (!this.type.is(TYPE.HSL) && g !== undefined)\n return g;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'g');\n }\n get b() {\n const data = this.data;\n const b = data.b;\n if (!this.type.is(TYPE.HSL) && b !== undefined)\n return b;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'b');\n }\n get h() {\n const data = this.data;\n const h = data.h;\n if (!this.type.is(TYPE.RGB) && h !== undefined)\n return h;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'h');\n }\n get s() {\n const data = this.data;\n const s = data.s;\n if (!this.type.is(TYPE.RGB) && s !== undefined)\n return s;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 's');\n }\n get l() {\n const data = this.data;\n const l = data.l;\n if (!this.type.is(TYPE.RGB) && l !== undefined)\n return l;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'l');\n }\n get a() {\n return this.data.a;\n }\n /* SETTERS */\n set r(r) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.r = r;\n }\n set g(g) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.g = g;\n }\n set b(b) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.b = b;\n }\n set h(h) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.h = h;\n }\n set s(s) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.s = s;\n }\n set l(l) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.l = l;\n }\n set a(a) {\n this.changed = true;\n this.data.a = a;\n }\n}\n/* EXPORT */\nexport default Channels;\n","/* IMPORT */\nimport Channels from './/index.js';\n/* MAIN */\nconst channels = new Channels({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');\n/* EXPORT */\nexport default channels;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport { DEC2HEX } from '../constants.js';\n/* MAIN */\nconst Hex = {\n /* VARIABLES */\n re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,\n /* API */\n parse: (color) => {\n if (color.charCodeAt(0) !== 35)\n return; // '#'\n const match = color.match(Hex.re);\n if (!match)\n return;\n const hex = match[1];\n const dec = parseInt(hex, 16);\n const length = hex.length;\n const hasAlpha = length % 4 === 0;\n const isFullLength = length > 4;\n const multiplier = isFullLength ? 1 : 17;\n const bits = isFullLength ? 8 : 4;\n const bitsOffset = hasAlpha ? 0 : -1;\n const mask = isFullLength ? 255 : 15;\n return ChannelsReusable.set({\n r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,\n g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,\n b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,\n a: hasAlpha ? (dec & mask) * multiplier / 255 : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // #RRGGBBAA\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}${DEC2HEX[Math.round(a * 255)]}`;\n }\n else { // #RRGGBB\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}`;\n }\n }\n};\n/* EXPORT */\nexport default Hex;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst HSL = {\n /* VARIABLES */\n re: /^hsla?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(?:deg|grad|rad|turn)?)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(%)?))?\\s*?\\)$/i,\n hueRe: /^(.+?)(deg|grad|rad|turn)$/i,\n /* HELPERS */\n _hue2deg: (hue) => {\n const match = hue.match(HSL.hueRe);\n if (match) {\n const [, number, unit] = match;\n switch (unit) {\n case 'grad': return _.channel.clamp.h(parseFloat(number) * .9);\n case 'rad': return _.channel.clamp.h(parseFloat(number) * 180 / Math.PI);\n case 'turn': return _.channel.clamp.h(parseFloat(number) * 360);\n }\n }\n return _.channel.clamp.h(parseFloat(hue));\n },\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 104 && charCode !== 72)\n return; // 'h'/'H'\n const match = color.match(HSL.re);\n if (!match)\n return;\n const [, h, s, l, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n h: HSL._hue2deg(h),\n s: _.channel.clamp.s(parseFloat(s)),\n l: _.channel.clamp.l(parseFloat(l)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { h, s, l, a } = channels;\n if (a < 1) { // HSLA\n return `hsla(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%, ${a})`;\n }\n else { // HSL\n return `hsl(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%)`;\n }\n }\n};\n/* EXPORT */\nexport default HSL;\n","/* IMPORT */\nimport Hex from './hex.js';\n/* MAIN */\nconst Keyword = {\n /* VARIABLES */\n 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 cyanaqua: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\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 darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\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 grey: '#808080',\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 lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#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: '#9370db',\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: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\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 slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n transparent: '#00000000',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n },\n /* API */\n parse: (color) => {\n color = color.toLowerCase();\n const hex = Keyword.colors[color];\n if (!hex)\n return;\n return Hex.parse(hex);\n },\n stringify: (channels) => {\n const hex = Hex.stringify(channels);\n for (const name in Keyword.colors) {\n if (Keyword.colors[name] === hex)\n return name;\n }\n return;\n }\n};\n/* EXPORT */\nexport default Keyword;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst RGB = {\n /* VARIABLES */\n re: /^rgba?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?)))?\\s*?\\)$/i,\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 114 && charCode !== 82)\n return; // 'r'/'R'\n const match = color.match(RGB.re);\n if (!match)\n return;\n const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n r: _.channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),\n g: _.channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),\n b: _.channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // RGBA\n return `rgba(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)}, ${_.lang.round(a)})`;\n }\n else { // RGB\n return `rgb(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)})`;\n }\n }\n};\n/* EXPORT */\nexport default RGB;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Hex from './hex.js';\nimport HSL from './hsl.js';\nimport Keyword from './keyword.js';\nimport RGB from './rgb.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nconst Color = {\n /* VARIABLES */\n format: {\n keyword: Keyword,\n hex: Hex,\n rgb: RGB,\n rgba: RGB,\n hsl: HSL,\n hsla: HSL\n },\n /* API */\n parse: (color) => {\n if (typeof color !== 'string')\n return color;\n const channels = Hex.parse(color) || RGB.parse(color) || HSL.parse(color) || Keyword.parse(color); // Color providers ordered with performance in mind\n if (channels)\n return channels;\n throw new Error(`Unsupported color format: \"${color}\"`);\n },\n stringify: (channels) => {\n // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value\n if (!channels.changed && channels.color)\n return channels.color;\n if (channels.type.is(TYPE.HSL) || channels.data.r === undefined) {\n return HSL.stringify(channels);\n }\n else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {\n return RGB.stringify(channels);\n }\n else {\n return Hex.stringify(channels);\n }\n }\n};\n/* EXPORT */\nexport default Color;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst change = (color, channels) => {\n const ch = Color.parse(color);\n for (const c in channels) {\n ch[c] = _.channel.clamp[c](channels[c]);\n }\n return Color.stringify(ch);\n};\n/* EXPORT */\nexport default change;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst rgba = (r, g, b = 0, a = 1) => {\n if (typeof r !== 'number')\n return change(r, { a: g });\n const channels = ChannelsReusable.set({\n r: _.channel.clamp.r(r),\n g: _.channel.clamp.g(g),\n b: _.channel.clamp.b(b),\n a: _.channel.clamp.a(a)\n });\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default rgba;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\n//SOURCE: https://planetcalc.com/7779\nconst luminance = (color) => {\n const { r, g, b } = Color.parse(color);\n const luminance = .2126 * _.channel.toLinear(r) + .7152 * _.channel.toLinear(g) + .0722 * _.channel.toLinear(b);\n return _.lang.round(luminance);\n};\n/* EXPORT */\nexport default luminance;\n","/* IMPORT */\nimport luminance from './luminance.js';\n/* MAIN */\nconst isLight = (color) => {\n return luminance(color) >= .5;\n};\n/* EXPORT */\nexport default isLight;\n","/* IMPORT */\nimport isLight from './is_light.js';\n/* MAIN */\nconst isDark = (color) => {\n return !isLight(color);\n};\n/* EXPORT */\nexport default isDark;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst adjustChannel = (color, channel, amount) => {\n const channels = Color.parse(color);\n const amountCurrent = channels[channel];\n const amountNext = _.channel.clamp[channel](amountCurrent + amount);\n if (amountCurrent !== amountNext)\n channels[channel] = amountNext;\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default adjustChannel;\n","/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst lighten = (color, amount) => {\n return adjustChannel(color, 'l', amount);\n};\n/* EXPORT */\nexport default lighten;\n","/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst darken = (color, amount) => {\n return adjustChannel(color, 'l', -amount);\n};\n/* EXPORT */\nexport default darken;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst adjust = (color, channels) => {\n const ch = Color.parse(color);\n const changes = {};\n for (const c in channels) {\n if (!channels[c])\n continue;\n changes[c] = ch[c] + channels[c];\n }\n return change(color, changes);\n};\n/* EXPORT */\nexport default adjust;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport rgba from './rgba.js';\n/* MAIN */\n//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756\nconst mix = (color1, color2, weight = 50) => {\n const { r: r1, g: g1, b: b1, a: a1 } = Color.parse(color1);\n const { r: r2, g: g2, b: b2, a: a2 } = Color.parse(color2);\n const weightScale = weight / 100;\n const weightNormalized = (weightScale * 2) - 1;\n const alphaDelta = a1 - a2;\n const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);\n const weight1 = (weight1combined + 1) / 2;\n const weight2 = 1 - weight1;\n const r = (r1 * weight1) + (r2 * weight2);\n const g = (g1 * weight1) + (g2 * weight2);\n const b = (b1 * weight1) + (b2 * weight2);\n const a = (a1 * weightScale) + (a2 * (1 - weightScale));\n return rgba(r, g, b, a);\n};\n/* EXPORT */\nexport default mix;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport mix from './mix.js';\n/* MAIN */\nconst invert = (color, weight = 100) => {\n const inverse = Color.parse(color);\n inverse.r = 255 - inverse.r;\n inverse.g = 255 - inverse.g;\n inverse.b = 255 - inverse.b;\n return mix(inverse, color, weight);\n};\n/* EXPORT */\nexport default invert;\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import {\n __export,\n __name,\n log,\n setLogLevel\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagram-api/regexes.ts\nvar frontMatterRegex = /^-{3}\\s*[\\n\\r](.*?)[\\n\\r]-{3}\\s*[\\n\\r]+/s;\nvar directiveRegex = /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nvar anyCommentRegex = /\\s*%%.*\\n/gm;\n\n// src/errors.ts\nvar UnknownDiagramError = class extends Error {\n static {\n __name(this, \"UnknownDiagramError\");\n }\n constructor(message) {\n super(message);\n this.name = \"UnknownDiagramError\";\n }\n};\n\n// src/diagram-api/detectType.ts\nvar detectors = {};\nvar detectType = /* @__PURE__ */ __name(function(text, config2) {\n text = text.replace(frontMatterRegex, \"\").replace(directiveRegex, \"\").replace(anyCommentRegex, \"\\n\");\n for (const [key, { detector }] of Object.entries(detectors)) {\n const diagram = detector(text, config2);\n if (diagram) {\n return key;\n }\n }\n throw new UnknownDiagramError(\n `No diagram type detected matching given configuration for text: ${text}`\n );\n}, \"detectType\");\nvar registerLazyLoadedDiagrams = /* @__PURE__ */ __name((...diagrams2) => {\n for (const { id, detector, loader } of diagrams2) {\n addDetector(id, detector, loader);\n }\n}, \"registerLazyLoadedDiagrams\");\nvar addDetector = /* @__PURE__ */ __name((key, detector, loader) => {\n if (detectors[key]) {\n log.warn(`Detector with key ${key} already exists. Overwriting.`);\n }\n detectors[key] = { detector, loader };\n log.debug(`Detector with key ${key} added${loader ? \" with loader\" : \"\"}`);\n}, \"addDetector\");\nvar getDiagramLoader = /* @__PURE__ */ __name((key) => {\n return detectors[key].loader;\n}, \"getDiagramLoader\");\n\n// src/assignWithDepth.ts\nvar assignWithDepth = /* @__PURE__ */ __name((dst, src, { depth = 2, clobber = false } = {}) => {\n const config2 = { depth, clobber };\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach((s) => assignWithDepth(dst, s, config2));\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach((s) => {\n if (!dst.includes(s)) {\n dst.push(s);\n }\n });\n return dst;\n }\n if (dst === void 0 || depth <= 0) {\n if (dst !== void 0 && dst !== null && typeof dst === \"object\" && typeof src === \"object\") {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n if (src !== void 0 && typeof dst === \"object\" && typeof src === \"object\") {\n Object.keys(src).forEach((key) => {\n if (typeof src[key] === \"object\" && (dst[key] === void 0 || typeof dst[key] === \"object\")) {\n if (dst[key] === void 0) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n } else if (clobber || typeof dst[key] !== \"object\" && typeof src[key] !== \"object\") {\n dst[key] = src[key];\n }\n });\n }\n return dst;\n}, \"assignWithDepth\");\nvar assignWithDepth_default = assignWithDepth;\n\n// src/themes/theme-base.js\nimport { adjust as adjust2, darken, invert, isDark, lighten } from \"khroma\";\n\n// src/themes/erDiagram-oldHardcodedValues.ts\nvar oldAttributeBackgroundColorOdd = \"#ffffff\";\nvar oldAttributeBackgroundColorEven = \"#f2f2f2\";\n\n// src/themes/theme-helpers.js\nimport { adjust } from \"khroma\";\nvar mkBorder = /* @__PURE__ */ __name((col, darkMode) => darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 }), \"mkBorder\");\n\n// src/themes/theme-base.js\nvar Theme = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#fff4dd\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n }\n updateColors() {\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? \"#eee\" : \"#333\");\n this.secondaryColor = this.secondaryColor || adjust2(this.primaryColor, { h: -120 });\n this.tertiaryColor = this.tertiaryColor || adjust2(this.primaryColor, { h: 180, l: 5 });\n this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n this.noteBkgColor = this.noteBkgColor || \"#fff5ad\";\n this.noteTextColor = this.noteTextColor || \"#333\";\n this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor);\n this.lineColor = this.lineColor || invert(this.background);\n this.arrowheadColor = this.arrowheadColor || invert(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n this.border2 = this.border2 || this.tertiaryBorderColor;\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || this.actorBorder;\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor);\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || \"white\";\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.excludeBkgColor = this.excludeBkgColor || \"#eeeeee\";\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23);\n this.gridColor = this.gridColor || \"lightgrey\";\n this.doneTaskBkgColor = this.doneTaskBkgColor || \"lightgrey\";\n this.doneTaskBorderColor = this.doneTaskBorderColor || \"grey\";\n this.critBorderColor = this.critBorderColor || \"#ff8888\";\n this.critBkgColor = this.critBkgColor || \"red\";\n this.todayLineColor = this.todayLineColor || \"red\";\n this.vertLineColor = this.vertLineColor || \"navy\";\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || \"#003163\";\n this.personBorder = this.personBorder || this.primaryBorderColor;\n this.personBkg = this.personBkg || this.mainBkg;\n if (this.darkMode) {\n this.rowOdd = this.rowOdd || darken(this.mainBkg, 5) || \"#ffffff\";\n this.rowEven = this.rowEven || darken(this.mainBkg, 10);\n } else {\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten(this.mainBkg, 5);\n }\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.specialStateColor = this.lineColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust2(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust2(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust2(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust2(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust2(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust2(this.primaryColor, { h: 210, l: 150 });\n this.cScale9 = this.cScale9 || adjust2(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust2(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust2(this.primaryColor, { h: 330 });\n if (this.darkMode) {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 75);\n }\n } else {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 25);\n }\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n const multiplier = this.darkMode ? -4 : -1;\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust2(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust2(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });\n }\n this.classText = this.classText || this.textColor;\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || adjust2(this.primaryColor, { h: 64 });\n this.fillType3 = this.fillType3 || adjust2(this.secondaryColor, { h: 64 });\n this.fillType4 = this.fillType4 || adjust2(this.primaryColor, { h: -64 });\n this.fillType5 = this.fillType5 || adjust2(this.secondaryColor, { h: -64 });\n this.fillType6 = this.fillType6 || adjust2(this.primaryColor, { h: 128 });\n this.fillType7 = this.fillType7 || adjust2(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust2(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust2(this.secondaryColor, { l: -10 });\n this.pie6 = this.pie6 || adjust2(this.tertiaryColor, { l: -10 });\n this.pie7 = this.pie7 || adjust2(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust2(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust2(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust2(this.primaryColor, { h: 60, l: -20 });\n this.pie11 = this.pie11 || adjust2(this.primaryColor, { h: -60, l: -20 });\n this.pie12 = this.pie12 || adjust2(this.primaryColor, { h: 120, l: -10 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.archEdgeColor = this.archEdgeColor || \"#777\";\n this.archEdgeArrowColor = this.archEdgeArrowColor || \"#777\";\n this.archEdgeWidth = this.archEdgeWidth || \"3\";\n this.archGroupBorderColor = this.archGroupBorderColor || \"#000\";\n this.archGroupBorderWidth = this.archGroupBorderWidth || \"2px\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust2(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust2(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust2(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust2(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust2(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust2(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust2(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust2(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust2(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust2(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust2(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.branchLabelColor = this.branchLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-dark.js\nimport { adjust as adjust3, darken as darken2, invert as invert2, isDark as isDark2, lighten as lighten2, rgba } from \"khroma\";\nvar Theme2 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#333\";\n this.primaryColor = \"#1f2020\";\n this.secondaryColor = lighten2(this.primaryColor, 16);\n this.tertiaryColor = adjust3(this.primaryColor, { h: -160 });\n this.primaryBorderColor = invert2(this.background);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert2(this.primaryColor);\n this.secondaryTextColor = invert2(this.secondaryColor);\n this.tertiaryTextColor = invert2(this.tertiaryColor);\n this.lineColor = invert2(this.background);\n this.textColor = invert2(this.background);\n this.mainBkg = \"#1f2020\";\n this.secondBkg = \"calculated\";\n this.mainContrastColor = \"lightgrey\";\n this.darkTextColor = lighten2(invert2(\"#323D47\"), 10);\n this.lineColor = \"calculated\";\n this.border1 = \"#ccc\";\n this.border2 = rgba(255, 255, 255, 0.25);\n this.arrowheadColor = \"calculated\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#181818\";\n this.textColor = \"#ccc\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#F9FFFE\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"calculated\";\n this.activationBkgColor = \"calculated\";\n this.sequenceNumberColor = \"black\";\n this.sectionBkgColor = darken2(\"#EAE8D9\", 30);\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"#EAE8D9\";\n this.excludeBkgColor = darken2(this.sectionBkgColor, 10);\n this.taskBorderColor = rgba(255, 255, 255, 70);\n this.taskBkgColor = \"calculated\";\n this.taskTextColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = rgba(255, 255, 255, 50);\n this.activeTaskBkgColor = \"#81B1DB\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#E83737\";\n this.critBkgColor = \"#E83737\";\n this.taskTextDarkColor = \"calculated\";\n this.todayLineColor = \"#DB5757\";\n this.vertLineColor = \"#00BFFF\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = this.rowOdd || lighten2(this.mainBkg, 5) || \"#ffffff\";\n this.rowEven = this.rowEven || darken2(this.mainBkg, 10);\n this.labelColor = \"calculated\";\n this.errorBkgColor = \"#a44141\";\n this.errorTextColor = \"#ddd\";\n }\n updateColors() {\n this.secondBkg = lighten2(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = lighten2(this.labelBackground, 25);\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.secondaryBorderColor;\n this.noteBkgColor = this.secondBkg;\n this.noteTextColor = this.secondaryTextColor;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = lighten2(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#555\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#f4f4f4\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust3(this.primaryColor, { h: 64 });\n this.fillType3 = adjust3(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust3(this.primaryColor, { h: -64 });\n this.fillType5 = adjust3(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust3(this.primaryColor, { h: 128 });\n this.fillType7 = adjust3(this.secondaryColor, { h: 128 });\n this.cScale1 = this.cScale1 || \"#0b0000\";\n this.cScale2 = this.cScale2 || \"#4d1037\";\n this.cScale3 = this.cScale3 || \"#3f5258\";\n this.cScale4 = this.cScale4 || \"#4f2f1b\";\n this.cScale5 = this.cScale5 || \"#6e0a0a\";\n this.cScale6 = this.cScale6 || \"#3b0048\";\n this.cScale7 = this.cScale7 || \"#995a01\";\n this.cScale8 = this.cScale8 || \"#154706\";\n this.cScale9 = this.cScale9 || \"#161722\";\n this.cScale10 = this.cScale10 || \"#00296f\";\n this.cScale11 = this.cScale11 || \"#01629c\";\n this.cScale12 = this.cScale12 || \"#010029\";\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust3(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust3(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust3(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust3(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust3(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust3(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust3(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust3(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust3(this.primaryColor, { h: 330 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert2(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten2(this[\"cScale\" + i], 10);\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust3(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust3(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust3(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust3(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust3(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust3(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust3(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust3(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark2(this.quadrant1Fill) ? lighten2(this.quadrant1Fill) : darken2(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22\"\n };\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.background\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.classText = this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken2(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = lighten2(this.secondaryColor, 20);\n this.git1 = lighten2(this.pie2 || this.secondaryColor, 20);\n this.git2 = lighten2(this.pie3 || this.tertiaryColor, 20);\n this.git3 = lighten2(this.pie4 || adjust3(this.primaryColor, { h: -30 }), 20);\n this.git4 = lighten2(this.pie5 || adjust3(this.primaryColor, { h: -60 }), 20);\n this.git5 = lighten2(this.pie6 || adjust3(this.primaryColor, { h: -90 }), 10);\n this.git6 = lighten2(this.pie7 || adjust3(this.primaryColor, { h: 60 }), 10);\n this.git7 = lighten2(this.pie8 || adjust3(this.primaryColor, { h: 120 }), 20);\n this.gitInv0 = this.gitInv0 || invert2(this.git0);\n this.gitInv1 = this.gitInv1 || invert2(this.git1);\n this.gitInv2 = this.gitInv2 || invert2(this.git2);\n this.gitInv3 = this.gitInv3 || invert2(this.git3);\n this.gitInv4 = this.gitInv4 || invert2(this.git4);\n this.gitInv5 = this.gitInv5 || invert2(this.git5);\n this.gitInv6 = this.gitInv6 || invert2(this.git6);\n this.gitInv7 = this.gitInv7 || invert2(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert2(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert2(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || lighten2(this.background, 12);\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || lighten2(this.background, 2);\n this.nodeBorder = this.nodeBorder || \"#999\";\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables2 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme2();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-default.js\nimport { invert as invert3, lighten as lighten3, rgba as rgba2, adjust as adjust4, darken as darken3, isDark as isDark3 } from \"khroma\";\nvar Theme3 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#ECECFF\";\n this.secondaryColor = adjust4(this.primaryColor, { h: 120 });\n this.secondaryColor = \"#ffffde\";\n this.tertiaryColor = adjust4(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert3(this.primaryColor);\n this.secondaryTextColor = invert3(this.secondaryColor);\n this.tertiaryTextColor = invert3(this.tertiaryColor);\n this.lineColor = invert3(this.background);\n this.textColor = invert3(this.background);\n this.background = \"white\";\n this.mainBkg = \"#ECECFF\";\n this.secondBkg = \"#ffffde\";\n this.lineColor = \"#333333\";\n this.border1 = \"#9370DB\";\n this.border2 = \"#aaaa33\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"rgba(232,232,232, 0.8)\";\n this.textColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = \"calculated\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.vertLineColor = \"calculated\";\n this.sectionBkgColor = rgba2(102, 102, 255, 0.49);\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#fff400\";\n this.taskBorderColor = \"#534fbc\";\n this.taskBkgColor = \"#8a90dd\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"#534fbc\";\n this.activeTaskBkgColor = \"#bfc7ff\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.vertLineColor = \"navy\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = \"calculated\";\n this.rowEven = \"calculated\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n this.updateColors();\n }\n updateColors() {\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust4(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust4(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust4(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust4(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust4(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust4(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust4(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust4(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust4(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken3(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken3(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken3(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken3(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust4(this[\"cScale\" + i], { h: 180 });\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust4(this.mainBkg, { h: 30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust4(this.mainBkg, { h: 30, l: -(7 + i * 5) });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n if (this.labelTextColor !== \"calculated\") {\n this.cScaleLabel0 = this.cScaleLabel0 || invert3(this.labelTextColor);\n this.cScaleLabel3 = this.cScaleLabel3 || invert3(this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.labelTextColor;\n }\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n this.actorBorder = lighten3(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.rowOdd = this.rowOdd || lighten3(this.primaryColor, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten3(this.primaryColor, 1);\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust4(this.primaryColor, { h: 64 });\n this.fillType3 = adjust4(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust4(this.primaryColor, { h: -64 });\n this.fillType5 = adjust4(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust4(this.primaryColor, { h: 128 });\n this.fillType7 = adjust4(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || adjust4(this.tertiaryColor, { l: -40 });\n this.pie4 = this.pie4 || adjust4(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust4(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust4(this.tertiaryColor, { l: -20 });\n this.pie7 = this.pie7 || adjust4(this.primaryColor, { h: 60, l: -20 });\n this.pie8 = this.pie8 || adjust4(this.primaryColor, { h: -60, l: -40 });\n this.pie9 = this.pie9 || adjust4(this.primaryColor, { h: 120, l: -40 });\n this.pie10 = this.pie10 || adjust4(this.primaryColor, { h: 60, l: -40 });\n this.pie11 = this.pie11 || adjust4(this.primaryColor, { h: -90, l: -40 });\n this.pie12 = this.pie12 || adjust4(this.primaryColor, { h: 120, l: -30 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust4(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust4(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust4(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust4(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust4(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust4(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark3(this.quadrant1Fill) ? lighten3(this.quadrant1Fill) : darken3(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust4(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust4(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust4(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust4(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust4(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten3(this.git0, 25);\n this.git1 = lighten3(this.git1, 25);\n this.git2 = lighten3(this.git2, 25);\n this.git3 = lighten3(this.git3, 25);\n this.git4 = lighten3(this.git4, 25);\n this.git5 = lighten3(this.git5, 25);\n this.git6 = lighten3(this.git6, 25);\n this.git7 = lighten3(this.git7, 25);\n } else {\n this.git0 = darken3(this.git0, 25);\n this.git1 = darken3(this.git1, 25);\n this.git2 = darken3(this.git2, 25);\n this.git3 = darken3(this.git3, 25);\n this.git4 = darken3(this.git4, 25);\n this.git5 = darken3(this.git5, 25);\n this.git6 = darken3(this.git6, 25);\n this.git7 = darken3(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || darken3(invert3(this.git0), 25);\n this.gitInv1 = this.gitInv1 || invert3(this.git1);\n this.gitInv2 = this.gitInv2 || invert3(this.git2);\n this.gitInv3 = this.gitInv3 || invert3(this.git3);\n this.gitInv4 = this.gitInv4 || invert3(this.git4);\n this.gitInv5 = this.gitInv5 || invert3(this.git5);\n this.gitInv6 = this.gitInv6 || invert3(this.git6);\n this.gitInv7 = this.gitInv7 || invert3(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert3(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert3(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n Object.keys(this).forEach((k) => {\n if (this[k] === \"calculated\") {\n this[k] = void 0;\n }\n });\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables3 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme3();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-forest.js\nimport { adjust as adjust5, darken as darken4, invert as invert4, isDark as isDark4, lighten as lighten4 } from \"khroma\";\nvar Theme4 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#cde498\";\n this.secondaryColor = \"#cdffb2\";\n this.background = \"white\";\n this.mainBkg = \"#cde498\";\n this.secondBkg = \"#cdffb2\";\n this.lineColor = \"green\";\n this.border1 = \"#13540c\";\n this.border2 = \"#6eaa49\";\n this.arrowheadColor = \"green\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.tertiaryColor = lighten4(\"#cde498\", 10);\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert4(this.primaryColor);\n this.secondaryTextColor = invert4(this.secondaryColor);\n this.tertiaryTextColor = invert4(this.primaryColor);\n this.lineColor = invert4(this.background);\n this.textColor = invert4(this.background);\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#333\";\n this.edgeLabelBackground = \"#e8e8e8\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"#333\";\n this.signalTextColor = \"#333\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"#326932\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"#6eaa49\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#6eaa49\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"#487e3a\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.vertLineColor = \"#00BFFF\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.actorBorder = darken4(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust5(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust5(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust5(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust5(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust5(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust5(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust5(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust5(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust5(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken4(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken4(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken4(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken4(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust5(this[\"cScale\" + i], { h: 180 });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust5(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust5(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.rowOdd = this.rowOdd || lighten4(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten4(this.mainBkg, 20);\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust5(this.primaryColor, { h: 64 });\n this.fillType3 = adjust5(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust5(this.primaryColor, { h: -64 });\n this.fillType5 = adjust5(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust5(this.primaryColor, { h: 128 });\n this.fillType7 = adjust5(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust5(this.primaryColor, { l: -30 });\n this.pie5 = this.pie5 || adjust5(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust5(this.tertiaryColor, { h: 40, l: -40 });\n this.pie7 = this.pie7 || adjust5(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust5(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust5(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust5(this.primaryColor, { h: 60, l: -50 });\n this.pie11 = this.pie11 || adjust5(this.primaryColor, { h: -60, l: -50 });\n this.pie12 = this.pie12 || adjust5(this.primaryColor, { h: 120, l: -50 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust5(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust5(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust5(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust5(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust5(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust5(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark4(this.quadrant1Fill) ? lighten4(this.quadrant1Fill) : darken4(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.mainBkg\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust5(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust5(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust5(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust5(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust5(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten4(this.git0, 25);\n this.git1 = lighten4(this.git1, 25);\n this.git2 = lighten4(this.git2, 25);\n this.git3 = lighten4(this.git3, 25);\n this.git4 = lighten4(this.git4, 25);\n this.git5 = lighten4(this.git5, 25);\n this.git6 = lighten4(this.git6, 25);\n this.git7 = lighten4(this.git7, 25);\n } else {\n this.git0 = darken4(this.git0, 25);\n this.git1 = darken4(this.git1, 25);\n this.git2 = darken4(this.git2, 25);\n this.git3 = darken4(this.git3, 25);\n this.git4 = darken4(this.git4, 25);\n this.git5 = darken4(this.git5, 25);\n this.git6 = darken4(this.git6, 25);\n this.git7 = darken4(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert4(this.git0);\n this.gitInv1 = this.gitInv1 || invert4(this.git1);\n this.gitInv2 = this.gitInv2 || invert4(this.git2);\n this.gitInv3 = this.gitInv3 || invert4(this.git3);\n this.gitInv4 = this.gitInv4 || invert4(this.git4);\n this.gitInv5 = this.gitInv5 || invert4(this.git5);\n this.gitInv6 = this.gitInv6 || invert4(this.git6);\n this.gitInv7 = this.gitInv7 || invert4(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert4(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert4(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables4 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme4();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-neutral.js\nimport { invert as invert5, darken as darken5, lighten as lighten5, adjust as adjust6, isDark as isDark5 } from \"khroma\";\nvar Theme5 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.primaryColor = \"#eee\";\n this.contrast = \"#707070\";\n this.secondaryColor = lighten5(this.contrast, 55);\n this.background = \"#ffffff\";\n this.tertiaryColor = adjust6(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert5(this.primaryColor);\n this.secondaryTextColor = invert5(this.secondaryColor);\n this.tertiaryTextColor = invert5(this.tertiaryColor);\n this.lineColor = invert5(this.background);\n this.textColor = invert5(this.background);\n this.mainBkg = \"#eee\";\n this.secondBkg = \"calculated\";\n this.lineColor = \"#666\";\n this.border1 = \"#999\";\n this.border2 = \"calculated\";\n this.note = \"#ffa\";\n this.text = \"#333\";\n this.critical = \"#d42\";\n this.done = \"#bbb\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"white\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = this.actorBorder;\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"calculated\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.vertLineColor = \"calculated\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = this.rowOdd || lighten5(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || \"#f4f4f4\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.secondBkg = lighten5(this.contrast, 55);\n this.border2 = this.contrast;\n this.actorBorder = lighten5(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = \"#999\";\n this.noteBkgColor = \"#666\";\n this.noteTextColor = \"#fff\";\n this.cScale0 = this.cScale0 || \"#555\";\n this.cScale1 = this.cScale1 || \"#F4F4F4\";\n this.cScale2 = this.cScale2 || \"#555\";\n this.cScale3 = this.cScale3 || \"#BBB\";\n this.cScale4 = this.cScale4 || \"#777\";\n this.cScale5 = this.cScale5 || \"#999\";\n this.cScale6 = this.cScale6 || \"#DDD\";\n this.cScale7 = this.cScale7 || \"#FFF\";\n this.cScale8 = this.cScale8 || \"#DDD\";\n this.cScale9 = this.cScale9 || \"#BBB\";\n this.cScale10 = this.cScale10 || \"#999\";\n this.cScale11 = this.cScale11 || \"#777\";\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert5(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten5(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken5(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.cScaleLabel0 = this.cScaleLabel0 || this.cScale1;\n this.cScaleLabel2 = this.cScaleLabel2 || this.cScale1;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust6(this.mainBkg, { l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust6(this.mainBkg, { l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n this.sectionBkgColor = lighten5(this.contrast, 30);\n this.sectionBkgColor2 = lighten5(this.contrast, 30);\n this.taskBorderColor = darken5(this.contrast, 10);\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = lighten5(this.border1, 30);\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = darken5(this.critBkgColor, 10);\n this.todayLineColor = this.critBkgColor;\n this.vertLineColor = this.critBkgColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.transitionColor = this.transitionColor || \"#000\";\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f4f4f4\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.stateBorder = this.stateBorder || \"#000\";\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#222\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust6(this.primaryColor, { h: 64 });\n this.fillType3 = adjust6(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust6(this.primaryColor, { h: -64 });\n this.fillType5 = adjust6(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust6(this.primaryColor, { h: 128 });\n this.fillType7 = adjust6(this.secondaryColor, { h: 128 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pie12 = this.pie0;\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust6(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust6(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust6(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust6(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust6(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust6(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark5(this.quadrant1Fill) ? lighten5(this.quadrant1Fill) : darken5(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0\"\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = darken5(this.pie1, 25) || this.primaryColor;\n this.git1 = this.pie2 || this.secondaryColor;\n this.git2 = this.pie3 || this.tertiaryColor;\n this.git3 = this.pie4 || adjust6(this.primaryColor, { h: -30 });\n this.git4 = this.pie5 || adjust6(this.primaryColor, { h: -60 });\n this.git5 = this.pie6 || adjust6(this.primaryColor, { h: -90 });\n this.git6 = this.pie7 || adjust6(this.primaryColor, { h: 60 });\n this.git7 = this.pie8 || adjust6(this.primaryColor, { h: 120 });\n this.gitInv0 = this.gitInv0 || invert5(this.git0);\n this.gitInv1 = this.gitInv1 || invert5(this.git1);\n this.gitInv2 = this.gitInv2 || invert5(this.git2);\n this.gitInv3 = this.gitInv3 || invert5(this.git3);\n this.gitInv4 = this.gitInv4 || invert5(this.git4);\n this.gitInv5 = this.gitInv5 || invert5(this.git5);\n this.gitInv6 = this.gitInv6 || invert5(this.git6);\n this.gitInv7 = this.gitInv7 || invert5(this.git7);\n this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n this.gitBranchLabel0 = this.branchLabelColor;\n this.gitBranchLabel1 = \"white\";\n this.gitBranchLabel2 = this.branchLabelColor;\n this.gitBranchLabel3 = \"white\";\n this.gitBranchLabel4 = this.branchLabelColor;\n this.gitBranchLabel5 = this.branchLabelColor;\n this.gitBranchLabel6 = this.branchLabelColor;\n this.gitBranchLabel7 = this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables5 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme5();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/index.js\nvar themes_default = {\n base: {\n getThemeVariables\n },\n dark: {\n getThemeVariables: getThemeVariables2\n },\n default: {\n getThemeVariables: getThemeVariables3\n },\n forest: {\n getThemeVariables: getThemeVariables4\n },\n neutral: {\n getThemeVariables: getThemeVariables5\n }\n};\n\n// src/schemas/config.schema.yaml?only-defaults=true\nvar config_schema_default = {\n \"flowchart\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"subGraphTitleMargin\": {\n \"top\": 0,\n \"bottom\": 0\n },\n \"diagramPadding\": 8,\n \"htmlLabels\": true,\n \"nodeSpacing\": 50,\n \"rankSpacing\": 50,\n \"curve\": \"basis\",\n \"padding\": 15,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"wrappingWidth\": 200,\n \"inheritDir\": false\n },\n \"sequence\": {\n \"useMaxWidth\": true,\n \"hideUnusedParticipants\": false,\n \"activationWidth\": 10,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"actorMargin\": 50,\n \"width\": 150,\n \"height\": 65,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"mirrorActors\": true,\n \"forceMenus\": false,\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"showSequenceNumbers\": false,\n \"actorFontSize\": 14,\n \"actorFontFamily\": '\"Open Sans\", sans-serif',\n \"actorFontWeight\": 400,\n \"noteFontSize\": 14,\n \"noteFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"noteFontWeight\": 400,\n \"noteAlign\": \"center\",\n \"messageFontSize\": 16,\n \"messageFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"messageFontWeight\": 400,\n \"wrap\": false,\n \"wrapPadding\": 10,\n \"labelBoxWidth\": 50,\n \"labelBoxHeight\": 20\n },\n \"gantt\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"barHeight\": 20,\n \"barGap\": 4,\n \"topPadding\": 50,\n \"rightPadding\": 75,\n \"leftPadding\": 75,\n \"gridLineStartPadding\": 35,\n \"fontSize\": 11,\n \"sectionFontSize\": 11,\n \"numberSectionStyles\": 4,\n \"axisFormat\": \"%Y-%m-%d\",\n \"topAxis\": false,\n \"displayMode\": \"\",\n \"weekday\": \"sunday\"\n },\n \"journey\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"maxLabelWidth\": 360,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"titleColor\": \"\",\n \"titleFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"titleFontSize\": \"4ex\"\n },\n \"class\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"arrowMarkerAbsolute\": false,\n \"dividerMargin\": 10,\n \"padding\": 5,\n \"textHeight\": 10,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"htmlLabels\": false,\n \"hideEmptyMembersBox\": false\n },\n \"state\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"dividerMargin\": 10,\n \"sizeUnit\": 5,\n \"padding\": 8,\n \"textHeight\": 10,\n \"titleShift\": -15,\n \"noteMargin\": 10,\n \"forkWidth\": 70,\n \"forkHeight\": 7,\n \"miniPadding\": 2,\n \"fontSizeFactor\": 5.02,\n \"fontSize\": 24,\n \"labelHeight\": 16,\n \"edgeLengthFactor\": \"20\",\n \"compositTitleSize\": 35,\n \"radius\": 5,\n \"defaultRenderer\": \"dagre-wrapper\"\n },\n \"er\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 20,\n \"layoutDirection\": \"TB\",\n \"minEntityWidth\": 100,\n \"minEntityHeight\": 75,\n \"entityPadding\": 15,\n \"nodeSpacing\": 140,\n \"rankSpacing\": 80,\n \"stroke\": \"gray\",\n \"fill\": \"honeydew\",\n \"fontSize\": 12\n },\n \"pie\": {\n \"useMaxWidth\": true,\n \"textPosition\": 0.75\n },\n \"quadrantChart\": {\n \"useMaxWidth\": true,\n \"chartWidth\": 500,\n \"chartHeight\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"quadrantPadding\": 5,\n \"xAxisLabelPadding\": 5,\n \"yAxisLabelPadding\": 5,\n \"xAxisLabelFontSize\": 16,\n \"yAxisLabelFontSize\": 16,\n \"quadrantLabelFontSize\": 16,\n \"quadrantTextTopPadding\": 5,\n \"pointTextPadding\": 5,\n \"pointLabelFontSize\": 12,\n \"pointRadius\": 5,\n \"xAxisPosition\": \"top\",\n \"yAxisPosition\": \"left\",\n \"quadrantInternalBorderStrokeWidth\": 1,\n \"quadrantExternalBorderStrokeWidth\": 2\n },\n \"xyChart\": {\n \"useMaxWidth\": true,\n \"width\": 700,\n \"height\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"showDataLabel\": false,\n \"showTitle\": true,\n \"xAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"yAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"chartOrientation\": \"vertical\",\n \"plotReservedSpacePercent\": 50\n },\n \"requirement\": {\n \"useMaxWidth\": true,\n \"rect_fill\": \"#f9f9f9\",\n \"text_color\": \"#333\",\n \"rect_border_size\": \"0.5px\",\n \"rect_border_color\": \"#bbb\",\n \"rect_min_width\": 200,\n \"rect_min_height\": 200,\n \"fontSize\": 14,\n \"rect_padding\": 10,\n \"line_height\": 20\n },\n \"mindmap\": {\n \"useMaxWidth\": true,\n \"padding\": 10,\n \"maxNodeWidth\": 200,\n \"layoutAlgorithm\": \"cose-bilkent\"\n },\n \"kanban\": {\n \"useMaxWidth\": true,\n \"padding\": 8,\n \"sectionWidth\": 200,\n \"ticketBaseUrl\": \"\"\n },\n \"timeline\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"disableMulticolor\": false\n },\n \"gitGraph\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 8,\n \"nodeLabel\": {\n \"width\": 75,\n \"height\": 100,\n \"x\": -25,\n \"y\": 0\n },\n \"mainBranchName\": \"main\",\n \"mainBranchOrder\": 0,\n \"showCommitLabel\": true,\n \"showBranches\": true,\n \"rotateCommitLabel\": true,\n \"parallelCommits\": false,\n \"arrowMarkerAbsolute\": false\n },\n \"c4\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"c4ShapeMargin\": 50,\n \"c4ShapePadding\": 20,\n \"width\": 216,\n \"height\": 60,\n \"boxMargin\": 10,\n \"c4ShapeInRow\": 4,\n \"nextLinePaddingX\": 0,\n \"c4BoundaryInRow\": 2,\n \"personFontSize\": 14,\n \"personFontFamily\": '\"Open Sans\", sans-serif',\n \"personFontWeight\": \"normal\",\n \"external_personFontSize\": 14,\n \"external_personFontFamily\": '\"Open Sans\", sans-serif',\n \"external_personFontWeight\": \"normal\",\n \"systemFontSize\": 14,\n \"systemFontFamily\": '\"Open Sans\", sans-serif',\n \"systemFontWeight\": \"normal\",\n \"external_systemFontSize\": 14,\n \"external_systemFontFamily\": '\"Open Sans\", sans-serif',\n \"external_systemFontWeight\": \"normal\",\n \"system_dbFontSize\": 14,\n \"system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"system_dbFontWeight\": \"normal\",\n \"external_system_dbFontSize\": 14,\n \"external_system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_dbFontWeight\": \"normal\",\n \"system_queueFontSize\": 14,\n \"system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"system_queueFontWeight\": \"normal\",\n \"external_system_queueFontSize\": 14,\n \"external_system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_queueFontWeight\": \"normal\",\n \"boundaryFontSize\": 14,\n \"boundaryFontFamily\": '\"Open Sans\", sans-serif',\n \"boundaryFontWeight\": \"normal\",\n \"messageFontSize\": 12,\n \"messageFontFamily\": '\"Open Sans\", sans-serif',\n \"messageFontWeight\": \"normal\",\n \"containerFontSize\": 14,\n \"containerFontFamily\": '\"Open Sans\", sans-serif',\n \"containerFontWeight\": \"normal\",\n \"external_containerFontSize\": 14,\n \"external_containerFontFamily\": '\"Open Sans\", sans-serif',\n \"external_containerFontWeight\": \"normal\",\n \"container_dbFontSize\": 14,\n \"container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"container_dbFontWeight\": \"normal\",\n \"external_container_dbFontSize\": 14,\n \"external_container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_dbFontWeight\": \"normal\",\n \"container_queueFontSize\": 14,\n \"container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"container_queueFontWeight\": \"normal\",\n \"external_container_queueFontSize\": 14,\n \"external_container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_queueFontWeight\": \"normal\",\n \"componentFontSize\": 14,\n \"componentFontFamily\": '\"Open Sans\", sans-serif',\n \"componentFontWeight\": \"normal\",\n \"external_componentFontSize\": 14,\n \"external_componentFontFamily\": '\"Open Sans\", sans-serif',\n \"external_componentFontWeight\": \"normal\",\n \"component_dbFontSize\": 14,\n \"component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"component_dbFontWeight\": \"normal\",\n \"external_component_dbFontSize\": 14,\n \"external_component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_dbFontWeight\": \"normal\",\n \"component_queueFontSize\": 14,\n \"component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"component_queueFontWeight\": \"normal\",\n \"external_component_queueFontSize\": 14,\n \"external_component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_queueFontWeight\": \"normal\",\n \"wrap\": true,\n \"wrapPadding\": 10,\n \"person_bg_color\": \"#08427B\",\n \"person_border_color\": \"#073B6F\",\n \"external_person_bg_color\": \"#686868\",\n \"external_person_border_color\": \"#8A8A8A\",\n \"system_bg_color\": \"#1168BD\",\n \"system_border_color\": \"#3C7FC0\",\n \"system_db_bg_color\": \"#1168BD\",\n \"system_db_border_color\": \"#3C7FC0\",\n \"system_queue_bg_color\": \"#1168BD\",\n \"system_queue_border_color\": \"#3C7FC0\",\n \"external_system_bg_color\": \"#999999\",\n \"external_system_border_color\": \"#8A8A8A\",\n \"external_system_db_bg_color\": \"#999999\",\n \"external_system_db_border_color\": \"#8A8A8A\",\n \"external_system_queue_bg_color\": \"#999999\",\n \"external_system_queue_border_color\": \"#8A8A8A\",\n \"container_bg_color\": \"#438DD5\",\n \"container_border_color\": \"#3C7FC0\",\n \"container_db_bg_color\": \"#438DD5\",\n \"container_db_border_color\": \"#3C7FC0\",\n \"container_queue_bg_color\": \"#438DD5\",\n \"container_queue_border_color\": \"#3C7FC0\",\n \"external_container_bg_color\": \"#B3B3B3\",\n \"external_container_border_color\": \"#A6A6A6\",\n \"external_container_db_bg_color\": \"#B3B3B3\",\n \"external_container_db_border_color\": \"#A6A6A6\",\n \"external_container_queue_bg_color\": \"#B3B3B3\",\n \"external_container_queue_border_color\": \"#A6A6A6\",\n \"component_bg_color\": \"#85BBF0\",\n \"component_border_color\": \"#78A8D8\",\n \"component_db_bg_color\": \"#85BBF0\",\n \"component_db_border_color\": \"#78A8D8\",\n \"component_queue_bg_color\": \"#85BBF0\",\n \"component_queue_border_color\": \"#78A8D8\",\n \"external_component_bg_color\": \"#CCCCCC\",\n \"external_component_border_color\": \"#BFBFBF\",\n \"external_component_db_bg_color\": \"#CCCCCC\",\n \"external_component_db_border_color\": \"#BFBFBF\",\n \"external_component_queue_bg_color\": \"#CCCCCC\",\n \"external_component_queue_border_color\": \"#BFBFBF\"\n },\n \"sankey\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 400,\n \"linkColor\": \"gradient\",\n \"nodeAlignment\": \"justify\",\n \"showValues\": true,\n \"prefix\": \"\",\n \"suffix\": \"\"\n },\n \"block\": {\n \"useMaxWidth\": true,\n \"padding\": 8\n },\n \"packet\": {\n \"useMaxWidth\": true,\n \"rowHeight\": 32,\n \"bitWidth\": 32,\n \"bitsPerRow\": 32,\n \"showBits\": true,\n \"paddingX\": 5,\n \"paddingY\": 5\n },\n \"architecture\": {\n \"useMaxWidth\": true,\n \"padding\": 40,\n \"iconSize\": 80,\n \"fontSize\": 16\n },\n \"radar\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 600,\n \"marginTop\": 50,\n \"marginRight\": 50,\n \"marginBottom\": 50,\n \"marginLeft\": 50,\n \"axisScaleFactor\": 1,\n \"axisLabelFactor\": 1.05,\n \"curveTension\": 0.17\n },\n \"theme\": \"default\",\n \"look\": \"classic\",\n \"handDrawnSeed\": 0,\n \"layout\": \"dagre\",\n \"maxTextSize\": 5e4,\n \"maxEdges\": 500,\n \"darkMode\": false,\n \"fontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif;',\n \"logLevel\": 5,\n \"securityLevel\": \"strict\",\n \"startOnLoad\": true,\n \"arrowMarkerAbsolute\": false,\n \"secure\": [\n \"secure\",\n \"securityLevel\",\n \"startOnLoad\",\n \"maxTextSize\",\n \"suppressErrorRendering\",\n \"maxEdges\"\n ],\n \"legacyMathML\": false,\n \"forceLegacyMathML\": false,\n \"deterministicIds\": false,\n \"fontSize\": 16,\n \"markdownAutoWrap\": true,\n \"suppressErrorRendering\": false\n};\n\n// src/defaultConfig.ts\nvar config = {\n ...config_schema_default,\n // Set, even though they're `undefined` so that `configKeys` finds these keys\n // TODO: Should we replace these with `null` so that they can go in the JSON Schema?\n deterministicIDSeed: void 0,\n elk: {\n // mergeEdges is needed here to be considered\n mergeEdges: false,\n nodePlacementStrategy: \"BRANDES_KOEPF\",\n forceNodeModelOrder: false,\n considerModelOrder: \"NODES_AND_EDGES\"\n },\n themeCSS: void 0,\n // add non-JSON default config values\n themeVariables: themes_default.default.getThemeVariables(),\n sequence: {\n ...config_schema_default.sequence,\n messageFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n }, \"messageFont\"),\n noteFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.noteFontFamily,\n fontSize: this.noteFontSize,\n fontWeight: this.noteFontWeight\n };\n }, \"noteFont\"),\n actorFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.actorFontFamily,\n fontSize: this.actorFontSize,\n fontWeight: this.actorFontWeight\n };\n }, \"actorFont\")\n },\n class: {\n hideEmptyMembersBox: false\n },\n gantt: {\n ...config_schema_default.gantt,\n tickInterval: void 0,\n useWidth: void 0\n // can probably be removed since `configKeys` already includes this\n },\n c4: {\n ...config_schema_default.c4,\n useWidth: void 0,\n personFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.personFontFamily,\n fontSize: this.personFontSize,\n fontWeight: this.personFontWeight\n };\n }, \"personFont\"),\n flowchart: {\n ...config_schema_default.flowchart,\n inheritDir: false\n // default to legacy behavior\n },\n external_personFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_personFontFamily,\n fontSize: this.external_personFontSize,\n fontWeight: this.external_personFontWeight\n };\n }, \"external_personFont\"),\n systemFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.systemFontFamily,\n fontSize: this.systemFontSize,\n fontWeight: this.systemFontWeight\n };\n }, \"systemFont\"),\n external_systemFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_systemFontFamily,\n fontSize: this.external_systemFontSize,\n fontWeight: this.external_systemFontWeight\n };\n }, \"external_systemFont\"),\n system_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.system_dbFontFamily,\n fontSize: this.system_dbFontSize,\n fontWeight: this.system_dbFontWeight\n };\n }, \"system_dbFont\"),\n external_system_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_system_dbFontFamily,\n fontSize: this.external_system_dbFontSize,\n fontWeight: this.external_system_dbFontWeight\n };\n }, \"external_system_dbFont\"),\n system_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.system_queueFontFamily,\n fontSize: this.system_queueFontSize,\n fontWeight: this.system_queueFontWeight\n };\n }, \"system_queueFont\"),\n external_system_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_system_queueFontFamily,\n fontSize: this.external_system_queueFontSize,\n fontWeight: this.external_system_queueFontWeight\n };\n }, \"external_system_queueFont\"),\n containerFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.containerFontFamily,\n fontSize: this.containerFontSize,\n fontWeight: this.containerFontWeight\n };\n }, \"containerFont\"),\n external_containerFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_containerFontFamily,\n fontSize: this.external_containerFontSize,\n fontWeight: this.external_containerFontWeight\n };\n }, \"external_containerFont\"),\n container_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.container_dbFontFamily,\n fontSize: this.container_dbFontSize,\n fontWeight: this.container_dbFontWeight\n };\n }, \"container_dbFont\"),\n external_container_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_container_dbFontFamily,\n fontSize: this.external_container_dbFontSize,\n fontWeight: this.external_container_dbFontWeight\n };\n }, \"external_container_dbFont\"),\n container_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.container_queueFontFamily,\n fontSize: this.container_queueFontSize,\n fontWeight: this.container_queueFontWeight\n };\n }, \"container_queueFont\"),\n external_container_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_container_queueFontFamily,\n fontSize: this.external_container_queueFontSize,\n fontWeight: this.external_container_queueFontWeight\n };\n }, \"external_container_queueFont\"),\n componentFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.componentFontFamily,\n fontSize: this.componentFontSize,\n fontWeight: this.componentFontWeight\n };\n }, \"componentFont\"),\n external_componentFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_componentFontFamily,\n fontSize: this.external_componentFontSize,\n fontWeight: this.external_componentFontWeight\n };\n }, \"external_componentFont\"),\n component_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.component_dbFontFamily,\n fontSize: this.component_dbFontSize,\n fontWeight: this.component_dbFontWeight\n };\n }, \"component_dbFont\"),\n external_component_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_component_dbFontFamily,\n fontSize: this.external_component_dbFontSize,\n fontWeight: this.external_component_dbFontWeight\n };\n }, \"external_component_dbFont\"),\n component_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.component_queueFontFamily,\n fontSize: this.component_queueFontSize,\n fontWeight: this.component_queueFontWeight\n };\n }, \"component_queueFont\"),\n external_component_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_component_queueFontFamily,\n fontSize: this.external_component_queueFontSize,\n fontWeight: this.external_component_queueFontWeight\n };\n }, \"external_component_queueFont\"),\n boundaryFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.boundaryFontFamily,\n fontSize: this.boundaryFontSize,\n fontWeight: this.boundaryFontWeight\n };\n }, \"boundaryFont\"),\n messageFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n }, \"messageFont\")\n },\n pie: {\n ...config_schema_default.pie,\n useWidth: 984\n },\n xyChart: {\n ...config_schema_default.xyChart,\n useWidth: void 0\n },\n requirement: {\n ...config_schema_default.requirement,\n useWidth: void 0\n },\n packet: {\n ...config_schema_default.packet\n },\n radar: {\n ...config_schema_default.radar\n },\n treemap: {\n useMaxWidth: true,\n padding: 10,\n diagramPadding: 8,\n showValues: true,\n nodeWidth: 100,\n nodeHeight: 40,\n borderWidth: 1,\n valueFontSize: 12,\n labelFontSize: 14,\n valueFormat: \",\"\n }\n};\nvar keyify = /* @__PURE__ */ __name((obj, prefix = \"\") => Object.keys(obj).reduce((res, el) => {\n if (Array.isArray(obj[el])) {\n return res;\n } else if (typeof obj[el] === \"object\" && obj[el] !== null) {\n return [...res, prefix + el, ...keyify(obj[el], \"\")];\n }\n return [...res, prefix + el];\n}, []), \"keyify\");\nvar configKeys = new Set(keyify(config, \"\"));\nvar defaultConfig_default = config;\n\n// src/utils/sanitizeDirective.ts\nvar sanitizeDirective = /* @__PURE__ */ __name((args) => {\n log.debug(\"sanitizeDirective called with\", args);\n if (typeof args !== \"object\" || args == null) {\n return;\n }\n if (Array.isArray(args)) {\n args.forEach((arg) => sanitizeDirective(arg));\n return;\n }\n for (const key of Object.keys(args)) {\n log.debug(\"Checking key\", key);\n if (key.startsWith(\"__\") || key.includes(\"proto\") || key.includes(\"constr\") || !configKeys.has(key) || args[key] == null) {\n log.debug(\"sanitize deleting key: \", key);\n delete args[key];\n continue;\n }\n if (typeof args[key] === \"object\") {\n log.debug(\"sanitizing object\", key);\n sanitizeDirective(args[key]);\n continue;\n }\n const cssMatchers = [\"themeCSS\", \"fontFamily\", \"altFontFamily\"];\n for (const cssKey of cssMatchers) {\n if (key.includes(cssKey)) {\n log.debug(\"sanitizing css option\", key);\n args[key] = sanitizeCss(args[key]);\n }\n }\n }\n if (args.themeVariables) {\n for (const k of Object.keys(args.themeVariables)) {\n const val = args.themeVariables[k];\n if (val?.match && !val.match(/^[\\d \"#%(),.;A-Za-z]+$/)) {\n args.themeVariables[k] = \"\";\n }\n }\n }\n log.debug(\"After sanitization\", args);\n}, \"sanitizeDirective\");\nvar sanitizeCss = /* @__PURE__ */ __name((str) => {\n let startCnt = 0;\n let endCnt = 0;\n for (const element of str) {\n if (startCnt < endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n if (element === \"{\") {\n startCnt++;\n } else if (element === \"}\") {\n endCnt++;\n }\n }\n if (startCnt !== endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n return str;\n}, \"sanitizeCss\");\n\n// src/config.ts\nvar defaultConfig = Object.freeze(defaultConfig_default);\nvar siteConfig = assignWithDepth_default({}, defaultConfig);\nvar configFromInitialize;\nvar directives = [];\nvar currentConfig = assignWithDepth_default({}, defaultConfig);\nvar updateCurrentConfig = /* @__PURE__ */ __name((siteCfg, _directives) => {\n let cfg = assignWithDepth_default({}, siteCfg);\n let sumOfDirectives = {};\n for (const d of _directives) {\n sanitize(d);\n sumOfDirectives = assignWithDepth_default(sumOfDirectives, d);\n }\n cfg = assignWithDepth_default(cfg, sumOfDirectives);\n if (sumOfDirectives.theme && sumOfDirectives.theme in themes_default) {\n const tmpConfigFromInitialize = assignWithDepth_default({}, configFromInitialize);\n const themeVariables = assignWithDepth_default(\n tmpConfigFromInitialize.themeVariables || {},\n sumOfDirectives.themeVariables\n );\n if (cfg.theme && cfg.theme in themes_default) {\n cfg.themeVariables = themes_default[cfg.theme].getThemeVariables(themeVariables);\n }\n }\n currentConfig = cfg;\n checkConfig(currentConfig);\n return currentConfig;\n}, \"updateCurrentConfig\");\nvar setSiteConfig = /* @__PURE__ */ __name((conf) => {\n siteConfig = assignWithDepth_default({}, defaultConfig);\n siteConfig = assignWithDepth_default(siteConfig, conf);\n if (conf.theme && themes_default[conf.theme]) {\n siteConfig.themeVariables = themes_default[conf.theme].getThemeVariables(conf.themeVariables);\n }\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n}, \"setSiteConfig\");\nvar saveConfigFromInitialize = /* @__PURE__ */ __name((conf) => {\n configFromInitialize = assignWithDepth_default({}, conf);\n}, \"saveConfigFromInitialize\");\nvar updateSiteConfig = /* @__PURE__ */ __name((conf) => {\n siteConfig = assignWithDepth_default(siteConfig, conf);\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n}, \"updateSiteConfig\");\nvar getSiteConfig = /* @__PURE__ */ __name(() => {\n return assignWithDepth_default({}, siteConfig);\n}, \"getSiteConfig\");\nvar setConfig = /* @__PURE__ */ __name((conf) => {\n checkConfig(conf);\n assignWithDepth_default(currentConfig, conf);\n return getConfig();\n}, \"setConfig\");\nvar getConfig = /* @__PURE__ */ __name(() => {\n return assignWithDepth_default({}, currentConfig);\n}, \"getConfig\");\nvar sanitize = /* @__PURE__ */ __name((options) => {\n if (!options) {\n return;\n }\n [\"secure\", ...siteConfig.secure ?? []].forEach((key) => {\n if (Object.hasOwn(options, key)) {\n log.debug(`Denied attempt to modify a secure key ${key}`, options[key]);\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (key.startsWith(\"__\")) {\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (typeof options[key] === \"string\" && (options[key].includes(\"<\") || options[key].includes(\">\") || options[key].includes(\"url(data:\"))) {\n delete options[key];\n }\n if (typeof options[key] === \"object\") {\n sanitize(options[key]);\n }\n });\n}, \"sanitize\");\nvar addDirective = /* @__PURE__ */ __name((directive) => {\n sanitizeDirective(directive);\n if (directive.fontFamily && !directive.themeVariables?.fontFamily) {\n directive.themeVariables = {\n ...directive.themeVariables,\n fontFamily: directive.fontFamily\n };\n }\n directives.push(directive);\n updateCurrentConfig(siteConfig, directives);\n}, \"addDirective\");\nvar reset = /* @__PURE__ */ __name((config2 = siteConfig) => {\n directives = [];\n updateCurrentConfig(config2, directives);\n}, \"reset\");\nvar ConfigWarning = {\n LAZY_LOAD_DEPRECATED: \"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.\"\n};\nvar issuedWarnings = {};\nvar issueWarning = /* @__PURE__ */ __name((warning) => {\n if (issuedWarnings[warning]) {\n return;\n }\n log.warn(ConfigWarning[warning]);\n issuedWarnings[warning] = true;\n}, \"issueWarning\");\nvar checkConfig = /* @__PURE__ */ __name((config2) => {\n if (!config2) {\n return;\n }\n if (config2.lazyLoadedDiagrams || config2.loadExternalDiagramsAtStartup) {\n issueWarning(\"LAZY_LOAD_DEPRECATED\");\n }\n}, \"checkConfig\");\nvar getUserDefinedConfig = /* @__PURE__ */ __name(() => {\n let userConfig = {};\n if (configFromInitialize) {\n userConfig = assignWithDepth_default(userConfig, configFromInitialize);\n }\n for (const d of directives) {\n userConfig = assignWithDepth_default(userConfig, d);\n }\n return userConfig;\n}, \"getUserDefinedConfig\");\n\n// src/diagrams/common/common.ts\nimport DOMPurify from \"dompurify\";\nvar lineBreakRegex = //gi;\nvar getRows = /* @__PURE__ */ __name((s) => {\n if (!s) {\n return [\"\"];\n }\n const str = breakToPlaceholder(s).replace(/\\\\n/g, \"#br#\");\n return str.split(\"#br#\");\n}, \"getRows\");\nvar setupDompurifyHooksIfNotSetup = /* @__PURE__ */ (() => {\n let setup = false;\n return () => {\n if (!setup) {\n setupDompurifyHooks();\n setup = true;\n }\n };\n})();\nfunction setupDompurifyHooks() {\n const TEMPORARY_ATTRIBUTE = \"data-temp-href-target\";\n DOMPurify.addHook(\"beforeSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(\"target\")) {\n node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute(\"target\") ?? \"\");\n }\n });\n DOMPurify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {\n node.setAttribute(\"target\", node.getAttribute(TEMPORARY_ATTRIBUTE) ?? \"\");\n node.removeAttribute(TEMPORARY_ATTRIBUTE);\n if (node.getAttribute(\"target\") === \"_blank\") {\n node.setAttribute(\"rel\", \"noopener\");\n }\n }\n });\n}\n__name(setupDompurifyHooks, \"setupDompurifyHooks\");\nvar removeScript = /* @__PURE__ */ __name((txt) => {\n setupDompurifyHooksIfNotSetup();\n const sanitizedText = DOMPurify.sanitize(txt);\n return sanitizedText;\n}, \"removeScript\");\nvar sanitizeMore = /* @__PURE__ */ __name((text, config2) => {\n if (config2.flowchart?.htmlLabels !== false) {\n const level = config2.securityLevel;\n if (level === \"antiscript\" || level === \"strict\") {\n text = removeScript(text);\n } else if (level !== \"loose\") {\n text = breakToPlaceholder(text);\n text = text.replace(//g, \">\");\n text = text.replace(/=/g, \"=\");\n text = placeholderToBreak(text);\n }\n }\n return text;\n}, \"sanitizeMore\");\nvar sanitizeText = /* @__PURE__ */ __name((text, config2) => {\n if (!text) {\n return text;\n }\n if (config2.dompurifyConfig) {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), config2.dompurifyConfig).toString();\n } else {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), {\n FORBID_TAGS: [\"style\"]\n }).toString();\n }\n return text;\n}, \"sanitizeText\");\nvar sanitizeTextOrArray = /* @__PURE__ */ __name((a, config2) => {\n if (typeof a === \"string\") {\n return sanitizeText(a, config2);\n }\n return a.flat().map((x) => sanitizeText(x, config2));\n}, \"sanitizeTextOrArray\");\nvar hasBreaks = /* @__PURE__ */ __name((text) => {\n return lineBreakRegex.test(text);\n}, \"hasBreaks\");\nvar splitBreaks = /* @__PURE__ */ __name((text) => {\n return text.split(lineBreakRegex);\n}, \"splitBreaks\");\nvar placeholderToBreak = /* @__PURE__ */ __name((s) => {\n return s.replace(/#br#/g, \"
    \");\n}, \"placeholderToBreak\");\nvar breakToPlaceholder = /* @__PURE__ */ __name((s) => {\n return s.replace(lineBreakRegex, \"#br#\");\n}, \"breakToPlaceholder\");\nvar getUrl = /* @__PURE__ */ __name((useAbsolute) => {\n let url = \"\";\n if (useAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = CSS.escape(url);\n }\n return url;\n}, \"getUrl\");\nvar evaluate = /* @__PURE__ */ __name((val) => val === false || [\"false\", \"null\", \"0\"].includes(String(val).trim().toLowerCase()) ? false : true, \"evaluate\");\nvar getMax = /* @__PURE__ */ __name(function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n}, \"getMax\");\nvar getMin = /* @__PURE__ */ __name(function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n}, \"getMin\");\nvar parseGenericTypes = /* @__PURE__ */ __name(function(input) {\n const inputSets = input.split(/(,)/);\n const output = [];\n for (let i = 0; i < inputSets.length; i++) {\n let thisSet = inputSets[i];\n if (thisSet === \",\" && i > 0 && i + 1 < inputSets.length) {\n const previousSet = inputSets[i - 1];\n const nextSet = inputSets[i + 1];\n if (shouldCombineSets(previousSet, nextSet)) {\n thisSet = previousSet + \",\" + nextSet;\n i++;\n output.pop();\n }\n }\n output.push(processSet(thisSet));\n }\n return output.join(\"\");\n}, \"parseGenericTypes\");\nvar countOccurrence = /* @__PURE__ */ __name((string, substring) => {\n return Math.max(0, string.split(substring).length - 1);\n}, \"countOccurrence\");\nvar shouldCombineSets = /* @__PURE__ */ __name((previousSet, nextSet) => {\n const prevCount = countOccurrence(previousSet, \"~\");\n const nextCount = countOccurrence(nextSet, \"~\");\n return prevCount === 1 && nextCount === 1;\n}, \"shouldCombineSets\");\nvar processSet = /* @__PURE__ */ __name((input) => {\n const tildeCount = countOccurrence(input, \"~\");\n let hasStartingTilde = false;\n if (tildeCount <= 1) {\n return input;\n }\n if (tildeCount % 2 !== 0 && input.startsWith(\"~\")) {\n input = input.substring(1);\n hasStartingTilde = true;\n }\n const chars = [...input];\n let first = chars.indexOf(\"~\");\n let last = chars.lastIndexOf(\"~\");\n while (first !== -1 && last !== -1 && first !== last) {\n chars[first] = \"<\";\n chars[last] = \">\";\n first = chars.indexOf(\"~\");\n last = chars.lastIndexOf(\"~\");\n }\n if (hasStartingTilde) {\n chars.unshift(\"~\");\n }\n return chars.join(\"\");\n}, \"processSet\");\nvar isMathMLSupported = /* @__PURE__ */ __name(() => window.MathMLElement !== void 0, \"isMathMLSupported\");\nvar katexRegex = /\\$\\$(.*)\\$\\$/g;\nvar hasKatex = /* @__PURE__ */ __name((text) => (text.match(katexRegex)?.length ?? 0) > 0, \"hasKatex\");\nvar calculateMathMLDimensions = /* @__PURE__ */ __name(async (text, config2) => {\n const divElem = document.createElement(\"div\");\n divElem.innerHTML = await renderKatexSanitized(text, config2);\n divElem.id = \"katex-temp\";\n divElem.style.visibility = \"hidden\";\n divElem.style.position = \"absolute\";\n divElem.style.top = \"0\";\n const body = document.querySelector(\"body\");\n body?.insertAdjacentElement(\"beforeend\", divElem);\n const dim = { width: divElem.clientWidth, height: divElem.clientHeight };\n divElem.remove();\n return dim;\n}, \"calculateMathMLDimensions\");\nvar renderKatexUnsanitized = /* @__PURE__ */ __name(async (text, config2) => {\n if (!hasKatex(text)) {\n return text;\n }\n if (!(isMathMLSupported() || config2.legacyMathML || config2.forceLegacyMathML)) {\n return text.replace(katexRegex, \"MathML is unsupported in this environment.\");\n }\n if (true) {\n const { default: katex } = await import(\"katex\");\n const outputMode = config2.forceLegacyMathML || !isMathMLSupported() && config2.legacyMathML ? \"htmlAndMathml\" : \"mathml\";\n return text.split(lineBreakRegex).map(\n (line) => hasKatex(line) ? `
    ${line}
    ` : `
    ${line}
    `\n ).join(\"\").replace(\n katexRegex,\n (_, c) => katex.renderToString(c, {\n throwOnError: true,\n displayMode: true,\n output: outputMode\n }).replace(/\\n/g, \" \").replace(//g, \"\")\n );\n }\n return text.replace(\n katexRegex,\n \"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.\"\n );\n}, \"renderKatexUnsanitized\");\nvar renderKatexSanitized = /* @__PURE__ */ __name(async (text, config2) => {\n return sanitizeText(await renderKatexUnsanitized(text, config2), config2);\n}, \"renderKatexSanitized\");\nvar common_default = {\n getRows,\n sanitizeText,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin\n};\n\n// src/setupGraphViewbox.js\nvar d3Attrs = /* @__PURE__ */ __name(function(d3Elem, attrs) {\n for (let attr of attrs) {\n d3Elem.attr(attr[0], attr[1]);\n }\n}, \"d3Attrs\");\nvar calculateSvgSizeAttrs = /* @__PURE__ */ __name(function(height, width, useMaxWidth) {\n let attrs = /* @__PURE__ */ new Map();\n if (useMaxWidth) {\n attrs.set(\"width\", \"100%\");\n attrs.set(\"style\", `max-width: ${width}px;`);\n } else {\n attrs.set(\"height\", height);\n attrs.set(\"width\", width);\n }\n return attrs;\n}, \"calculateSvgSizeAttrs\");\nvar configureSvgSize = /* @__PURE__ */ __name(function(svgElem, height, width, useMaxWidth) {\n const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n}, \"configureSvgSize\");\nvar setupGraphViewbox = /* @__PURE__ */ __name(function(graph, svgElem, padding, useMaxWidth) {\n const svgBounds = svgElem.node().getBBox();\n const sWidth = svgBounds.width;\n const sHeight = svgBounds.height;\n log.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);\n let width = 0;\n let height = 0;\n log.info(`Graph bounds: ${width}x${height}`, graph);\n width = sWidth + padding * 2;\n height = sHeight + padding * 2;\n log.info(`Calculated bounds: ${width}x${height}`);\n configureSvgSize(svgElem, height, width, useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${svgBounds.width + 2 * padding} ${svgBounds.height + 2 * padding}`;\n svgElem.attr(\"viewBox\", vBox);\n}, \"setupGraphViewbox\");\n\n// src/styles.ts\nvar themes = {};\nvar getStyles = /* @__PURE__ */ __name((type, userStyles, options) => {\n let diagramStyles = \"\";\n if (type in themes && themes[type]) {\n diagramStyles = themes[type](options);\n } else {\n log.warn(`No theme found for ${type}`);\n }\n return ` & {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor}\n }\n @keyframes edge-animation-frame {\n from {\n stroke-dashoffset: 0;\n }\n }\n @keyframes dash {\n to {\n stroke-dashoffset: 0;\n }\n }\n & .edge-animation-slow {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 50s linear infinite;\n stroke-linecap: round;\n }\n & .edge-animation-fast {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 20s linear infinite;\n stroke-linecap: round;\n }\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${options.errorBkgColor};\n }\n & .error-text {\n fill: ${options.errorTextColor};\n stroke: ${options.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 1px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n & .edge-thickness-invisible {\n stroke-width: 0;\n fill: none;\n }\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n }\n & .marker.cross {\n stroke: ${options.lineColor};\n }\n\n & svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n & p {\n margin: 0\n }\n\n ${diagramStyles}\n\n ${userStyles}\n`;\n}, \"getStyles\");\nvar addStylesForDiagram = /* @__PURE__ */ __name((type, diagramTheme) => {\n if (diagramTheme !== void 0) {\n themes[type] = diagramTheme;\n }\n}, \"addStylesForDiagram\");\nvar styles_default = getStyles;\n\n// src/diagrams/common/commonDb.ts\nvar commonDb_exports = {};\n__export(commonDb_exports, {\n clear: () => clear,\n getAccDescription: () => getAccDescription,\n getAccTitle: () => getAccTitle,\n getDiagramTitle: () => getDiagramTitle,\n setAccDescription: () => setAccDescription,\n setAccTitle: () => setAccTitle,\n setDiagramTitle: () => setDiagramTitle\n});\nvar accTitle = \"\";\nvar diagramTitle = \"\";\nvar accDescription = \"\";\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => sanitizeText(txt, getConfig()), \"sanitizeText\");\nvar clear = /* @__PURE__ */ __name(() => {\n accTitle = \"\";\n accDescription = \"\";\n diagramTitle = \"\";\n}, \"clear\");\nvar setAccTitle = /* @__PURE__ */ __name((txt) => {\n accTitle = sanitizeText2(txt).replace(/^\\s+/g, \"\");\n}, \"setAccTitle\");\nvar getAccTitle = /* @__PURE__ */ __name(() => accTitle, \"getAccTitle\");\nvar setAccDescription = /* @__PURE__ */ __name((txt) => {\n accDescription = sanitizeText2(txt).replace(/\\n\\s+/g, \"\\n\");\n}, \"setAccDescription\");\nvar getAccDescription = /* @__PURE__ */ __name(() => accDescription, \"getAccDescription\");\nvar setDiagramTitle = /* @__PURE__ */ __name((txt) => {\n diagramTitle = sanitizeText2(txt);\n}, \"setDiagramTitle\");\nvar getDiagramTitle = /* @__PURE__ */ __name(() => diagramTitle, \"getDiagramTitle\");\n\n// src/diagram-api/diagramAPI.ts\nvar log2 = log;\nvar setLogLevel2 = setLogLevel;\nvar getConfig2 = getConfig;\nvar setConfig2 = setConfig;\nvar defaultConfig2 = defaultConfig;\nvar sanitizeText3 = /* @__PURE__ */ __name((text) => sanitizeText(text, getConfig2()), \"sanitizeText\");\nvar setupGraphViewbox2 = setupGraphViewbox;\nvar getCommonDb = /* @__PURE__ */ __name(() => {\n return commonDb_exports;\n}, \"getCommonDb\");\nvar diagrams = {};\nvar registerDiagram = /* @__PURE__ */ __name((id, diagram, detector) => {\n if (diagrams[id]) {\n log2.warn(`Diagram with id ${id} already registered. Overwriting.`);\n }\n diagrams[id] = diagram;\n if (detector) {\n addDetector(id, detector);\n }\n addStylesForDiagram(id, diagram.styles);\n diagram.injectUtils?.(\n log2,\n setLogLevel2,\n getConfig2,\n sanitizeText3,\n setupGraphViewbox2,\n getCommonDb(),\n () => {\n }\n );\n}, \"registerDiagram\");\nvar getDiagram = /* @__PURE__ */ __name((name) => {\n if (name in diagrams) {\n return diagrams[name];\n }\n throw new DiagramNotFoundError(name);\n}, \"getDiagram\");\nvar DiagramNotFoundError = class extends Error {\n static {\n __name(this, \"DiagramNotFoundError\");\n }\n constructor(name) {\n super(`Diagram ${name} not found.`);\n }\n};\n\nexport {\n assignWithDepth_default,\n getThemeVariables3 as getThemeVariables,\n themes_default,\n defaultConfig_default,\n sanitizeDirective,\n defaultConfig,\n setSiteConfig,\n saveConfigFromInitialize,\n updateSiteConfig,\n getSiteConfig,\n setConfig,\n getConfig,\n addDirective,\n reset,\n getUserDefinedConfig,\n lineBreakRegex,\n sanitizeText,\n getUrl,\n evaluate,\n parseGenericTypes,\n hasKatex,\n calculateMathMLDimensions,\n renderKatexSanitized,\n common_default,\n frontMatterRegex,\n directiveRegex,\n UnknownDiagramError,\n detectors,\n detectType,\n registerLazyLoadedDiagrams,\n getDiagramLoader,\n configureSvgSize,\n setupGraphViewbox,\n styles_default,\n clear,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n setDiagramTitle,\n getDiagramTitle,\n commonDb_exports,\n getConfig2,\n setConfig2,\n defaultConfig2,\n sanitizeText3 as sanitizeText2,\n setupGraphViewbox2,\n registerDiagram,\n getDiagram\n};\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/selectSvgElement.ts\nimport { select } from \"d3\";\nvar selectSvgElement = /* @__PURE__ */ __name((id) => {\n const { securityLevel } = getConfig();\n let root = select(\"body\");\n if (securityLevel === \"sandbox\") {\n const sandboxElement = select(`#i${id}`);\n const doc = sandboxElement.node()?.contentDocument ?? document;\n root = select(doc.body);\n }\n const svg = root.select(`#${id}`);\n return svg;\n}, \"selectSvgElement\");\n\nexport {\n selectSvgElement\n};\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// ../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/dist/js-yaml.mjs\nfunction isNothing(subject) {\n return typeof subject === \"undefined\" || subject === null;\n}\n__name(isNothing, \"isNothing\");\nfunction isObject(subject) {\n return typeof subject === \"object\" && subject !== null;\n}\n__name(isObject, \"isObject\");\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n return [sequence];\n}\n__name(toArray, \"toArray\");\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n if (source) {\n sourceKeys = Object.keys(source);\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n return target;\n}\n__name(extend, \"extend\");\nfunction repeat(string, count) {\n var result = \"\", cycle;\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n return result;\n}\n__name(repeat, \"repeat\");\nfunction isNegativeZero(number) {\n return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\n__name(isNegativeZero, \"isNegativeZero\");\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\nvar common = {\n isNothing: isNothing_1,\n isObject: isObject_1,\n toArray: toArray_1,\n repeat: repeat_1,\n isNegativeZero: isNegativeZero_1,\n extend: extend_1\n};\nfunction formatError(exception2, compact) {\n var where = \"\", message = exception2.reason || \"(unknown reason)\";\n if (!exception2.mark) return message;\n if (exception2.mark.name) {\n where += 'in \"' + exception2.mark.name + '\" ';\n }\n where += \"(\" + (exception2.mark.line + 1) + \":\" + (exception2.mark.column + 1) + \")\";\n if (!compact && exception2.mark.snippet) {\n where += \"\\n\\n\" + exception2.mark.snippet;\n }\n return message + \" \" + where;\n}\n__name(formatError, \"formatError\");\nfunction YAMLException$1(reason, mark) {\n Error.call(this);\n this.name = \"YAMLException\";\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack || \"\";\n }\n}\n__name(YAMLException$1, \"YAMLException$1\");\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\nYAMLException$1.prototype.toString = /* @__PURE__ */ __name(function toString(compact) {\n return this.name + \": \" + formatError(this, compact);\n}, \"toString\");\nvar exception = YAMLException$1;\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = \"\";\n var tail = \"\";\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n if (position - lineStart > maxHalfLength) {\n head = \" ... \";\n lineStart = position - maxHalfLength + head.length;\n }\n if (lineEnd - position > maxHalfLength) {\n tail = \" ...\";\n lineEnd = position + maxHalfLength - tail.length;\n }\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"\\u2192\") + tail,\n pos: position - lineStart + head.length\n // relative position\n };\n}\n__name(getLine, \"getLine\");\nfunction padStart(string, max) {\n return common.repeat(\" \", max - string.length) + string;\n}\n__name(padStart, \"padStart\");\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n if (!mark.buffer) return null;\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== \"number\") options.indent = 1;\n if (typeof options.linesBefore !== \"number\") options.linesBefore = 3;\n if (typeof options.linesAfter !== \"number\") options.linesAfter = 2;\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [0];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n while (match = re.exec(mark.buffer)) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n var result = \"\", i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n }\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\\n\";\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n }\n return result.replace(/\\n$/, \"\");\n}\n__name(makeSnippet, \"makeSnippet\");\nvar snippet = makeSnippet;\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n \"kind\",\n \"multi\",\n \"resolve\",\n \"construct\",\n \"instanceOf\",\n \"predicate\",\n \"represent\",\n \"representName\",\n \"defaultStyle\",\n \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n \"scalar\",\n \"sequence\",\n \"mapping\"\n];\nfunction compileStyleAliases(map2) {\n var result = {};\n if (map2 !== null) {\n Object.keys(map2).forEach(function(style) {\n map2[style].forEach(function(alias) {\n result[String(alias)] = style;\n });\n });\n }\n return result;\n}\n__name(compileStyleAliases, \"compileStyleAliases\");\nfunction Type$1(tag, options) {\n options = options || {};\n Object.keys(options).forEach(function(name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n this.options = options;\n this.tag = tag;\n this.kind = options[\"kind\"] || null;\n this.resolve = options[\"resolve\"] || function() {\n return true;\n };\n this.construct = options[\"construct\"] || function(data) {\n return data;\n };\n this.instanceOf = options[\"instanceOf\"] || null;\n this.predicate = options[\"predicate\"] || null;\n this.represent = options[\"represent\"] || null;\n this.representName = options[\"representName\"] || null;\n this.defaultStyle = options[\"defaultStyle\"] || null;\n this.multi = options[\"multi\"] || false;\n this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n__name(Type$1, \"Type$1\");\nvar type = Type$1;\nfunction compileList(schema2, name) {\n var result = [];\n schema2[name].forEach(function(currentType) {\n var newIndex = result.length;\n result.forEach(function(previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n newIndex = previousIndex;\n }\n });\n result[newIndex] = currentType;\n });\n return result;\n}\n__name(compileList, \"compileList\");\nfunction compileMap() {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n function collectType(type2) {\n if (type2.multi) {\n result.multi[type2.kind].push(type2);\n result.multi[\"fallback\"].push(type2);\n } else {\n result[type2.kind][type2.tag] = result[\"fallback\"][type2.tag] = type2;\n }\n }\n __name(collectType, \"collectType\");\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n__name(compileMap, \"compileMap\");\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n__name(Schema$1, \"Schema$1\");\nSchema$1.prototype.extend = /* @__PURE__ */ __name(function extend2(definition) {\n var implicit = [];\n var explicit = [];\n if (definition instanceof type) {\n explicit.push(definition);\n } else if (Array.isArray(definition)) {\n explicit = explicit.concat(definition);\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n } else {\n throw new exception(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");\n }\n implicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n if (type$1.loadKind && type$1.loadKind !== \"scalar\") {\n throw new exception(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n }\n if (type$1.multi) {\n throw new exception(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n }\n });\n explicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n });\n var result = Object.create(Schema$1.prototype);\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n result.compiledImplicit = compileList(result, \"implicit\");\n result.compiledExplicit = compileList(result, \"explicit\");\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n return result;\n}, \"extend\");\nvar schema = Schema$1;\nvar str = new type(\"tag:yaml.org,2002:str\", {\n kind: \"scalar\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : \"\";\n }, \"construct\")\n});\nvar seq = new type(\"tag:yaml.org,2002:seq\", {\n kind: \"sequence\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : [];\n }, \"construct\")\n});\nvar map = new type(\"tag:yaml.org,2002:map\", {\n kind: \"mapping\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : {};\n }, \"construct\")\n});\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n var max = data.length;\n return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\n__name(resolveYamlNull, \"resolveYamlNull\");\nfunction constructYamlNull() {\n return null;\n}\n__name(constructYamlNull, \"constructYamlNull\");\nfunction isNull(object) {\n return object === null;\n}\n__name(isNull, \"isNull\");\nvar _null = new type(\"tag:yaml.org,2002:null\", {\n kind: \"scalar\",\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: /* @__PURE__ */ __name(function() {\n return \"~\";\n }, \"canonical\"),\n lowercase: /* @__PURE__ */ __name(function() {\n return \"null\";\n }, \"lowercase\"),\n uppercase: /* @__PURE__ */ __name(function() {\n return \"NULL\";\n }, \"uppercase\"),\n camelcase: /* @__PURE__ */ __name(function() {\n return \"Null\";\n }, \"camelcase\"),\n empty: /* @__PURE__ */ __name(function() {\n return \"\";\n }, \"empty\")\n },\n defaultStyle: \"lowercase\"\n});\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n var max = data.length;\n return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\n__name(resolveYamlBoolean, \"resolveYamlBoolean\");\nfunction constructYamlBoolean(data) {\n return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\n__name(constructYamlBoolean, \"constructYamlBoolean\");\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\n__name(isBoolean, \"isBoolean\");\nvar bool = new type(\"tag:yaml.org,2002:bool\", {\n kind: \"scalar\",\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: /* @__PURE__ */ __name(function(object) {\n return object ? \"true\" : \"false\";\n }, \"lowercase\"),\n uppercase: /* @__PURE__ */ __name(function(object) {\n return object ? \"TRUE\" : \"FALSE\";\n }, \"uppercase\"),\n camelcase: /* @__PURE__ */ __name(function(object) {\n return object ? \"True\" : \"False\";\n }, \"camelcase\")\n },\n defaultStyle: \"lowercase\"\n});\nfunction isHexCode(c) {\n return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;\n}\n__name(isHexCode, \"isHexCode\");\nfunction isOctCode(c) {\n return 48 <= c && c <= 55;\n}\n__name(isOctCode, \"isOctCode\");\nfunction isDecCode(c) {\n return 48 <= c && c <= 57;\n}\n__name(isDecCode, \"isDecCode\");\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n var max = data.length, index = 0, hasDigits = false, ch;\n if (!max) return false;\n ch = data[index];\n if (ch === \"-\" || ch === \"+\") {\n ch = data[++index];\n }\n if (ch === \"0\") {\n if (index + 1 === max) return true;\n ch = data[++index];\n if (ch === \"b\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (ch !== \"0\" && ch !== \"1\") return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"x\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"o\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n }\n if (ch === \"_\") return false;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n if (!hasDigits || ch === \"_\") return false;\n return true;\n}\n__name(resolveYamlInteger, \"resolveYamlInteger\");\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n if (value.indexOf(\"_\") !== -1) {\n value = value.replace(/_/g, \"\");\n }\n ch = value[0];\n if (ch === \"-\" || ch === \"+\") {\n if (ch === \"-\") sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n if (value === \"0\") return 0;\n if (ch === \"0\") {\n if (value[1] === \"b\") return sign * parseInt(value.slice(2), 2);\n if (value[1] === \"x\") return sign * parseInt(value.slice(2), 16);\n if (value[1] === \"o\") return sign * parseInt(value.slice(2), 8);\n }\n return sign * parseInt(value, 10);\n}\n__name(constructYamlInteger, \"constructYamlInteger\");\nfunction isInteger(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 === 0 && !common.isNegativeZero(object));\n}\n__name(isInteger, \"isInteger\");\nvar int = new type(\"tag:yaml.org,2002:int\", {\n kind: \"scalar\",\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n }, \"binary\"),\n octal: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n }, \"octal\"),\n decimal: /* @__PURE__ */ __name(function(obj) {\n return obj.toString(10);\n }, \"decimal\"),\n /* eslint-disable max-len */\n hexadecimal: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n }, \"hexadecimal\")\n },\n defaultStyle: \"decimal\",\n styleAliases: {\n binary: [2, \"bin\"],\n octal: [8, \"oct\"],\n decimal: [10, \"dec\"],\n hexadecimal: [16, \"hex\"]\n }\n});\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n \"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\"\n);\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === \"_\") {\n return false;\n }\n return true;\n}\n__name(resolveYamlFloat, \"resolveYamlFloat\");\nfunction constructYamlFloat(data) {\n var value, sign;\n value = data.replace(/_/g, \"\").toLowerCase();\n sign = value[0] === \"-\" ? -1 : 1;\n if (\"+-\".indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n if (value === \".inf\") {\n return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n } else if (value === \".nan\") {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n__name(constructYamlFloat, \"constructYamlFloat\");\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n var res;\n if (isNaN(object)) {\n switch (style) {\n case \"lowercase\":\n return \".nan\";\n case \"uppercase\":\n return \".NAN\";\n case \"camelcase\":\n return \".NaN\";\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \".inf\";\n case \"uppercase\":\n return \".INF\";\n case \"camelcase\":\n return \".Inf\";\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \"-.inf\";\n case \"uppercase\":\n return \"-.INF\";\n case \"camelcase\":\n return \"-.Inf\";\n }\n } else if (common.isNegativeZero(object)) {\n return \"-0.0\";\n }\n res = object.toString(10);\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\n__name(representYamlFloat, \"representYamlFloat\");\nfunction isFloat(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\n__name(isFloat, \"isFloat\");\nvar float = new type(\"tag:yaml.org,2002:float\", {\n kind: \"scalar\",\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: \"lowercase\"\n});\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\nvar core = json;\nvar YAML_DATE_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"\n);\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\"\n);\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n__name(resolveYamlTimestamp, \"resolveYamlTimestamp\");\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n if (match === null) throw new Error(\"Date resolve error\");\n year = +match[1];\n month = +match[2] - 1;\n day = +match[3];\n if (!match[4]) {\n return new Date(Date.UTC(year, month, day));\n }\n hour = +match[4];\n minute = +match[5];\n second = +match[6];\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) {\n fraction += \"0\";\n }\n fraction = +fraction;\n }\n if (match[9]) {\n tz_hour = +match[10];\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 6e4;\n if (match[9] === \"-\") delta = -delta;\n }\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n if (delta) date.setTime(date.getTime() - delta);\n return date;\n}\n__name(constructYamlTimestamp, \"constructYamlTimestamp\");\nfunction representYamlTimestamp(object) {\n return object.toISOString();\n}\n__name(representYamlTimestamp, \"representYamlTimestamp\");\nvar timestamp = new type(\"tag:yaml.org,2002:timestamp\", {\n kind: \"scalar\",\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\nfunction resolveYamlMerge(data) {\n return data === \"<<\" || data === null;\n}\n__name(resolveYamlMerge, \"resolveYamlMerge\");\nvar merge = new type(\"tag:yaml.org,2002:merge\", {\n kind: \"scalar\",\n resolve: resolveYamlMerge\n});\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n code = map2.indexOf(data.charAt(idx));\n if (code > 64) continue;\n if (code < 0) return false;\n bitlen += 6;\n }\n return bitlen % 8 === 0;\n}\n__name(resolveYamlBinary, \"resolveYamlBinary\");\nfunction constructYamlBinary(data) {\n var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];\n for (idx = 0; idx < max; idx++) {\n if (idx % 4 === 0 && idx) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n }\n bits = bits << 6 | map2.indexOf(input.charAt(idx));\n }\n tailbits = max % 4 * 6;\n if (tailbits === 0) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n } else if (tailbits === 18) {\n result.push(bits >> 10 & 255);\n result.push(bits >> 2 & 255);\n } else if (tailbits === 12) {\n result.push(bits >> 4 & 255);\n }\n return new Uint8Array(result);\n}\n__name(constructYamlBinary, \"constructYamlBinary\");\nfunction representYamlBinary(object) {\n var result = \"\", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n if (idx % 3 === 0 && idx) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n }\n bits = (bits << 8) + object[idx];\n }\n tail = max % 3;\n if (tail === 0) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n } else if (tail === 2) {\n result += map2[bits >> 10 & 63];\n result += map2[bits >> 4 & 63];\n result += map2[bits << 2 & 63];\n result += map2[64];\n } else if (tail === 1) {\n result += map2[bits >> 2 & 63];\n result += map2[bits << 4 & 63];\n result += map2[64];\n result += map2[64];\n }\n return result;\n}\n__name(representYamlBinary, \"representYamlBinary\");\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\n__name(isBinary, \"isBinary\");\nvar binary = new type(\"tag:yaml.org,2002:binary\", {\n kind: \"scalar\",\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n if (_toString$2.call(pair) !== \"[object Object]\") return false;\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n if (!pairHasKey) return false;\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n return true;\n}\n__name(resolveYamlOmap, \"resolveYamlOmap\");\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n__name(constructYamlOmap, \"constructYamlOmap\");\nvar omap = new type(\"tag:yaml.org,2002:omap\", {\n kind: \"sequence\",\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\nvar _toString$1 = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n if (_toString$1.call(pair) !== \"[object Object]\") return false;\n keys = Object.keys(pair);\n if (keys.length !== 1) return false;\n result[index] = [keys[0], pair[keys[0]]];\n }\n return true;\n}\n__name(resolveYamlPairs, \"resolveYamlPairs\");\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n keys = Object.keys(pair);\n result[index] = [keys[0], pair[keys[0]]];\n }\n return result;\n}\n__name(constructYamlPairs, \"constructYamlPairs\");\nvar pairs = new type(\"tag:yaml.org,2002:pairs\", {\n kind: \"sequence\",\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n var key, object = data;\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n return true;\n}\n__name(resolveYamlSet, \"resolveYamlSet\");\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n__name(constructYamlSet, \"constructYamlSet\");\nvar set = new type(\"tag:yaml.org,2002:set\", {\n kind: \"mapping\",\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\n__name(_class, \"_class\");\nfunction is_EOL(c) {\n return c === 10 || c === 13;\n}\n__name(is_EOL, \"is_EOL\");\nfunction is_WHITE_SPACE(c) {\n return c === 9 || c === 32;\n}\n__name(is_WHITE_SPACE, \"is_WHITE_SPACE\");\nfunction is_WS_OR_EOL(c) {\n return c === 9 || c === 32 || c === 10 || c === 13;\n}\n__name(is_WS_OR_EOL, \"is_WS_OR_EOL\");\nfunction is_FLOW_INDICATOR(c) {\n return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;\n}\n__name(is_FLOW_INDICATOR, \"is_FLOW_INDICATOR\");\nfunction fromHexCode(c) {\n var lc;\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n lc = c | 32;\n if (97 <= lc && lc <= 102) {\n return lc - 97 + 10;\n }\n return -1;\n}\n__name(fromHexCode, \"fromHexCode\");\nfunction escapedHexLen(c) {\n if (c === 120) {\n return 2;\n }\n if (c === 117) {\n return 4;\n }\n if (c === 85) {\n return 8;\n }\n return 0;\n}\n__name(escapedHexLen, \"escapedHexLen\");\nfunction fromDecimalCode(c) {\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n return -1;\n}\n__name(fromDecimalCode, \"fromDecimalCode\");\nfunction simpleEscapeSequence(c) {\n return c === 48 ? \"\\0\" : c === 97 ? \"\\x07\" : c === 98 ? \"\\b\" : c === 116 ? \"\t\" : c === 9 ? \"\t\" : c === 110 ? \"\\n\" : c === 118 ? \"\\v\" : c === 102 ? \"\\f\" : c === 114 ? \"\\r\" : c === 101 ? \"\\x1B\" : c === 32 ? \" \" : c === 34 ? '\"' : c === 47 ? \"/\" : c === 92 ? \"\\\\\" : c === 78 ? \"\\x85\" : c === 95 ? \"\\xA0\" : c === 76 ? \"\\u2028\" : c === 80 ? \"\\u2029\" : \"\";\n}\n__name(simpleEscapeSequence, \"simpleEscapeSequence\");\nfunction charFromCodepoint(c) {\n if (c <= 65535) {\n return String.fromCharCode(c);\n }\n return String.fromCharCode(\n (c - 65536 >> 10) + 55296,\n (c - 65536 & 1023) + 56320\n );\n}\n__name(charFromCodepoint, \"charFromCodepoint\");\nvar simpleEscapeCheck = new Array(256);\nvar simpleEscapeMap = new Array(256);\nfor (i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nvar i;\nfunction State$1(input, options) {\n this.input = input;\n this.filename = options[\"filename\"] || null;\n this.schema = options[\"schema\"] || _default;\n this.onWarning = options[\"onWarning\"] || null;\n this.legacy = options[\"legacy\"] || false;\n this.json = options[\"json\"] || false;\n this.listener = options[\"listener\"] || null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n this.firstTabInLine = -1;\n this.documents = [];\n}\n__name(State$1, \"State$1\");\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1),\n // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n mark.snippet = snippet(mark);\n return new exception(message, mark);\n}\n__name(generateError, \"generateError\");\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n__name(throwError, \"throwError\");\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n__name(throwWarning, \"throwWarning\");\nvar directiveHandlers = {\n YAML: /* @__PURE__ */ __name(function handleYamlDirective(state, name, args) {\n var match, major, minor;\n if (state.version !== null) {\n throwError(state, \"duplication of %YAML directive\");\n }\n if (args.length !== 1) {\n throwError(state, \"YAML directive accepts exactly one argument\");\n }\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n if (match === null) {\n throwError(state, \"ill-formed argument of the YAML directive\");\n }\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n if (major !== 1) {\n throwError(state, \"unacceptable YAML version of the document\");\n }\n state.version = args[0];\n state.checkLineBreaks = minor < 2;\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, \"unsupported YAML version of the document\");\n }\n }, \"handleYamlDirective\"),\n TAG: /* @__PURE__ */ __name(function handleTagDirective(state, name, args) {\n var handle, prefix;\n if (args.length !== 2) {\n throwError(state, \"TAG directive accepts exactly two arguments\");\n }\n handle = args[0];\n prefix = args[1];\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, \"ill-formed tag handle (first argument) of the TAG directive\");\n }\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, \"ill-formed tag prefix (second argument) of the TAG directive\");\n }\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, \"tag prefix is malformed: \" + prefix);\n }\n state.tagMap[handle] = prefix;\n }, \"handleTagDirective\")\n};\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n if (start < end) {\n _result = state.input.slice(start, end);\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {\n throwError(state, \"expected valid JSON character\");\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, \"the stream contains non-printable characters\");\n }\n state.result += _result;\n }\n}\n__name(captureSegment, \"captureSegment\");\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n if (!common.isObject(source)) {\n throwError(state, \"cannot merge mappings; the provided source object is unacceptable\");\n }\n sourceKeys = Object.keys(source);\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\n__name(mergeMappings, \"mergeMappings\");\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n var index, quantity;\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, \"nested arrays are not supported inside keys\");\n }\n if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n keyNode[index] = \"[object Object]\";\n }\n }\n }\n if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n keyNode = \"[object Object]\";\n }\n keyNode = String(keyNode);\n if (_result === null) {\n _result = {};\n }\n if (keyTag === \"tag:yaml.org,2002:merge\") {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, \"duplicated mapping key\");\n }\n if (keyNode === \"__proto__\") {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n return _result;\n}\n__name(storeMappingPair, \"storeMappingPair\");\nfunction readLineBreak(state) {\n var ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 10) {\n state.position++;\n } else if (ch === 13) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 10) {\n state.position++;\n }\n } else {\n throwError(state, \"a line break is expected\");\n }\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n__name(readLineBreak, \"readLineBreak\");\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0, ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 9 && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n if (allowComments && ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 10 && ch !== 13 && ch !== 0);\n }\n if (is_EOL(ch)) {\n readLineBreak(state);\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n while (ch === 32) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, \"deficient indentation\");\n }\n return lineBreaks;\n}\n__name(skipSeparationSpace, \"skipSeparationSpace\");\nfunction testDocumentSeparator(state) {\n var _position = state.position, ch;\n ch = state.input.charCodeAt(_position);\n if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {\n _position += 3;\n ch = state.input.charCodeAt(_position);\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n return false;\n}\n__name(testDocumentSeparator, \"testDocumentSeparator\");\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += \" \";\n } else if (count > 1) {\n state.result += common.repeat(\"\\n\", count - 1);\n }\n}\n__name(writeFoldedLines, \"writeFoldedLines\");\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;\n ch = state.input.charCodeAt(state.position);\n if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {\n return false;\n }\n if (ch === 63 || ch === 45) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n state.kind = \"scalar\";\n state.result = \"\";\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n while (ch !== 0) {\n if (ch === 58) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n } else if (ch === 35) {\n preceding = state.input.charCodeAt(state.position - 1);\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n captureSegment(state, captureStart, captureEnd, false);\n if (state.result) {\n return true;\n }\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n__name(readPlainScalar, \"readPlainScalar\");\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch, captureStart, captureEnd;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 39) {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n state.position++;\n captureStart = captureEnd = state.position;\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 39) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n if (ch === 39) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, \"unexpected end of the document within a single quoted scalar\");\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n throwError(state, \"unexpected end of the stream within a single quoted scalar\");\n}\n__name(readSingleQuotedScalar, \"readSingleQuotedScalar\");\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 34) {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n state.position++;\n captureStart = captureEnd = state.position;\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 34) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n } else if (ch === 92) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n } else {\n throwError(state, \"expected hexadecimal character\");\n }\n }\n state.result += charFromCodepoint(hexResult);\n state.position++;\n } else {\n throwError(state, \"unknown escape sequence\");\n }\n captureStart = captureEnd = state.position;\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, \"unexpected end of the document within a double quoted scalar\");\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n throwError(state, \"unexpected end of the stream within a double quoted scalar\");\n}\n__name(readDoubleQuotedScalar, \"readDoubleQuotedScalar\");\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 91) {\n terminator = 93;\n isMapping = false;\n _result = [];\n } else if (ch === 123) {\n terminator = 125;\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(++state.position);\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? \"mapping\" : \"sequence\";\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, \"missed comma between flow collection entries\");\n } else if (ch === 44) {\n throwError(state, \"expected the node content, but found ','\");\n }\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n if (ch === 63) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n _line = state.line;\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if ((isExplicitPair || state.line === _line) && ch === 58) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if (ch === 44) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n throwError(state, \"unexpected end of the stream within a flow collection\");\n}\n__name(readFlowCollection, \"readFlowCollection\");\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 124) {\n folding = false;\n } else if (ch === 62) {\n folding = true;\n } else {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n if (ch === 43 || ch === 45) {\n if (CHOMPING_CLIP === chomping) {\n chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, \"repeat of a chomping mode identifier\");\n }\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, \"repeat of an indentation width identifier\");\n }\n } else {\n break;\n }\n }\n if (is_WHITE_SPACE(ch)) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (is_WHITE_SPACE(ch));\n if (ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (!is_EOL(ch) && ch !== 0);\n }\n }\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n ch = state.input.charCodeAt(state.position);\n while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n if (state.lineIndent < textIndent) {\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) {\n state.result += \"\\n\";\n }\n }\n break;\n }\n if (folding) {\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat(\"\\n\", emptyLines + 1);\n } else if (emptyLines === 0) {\n if (didReadContent) {\n state.result += \" \";\n }\n } else {\n state.result += common.repeat(\"\\n\", emptyLines);\n }\n } else {\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n }\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n while (!is_EOL(ch) && ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n }\n captureSegment(state, captureStart, state.position, false);\n }\n return true;\n}\n__name(readBlockScalar, \"readBlockScalar\");\nfunction readBlockSequence(state, nodeIndent) {\n var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;\n if (state.firstTabInLine !== -1) return false;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, \"tab characters must not be used in indentation\");\n }\n if (ch !== 45) {\n break;\n }\n following = state.input.charCodeAt(state.position + 1);\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n detected = true;\n state.position++;\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state, \"bad indentation of a sequence entry\");\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = \"sequence\";\n state.result = _result;\n return true;\n }\n return false;\n}\n__name(readBlockSequence, \"readBlockSequence\");\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n if (state.firstTabInLine !== -1) return false;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, \"tab characters must not be used in indentation\");\n }\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line;\n if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {\n if (ch === 63) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n } else if (atExplicitKey) {\n atExplicitKey = false;\n allowCompact = true;\n } else {\n throwError(state, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n }\n state.position += 1;\n ch = following;\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n break;\n }\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (ch === 58) {\n ch = state.input.charCodeAt(++state.position);\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, \"a whitespace character is expected after the key-value separator within a block mapping\");\n }\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n } else if (detected) {\n throwError(state, \"can not read an implicit mapping pair; a colon is missed\");\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true;\n }\n } else if (detected) {\n throwError(state, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true;\n }\n }\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state, \"bad indentation of a mapping entry\");\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = \"mapping\";\n state.result = _result;\n }\n return detected;\n}\n__name(readBlockMapping, \"readBlockMapping\");\nfunction readTagProperty(state) {\n var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 33) return false;\n if (state.tag !== null) {\n throwError(state, \"duplication of a tag property\");\n }\n ch = state.input.charCodeAt(++state.position);\n if (ch === 60) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n } else if (ch === 33) {\n isNamed = true;\n tagHandle = \"!!\";\n ch = state.input.charCodeAt(++state.position);\n } else {\n tagHandle = \"!\";\n }\n _position = state.position;\n if (isVerbatim) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0 && ch !== 62);\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, \"unexpected end of the stream within a verbatim tag\");\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n if (ch === 33) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, \"named tag handle cannot contain such characters\");\n }\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, \"tag suffix cannot contain exclamation marks\");\n }\n }\n ch = state.input.charCodeAt(++state.position);\n }\n tagName = state.input.slice(_position, state.position);\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, \"tag suffix cannot contain flow indicator characters\");\n }\n }\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, \"tag name cannot contain such characters: \" + tagName);\n }\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, \"tag name is malformed: \" + tagName);\n }\n if (isVerbatim) {\n state.tag = tagName;\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n } else if (tagHandle === \"!\") {\n state.tag = \"!\" + tagName;\n } else if (tagHandle === \"!!\") {\n state.tag = \"tag:yaml.org,2002:\" + tagName;\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n return true;\n}\n__name(readTagProperty, \"readTagProperty\");\nfunction readAnchorProperty(state) {\n var _position, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 38) return false;\n if (state.anchor !== null) {\n throwError(state, \"duplication of an anchor property\");\n }\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (state.position === _position) {\n throwError(state, \"name of an anchor node must contain at least one character\");\n }\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n__name(readAnchorProperty, \"readAnchorProperty\");\nfunction readAlias(state) {\n var _position, alias, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 42) return false;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (state.position === _position) {\n throwError(state, \"name of an alias node must contain at least one character\");\n }\n alias = state.input.slice(_position, state.position);\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n__name(readAlias, \"readAlias\");\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;\n if (state.listener !== null) {\n state.listener(\"open\", state);\n }\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n blockIndent = state.position - state.lineStart;\n if (indentStatus === 1) {\n if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n } else if (readAlias(state)) {\n hasContent = true;\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, \"alias node should not have any properties\");\n }\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n if (state.tag === null) {\n state.tag = \"?\";\n }\n }\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n } else if (state.tag === \"?\") {\n if (state.result !== null && state.kind !== \"scalar\") {\n throwError(state, 'unacceptable node kind for ! tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type2 = state.implicitTypes[typeIndex];\n if (type2.resolve(state.result)) {\n state.result = type2.construct(state.result);\n state.tag = type2.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== \"!\") {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || \"fallback\"], state.tag)) {\n type2 = state.typeMap[state.kind || \"fallback\"][state.tag];\n } else {\n type2 = null;\n typeList = state.typeMap.multi[state.kind || \"fallback\"];\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type2 = typeList[typeIndex];\n break;\n }\n }\n }\n if (!type2) {\n throwError(state, \"unknown tag !<\" + state.tag + \">\");\n }\n if (state.result !== null && type2.kind !== state.kind) {\n throwError(state, \"unacceptable node kind for !<\" + state.tag + '> tag; it should be \"' + type2.kind + '\", not \"' + state.kind + '\"');\n }\n if (!type2.resolve(state.result, state.tag)) {\n throwError(state, \"cannot resolve a node with !<\" + state.tag + \"> explicit tag\");\n } else {\n state.result = type2.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n if (state.listener !== null) {\n state.listener(\"close\", state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n__name(composeNode, \"composeNode\");\nfunction readDocument(state) {\n var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = /* @__PURE__ */ Object.create(null);\n state.anchorMap = /* @__PURE__ */ Object.create(null);\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n if (state.lineIndent > 0 || ch !== 37) {\n break;\n }\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n if (directiveName.length < 1) {\n throwError(state, \"directive name must not be less than one character in length\");\n }\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0 && !is_EOL(ch));\n break;\n }\n if (is_EOL(ch)) break;\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n if (ch !== 0) readLineBreak(state);\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n skipSeparationSpace(state, true, -1);\n if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n } else if (hasDirectives) {\n throwError(state, \"directives end mark is expected\");\n }\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, \"non-ASCII line breaks are interpreted as content\");\n }\n state.documents.push(state.result);\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n if (state.input.charCodeAt(state.position) === 46) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n if (state.position < state.length - 1) {\n throwError(state, \"end of the stream or a document separator is expected\");\n } else {\n return;\n }\n}\n__name(readDocument, \"readDocument\");\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n if (input.length !== 0) {\n if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {\n input += \"\\n\";\n }\n if (input.charCodeAt(0) === 65279) {\n input = input.slice(1);\n }\n }\n var state = new State$1(input, options);\n var nullpos = input.indexOf(\"\\0\");\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, \"null byte is not allowed in input\");\n }\n state.input += \"\\0\";\n while (state.input.charCodeAt(state.position) === 32) {\n state.lineIndent += 1;\n state.position += 1;\n }\n while (state.position < state.length - 1) {\n readDocument(state);\n }\n return state.documents;\n}\n__name(loadDocuments, \"loadDocuments\");\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === \"object\" && typeof options === \"undefined\") {\n options = iterator;\n iterator = null;\n }\n var documents = loadDocuments(input, options);\n if (typeof iterator !== \"function\") {\n return documents;\n }\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n__name(loadAll$1, \"loadAll$1\");\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n if (documents.length === 0) {\n return void 0;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception(\"expected a single document in the stream, but found more\");\n}\n__name(load$1, \"load$1\");\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\nvar loader = {\n loadAll: loadAll_1,\n load: load_1\n};\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar CHAR_BOM = 65279;\nvar CHAR_TAB = 9;\nvar CHAR_LINE_FEED = 10;\nvar CHAR_CARRIAGE_RETURN = 13;\nvar CHAR_SPACE = 32;\nvar CHAR_EXCLAMATION = 33;\nvar CHAR_DOUBLE_QUOTE = 34;\nvar CHAR_SHARP = 35;\nvar CHAR_PERCENT = 37;\nvar CHAR_AMPERSAND = 38;\nvar CHAR_SINGLE_QUOTE = 39;\nvar CHAR_ASTERISK = 42;\nvar CHAR_COMMA = 44;\nvar CHAR_MINUS = 45;\nvar CHAR_COLON = 58;\nvar CHAR_EQUALS = 61;\nvar CHAR_GREATER_THAN = 62;\nvar CHAR_QUESTION = 63;\nvar CHAR_COMMERCIAL_AT = 64;\nvar CHAR_LEFT_SQUARE_BRACKET = 91;\nvar CHAR_RIGHT_SQUARE_BRACKET = 93;\nvar CHAR_GRAVE_ACCENT = 96;\nvar CHAR_LEFT_CURLY_BRACKET = 123;\nvar CHAR_VERTICAL_LINE = 124;\nvar CHAR_RIGHT_CURLY_BRACKET = 125;\nvar ESCAPE_SEQUENCES = {};\nESCAPE_SEQUENCES[0] = \"\\\\0\";\nESCAPE_SEQUENCES[7] = \"\\\\a\";\nESCAPE_SEQUENCES[8] = \"\\\\b\";\nESCAPE_SEQUENCES[9] = \"\\\\t\";\nESCAPE_SEQUENCES[10] = \"\\\\n\";\nESCAPE_SEQUENCES[11] = \"\\\\v\";\nESCAPE_SEQUENCES[12] = \"\\\\f\";\nESCAPE_SEQUENCES[13] = \"\\\\r\";\nESCAPE_SEQUENCES[27] = \"\\\\e\";\nESCAPE_SEQUENCES[34] = '\\\\\"';\nESCAPE_SEQUENCES[92] = \"\\\\\\\\\";\nESCAPE_SEQUENCES[133] = \"\\\\N\";\nESCAPE_SEQUENCES[160] = \"\\\\_\";\nESCAPE_SEQUENCES[8232] = \"\\\\L\";\nESCAPE_SEQUENCES[8233] = \"\\\\P\";\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n \"y\",\n \"Y\",\n \"yes\",\n \"Yes\",\n \"YES\",\n \"on\",\n \"On\",\n \"ON\",\n \"n\",\n \"N\",\n \"no\",\n \"No\",\n \"NO\",\n \"off\",\n \"Off\",\n \"OFF\"\n];\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\nfunction compileStyleMap(schema2, map2) {\n var result, keys, index, length, tag, style, type2;\n if (map2 === null) return {};\n result = {};\n keys = Object.keys(map2);\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map2[tag]);\n if (tag.slice(0, 2) === \"!!\") {\n tag = \"tag:yaml.org,2002:\" + tag.slice(2);\n }\n type2 = schema2.compiledTypeMap[\"fallback\"][tag];\n if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) {\n style = type2.styleAliases[style];\n }\n result[tag] = style;\n }\n return result;\n}\n__name(compileStyleMap, \"compileStyleMap\");\nfunction encodeHex(character) {\n var string, handle, length;\n string = character.toString(16).toUpperCase();\n if (character <= 255) {\n handle = \"x\";\n length = 2;\n } else if (character <= 65535) {\n handle = \"u\";\n length = 4;\n } else if (character <= 4294967295) {\n handle = \"U\";\n length = 8;\n } else {\n throw new exception(\"code point within a string may not be greater than 0xFFFFFFFF\");\n }\n return \"\\\\\" + handle + common.repeat(\"0\", length - string.length) + string;\n}\n__name(encodeHex, \"encodeHex\");\nvar QUOTING_TYPE_SINGLE = 1;\nvar QUOTING_TYPE_DOUBLE = 2;\nfunction State(options) {\n this.schema = options[\"schema\"] || _default;\n this.indent = Math.max(1, options[\"indent\"] || 2);\n this.noArrayIndent = options[\"noArrayIndent\"] || false;\n this.skipInvalid = options[\"skipInvalid\"] || false;\n this.flowLevel = common.isNothing(options[\"flowLevel\"]) ? -1 : options[\"flowLevel\"];\n this.styleMap = compileStyleMap(this.schema, options[\"styles\"] || null);\n this.sortKeys = options[\"sortKeys\"] || false;\n this.lineWidth = options[\"lineWidth\"] || 80;\n this.noRefs = options[\"noRefs\"] || false;\n this.noCompatMode = options[\"noCompatMode\"] || false;\n this.condenseFlow = options[\"condenseFlow\"] || false;\n this.quotingType = options[\"quotingType\"] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options[\"forceQuotes\"] || false;\n this.replacer = typeof options[\"replacer\"] === \"function\" ? options[\"replacer\"] : null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n this.tag = null;\n this.result = \"\";\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n__name(State, \"State\");\nfunction indentString(string, spaces) {\n var ind = common.repeat(\" \", spaces), position = 0, next = -1, result = \"\", line, length = string.length;\n while (position < length) {\n next = string.indexOf(\"\\n\", position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n if (line.length && line !== \"\\n\") result += ind;\n result += line;\n }\n return result;\n}\n__name(indentString, \"indentString\");\nfunction generateNextLine(state, level) {\n return \"\\n\" + common.repeat(\" \", state.indent * level);\n}\n__name(generateNextLine, \"generateNextLine\");\nfunction testImplicitResolving(state, str2) {\n var index, length, type2;\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type2 = state.implicitTypes[index];\n if (type2.resolve(str2)) {\n return true;\n }\n }\n return false;\n}\n__name(testImplicitResolving, \"testImplicitResolving\");\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n__name(isWhitespace, \"isWhitespace\");\nfunction isPrintable(c) {\n return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111;\n}\n__name(isPrintable, \"isPrintable\");\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;\n}\n__name(isNsCharOrWhitespace, \"isNsCharOrWhitespace\");\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n (inblock ? (\n // c = flow-in\n cIsNsCharOrWhitespace\n ) : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar\n );\n}\n__name(isPlainSafe, \"isPlainSafe\");\nfunction isPlainSafeFirst(c) {\n return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;\n}\n__name(isPlainSafeFirst, \"isPlainSafeFirst\");\nfunction isPlainSafeLast(c) {\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n__name(isPlainSafeLast, \"isPlainSafeLast\");\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 55296 && first <= 56319 && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 56320 && second <= 57343) {\n return (first - 55296) * 1024 + second - 56320 + 65536;\n }\n }\n return first;\n}\n__name(codePointAt, \"codePointAt\");\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n__name(needIndentIndicator, \"needIndentIndicator\");\nvar STYLE_PLAIN = 1;\nvar STYLE_SINGLE = 2;\nvar STYLE_LITERAL = 3;\nvar STYLE_FOLDED = 4;\nvar STYLE_DOUBLE = 5;\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false;\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1;\n var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));\n if (singleLineOnly || forceQuotes) {\n for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.\n i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \");\n }\n if (!hasLineBreak && !hasFoldableLine) {\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n__name(chooseScalarStyle, \"chooseScalarStyle\");\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function() {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"' + string + '\"' : \"'\" + string + \"'\";\n }\n }\n var indent = state.indent * Math.max(1, level);\n var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;\n function testAmbiguity(string2) {\n return testImplicitResolving(state, string2);\n }\n __name(testAmbiguity, \"testAmbiguity\");\n switch (chooseScalarStyle(\n string,\n singleLineOnly,\n state.indent,\n lineWidth,\n testAmbiguity,\n state.quotingType,\n state.forceQuotes && !iskey,\n inblock\n )) {\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return \"|\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return \">\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception(\"impossible error: invalid scalar style\");\n }\n })();\n}\n__name(writeScalar, \"writeScalar\");\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : \"\";\n var clip = string[string.length - 1] === \"\\n\";\n var keep = clip && (string[string.length - 2] === \"\\n\" || string === \"\\n\");\n var chomp = keep ? \"+\" : clip ? \"\" : \"-\";\n return indentIndicator + chomp + \"\\n\";\n}\n__name(blockHeader, \"blockHeader\");\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === \"\\n\" ? string.slice(0, -1) : string;\n}\n__name(dropEndingNewline, \"dropEndingNewline\");\nfunction foldString(string, width) {\n var lineRe = /(\\n+)([^\\n]*)/g;\n var result = (function() {\n var nextLF = string.indexOf(\"\\n\");\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n })();\n var prevMoreIndented = string[0] === \"\\n\" || string[0] === \" \";\n var moreIndented;\n var match;\n while (match = lineRe.exec(string)) {\n var prefix = match[1], line = match[2];\n moreIndented = line[0] === \" \";\n result += prefix + (!prevMoreIndented && !moreIndented && line !== \"\" ? \"\\n\" : \"\") + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n return result;\n}\n__name(foldString, \"foldString\");\nfunction foldLine(line, width) {\n if (line === \"\" || line[0] === \" \") return line;\n var breakRe = / [^ ]/g;\n var match;\n var start = 0, end, curr = 0, next = 0;\n var result = \"\";\n while (match = breakRe.exec(line)) {\n next = match.index;\n if (next - start > width) {\n end = curr > start ? curr : next;\n result += \"\\n\" + line.slice(start, end);\n start = end + 1;\n }\n curr = next;\n }\n result += \"\\n\";\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + \"\\n\" + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n return result.slice(1);\n}\n__name(foldLine, \"foldLine\");\nfunction escapeString(string) {\n var result = \"\";\n var char = 0;\n var escapeSeq;\n for (var i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 65536) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n return result;\n}\n__name(escapeString, \"escapeString\");\nfunction writeFlowSequence(state, level, object) {\n var _result = \"\", _tag = state.tag, index, length, value;\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n if (writeNode(state, level, value, false, false) || typeof value === \"undefined\" && writeNode(state, level, null, false, false)) {\n if (_result !== \"\") _result += \",\" + (!state.condenseFlow ? \" \" : \"\");\n _result += state.dump;\n }\n }\n state.tag = _tag;\n state.dump = \"[\" + _result + \"]\";\n}\n__name(writeFlowSequence, \"writeFlowSequence\");\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = \"\", _tag = state.tag, index, length, value;\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === \"undefined\" && writeNode(state, level + 1, null, true, true, false, true)) {\n if (!compact || _result !== \"\") {\n _result += generateNextLine(state, level);\n }\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += \"-\";\n } else {\n _result += \"- \";\n }\n _result += state.dump;\n }\n }\n state.tag = _tag;\n state.dump = _result || \"[]\";\n}\n__name(writeBlockSequence, \"writeBlockSequence\");\nfunction writeFlowMapping(state, level, object) {\n var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = \"\";\n if (_result !== \"\") pairBuffer += \", \";\n if (state.condenseFlow) pairBuffer += '\"';\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n if (!writeNode(state, level, objectKey, false, false)) {\n continue;\n }\n if (state.dump.length > 1024) pairBuffer += \"? \";\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : \"\") + \":\" + (state.condenseFlow ? \"\" : \" \");\n if (!writeNode(state, level, objectValue, false, false)) {\n continue;\n }\n pairBuffer += state.dump;\n _result += pairBuffer;\n }\n state.tag = _tag;\n state.dump = \"{\" + _result + \"}\";\n}\n__name(writeFlowMapping, \"writeFlowMapping\");\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;\n if (state.sortKeys === true) {\n objectKeyList.sort();\n } else if (typeof state.sortKeys === \"function\") {\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n throw new exception(\"sortKeys must be a boolean or a function\");\n }\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = \"\";\n if (!compact || _result !== \"\") {\n pairBuffer += generateNextLine(state, level);\n }\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue;\n }\n explicitPair = state.tag !== null && state.tag !== \"?\" || state.dump && state.dump.length > 1024;\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += \"?\";\n } else {\n pairBuffer += \"? \";\n }\n }\n pairBuffer += state.dump;\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue;\n }\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += \":\";\n } else {\n pairBuffer += \": \";\n }\n pairBuffer += state.dump;\n _result += pairBuffer;\n }\n state.tag = _tag;\n state.dump = _result || \"{}\";\n}\n__name(writeBlockMapping, \"writeBlockMapping\");\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type2, style;\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type2 = typeList[index];\n if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === \"object\" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) {\n if (explicit) {\n if (type2.multi && type2.representName) {\n state.tag = type2.representName(object);\n } else {\n state.tag = type2.tag;\n }\n } else {\n state.tag = \"?\";\n }\n if (type2.represent) {\n style = state.styleMap[type2.tag] || type2.defaultStyle;\n if (_toString.call(type2.represent) === \"[object Function]\") {\n _result = type2.represent(object, style);\n } else if (_hasOwnProperty.call(type2.represent, style)) {\n _result = type2.represent[style](object, style);\n } else {\n throw new exception(\"!<\" + type2.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n state.dump = _result;\n }\n return true;\n }\n }\n return false;\n}\n__name(detectType, \"detectType\");\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n var type2 = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n if (block) {\n block = state.flowLevel < 0 || state.flowLevel > level;\n }\n var objectOrArray = type2 === \"[object Object]\" || type2 === \"[object Array]\", duplicateIndex, duplicate;\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n if (state.tag !== null && state.tag !== \"?\" || duplicate || state.indent !== 2 && level > 0) {\n compact = false;\n }\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = \"*ref_\" + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type2 === \"[object Object]\") {\n if (block && Object.keys(state.dump).length !== 0) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n }\n }\n } else if (type2 === \"[object Array]\") {\n if (block && state.dump.length !== 0) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n }\n }\n } else if (type2 === \"[object String]\") {\n if (state.tag !== \"?\") {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type2 === \"[object Undefined]\") {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception(\"unacceptable kind of an object to dump \" + type2);\n }\n if (state.tag !== null && state.tag !== \"?\") {\n tagStr = encodeURI(\n state.tag[0] === \"!\" ? state.tag.slice(1) : state.tag\n ).replace(/!/g, \"%21\");\n if (state.tag[0] === \"!\") {\n tagStr = \"!\" + tagStr;\n } else if (tagStr.slice(0, 18) === \"tag:yaml.org,2002:\") {\n tagStr = \"!!\" + tagStr.slice(18);\n } else {\n tagStr = \"!<\" + tagStr + \">\";\n }\n state.dump = tagStr + \" \" + state.dump;\n }\n }\n return true;\n}\n__name(writeNode, \"writeNode\");\nfunction getDuplicateReferences(object, state) {\n var objects = [], duplicatesIndexes = [], index, length;\n inspectNode(object, objects, duplicatesIndexes);\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n__name(getDuplicateReferences, \"getDuplicateReferences\");\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList, index, length;\n if (object !== null && typeof object === \"object\") {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n__name(inspectNode, \"inspectNode\");\nfunction dump$1(input, options) {\n options = options || {};\n var state = new State(options);\n if (!state.noRefs) getDuplicateReferences(input, state);\n var value = input;\n if (state.replacer) {\n value = state.replacer.call({ \"\": value }, \"\", value);\n }\n if (writeNode(state, 0, value, true, true)) return state.dump + \"\\n\";\n return \"\";\n}\n__name(dump$1, \"dump$1\");\nvar dump_1 = dump$1;\nvar dumper = {\n dump: dump_1\n};\nfunction renamed(from, to) {\n return function() {\n throw new Error(\"Function yaml.\" + from + \" is removed in js-yaml 4. Use yaml.\" + to + \" instead, which is now safe by default.\");\n };\n}\n__name(renamed, \"renamed\");\nvar JSON_SCHEMA = json;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar safeLoad = renamed(\"safeLoad\", \"load\");\nvar safeLoadAll = renamed(\"safeLoadAll\", \"loadAll\");\nvar safeDump = renamed(\"safeDump\", \"dump\");\n\nexport {\n JSON_SCHEMA,\n load\n};\n/*! Bundled license information:\n\njs-yaml/dist/js-yaml.mjs:\n (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)\n*/\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/lineWithOffset.ts\nvar markerOffsets = {\n aggregation: 17.25,\n extension: 17.25,\n composition: 17.25,\n dependency: 6,\n lollipop: 13.5,\n arrow_point: 4\n //arrow_cross: 24,\n};\nvar markerOffsets2 = {\n arrow_point: 9,\n arrow_cross: 12.5,\n arrow_circle: 12.5\n};\nfunction calculateDeltaAndAngle(point1, point2) {\n if (point1 === void 0 || point2 === void 0) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n point1 = pointTransformer(point1);\n point2 = pointTransformer(point2);\n const [x1, y1] = [point1.x, point1.y];\n const [x2, y2] = [point2.x, point2.y];\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY };\n}\n__name(calculateDeltaAndAngle, \"calculateDeltaAndAngle\");\nvar pointTransformer = /* @__PURE__ */ __name((data) => {\n if (Array.isArray(data)) {\n return { x: data[0], y: data[1] };\n }\n return data;\n}, \"pointTransformer\");\nvar getLineFunctionsWithOffset = /* @__PURE__ */ __name((edge) => {\n return {\n x: /* @__PURE__ */ __name(function(d, i, data) {\n let offset = 0;\n const DIRECTION = pointTransformer(data[0]).x < pointTransformer(data[data.length - 1]).x ? \"left\" : \"right\";\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaX } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n }\n const differenceToEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceInYEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceToStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const differenceInYStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];\n const extraRoom = 1;\n if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInYEnd < endMarkerHeight) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === \"right\" ? -1 : 1;\n offset -= adjustment;\n }\n if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInYStart < startMarkerHeight) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === \"right\" ? -1 : 1;\n offset += adjustment;\n }\n return pointTransformer(d).x + offset;\n }, \"x\"),\n y: /* @__PURE__ */ __name(function(d, i, data) {\n let offset = 0;\n const DIRECTION = pointTransformer(data[0]).y < pointTransformer(data[data.length - 1]).y ? \"down\" : \"up\";\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaY } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n }\n const differenceToEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceInXEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceToStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const differenceInXStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];\n const extraRoom = 1;\n if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInXEnd < endMarkerHeight) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === \"up\" ? -1 : 1;\n offset -= adjustment;\n }\n if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInXStart < startMarkerHeight) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === \"up\" ? -1 : 1;\n offset += adjustment;\n }\n return pointTransformer(d).y + offset;\n }, \"y\")\n };\n}, \"getLineFunctionsWithOffset\");\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"calculateDeltaAndAngle\", () => {\n it(\"should calculate the angle and deltas between two points\", () => {\n expect(calculateDeltaAndAngle([0, 0], [0, 1])).toStrictEqual({\n angle: 1.5707963267948966,\n deltaX: 0,\n deltaY: 1\n });\n expect(calculateDeltaAndAngle([1, 0], [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, { x: 1, y: 0 })).toStrictEqual({\n angle: NaN,\n deltaX: 0,\n deltaY: 0\n });\n });\n it(\"should calculate the angle and deltas if one point in undefined\", () => {\n expect(calculateDeltaAndAngle(void 0, [0, 1])).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0\n });\n expect(calculateDeltaAndAngle([0, 1], void 0)).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0\n });\n });\n });\n}\n\nexport {\n markerOffsets,\n markerOffsets2,\n getLineFunctionsWithOffset\n};\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/subGraphTitleMargins.ts\nvar getSubGraphTitleMargins = /* @__PURE__ */ __name(({\n flowchart\n}) => {\n const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;\n const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;\n const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;\n return {\n subGraphTitleTopMargin,\n subGraphTitleBottomMargin,\n subGraphTitleTotalMargin\n };\n}, \"getSubGraphTitleMargins\");\n\nexport {\n getSubGraphTitleMargins\n};\n","import {\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts\nvar solidStateFill = /* @__PURE__ */ __name((color) => {\n const { handDrawnSeed } = getConfig();\n return {\n fill: color,\n hachureAngle: 120,\n // angle of hachure,\n hachureGap: 4,\n fillWeight: 2,\n roughness: 0.7,\n stroke: color,\n seed: handDrawnSeed\n };\n}, \"solidStateFill\");\nvar compileStyles = /* @__PURE__ */ __name((node) => {\n const stylesMap = styles2Map([\n ...node.cssCompiledStyles || [],\n ...node.cssStyles || [],\n ...node.labelStyle || []\n ]);\n return { stylesMap, stylesArray: [...stylesMap] };\n}, \"compileStyles\");\nvar styles2Map = /* @__PURE__ */ __name((styles) => {\n const styleMap = /* @__PURE__ */ new Map();\n styles.forEach((style) => {\n const [key, value] = style.split(\":\");\n styleMap.set(key.trim(), value?.trim());\n });\n return styleMap;\n}, \"styles2Map\");\nvar isLabelStyle = /* @__PURE__ */ __name((key) => {\n return key === \"color\" || key === \"font-size\" || key === \"font-family\" || key === \"font-weight\" || key === \"font-style\" || key === \"text-decoration\" || key === \"text-align\" || key === \"text-transform\" || key === \"line-height\" || key === \"letter-spacing\" || key === \"word-spacing\" || key === \"text-shadow\" || key === \"text-overflow\" || key === \"white-space\" || key === \"word-wrap\" || key === \"word-break\" || key === \"overflow-wrap\" || key === \"hyphens\";\n}, \"isLabelStyle\");\nvar styles2String = /* @__PURE__ */ __name((node) => {\n const { stylesArray } = compileStyles(node);\n const labelStyles = [];\n const nodeStyles = [];\n const borderStyles = [];\n const backgroundStyles = [];\n stylesArray.forEach((style) => {\n const key = style[0];\n if (isLabelStyle(key)) {\n labelStyles.push(style.join(\":\") + \" !important\");\n } else {\n nodeStyles.push(style.join(\":\") + \" !important\");\n if (key.includes(\"stroke\")) {\n borderStyles.push(style.join(\":\") + \" !important\");\n }\n if (key === \"fill\") {\n backgroundStyles.push(style.join(\":\") + \" !important\");\n }\n }\n });\n return {\n labelStyles: labelStyles.join(\";\"),\n nodeStyles: nodeStyles.join(\";\"),\n stylesArray,\n borderStyles,\n backgroundStyles\n };\n}, \"styles2String\");\nvar userNodeOverrides = /* @__PURE__ */ __name((node, options) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const result = Object.assign(\n {\n roughness: 0.7,\n fill: stylesMap.get(\"fill\") || mainBkg,\n fillStyle: \"hachure\",\n // solid fill\n fillWeight: 4,\n hachureGap: 5.2,\n stroke: stylesMap.get(\"stroke\") || nodeBorder,\n seed: handDrawnSeed,\n strokeWidth: stylesMap.get(\"stroke-width\")?.replace(\"px\", \"\") || 1.3,\n fillLineDash: [0, 0],\n strokeLineDash: getStrokeDashArray(stylesMap.get(\"stroke-dasharray\"))\n },\n options\n );\n return result;\n}, \"userNodeOverrides\");\nvar getStrokeDashArray = /* @__PURE__ */ __name((strokeDasharrayStyle) => {\n if (!strokeDasharrayStyle) {\n return [0, 0];\n }\n const dashArray = strokeDasharrayStyle.trim().split(/\\s+/).map(Number);\n if (dashArray.length === 1) {\n const val = isNaN(dashArray[0]) ? 0 : dashArray[0];\n return [val, val];\n }\n const first = isNaN(dashArray[0]) ? 0 : dashArray[0];\n const second = isNaN(dashArray[1]) ? 0 : dashArray[1];\n return [first, second];\n}, \"getStrokeDashArray\");\n\nexport {\n solidStateFill,\n compileStyles,\n isLabelStyle,\n styles2String,\n userNodeOverrides\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLANK_URL = exports.relativeFirstCharacters = exports.whitespaceEscapeCharsRegex = exports.urlSchemeRegex = exports.ctrlCharactersRegex = exports.htmlCtrlEntityRegex = exports.htmlEntitiesRegex = exports.invalidProtocolRegex = void 0;\nexports.invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nexports.htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nexports.htmlCtrlEntityRegex = /&(newline|tab);/gi;\nexports.ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nexports.urlSchemeRegex = /^.+(:|:)/gim;\nexports.whitespaceEscapeCharsRegex = /(\\\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;\nexports.relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = void 0;\nvar constants_1 = require(\"./constants\");\nfunction isRelativeUrlWithoutProtocol(url) {\n return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;\n}\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, \"\");\n return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction isValidUrl(url) {\n return URL.canParse(url);\n}\nfunction decodeURI(uri) {\n try {\n return decodeURIComponent(uri);\n }\n catch (e) {\n // Ignoring error\n // It is possible that the URI contains a `%` not associated\n // with URI/URL-encoding.\n return uri;\n }\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return constants_1.BLANK_URL;\n }\n var charsToDecode;\n var decodedUrl = decodeURI(url.trim());\n do {\n decodedUrl = decodeHtmlCharacters(decodedUrl)\n .replace(constants_1.htmlCtrlEntityRegex, \"\")\n .replace(constants_1.ctrlCharactersRegex, \"\")\n .replace(constants_1.whitespaceEscapeCharsRegex, \"\")\n .trim();\n decodedUrl = decodeURI(decodedUrl);\n charsToDecode =\n decodedUrl.match(constants_1.ctrlCharactersRegex) ||\n decodedUrl.match(constants_1.htmlEntitiesRegex) ||\n decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||\n decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);\n } while (charsToDecode && charsToDecode.length > 0);\n var sanitizedUrl = decodedUrl;\n if (!sanitizedUrl) {\n return constants_1.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n // Remove any leading whitespace before checking the URL scheme\n var trimmedUrl = sanitizedUrl.trimStart();\n var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();\n if (constants_1.invalidProtocolRegex.test(urlScheme)) {\n return constants_1.BLANK_URL;\n }\n var backSanitized = trimmedUrl.replace(/\\\\/g, \"/\");\n // Handle special cases for mailto: and custom deep-link protocols\n if (urlScheme === \"mailto:\" || urlScheme.includes(\"://\")) {\n return backSanitized;\n }\n // For http and https URLs, perform additional validation\n if (urlScheme === \"http:\" || urlScheme === \"https:\") {\n if (!isValidUrl(backSanitized)) {\n return constants_1.BLANK_URL;\n }\n var url_1 = new URL(backSanitized);\n url_1.protocol = url_1.protocol.toLowerCase();\n url_1.hostname = url_1.hostname.toLowerCase();\n return url_1.toString();\n }\n return backSanitized;\n}\nexports.sanitizeUrl = sanitizeUrl;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import {\n assignWithDepth_default,\n common_default,\n detectType,\n directiveRegex,\n sanitizeDirective\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils.ts\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n select\n} from \"d3\";\nimport memoize from \"lodash-es/memoize.js\";\nimport merge from \"lodash-es/merge.js\";\nvar ZERO_WIDTH_SPACE = \"\\u200B\";\nvar d3CurveTypes = {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n};\nvar directiveWithoutOpen = /\\s*(?:(\\w+)(?=:):|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nvar detectInit = /* @__PURE__ */ __name(function(text, config) {\n const inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n let results = {};\n if (Array.isArray(inits)) {\n const args = inits.map((init) => init.args);\n sanitizeDirective(args);\n results = assignWithDepth_default(results, [...args]);\n } else {\n results = inits.args;\n }\n if (!results) {\n return;\n }\n let type = detectType(text, config);\n const prop = \"config\";\n if (results[prop] !== void 0) {\n if (type === \"flowchart-v2\") {\n type = \"flowchart\";\n }\n results[type] = results[prop];\n delete results[prop];\n }\n return results;\n}, \"detectInit\");\nvar detectDirective = /* @__PURE__ */ __name(function(text, type = null) {\n try {\n const commentWithoutDirectives = new RegExp(\n `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\n`,\n \"ig\"\n );\n text = text.trim().replace(commentWithoutDirectives, \"\").replace(/'/gm, '\"');\n log.debug(\n `Detecting diagram directive${type !== null ? \" type:\" + type : \"\"} based on the text:${text}`\n );\n let match;\n const result = [];\n while ((match = directiveRegex.exec(text)) !== null) {\n if (match.index === directiveRegex.lastIndex) {\n directiveRegex.lastIndex++;\n }\n if (match && !type || type && match[1]?.match(type) || type && match[2]?.match(type)) {\n const type2 = match[1] ? match[1] : match[2];\n const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({ type: type2, args });\n }\n }\n if (result.length === 0) {\n return { type: text, args: null };\n }\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n log.error(\n `ERROR: ${error.message} - Unable to parse directive type: '${type}' based on the text: '${text}'`\n );\n return { type: void 0, args: null };\n }\n}, \"detectDirective\");\nvar removeDirectives = /* @__PURE__ */ __name(function(text) {\n return text.replace(directiveRegex, \"\");\n}, \"removeDirectives\");\nvar isSubstringInArray = /* @__PURE__ */ __name(function(str, arr) {\n for (const [i, element] of arr.entries()) {\n if (element.match(str)) {\n return i;\n }\n }\n return -1;\n}, \"isSubstringInArray\");\nfunction interpolateToCurve(interpolate, defaultCurve) {\n if (!interpolate) {\n return defaultCurve;\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n return d3CurveTypes[curveName] ?? defaultCurve;\n}\n__name(interpolateToCurve, \"interpolateToCurve\");\nfunction formatUrl(linkStr, config) {\n const url = linkStr.trim();\n if (!url) {\n return void 0;\n }\n if (config.securityLevel !== \"loose\") {\n return sanitizeUrl(url);\n }\n return url;\n}\n__name(formatUrl, \"formatUrl\");\nvar runFunc = /* @__PURE__ */ __name((functionName, ...params) => {\n const arrPaths = functionName.split(\".\");\n const len = arrPaths.length - 1;\n const fnName = arrPaths[len];\n let obj = window;\n for (let i = 0; i < len; i++) {\n obj = obj[arrPaths[i]];\n if (!obj) {\n log.error(`Function name: ${functionName} not found in window`);\n return;\n }\n }\n obj[fnName](...params);\n}, \"runFunc\");\nfunction distance(p1, p2) {\n if (!p1 || !p2) {\n return 0;\n }\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n__name(distance, \"distance\");\nfunction traverseEdge(points) {\n let prevPoint;\n let totalDistance = 0;\n points.forEach((point) => {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n });\n const remainingDistance = totalDistance / 2;\n return calculatePoint(points, remainingDistance);\n}\n__name(traverseEdge, \"traverseEdge\");\nfunction calcLabelPosition(points) {\n if (points.length === 1) {\n return points[0];\n }\n return traverseEdge(points);\n}\n__name(calcLabelPosition, \"calcLabelPosition\");\nvar roundNumber = /* @__PURE__ */ __name((num, precision = 2) => {\n const factor = Math.pow(10, precision);\n return Math.round(num * factor) / factor;\n}, \"roundNumber\");\nvar calculatePoint = /* @__PURE__ */ __name((points, distanceToTraverse) => {\n let prevPoint = void 0;\n let remainingDistance = distanceToTraverse;\n for (const point of points) {\n if (prevPoint) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance === 0) {\n return prevPoint;\n }\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n return prevPoint;\n }\n if (distanceRatio >= 1) {\n return { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n return {\n x: roundNumber((1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, 5),\n y: roundNumber((1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, 5)\n };\n }\n }\n }\n prevPoint = point;\n }\n throw new Error(\"Could not find a suitable point for the given distance\");\n}, \"calculatePoint\");\nvar calcCardinalityPosition = /* @__PURE__ */ __name((isRelationTypePresent, points, initialPosition) => {\n log.info(`our points ${JSON.stringify(points)}`);\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n const distanceToCardinalityPoint = 25;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = isRelationTypePresent ? 10 : 5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n}, \"calcCardinalityPosition\");\nfunction calcTerminalLabelPosition(terminalMarkerSize, position, _points) {\n const points = structuredClone(_points);\n log.info(\"our points\", points);\n if (position !== \"start_left\" && position !== \"start_right\") {\n points.reverse();\n }\n const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = 10 + terminalMarkerSize * 0.5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n if (position === \"start_left\") {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n } else if (position === \"end_right\") {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n } else if (position === \"end_left\") {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n } else {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n }\n return cardinalityPosition;\n}\n__name(calcTerminalLabelPosition, \"calcTerminalLabelPosition\");\nfunction getStylesFromArray(arr) {\n let style = \"\";\n let labelStyle = \"\";\n for (const element of arr) {\n if (element !== void 0) {\n if (element.startsWith(\"color:\") || element.startsWith(\"text-align:\")) {\n labelStyle = labelStyle + element + \";\";\n } else {\n style = style + element + \";\";\n }\n }\n }\n return { style, labelStyle };\n}\n__name(getStylesFromArray, \"getStylesFromArray\");\nvar cnt = 0;\nvar generateId = /* @__PURE__ */ __name(() => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n}, \"generateId\");\nfunction makeRandomHex(length) {\n let result = \"\";\n const characters = \"0123456789abcdef\";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n__name(makeRandomHex, \"makeRandomHex\");\nvar random = /* @__PURE__ */ __name((options) => {\n return makeRandomHex(options.length);\n}, \"random\");\nvar getTextObj = /* @__PURE__ */ __name(function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n anchor: \"start\",\n style: \"#666\",\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: void 0,\n text: \"\"\n };\n}, \"getTextObj\");\nvar drawSimpleText = /* @__PURE__ */ __name(function(elem, textData) {\n const nText = textData.text.replace(common_default.lineBreakRegex, \" \");\n const [, _fontSizePx] = parseFontSize(textData.fontSize);\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.style(\"text-anchor\", textData.anchor);\n textElem.style(\"font-family\", textData.fontFamily);\n textElem.style(\"font-size\", _fontSizePx);\n textElem.style(\"font-weight\", textData.fontWeight);\n textElem.attr(\"fill\", textData.fill);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.attr(\"fill\", textData.fill);\n span.text(nText);\n return textElem;\n}, \"drawSimpleText\");\nvar wrapLabel = memoize(\n (label, maxWidth, config) => {\n if (!label) {\n return label;\n }\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", joinWith: \"
    \" },\n config\n );\n if (common_default.lineBreakRegex.test(label)) {\n return label;\n }\n const words = label.split(\" \").filter(Boolean);\n const completedLines = [];\n let nextLine = \"\";\n words.forEach((word, index) => {\n const wordLength = calculateTextWidth(`${word} `, config);\n const nextLineLength = calculateTextWidth(nextLine, config);\n if (wordLength > maxWidth) {\n const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, \"-\", config);\n completedLines.push(nextLine, ...hyphenatedStrings);\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(\" \");\n }\n const currentWord = index + 1;\n const isLastWord = currentWord === words.length;\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter((line) => line !== \"\").join(config.joinWith);\n },\n (label, maxWidth, config) => `${label}${maxWidth}${config.fontSize}${config.fontWeight}${config.fontFamily}${config.joinWith}`\n);\nvar breakString = memoize(\n (word, maxWidth, hyphenCharacter = \"-\", config) => {\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", margin: 0 },\n config\n );\n const characters = [...word];\n const lines = [];\n let currentLine = \"\";\n characters.forEach((character, index) => {\n const nextLine = `${currentLine}${character}`;\n const lineWidth = calculateTextWidth(nextLine, config);\n if (lineWidth >= maxWidth) {\n const currentCharacter = index + 1;\n const isLastLine = characters.length === currentCharacter;\n const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = \"\";\n } else {\n currentLine = nextLine;\n }\n });\n return { hyphenatedStrings: lines, remainingWord: currentLine };\n },\n (word, maxWidth, hyphenCharacter = \"-\", config) => `${word}${maxWidth}${hyphenCharacter}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\nfunction calculateTextHeight(text, config) {\n return calculateTextDimensions(text, config).height;\n}\n__name(calculateTextHeight, \"calculateTextHeight\");\nfunction calculateTextWidth(text, config) {\n return calculateTextDimensions(text, config).width;\n}\n__name(calculateTextWidth, \"calculateTextWidth\");\nvar calculateTextDimensions = memoize(\n (text, config) => {\n const { fontSize = 12, fontFamily = \"Arial\", fontWeight = 400 } = config;\n if (!text) {\n return { width: 0, height: 0 };\n }\n const [, _fontSizePx] = parseFontSize(fontSize);\n const fontFamilies = [\"sans-serif\", fontFamily];\n const lines = text.split(common_default.lineBreakRegex);\n const dims = [];\n const body = select(\"body\");\n if (!body.remove) {\n return { width: 0, height: 0, lineHeight: 0 };\n }\n const g = body.append(\"svg\");\n for (const fontFamily2 of fontFamilies) {\n let cHeight = 0;\n const dim = { width: 0, height: 0, lineHeight: 0 };\n for (const line of lines) {\n const textObj = getTextObj();\n textObj.text = line || ZERO_WIDTH_SPACE;\n const textElem = drawSimpleText(g, textObj).style(\"font-size\", _fontSizePx).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily2);\n const bBox = (textElem._groups || textElem)[0][0].getBBox();\n if (bBox.width === 0 && bBox.height === 0) {\n throw new Error(\"svg element not in render tree\");\n }\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cHeight = Math.round(bBox.height);\n dim.height += cHeight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cHeight));\n }\n dims.push(dim);\n }\n g.remove();\n const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;\n return dims[index];\n },\n (text, config) => `${text}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\nvar InitIDGenerator = class {\n constructor(deterministic = false, seed) {\n this.count = 0;\n this.count = seed ? seed.length : 0;\n this.next = deterministic ? () => this.count++ : () => Date.now();\n }\n static {\n __name(this, \"InitIDGenerator\");\n }\n};\nvar decoder;\nvar entityDecode = /* @__PURE__ */ __name(function(html) {\n decoder = decoder || document.createElement(\"div\");\n html = escape(html).replace(/%26/g, \"&\").replace(/%23/g, \"#\").replace(/%3B/g, \";\");\n decoder.innerHTML = html;\n return unescape(decoder.textContent);\n}, \"entityDecode\");\nfunction isDetailedError(error) {\n return \"str\" in error;\n}\n__name(isDetailedError, \"isDetailedError\");\nvar insertTitle = /* @__PURE__ */ __name((parent, cssClass, titleTopMargin, title) => {\n if (!title) {\n return;\n }\n const bounds = parent.node()?.getBBox();\n if (!bounds) {\n return;\n }\n parent.append(\"text\").text(title).attr(\"text-anchor\", \"middle\").attr(\"x\", bounds.x + bounds.width / 2).attr(\"y\", -titleTopMargin).attr(\"class\", cssClass);\n}, \"insertTitle\");\nvar parseFontSize = /* @__PURE__ */ __name((fontSize) => {\n if (typeof fontSize === \"number\") {\n return [fontSize, fontSize + \"px\"];\n }\n const fontSizeNumber = parseInt(fontSize ?? \"\", 10);\n if (Number.isNaN(fontSizeNumber)) {\n return [void 0, void 0];\n } else if (fontSize === String(fontSizeNumber)) {\n return [fontSizeNumber, fontSize + \"px\"];\n } else {\n return [fontSizeNumber, fontSize];\n }\n}, \"parseFontSize\");\nfunction cleanAndMerge(defaultData, data) {\n return merge({}, defaultData, data);\n}\n__name(cleanAndMerge, \"cleanAndMerge\");\nvar utils_default = {\n assignWithDepth: assignWithDepth_default,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n calculateTextDimensions,\n cleanAndMerge,\n detectInit,\n detectDirective,\n isSubstringInArray,\n interpolateToCurve,\n calcLabelPosition,\n calcCardinalityPosition,\n calcTerminalLabelPosition,\n formatUrl,\n getStylesFromArray,\n generateId,\n random,\n runFunc,\n entityDecode,\n insertTitle,\n isLabelCoordinateInPath,\n parseFontSize,\n InitIDGenerator\n};\nvar encodeEntities = /* @__PURE__ */ __name(function(text) {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, function(s) {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return \"\\uFB02\\xB0\\xB0\" + innerTxt + \"\\xB6\\xDF\";\n } else {\n return \"\\uFB02\\xB0\" + innerTxt + \"\\xB6\\xDF\";\n }\n });\n return txt;\n}, \"encodeEntities\");\nvar decodeEntities = /* @__PURE__ */ __name(function(text) {\n return text.replace(/fl°°/g, \"&#\").replace(/fl°/g, \"&\").replace(/¶ß/g, \";\");\n}, \"decodeEntities\");\nvar getEdgeId = /* @__PURE__ */ __name((from, to, {\n counter = 0,\n prefix,\n suffix\n}, id) => {\n if (id) {\n return id;\n }\n return `${prefix ? `${prefix}_` : \"\"}${from}_${to}_${counter}${suffix ? `_${suffix}` : \"\"}`;\n}, \"getEdgeId\");\nfunction handleUndefinedAttr(attrValue) {\n return attrValue ?? null;\n}\n__name(handleUndefinedAttr, \"handleUndefinedAttr\");\nfunction isLabelCoordinateInPath(point, dAttr) {\n const roundedX = Math.round(point.x);\n const roundedY = Math.round(point.y);\n const sanitizedD = dAttr.replace(\n /(\\d+\\.\\d+)/g,\n (match) => Math.round(parseFloat(match)).toString()\n );\n return sanitizedD.includes(roundedX.toString()) || sanitizedD.includes(roundedY.toString());\n}\n__name(isLabelCoordinateInPath, \"isLabelCoordinateInPath\");\n\nexport {\n ZERO_WIDTH_SPACE,\n removeDirectives,\n interpolateToCurve,\n getStylesFromArray,\n generateId,\n random,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n isDetailedError,\n parseFontSize,\n cleanAndMerge,\n utils_default,\n encodeEntities,\n decodeEntities,\n getEdgeId,\n handleUndefinedAttr\n};\n","/** Default values for dimensions */\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/** Default values for transformations */\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/** Default values for all optional IconifyIcon properties */\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/** Default values for all properties used in ExtendedIconifyIcon */\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\nexport { defaultExtendedIconProps, defaultIconDimensions, defaultIconProps, defaultIconTransformations };","import { defaultIconTransformations } from \"../icon/defaults.js\";\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\nexport { defaultIconCustomisations, defaultIconSizeCustomisations };","/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nexport { matchIconName, stringToIcon, validateIconName };","/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\nexport { mergeIconTransformations };","import { defaultExtendedIconProps, defaultIconTransformations } from \"./defaults.js\";\nimport { mergeIconTransformations } from \"./transformations.js\";\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\nexport { mergeIconData };","/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\nexport { getIconsTree };","import { mergeIconData } from \"../icon/merge.js\";\nimport { getIconsTree } from \"./tree.js\";\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n/**\n* Get data for icon\n*/\nfunction getIconData(data, name) {\n\tif (data.icons[name]) return internalGetIconData(data, name, []);\n\tconst tree = getIconsTree(data, [name])[name];\n\treturn tree ? internalGetIconData(data, name, tree) : null;\n}\n\nexport { getIconData, internalGetIconData };","/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nexport { calculateSize };","function splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"\" + defs + \"\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nexport { mergeDefsAndContent, splitSVGDefs, wrapSVGContent };","import { defaultIconProps } from \"../icon/defaults.js\";\nimport { defaultIconCustomisations } from \"../customisations/defaults.js\";\nimport { calculateSize } from \"./size.js\";\nimport { wrapSVGContent } from \"./defs.js\";\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"\", \"\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\nexport { iconToSVG, isUnsetKeyword };","/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* Counters\n*/\nconst counters = /* @__PURE__ */ new Map();\n/**\n* Get unique new ID\n*/\nfunction nextID(id) {\n\tid = id.replace(/[0-9]+$/, \"\") || \"a\";\n\tconst count = counters.get(id) || 0;\n\tcounters.set(id, count + 1);\n\treturn count ? `${id}${count}` : id;\n}\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = nextID(id);\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n/**\n* Clear ID cache\n*/\nfunction clearIDCache() {\n\tcounters.clear();\n}\n\nexport { clearIDCache, replaceIDs };","/**\n* Generate \n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"\" + body + \"\";\n}\n\nexport { iconToHTML };","/**\n * marked v16.4.2 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function G(l){T=l}var E={exec:()=>null};function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return!!new RegExp(\"(?<=1)(?/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},Re=/^(?:[ \\t]*(?:\\n|$))+/,Te=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,we=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,F=/(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),ye=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Pe=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Se=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),$e=d(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,F).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/|$))/,_e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|\\\\n*|$)|\\\\n*|$)|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Le=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:I,html:_e,lheading:oe,list:$e,newline:Re,paragraph:ae,table:E,text:Pe},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Me={...K,lheading:ye,table:re,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},ze={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ee=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\`+)[^`]+\\k(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",be?\"(?`+)[^`]+\\k(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,De=d(ce,\"u\").replace(/punct/g,D).getRegex(),He=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ze=d(he,\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=d(he,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,Be).replace(/punct/g,pe).getRegex(),Ne=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Fe=d(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),je=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ue=d(\"^comment|^|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^|^\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,Ke=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),de=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),We=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",de).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:E,anyPunctuation:Fe,autolink:je,blockSkip:ve,br:le,code:Ee,del:E,emStrongLDelim:De,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ae,link:Ke,nolink:ke,punctuation:Ce,reflink:de,reflinkSearch:We,tag:Ue,text:Ie,url:E},Xe={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\\":\">\",'\"':\""\",\"'\":\"'\"},ge=l=>Ve[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,a)=>{let o=!1,p=s;for(;--p>=0&&a[p]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function me(l,e,t,n,r){let i=e.href,s=e.title||null,a=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Ye(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ye(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],p;for(p=0;p1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let p=!1,u=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(u+=h+`\n`,e=e.substring(h.length+1),p=!0),!p){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),u+=Z+`\n`,e=e.substring(Z.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(a=!0));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(c),O&&(Y=O[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:u,task:!!O,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=u}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p=0;pg.type===\"space\"),c=u.length>0&&u.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}if(i.loose)for(let p=0;p({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[p]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,p=s,u=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){p+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){u+=o;continue}if(p-=o,p>0)continue;o=Math.min(o,o+p+u);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(u=Math.min(u,g))}),u<1/0&&u>=0&&(p=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'
    '+(n?i:w(i,!0))+`
    \n`:\"
    \"+(n?i:w(i,!0))+`
    \n`}blockquote({tokens:e}){return`
    \n${this.parser.parse(e)}
    \n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)}\n`}hr(e){return`
    \n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a\n`+r+\"\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • \n`}checkbox({checked:e}){return\"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    \n`}table(e){let t=\"\",n=\"\";for(let i=0;i${r}`),`\n\n`+t+`\n`+r+`
    \n`}tablerow({text:e}){return`\n${e}\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`\n`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${w(e,!0)}`}br(e){return\"
    \"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='\"+r+\"\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`\"${n}\"`;return\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],p=i[a];S.passThroughHooks.has(s)?i[a]=u=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,u);return p.call(i,g)})();let c=o.call(i,u);return p.call(i,c)}:i[a]=(...u)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,u);return g===!1&&(g=await p.apply(i,u)),g})();let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,u=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(u):u;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let p=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"

    An error occurred:

    \"+w(n.message+\"\",!0)+\"
    \";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(l,e){return _.parse(l,e)}k.options=k.setOptions=function(l){return _.setOptions(l),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...l){return _.use(...l),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(l,e){return _.walkTokens(l,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;var Zt=k.options,Gt=k.setOptions,Nt=k.use,Ft=k.walkTokens,jt=k.parseInline,Qt=k,Ut=b.parse,Kt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,Kt as lexer,k as marked,Zt as options,Qt as parse,jt as parseInline,Ut as parser,Gt as setOptions,Nt as use,Ft as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","export function dedent(templ) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n var strings = Array.from(typeof templ === 'string' ? [templ] : templ);\n strings[strings.length - 1] = strings[strings.length - 1].replace(/\\r?\\n([\\t ]*)$/, '');\n var indentLengths = strings.reduce(function (arr, str) {\n var matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n if (matches) {\n return arr.concat(matches.map(function (match) { var _a, _b; return (_b = (_a = match.match(/[\\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }));\n }\n return arr;\n }, []);\n if (indentLengths.length) {\n var pattern_1 = new RegExp(\"\\n[\\t ]{\" + Math.min.apply(Math, indentLengths) + \"}\", 'g');\n strings = strings.map(function (str) { return str.replace(pattern_1, '\\n'); });\n }\n strings[0] = strings[0].replace(/^\\r?\\n/, '');\n var string = strings[0];\n values.forEach(function (value, i) {\n var endentations = string.match(/(?:^|\\n)( *)$/);\n var endentation = endentations ? endentations[1] : '';\n var indentedValue = value;\n if (typeof value === 'string' && value.includes('\\n')) {\n indentedValue = String(value)\n .split('\\n')\n .map(function (str, i) {\n return i === 0 ? str : \"\" + endentation + str;\n })\n .join('\\n');\n }\n string += indentedValue + strings[i + 1];\n });\n return string;\n}\nexport default dedent;\n//# sourceMappingURL=index.js.map","import {\n decodeEntities\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n getConfig,\n hasKatex,\n renderKatexSanitized,\n sanitizeText\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/icons.ts\nimport { getIconData, iconToHTML, iconToSVG, replaceIDs, stringToIcon } from \"@iconify/utils\";\nvar unknownIcon = {\n body: '?',\n height: 80,\n width: 80\n};\nvar iconsStore = /* @__PURE__ */ new Map();\nvar loaderStore = /* @__PURE__ */ new Map();\nvar registerIconPacks = /* @__PURE__ */ __name((iconLoaders) => {\n for (const iconLoader of iconLoaders) {\n if (!iconLoader.name) {\n throw new Error(\n 'Invalid icon loader. Must have a \"name\" property with non-empty string value.'\n );\n }\n log.debug(\"Registering icon pack:\", iconLoader.name);\n if (\"loader\" in iconLoader) {\n loaderStore.set(iconLoader.name, iconLoader.loader);\n } else if (\"icons\" in iconLoader) {\n iconsStore.set(iconLoader.name, iconLoader.icons);\n } else {\n log.error(\"Invalid icon loader:\", iconLoader);\n throw new Error('Invalid icon loader. Must have either \"icons\" or \"loader\" property.');\n }\n }\n}, \"registerIconPacks\");\nvar getRegisteredIconData = /* @__PURE__ */ __name(async (iconName, fallbackPrefix) => {\n const data = stringToIcon(iconName, true, fallbackPrefix !== void 0);\n if (!data) {\n throw new Error(`Invalid icon name: ${iconName}`);\n }\n const prefix = data.prefix || fallbackPrefix;\n if (!prefix) {\n throw new Error(`Icon name must contain a prefix: ${iconName}`);\n }\n let icons = iconsStore.get(prefix);\n if (!icons) {\n const loader = loaderStore.get(prefix);\n if (!loader) {\n throw new Error(`Icon set not found: ${data.prefix}`);\n }\n try {\n const loaded = await loader();\n icons = { ...loaded, prefix };\n iconsStore.set(prefix, icons);\n } catch (e) {\n log.error(e);\n throw new Error(`Failed to load icon set: ${data.prefix}`);\n }\n }\n const iconData = getIconData(icons, data.name);\n if (!iconData) {\n throw new Error(`Icon not found: ${iconName}`);\n }\n return iconData;\n}, \"getRegisteredIconData\");\nvar isIconAvailable = /* @__PURE__ */ __name(async (iconName) => {\n try {\n await getRegisteredIconData(iconName);\n return true;\n } catch {\n return false;\n }\n}, \"isIconAvailable\");\nvar getIconSVG = /* @__PURE__ */ __name(async (iconName, customisations, extraAttributes) => {\n let iconData;\n try {\n iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);\n } catch (e) {\n log.error(e);\n iconData = unknownIcon;\n }\n const renderData = iconToSVG(iconData, customisations);\n const svg = iconToHTML(replaceIDs(renderData.body), {\n ...renderData.attributes,\n ...extraAttributes\n });\n return sanitizeText(svg, getConfig());\n}, \"getIconSVG\");\n\n// src/rendering-util/createText.ts\nimport { select } from \"d3\";\n\n// src/rendering-util/handle-markdown-text.ts\nimport { marked } from \"marked\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown, { markdownAutoWrap }) {\n const withoutBR = markdown.replace(//g, \"\\n\");\n const withoutMultipleNewlines = withoutBR.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n if (markdownAutoWrap === false) {\n return withoutExtraSpaces.replace(/ /g, \" \");\n }\n return withoutExtraSpaces;\n}\n__name(preprocessMarkdown, \"preprocessMarkdown\");\nfunction markdownToLines(markdown, config = {}) {\n const preprocessedMarkdown = preprocessMarkdown(markdown, config);\n const nodes = marked.lexer(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.text.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n word = word.replace(/'/g, `'`);\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"em\") {\n node.tokens.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n } else if (node.type === \"html\") {\n lines[currentLine].push({ content: node.text, type: \"normal\" });\n }\n }\n __name(processNode, \"processNode\");\n nodes.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.tokens?.forEach((contentNode) => {\n processNode(contentNode);\n });\n } else if (treeNode.type === \"html\") {\n lines[currentLine].push({ content: treeNode.text, type: \"normal\" });\n } else {\n lines[currentLine].push({ content: treeNode.raw, type: \"normal\" });\n }\n });\n return lines;\n}\n__name(markdownToLines, \"markdownToLines\");\nfunction markdownToHTML(markdown, { markdownAutoWrap } = {}) {\n const nodes = marked.lexer(markdown);\n function output(node) {\n if (node.type === \"text\") {\n if (markdownAutoWrap === false) {\n return node.text.replace(/\\n */g, \"
    \").replace(/ /g, \" \");\n }\n return node.text.replace(/\\n */g, \"
    \");\n } else if (node.type === \"strong\") {\n return `${node.tokens?.map(output).join(\"\")}`;\n } else if (node.type === \"em\") {\n return `${node.tokens?.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `

    ${node.tokens?.map(output).join(\"\")}

    `;\n } else if (node.type === \"space\") {\n return \"\";\n } else if (node.type === \"html\") {\n return `${node.text}`;\n } else if (node.type === \"escape\") {\n return node.text;\n }\n log.warn(`Unsupported markdown: ${node.type}`);\n return node.raw;\n }\n __name(output, \"output\");\n return nodes.map(output).join(\"\");\n}\n__name(markdownToHTML, \"markdownToHTML\");\n\n// src/rendering-util/splitText.ts\nfunction splitTextToChars(text) {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\n__name(splitTextToChars, \"splitTextToChars\");\nfunction splitWordToFitWidth(checkFit, word) {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\n__name(splitWordToFitWidth, \"splitWordToFitWidth\");\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(\"\"), type },\n { content: \"\", type }\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(\"\"), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(\"\"), type },\n { content: remainingChars.join(\"\"), type }\n ];\n}\n__name(splitWordToFitWidthRecursion, \"splitWordToFitWidthRecursion\");\nfunction splitLineToFitWidth(line, checkFit) {\n if (line.some(({ content }) => content.includes(\"\\n\"))) {\n throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\n__name(splitLineToFitWidth, \"splitLineToFitWidth\");\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n if (words.length === 0) {\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = \"\";\n if (words[0].content === \" \") {\n joiner = \" \";\n words.shift();\n }\n const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n const lineWithNextWord = [...newLine];\n if (joiner !== \"\") {\n lineWithNextWord.push({ content: joiner, type: \"normal\" });\n }\n lineWithNextWord.push(nextWord);\n if (checkFit(lineWithNextWord)) {\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n if (newLine.length > 0) {\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\n__name(splitLineToFitWidthRecursion, \"splitLineToFitWidthRecursion\");\n\n// src/rendering-util/createText.ts\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nasync function addHtmlSpan(element, node, width, classes, addBackground = false, config = getConfig()) {\n const fo = element.append(\"foreignObject\");\n fo.attr(\"width\", `${10 * width}px`);\n fo.attr(\"height\", `${10 * width}px`);\n const div = fo.append(\"xhtml:div\");\n const sanitizedLabel = hasKatex(node.label) ? await renderKatexSanitized(node.label.replace(common_default.lineBreakRegex, \"\\n\"), config) : sanitizeText(node.label, config);\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const span = div.append(\"span\");\n span.html(sanitizedLabel);\n applyStyle(span, node.labelStyle);\n span.attr(\"class\", `${labelClass} ${classes}`);\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"line-height\", \"1.5\");\n div.style(\"max-width\", width + \"px\");\n div.style(\"text-align\", \"center\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n return fo.node();\n}\n__name(addHtmlSpan, \"addHtmlSpan\");\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\n__name(createTspan, \"createTspan\");\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\n__name(computeWidthOfText, \"computeWidthOfText\");\nfunction computeDimensionOfText(parentNode, lineHeight, text) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, [{ content: text, type: \"normal\" }]);\n const textDimension = testSpan.node()?.getBoundingClientRect();\n if (textDimension) {\n testElement.remove();\n }\n return textDimension;\n}\n__name(computeDimensionOfText, \"computeDimensionOfText\");\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\").attr(\"style\", \"stroke: none\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n for (const line of structuredText) {\n const checkWidth = /* @__PURE__ */ __name((line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width, \"checkWidth\");\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", bbox.x - padding).attr(\"y\", bbox.y - padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\n__name(createFormattedText, \"createFormattedText\");\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"em\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\n__name(updateTextContentAndStyles, \"updateTextContentAndStyles\");\nasync function replaceIconSubstring(text, config = {}) {\n const pendingReplacements = [];\n text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, (fullMatch, prefix, iconName) => {\n pendingReplacements.push(\n (async () => {\n const registeredIconName = `${prefix}:${iconName}`;\n if (await isIconAvailable(registeredIconName)) {\n return await getIconSVG(registeredIconName, void 0, { class: \"label-icon\" });\n } else {\n return ``;\n }\n })()\n );\n return fullMatch;\n });\n const replacements = await Promise.all(pendingReplacements);\n return text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, () => replacements.shift() ?? \"\");\n}\n__name(replaceIconSubstring, \"replaceIconSubstring\");\nvar createText = /* @__PURE__ */ __name(async (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false\n} = {}, config) => {\n log.debug(\n \"XYZ createText\",\n text,\n style,\n isTitle,\n classes,\n useHtmlLabels,\n isNode,\n \"addSvgBackground: \",\n addSvgBackground\n );\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text, config);\n const decodedReplacedText = await replaceIconSubstring(decodeEntities(htmlText), config);\n const inputForKatex = text.replace(/\\\\\\\\/g, \"\\\\\");\n const node = {\n isNode,\n label: hasKatex(text) ? inputForKatex : decodedReplacedText,\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n const vertexNode = await addHtmlSpan(el, node, width, classes, addSvgBackground, config);\n return vertexNode;\n } else {\n const sanitizeBR = text.replace(//g, \"
    \");\n const structuredText = markdownToLines(sanitizeBR.replace(\"
    \", \"
    \"), config);\n const svgLabel = createFormattedText(\n width,\n el,\n structuredText,\n text ? addSvgBackground : false\n );\n if (isNode) {\n if (/stroke:/.exec(style)) {\n style = style.replace(\"stroke:\", \"lineColor:\");\n }\n const nodeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/color:/g, \"fill:\");\n select(svgLabel).attr(\"style\", nodeLabelTextStyle);\n } else {\n const edgeLabelRectStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/background:/g, \"fill:\");\n select(svgLabel).select(\"rect\").attr(\"style\", edgeLabelRectStyle.replace(/background:/g, \"fill:\"));\n const edgeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/color:/g, \"fill:\");\n select(svgLabel).select(\"text\").attr(\"style\", edgeLabelTextStyle);\n }\n return svgLabel;\n }\n}, \"createText\");\n\nexport {\n unknownIcon,\n registerIconPacks,\n getIconSVG,\n computeDimensionOfText,\n replaceIconSubstring,\n createText\n};\n","function t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function e(t,e){return t[0]===e[0]&&t[1]===e[1]}function s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&\"number\"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;et.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;ei);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),t(o,s,n)}(l,c,-h)}return l}function n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),s(t,a,o,h||1)}class o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class h extends o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:\"fillSketch\",ops:this.renderLines(r,e)}}}class r extends o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class i{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t{const h=a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t{const o=a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;tn%2?t+s:t+e));a.push({key:\"C\",data:t}),e=t[4],s=t[5];break}case\"Q\":a.push({key:\"Q\",data:[...r]}),e=r[2],s=r[3];break;case\"q\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"Q\",data:t}),e=t[2],s=t[3];break}case\"A\":a.push({key:\"A\",data:[...r]}),e=r[5],s=r[6];break;case\"a\":e+=r[5],s+=r[6],a.push({key:\"A\",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case\"H\":a.push({key:\"H\",data:[...r]}),e=r[0];break;case\"h\":e+=r[0],a.push({key:\"H\",data:[e]});break;case\"V\":a.push({key:\"V\",data:[...r]}),s=r[0];break;case\"v\":s+=r[0],a.push({key:\"V\",data:[s]});break;case\"S\":a.push({key:\"S\",data:[...r]}),e=r[2],s=r[3];break;case\"s\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"S\",data:t}),e=t[2],s=t[3];break}case\"T\":a.push({key:\"T\",data:[...r]}),e=r[0],s=r[1];break;case\"t\":e+=r[0],s+=r[1],a.push({key:\"T\",data:[e,s]});break;case\"Z\":case\"z\":a.push({key:\"Z\",data:[]}),e=n,s=o}return a}function m(t){const e=[];let s=\"\",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case\"M\":e.push({key:\"M\",data:[...l]}),[n,o]=l,[a,h]=l;break;case\"C\":e.push({key:\"C\",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case\"L\":e.push({key:\"L\",data:[...l]}),[n,o]=l;break;case\"H\":n=l[0],e.push({key:\"L\",data:[n,o]});break;case\"V\":o=l[0],e.push({key:\"L\",data:[n,o]});break;case\"S\":{let t=0,a=0;\"C\"===s||\"S\"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:\"C\",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case\"T\":{const[t,a]=l;let h=0,c=0;\"Q\"===s||\"T\"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:\"C\",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case\"Q\":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:\"C\",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case\"A\":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:\"C\",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:\"C\",data:t})})),n=i,o=c}break}case\"Z\":e.push({key:\"Z\",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),td&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e2){const o=[];for(let e=0;e2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:\"lineTo\",data:[c,l]},{op:\"lineTo\",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:\"path\",ops:k}}function _(t,e){const s=m(y(b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case\"M\":a=[h[0],h[1]],o=[h[0],h[1]];break;case\"L\":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case\"C\":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case\"Z\":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:\"path\",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:\"move\",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:\"move\",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:\"move\",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o3){const a=[],h=1-s.curveTightness;o.push({op:\"move\",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;ni&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s0?X(n,0,n.length,s):n}const tt=\"none\";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:\"#000\",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:\"hachure\",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d(\"line\",[v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];\"solid\"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d(\"rectangle\",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=T(s,n,a),i=D(t,e,a,r);if(a.fill)if(\"solid\"===a.fillStyle){const s=D(t,e,a,r).opset;s.type=\"fillPath\",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d(\"ellipse\",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape=\"circle\",o}linearPath(t,e){const s=this._o(e);return this._d(\"linearPath\",[S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if(\"solid\"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=A(t,e,s,n,o,a,!0,!1,h);r.type=\"fillPath\",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d(\"arc\",c,i)}curve(t,e){const s=this._o(e),n=[],o=L(t,s);if(s.fill&&s.fill!==tt)if(\"solid\"===s.fillStyle){const e=L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t=\"number\"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d(\"curve\",n,s)}polygon(t,e){const s=this._o(e),n=[],o=S(t,!0,s);return s.fill&&(\"solid\"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d(\"polygon\",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d(\"path\",n,s);t=(t||\"\").replace(/\\n/g,\" \").replace(/(-\\s)/g,\"-\").replace(\"/(ss)/g\",\" \");const o=s.fill&&\"transparent\"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=m(y(b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case\"M\":c(),h=[e[0],e[1]],a.push(h);break;case\"L\":i(),a.push([e[0],e[1]]);break;case\"C\":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case\"Z\":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if(\"solid\"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(S(t,!1,s))})):n.push(i)),this._d(\"path\",n,s)}opsToPath(t,e){let s=\"\";for(const n of t.ops){const t=\"number\"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case\"move\":s+=`M${t[0]} ${t[1]} `;break;case\"bcurveTo\":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case\"lineTo\":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case\"path\":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case\"fillPath\":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case\"fillSketch\":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||\"move\"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext(\"2d\"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case\"path\":n.save(),n.strokeStyle=\"none\"===s.stroke?\"transparent\":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case\"fillPath\":{n.save(),n.fillStyle=s.fill||\"\";const e=\"curve\"===t.shape||\"polygon\"===t.shape||\"path\"===t.shape?\"evenodd\":\"nonzero\";this._drawToContext(n,a,o,e),n.restore();break}case\"fillSketch\":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||\"\",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n=\"nonzero\"){t.beginPath();for(const n of e.ops){const e=\"number\"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case\"move\":t.moveTo(e[0],e[1]);break;case\"bcurveTo\":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case\"lineTo\":t.lineTo(e[0],e[1])}}\"fillPath\"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt=\"http://www.w3.org/2000/svg\";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,\"g\"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case\"path\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",s.stroke),e.setAttribute(\"stroke-width\",s.strokeWidth+\"\"),e.setAttribute(\"fill\",\"none\"),s.strokeLineDash&&e.setAttribute(\"stroke-dasharray\",s.strokeLineDash.join(\" \").trim()),s.strokeLineDashOffset&&e.setAttribute(\"stroke-dashoffset\",`${s.strokeLineDashOffset}`);break;case\"fillPath\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",\"none\"),e.setAttribute(\"stroke-width\",\"0\"),e.setAttribute(\"fill\",s.fill||\"\"),\"curve\"!==t.shape&&\"polygon\"!==t.shape||e.setAttribute(\"fill-rule\",\"evenodd\");break;case\"fillSketch\":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,\"path\");return o.setAttribute(\"d\",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute(\"stroke\",s.fill||\"\"),o.setAttribute(\"stroke-width\",n+\"\"),o.setAttribute(\"fill\",\"none\"),s.fillLineDash&&o.setAttribute(\"stroke-dasharray\",s.fillLineDash.join(\" \").trim()),s.fillLineDashOffset&&o.setAttribute(\"stroke-dashoffset\",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};export{at as default};\n","import {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n compileStyles,\n solidStateFill,\n styles2String,\n userNodeOverrides\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n createText,\n getIconSVG\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n calculateTextWidth,\n decodeEntities,\n handleUndefinedAttr,\n parseFontSize\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n defaultConfig_default,\n evaluate,\n getConfig,\n getConfig2,\n hasKatex,\n parseGenericTypes,\n renderKatexSanitized,\n sanitizeText,\n sanitizeText2\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/util.ts\nimport { select } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);\n if (!_classes) {\n cssClasses = \"node default\";\n } else {\n cssClasses = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", handleUndefinedAttr(node.labelStyle));\n let label;\n if (node.label === void 0) {\n label = \"\";\n } else {\n label = typeof node.label === \"string\" ? node.label : node.label[0];\n }\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: node.width || getConfig2().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: \"markdown-node-label\",\n style: node.labelStyle,\n addSvgBackground: !!node.icon || !!node.img\n });\n let bbox = text2.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n if (useHtmlLabels) {\n const div = text2.children[0];\n const dv = select(text2);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = label.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = getConfig2().fontSize ? getConfig2().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const [parsedBodyFontSize = defaultConfig_default.fontSize] = parseFontSize(bodyFontSize);\n const width = parsedBodyFontSize * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label: labelEl };\n}, \"labelHelper\");\nvar insertLabel = /* @__PURE__ */ __name(async (parent, label, options) => {\n const useHtmlLabels = options.useHtmlLabels || evaluate(getConfig2()?.flowchart?.htmlLabels);\n const labelEl = parent.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", options.labelStyle || \"\");\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: options.width || getConfig2()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img\n });\n let bbox = text2.getBBox();\n const halfPadding = options.padding / 2;\n if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {\n const div = text2.children[0];\n const dv = select(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (options.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n}, \"insertLabel\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nvar getNodeClasses = /* @__PURE__ */ __name((node, extra) => (node.look === \"handDrawn\" ? \"rough-node\" : \"node\") + \" \" + node.cssClasses + \" \" + (extra || \"\"), \"getNodeClasses\");\nfunction createPathFromPoints(points) {\n const pointStrings = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${p.x},${p.y}`);\n pointStrings.push(\"Z\");\n return pointStrings.join(\" \");\n}\n__name(createPathFromPoints, \"createPathFromPoints\");\nfunction generateFullSineWavePoints(x1, y1, x2, y2, amplitude, numCycles) {\n const points = [];\n const steps = 50;\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n const frequency = 2 * Math.PI / cycleLength;\n const midY = y1 + deltaY / 2;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = x1 + t * deltaX;\n const y = midY + amplitude * Math.sin(frequency * (x - x1));\n points.push({ x, y });\n }\n return points;\n}\n__name(generateFullSineWavePoints, \"generateFullSineWavePoints\");\nfunction generateCirclePoints(centerX, centerY, radius, numPoints, startAngle, endAngle) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints, \"generateCirclePoints\");\n\n// src/rendering-util/rendering-elements/clusters.js\nimport { select as select3 } from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point) => {\n var x = node.x;\n var y = node.y;\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/rendering-util/rendering-elements/createLabel.js\nimport { select as select2 } from \"d3\";\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nasync function addHtmlLabel(node) {\n const fo = select2(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const config = getConfig2();\n let label = node.label;\n if (node.label && hasKatex(node.label)) {\n label = await renderKatexSanitized(node.label.replace(common_default.lineBreakRegex, \"\\n\"), config);\n }\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const labelSpan = '\" + label + \"\";\n div.html(sanitizeText(labelSpan, config));\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"padding-right\", \"1px\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\n__name(addHtmlLabel, \"addHtmlLabel\");\nvar createLabel = /* @__PURE__ */ __name(async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
    \");\n log.info(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style ? style.replace(\"fill:\", \"color:\") : style\n };\n let vertexNode = await addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/rendering-util/rendering-elements/shapes/roundedRectPath.ts\nvar createRoundedRectPathD = /* @__PURE__ */ __name((x, y, totalWidth, totalHeight, radius) => [\n \"M\",\n x + radius,\n y,\n // Move to the first point\n \"H\",\n x + totalWidth - radius,\n // Draw horizontal line to the beginning of the right corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius,\n // Draw arc to the right top corner\n \"V\",\n y + totalHeight - radius,\n // Draw vertical line down to the beginning of the right bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight,\n // Draw arc to the right bottom corner\n \"H\",\n x + radius,\n // Draw horizontal line to the beginning of the left bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius,\n // Draw arc to the left bottom corner\n \"V\",\n y + radius,\n // Draw vertical line up to the beginning of the left top corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y,\n // Draw arc to the left top corner\n \"Z\"\n // Close the path\n].join(\" \"), \"createRoundedRectPathD\");\n\n// src/rendering-util/rendering-elements/clusters.js\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true\n });\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"rect\");\nvar noteGroup = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n}, \"noteGroup\");\nvar roundedWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n let innerRect = shapeSvg.append(\"rect\");\n const text2 = label.node().appendChild(await createLabel_default(node.label, node.labelStyle, void 0, true));\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n let rect2;\n if (node.look === \"handDrawn\") {\n const isAlt = node.cssClasses.includes(\"statediagram-cluster-alt\");\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = node.rx || node.ry ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n }) : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? \"hachure\" : \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"outer\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", x).attr(\"y\", innerY).attr(\"width\", width).attr(\"height\", innerHeight);\n }\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (evaluate(siteConfig.flowchart.htmlLabels) ? 0 : 3)})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"roundedWithTitle\");\nvar kanbanSection = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 4,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"kanbanSection\");\nvar divider = /* @__PURE__ */ __name((parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const padding = 0 * node.padding;\n const width = node.width + padding;\n node.diff = -node.padding;\n const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: \"lightgrey\",\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"divider\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n }\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = 0;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: {} };\n}, \"divider\");\nvar squareRect = rect;\nvar shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection\n};\nvar clusterElems = /* @__PURE__ */ new Map();\nvar insertCluster = /* @__PURE__ */ __name(async (elem, node) => {\n const shape = node.shape || \"rect\";\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n}, \"insertCluster\");\nvar clear = /* @__PURE__ */ __name(() => {\n clusterElems = /* @__PURE__ */ new Map();\n}, \"clear\");\n\n// src/rendering-util/rendering-elements/intersect/intersect-node.js\nfunction intersectNode(node, point) {\n return node.intersect(point);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/rendering-util/rendering-elements/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point.x;\n var py = cy - point.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/rendering-util/rendering-elements/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point) {\n return intersect_ellipse_default(node, rx, rx, point);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/rendering-util/rendering-elements/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n {\n const a1 = p2.y - p1.y;\n const b1 = p1.x - p2.x;\n const c1 = p2.x * p1.y - p1.x * p2.y;\n const r3 = a1 * q1.x + b1 * q1.y + c1;\n const r4 = a1 * q2.x + b1 * q2.y + c1;\n const epsilon = 1e-6;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n const a2 = q2.y - q1.y;\n const b2 = q1.x - q2.x;\n const c2 = q2.x * q1.y - q1.x * q2.y;\n const r1 = a2 * p1.x + b2 * p1.y + c2;\n const r2 = a2 * p2.x + b2 * p2.y + c2;\n if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n return;\n }\n const denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n const offset = Math.abs(denom / 2);\n let num = b1 * c2 - b2 * c1;\n const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n }\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/rendering-util/rendering-elements/intersect/intersect-polygon.js\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n let intersections = [];\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let intersect = intersect_line_default(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\nvar intersect_polygon_default = intersectPolygon;\n\n// src/rendering-util/rendering-elements/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/rendering-util/rendering-elements/shapes/anchor.ts\nimport rough2 from \"roughjs\";\nfunction anchor(parent, node) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const classes = getNodeClasses(node);\n let cssClasses = classes;\n if (!classes) {\n cssClasses = \"anchor\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const radius = 1;\n const { cssStyles } = node;\n const rc = rough2.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"black\", stroke: \"none\", fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const roughNode = rc.circle(0, 0, radius * 2, options);\n const circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"anchor\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, circleElem);\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(anchor, \"anchor\");\n\n// src/rendering-util/rendering-elements/shapes/bowTieRect.ts\nimport rough3 from \"roughjs\";\nfunction generateArcPoints(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints, \"generateArcPoints\");\nasync function bowTieRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding + 20;\n const h = bbox.height + node.padding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const { cssStyles } = node;\n const points = [\n { x: w / 2, y: -h / 2 },\n { x: -w / 2, y: -h / 2 },\n ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n { x: w / 2, y: h / 2 },\n ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true)\n ];\n const rc = rough3.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const bowTieRectPath = createPathFromPoints(points);\n const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, \":first-child\");\n bowTieRectShape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n bowTieRectShape.attr(\"transform\", `translate(${rx / 2}, 0)`);\n updateNodeBounds(node, bowTieRectShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(bowTieRect, \"bowTieRect\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nimport rough4 from \"roughjs\";\n\n// src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nasync function card(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const padding = 12;\n const w = bbox.width + node.padding + padding;\n const left = 0;\n const right = w;\n const top = -h;\n const bottom = 0;\n const points = [\n { x: left + padding, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n { x: left, y: top + padding },\n { x: left + padding, y: top }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough4.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(card, \"card\");\n\n// src/rendering-util/rendering-elements/shapes/choice.ts\nimport rough5 from \"roughjs\";\nfunction choice(parent, node) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const s = Math.max(28, node.width ?? 0);\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const rc = rough5.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = 28;\n node.height = 28;\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(choice, \"choice\");\n\n// src/rendering-util/rendering-elements/shapes/circle.ts\nimport rough6 from \"roughjs\";\nasync function circle(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const padding = options?.padding ?? halfPadding;\n const radius = bbox.width / 2 + padding;\n let circleElem;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough6.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options2);\n circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg.insert(\"circle\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"r\", radius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleElem);\n node.calcIntersect = function(bounds, point) {\n const radius2 = bounds.width / 2;\n return intersect_default.circle(bounds, radius2, point);\n };\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(circle, \"circle\");\n\n// src/rendering-util/rendering-elements/shapes/crossedCircle.ts\nimport rough7 from \"roughjs\";\nfunction createLine(r) {\n const xAxis45 = Math.cos(Math.PI / 4);\n const yAxis45 = Math.sin(Math.PI / 4);\n const lineLength = r * 2;\n const pointQ1 = { x: lineLength / 2 * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 };\n const pointQ4 = { x: lineLength / 2 * xAxis45, y: -(lineLength / 2) * yAxis45 };\n return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n__name(createLine, \"createLine\");\nfunction crossedCircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n const rc = rough7.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n const crossedCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n crossedCircle2.insert(() => lineNode);\n if (cssStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, crossedCircle2);\n node.intersect = function(point) {\n log.info(\"crossedCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(crossedCircle, \"crossedCircle\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts\nimport rough8 from \"roughjs\";\nfunction generateCirclePoints2(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints2, \"generateCirclePoints\");\nasync function curlyBraceLeft(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints2(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints2(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints2(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints2(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2, y: h / 2 + radius }\n ];\n const rc = rough8.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceLeftPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceLeftPath.replace(\"Z\", \"\");\n const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceLeftShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceLeftShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceLeftShape.insert(() => curlyBraceLeftNode, \":first-child\");\n curlyBraceLeftShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceLeftShape.attr(\"transform\", `translate(${radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceLeftShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceLeft, \"curlyBraceLeft\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts\nimport rough9 from \"roughjs\";\nfunction generateCirclePoints3(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateCirclePoints3, \"generateCirclePoints\");\nasync function curlyBraceRight(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90),\n { x: w / 2, y: h / 2 + radius },\n { x: -w / 2, y: h / 2 + radius }\n ];\n const rc = rough9.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceRightPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceRightPath.replace(\"Z\", \"\");\n const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceRightShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceRightShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceRightShape.insert(() => curlyBraceRightNode, \":first-child\");\n curlyBraceRightShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceRightShape.attr(\"transform\", `translate(${-radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceRightShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceRight, \"curlyBraceRight\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraces.ts\nimport rough10 from \"roughjs\";\nfunction generateCirclePoints4(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints4, \"generateCirclePoints\");\nasync function curlyBraces(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const leftCurlyBracePoints = [\n ...generateCirclePoints4(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rightCurlyBracePoints = [\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints4(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rc = rough10.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n const newLeftCurlyBracePath = leftCurlyBracePath.replace(\"Z\", \"\");\n const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n const newRightCurlyBracePath = rightCurlyBracePath.replace(\"Z\", \"\");\n const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBracesShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBracesShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBracesShape.insert(() => leftCurlyBraceNode, \":first-child\");\n curlyBracesShape.insert(() => rightCurlyBraceNode, \":first-child\");\n curlyBracesShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBracesShape.attr(\"transform\", `translate(${radius - radius / 4}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBracesShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraces, \"curlyBraces\");\n\n// src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts\nimport rough11 from \"roughjs\";\nasync function curvedTrapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80, minHeight = 20;\n const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough11.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const totalWidth = w, totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n const points = [\n { x: rw, y: 0 },\n { x: tw, y: 0 },\n { x: 0, y: totalHeight / 2 },\n { x: tw, y: totalHeight },\n { x: rw, y: totalHeight },\n ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curvedTrapezoid, \"curvedTrapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/cylinder.ts\nimport rough12 from \"roughjs\";\nvar createCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function cylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + node.padding, node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0);\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough12.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(cylinder, \"cylinder\");\n\n// src/rendering-util/rendering-elements/shapes/dividedRect.ts\nimport rough13 from \"roughjs\";\nasync function dividedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const rectOffset = h * 0.2;\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n const { cssStyles } = node;\n const rc = rough13.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pts = [\n { x, y: y + rectOffset },\n { x: -x, y: y + rectOffset },\n { x: -x, y: -y },\n { x, y: -y },\n { x, y },\n { x: -x, y },\n { x: -x, y: y + rectOffset }\n ];\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n const polygon = shapeSvg.insert(() => poly, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(dividedRectangle, \"dividedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/doubleCircle.ts\nimport rough14 from \"roughjs\";\nasync function doublecircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n let circleGroup;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough14.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n circleGroup.attr(\"class\", handleUndefinedAttr(node.cssClasses)).attr(\"style\", handleUndefinedAttr(cssStyles));\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\", \":first-child\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n outerCircle.attr(\"class\", \"outer-circle\").attr(\"style\", nodeStyles).attr(\"r\", outerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n innerCircle.attr(\"class\", \"inner-circle\").attr(\"style\", nodeStyles).attr(\"r\", innerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleGroup);\n node.intersect = function(point) {\n log.info(\"DoubleCircle intersect\", node, outerRadius, point);\n return intersect_default.circle(node, outerRadius, point);\n };\n return shapeSvg;\n}\n__name(doublecircle, \"doublecircle\");\n\n// src/rendering-util/rendering-elements/shapes/filledCircle.ts\nimport rough15 from \"roughjs\";\nfunction filledCircle(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n const rc = rough15.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const filledCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n filledCircle2.selectAll(\"path\").attr(\"style\", `fill: ${nodeBorder} !important;`);\n if (cssStyles && cssStyles.length > 0 && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, filledCircle2);\n node.intersect = function(point) {\n log.info(\"filledCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(filledCircle, \"filledCircle\");\n\n// src/rendering-util/rendering-elements/shapes/flippedTriangle.ts\nimport rough16 from \"roughjs\";\nasync function flippedTriangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: -h },\n { x: tw, y: -h },\n { x: tw / 2, y: 0 }\n ];\n const { cssStyles } = node;\n const rc = rough16.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const flippedTriangle2 = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, flippedTriangle2);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(flippedTriangle, \"flippedTriangle\");\n\n// src/rendering-util/rendering-elements/shapes/forkJoin.ts\nimport rough17 from \"roughjs\";\nfunction forkJoin(parent, node, { dir, config: { state: state2, themeVariables } }) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n if (dir === \"LR\") {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n const x = -1 * width / 2;\n const y = -1 * height / 2;\n const rc = rough17.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.rectangle(x, y, width, height, options);\n const shape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, shape);\n const padding = state2?.padding ?? 0;\n if (node.width && node.height) {\n node.width += padding / 2 || 0;\n node.height += padding / 2 || 0;\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(forkJoin, \"forkJoin\");\n\n// src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts\nimport rough18 from \"roughjs\";\nasync function halfRoundedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80, minHeight = 50;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough18.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n { x: -w / 2, y: h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { radius, point });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(halfRoundedRectangle, \"halfRoundedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/hexagon.ts\nimport rough19 from \"roughjs\";\nasync function hexagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + (node.padding ?? 0);\n const w = bbox.width + (node.padding ?? 0) * 2.5;\n const { cssStyles } = node;\n const rc = rough19.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let halfWidth = w / 2;\n const m = halfWidth / 6;\n halfWidth = halfWidth + m;\n const halfHeight = h / 2;\n const fixedLength = halfHeight / 2;\n const deducedWidth = halfWidth - fixedLength;\n const points = [\n { x: -deducedWidth, y: -halfHeight },\n { x: 0, y: -halfHeight },\n { x: deducedWidth, y: -halfHeight },\n { x: halfWidth, y: 0 },\n { x: deducedWidth, y: halfHeight },\n { x: 0, y: halfHeight },\n { x: -deducedWidth, y: halfHeight },\n { x: -halfWidth, y: 0 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(hexagon, \"hexagon\");\n\n// src/rendering-util/rendering-elements/shapes/hourglass.ts\nimport rough20 from \"roughjs\";\nasync function hourglass(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough20.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: 0, y: h },\n { x: w, y: h }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { points });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(hourglass, \"hourglass\");\n\n// src/rendering-util/rendering-elements/shapes/icon.ts\nimport rough21 from \"roughjs\";\nasync function icon(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const topLabel = node.pos === \"t\";\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough21.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: \"none\", fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const iconNode = rc.rectangle(x, y, width, height, options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(icon, \"icon\");\n\n// src/rendering-util/rendering-elements/shapes/iconCircle.ts\nimport rough22 from \"roughjs\";\nasync function iconCircle(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n const topLabel = node.pos === \"t\";\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const rc = rough22.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconElem = shapeSvg.append(\"g\");\n if (node.icon) {\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n }\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconCircle, \"iconCircle\");\n\n// src/rendering-util/rendering-elements/shapes/iconRounded.ts\nimport rough23 from \"roughjs\";\nasync function iconRounded(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough23.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\").attr(\"class\", \"icon-shape2\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconRounded, \"iconRounded\");\n\n// src/rendering-util/rendering-elements/shapes/iconSquare.ts\nimport rough24 from \"roughjs\";\nasync function iconSquare(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough24.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconSquare, \"iconSquare\");\n\n// src/rendering-util/rendering-elements/shapes/imageSquare.ts\nimport rough25 from \"roughjs\";\nasync function imageSquare(parent, node, { config: { flowchart } }) {\n const img = new Image();\n img.src = node?.img ?? \"\";\n await img.decode();\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace(\"px\", \"\"));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace(\"px\", \"\"));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n const imageRawWidth = Math.max(\n node.label ? defaultWidth ?? 0 : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n const imageWidth = node.constraint === \"on\" ? node?.assetHeight ? node.assetHeight * node.imageAspectRatio : imageRawWidth : imageRawWidth;\n const imageHeight = node.constraint === \"on\" ? imageWidth / node.imageAspectRatio : node?.assetHeight ?? imageNaturalHeight;\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"image-shape default\");\n const topLabel = node.pos === \"t\";\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough25.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"none\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => imageNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.img) {\n const image = shapeSvg.append(\"image\");\n image.attr(\"href\", node.img);\n image.attr(\"width\", imageWidth);\n image.attr(\"height\", imageHeight);\n image.attr(\"preserveAspectRatio\", \"none\");\n image.attr(\n \"transform\",\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 : imageHeight / 2 - bbox.height / 2 + labelPadding / 2})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(imageSquare, \"imageSquare\");\n\n// src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts\nimport rough26 from \"roughjs\";\nasync function inv_trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: -3 * h / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough26.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(inv_trapezoid, \"inv_trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/drawRect.ts\nimport rough27 from \"roughjs\";\nasync function drawRect(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n let rect2;\n let { rx, ry } = node;\n const { cssStyles } = node;\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n if (node.look === \"handDrawn\") {\n const rc = rough27.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"rx\", handleUndefinedAttr(rx)).attr(\"ry\", handleUndefinedAttr(ry)).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n }\n updateNodeBounds(node, rect2);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(drawRect, \"drawRect\");\n\n// src/rendering-util/rendering-elements/shapes/labelRect.ts\nasync function labelRect(parent, node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"label\");\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(labelRect, \"labelRect\");\n\n// src/rendering-util/rendering-elements/shapes/leanLeft.ts\nimport rough28 from \"roughjs\";\nasync function lean_left(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: -(3 * h) / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough28.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_left, \"lean_left\");\n\n// src/rendering-util/rendering-elements/shapes/leanRight.ts\nimport rough29 from \"roughjs\";\nasync function lean_right(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough29.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_right, \"lean_right\");\n\n// src/rendering-util/rendering-elements/shapes/lightningBolt.ts\nimport rough30 from \"roughjs\";\nfunction lightningBolt(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const width = Math.max(35, node?.width ?? 0);\n const height = Math.max(35, node?.height ?? 0);\n const gap = 7;\n const points = [\n { x: width, y: 0 },\n { x: 0, y: height + gap / 2 },\n { x: width - 2 * gap, y: height + gap / 2 },\n { x: 0, y: 2 * height },\n { x: width, y: height - gap / 2 },\n { x: 2 * gap, y: height - gap / 2 }\n ];\n const rc = rough30.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n const lightningBolt2 = shapeSvg.insert(() => lineNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n lightningBolt2.attr(\"transform\", `translate(-${width / 2},${-height})`);\n updateNodeBounds(node, lightningBolt2);\n node.intersect = function(point) {\n log.info(\"lightningBolt intersect\", node, point);\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(lightningBolt, \"lightningBolt\");\n\n// src/rendering-util/rendering-elements/shapes/linedCylinder.ts\nimport rough31 from \"roughjs\";\nvar createCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function linedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0);\n const outerOffset = h * 0.1;\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough31.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD2(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n const innerLineEl = shapeSvg.insert(() => innerLine, \":first-child\");\n innerLineEl.attr(\"class\", \"line\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(linedCylinder, \"linedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts\nimport rough32 from \"roughjs\";\nasync function linedWaveEdgedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough32.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2, y: -finalH / 2 },\n { x: -w / 2, y: finalH / 2 * 1.1 },\n { x: -w / 2, y: -finalH / 2 }\n ];\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const waveEdgeRect = shapeSvg.insert(() => poly, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) + w / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(linedWaveEdgedRect, \"linedWaveEdgedRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiRect.ts\nimport rough33 from \"roughjs\";\nasync function multiRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough33.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y },\n { x, y }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, { ...options, fill: \"none\" });\n const multiRect2 = shapeSvg.insert(() => innerNode, \":first-child\");\n multiRect2.insert(() => outerNode, \":first-child\");\n multiRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, multiRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiRect, \"multiRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts\nimport rough34 from \"roughjs\";\nasync function multiWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const x = -w / 2;\n const y = -finalH / 2;\n const rectOffset = 5;\n const { cssStyles } = node;\n const wavePoints = generateFullSineWavePoints(\n x - rectOffset,\n y + finalH + rectOffset,\n x + w - rectOffset,\n y + finalH + rectOffset,\n waveAmplitude,\n 0.8\n );\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + finalH + rectOffset },\n ...wavePoints,\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y },\n { x, y }\n ];\n const rc = rough34.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, options);\n const shape = shapeSvg.insert(() => outerNode, \":first-child\");\n shape.insert(() => innerNode);\n shape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n shape.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, shape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiWaveEdgedRectangle, \"multiWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/note.ts\nimport rough35 from \"roughjs\";\nasync function note(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart?.htmlLabels !== false;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const { cssStyles } = node;\n const rc = rough35.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => noteShapeNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(note, \"note\");\n\n// src/rendering-util/rendering-elements/shapes/question.ts\nimport rough36 from \"roughjs\";\nvar createDecisionBoxPathD = /* @__PURE__ */ __name((x, y, size) => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createDecisionBoxPathD\");\nasync function question(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const adjustment = 0.5;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough36.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n polygon.attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.calcIntersect = function(bounds, point) {\n const s2 = bounds.width;\n const points2 = [\n { x: s2 / 2, y: 0 },\n { x: s2, y: -s2 / 2 },\n { x: s2 / 2, y: -s2 },\n { x: 0, y: -s2 / 2 }\n ];\n const res = intersect_default.polygon(bounds, points2, point);\n return { x: res.x - 0.5, y: res.y - 0.5 };\n };\n node.intersect = function(point) {\n return this.calcIntersect(node, point);\n };\n return shapeSvg;\n}\n__name(question, \"question\");\n\n// src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts\nimport rough37 from \"roughjs\";\nasync function rect_left_inv_arrow(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n const points = [\n { x: x + notch, y },\n { x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y }\n ];\n const { cssStyles } = node;\n const rc = rough37.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-notch / 2},0)`);\n label.attr(\n \"transform\",\n `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(rect_left_inv_arrow, \"rect_left_inv_arrow\");\n\n// src/rendering-util/rendering-elements/shapes/rectWithTitle.ts\nimport { select as select4 } from \"d3\";\nimport rough38 from \"roughjs\";\nasync function rectWithTitle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.cssClasses;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const g = shapeSvg.insert(\"g\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", nodeStyles);\n const description = node.description;\n const title = node.label;\n const text2 = label.node().appendChild(await createLabel_default(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {\n const div2 = text2.children[0];\n const dv2 = select4(text2);\n bbox = div2.getBoundingClientRect();\n dv2.attr(\"width\", bbox.width);\n dv2.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", description);\n const textRows = description || [];\n const titleBox = text2.getBBox();\n const descr = label.node().appendChild(\n await createLabel_default(\n textRows.join ? textRows.join(\"
    \") : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n const div = descr.children[0];\n const dv = select4(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n const halfPadding = (node.padding || 0) / 2;\n select4(descr).attr(\n \"transform\",\n \"translate( \" + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select4(text2).attr(\n \"transform\",\n \"translate( \" + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect2;\n let innerLine;\n if (node.look === \"handDrawn\") {\n const rc = rough38.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n innerLine = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughLine;\n }, \":first-child\");\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n } else {\n rect2 = g.insert(\"rect\", \":first-child\");\n innerLine = g.insert(\"line\");\n rect2.attr(\"class\", \"outer title-state\").attr(\"style\", nodeStyles).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + (node.padding || 0)).attr(\"height\", bbox.height + (node.padding || 0));\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(rectWithTitle, \"rectWithTitle\");\n\n// src/rendering-util/rendering-elements/shapes/roundedRect.ts\nimport rough39 from \"roughjs\";\nfunction generateArcPoints2(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints2, \"generateArcPoints\");\nasync function roundedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const labelPaddingX = node?.padding ?? 0;\n const labelPaddingY = node?.padding ?? 0;\n const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2;\n const radius = node.radius || 5;\n const taper = node.taper || 5;\n const { cssStyles } = node;\n const rc = rough39.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.stroke) {\n options.stroke = node.stroke;\n }\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n // Top edge (left to right)\n { x: -w / 2 + taper, y: -h / 2 },\n // Top-left corner start (1)\n { x: w / 2 - taper, y: -h / 2 },\n // Top-right corner start (2)\n ...generateArcPoints2(w / 2 - taper, -h / 2, w / 2, -h / 2 + taper, radius, radius, true),\n // Top-left arc (2 to 3)\n // Right edge (top to bottom)\n { x: w / 2, y: -h / 2 + taper },\n // Top-right taper point (3)\n { x: w / 2, y: h / 2 - taper },\n // Bottom-right taper point (4)\n ...generateArcPoints2(w / 2, h / 2 - taper, w / 2 - taper, h / 2, radius, radius, true),\n // Top-left arc (4 to 5)\n // Bottom edge (right to left)\n { x: w / 2 - taper, y: h / 2 },\n // Bottom-right corner start (5)\n { x: -w / 2 + taper, y: h / 2 },\n // Bottom-left corner start (6)\n ...generateArcPoints2(-w / 2 + taper, h / 2, -w / 2, h / 2 - taper, radius, radius, true),\n // Top-left arc (4 to 5)\n // Left edge (bottom to top)\n { x: -w / 2, y: h / 2 - taper },\n // Bottom-left taper point (7)\n { x: -w / 2, y: -h / 2 + taper },\n // Top-left taper point (8)\n ...generateArcPoints2(-w / 2, -h / 2 + taper, -w / 2 + taper, -h / 2, radius, radius, true)\n // Top-left arc (4 to 5)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(roundedRect, \"roundedRect\");\n\n// src/rendering-util/rendering-elements/shapes/shadedProcess.ts\nimport rough40 from \"roughjs\";\nasync function shadedProcess(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = node?.padding ?? 0;\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const { cssStyles } = node;\n const rc = rough40.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x: x + w + 8, y },\n { x: x + w + 8, y: y + h },\n { x: x - 8, y: y + h },\n { x: x - 8, y },\n { x, y },\n { x, y: y + h }\n ];\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(shadedProcess, \"shadedProcess\");\n\n// src/rendering-util/rendering-elements/shapes/slopedRect.ts\nimport rough41 from \"roughjs\";\nasync function slopedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough41.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(0, ${h / 4})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(slopedRect, \"slopedRect\");\n\n// src/rendering-util/rendering-elements/shapes/squareRect.ts\nasync function squareRect2(parent, node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: \"\",\n labelPaddingX: node.labelPaddingX ?? (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(squareRect2, \"squareRect\");\n\n// src/rendering-util/rendering-elements/shapes/stadium.ts\nimport rough42 from \"roughjs\";\nasync function stadium(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough42.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 + radius, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(stadium, \"stadium\");\n\n// src/rendering-util/rendering-elements/shapes/state.ts\nasync function state(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"flowchart-node\"\n };\n return drawRect(parent, node, options);\n}\n__name(state, \"state\");\n\n// src/rendering-util/rendering-elements/shapes/stateEnd.ts\nimport rough43 from \"roughjs\";\nfunction stateEnd(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const rc = rough43.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.circle(0, 0, 14, {\n ...options,\n stroke: lineColor,\n strokeWidth: 2\n });\n const innerFill = stateBorder ?? nodeBorder;\n const roughInnerNode = rc.circle(0, 0, 5, {\n ...options,\n fill: innerFill,\n stroke: innerFill,\n strokeWidth: 2,\n fillStyle: \"solid\"\n });\n const circle2 = shapeSvg.insert(() => roughNode, \":first-child\");\n circle2.insert(() => roughInnerNode);\n if (cssStyles) {\n circle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n circle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateEnd, \"stateEnd\");\n\n// src/rendering-util/rendering-elements/shapes/stateStart.ts\nimport rough44 from \"roughjs\";\nfunction stateStart(parent, node, { config: { themeVariables } }) {\n const { lineColor } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let circle2;\n if (node.look === \"handDrawn\") {\n const rc = rough44.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle2 = shapeSvg.insert(() => roughNode);\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n } else {\n circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateStart, \"stateStart\");\n\n// src/rendering-util/rendering-elements/shapes/subroutine.ts\nimport rough45 from \"roughjs\";\nasync function subroutine(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n if (node.look === \"handDrawn\") {\n const rc = rough45.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n shapeSvg.insert(() => l1, \":first-child\");\n shapeSvg.insert(() => l2, \":first-child\");\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n const { cssStyles } = node;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect2);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(subroutine, \"subroutine\");\n\n// src/rendering-util/rendering-elements/shapes/taggedRect.ts\nimport rough46 from \"roughjs\";\nasync function taggedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const tagWidth = 0.2 * h;\n const tagHeight = 0.2 * h;\n const { cssStyles } = node;\n const rc = rough46.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const rectPoints = [\n { x: x - tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x - tagWidth / 2, y: y + h }\n ];\n const tagPoints = [\n { x: x + w - tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h - tagHeight }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: \"solid\" });\n const taggedRect2 = shapeSvg.insert(() => tagNode, \":first-child\");\n taggedRect2.insert(() => rectNode, \":first-child\");\n taggedRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, taggedRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedRect, \"taggedRect\");\n\n// src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts\nimport rough47 from \"roughjs\";\nasync function taggedWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const tagWidth = 0.2 * w;\n const tagHeight = 0.2 * h;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough47.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 }\n ];\n const x = -w / 2 + w / 2 * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n const tagPoints = [\n { x: x + w - tagWidth, y: (y + h) * 1.4 },\n { x: x + w, y: y + h - tagHeight },\n { x: x + w, y: (y + h) * 0.9 },\n ...generateFullSineWavePoints(\n x + w,\n (y + h) * 1.3,\n x + w - tagWidth,\n (y + h) * 1.5,\n -h * 0.03,\n 0.5\n )\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: \"solid\"\n });\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, \":first-child\");\n waveEdgeRect.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedWaveEdgedRectangle, \"taggedWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/text.ts\nasync function text(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0);\n const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"text\").attr(\"style\", nodeStyles).attr(\"rx\", 0).attr(\"ry\", 0).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(text, \"text\");\n\n// src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts\nimport rough48 from \"roughjs\";\nvar createCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return `M${x},${y}\n a${rx},${ry} 0,0,1 ${0},${-height}\n l${width},${0}\n a${rx},${ry} 0,0,1 ${0},${height}\n M${width},${-height}\n a${rx},${ry} 0,0,0 ${0},${height}\n l${-width},${0}`;\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y}`,\n `M${x + width},${y}`,\n `a${rx},${ry} 0,0,0 ${0},${-height}`,\n `l${-width},0`,\n `a${rx},${ry} 0,0,0 ${0},${height}`,\n `l${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function tiltedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label, halfPadding } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const labelPadding = node.look === \"neo\" ? halfPadding * 2 : halfPadding;\n const h = bbox.height + labelPadding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const w = bbox.width + rx + labelPadding;\n const { cssStyles } = node;\n let cylinder2;\n if (node.look === \"handDrawn\") {\n const rc = rough48.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD3(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD3(0, 0, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD3(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n }\n cylinder2.attr(\"label-offset-x\", rx);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${h / 2} )`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, cylinder2);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n if (ry != 0 && (Math.abs(y) < (node.height ?? 0) / 2 || Math.abs(y) == (node.height ?? 0) / 2 && Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx)) {\n let x = rx * rx * (1 - y * y / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(Math.abs(x));\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n pos.x += x;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(tiltedCylinder, \"tiltedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoid.ts\nimport rough49 from \"roughjs\";\nasync function trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough49.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(trapezoid, \"trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts\nimport rough50 from \"roughjs\";\nasync function trapezoidalPentagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60, minHeight = 20;\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough50.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 * 0.8, y: -h / 2 },\n { x: w / 2 * 0.8, y: -h / 2 },\n { x: w / 2, y: -h / 2 * 0.6 },\n { x: w / 2, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n { x: -w / 2, y: -h / 2 * 0.6 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(trapezoidalPentagon, \"trapezoidalPentagon\");\n\n// src/rendering-util/rendering-elements/shapes/triangle.ts\nimport rough51 from \"roughjs\";\nasync function triangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const useHtmlLabels = evaluate(getConfig2().flowchart?.htmlLabels);\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: tw, y: 0 },\n { x: tw / 2, y: -h }\n ];\n const { cssStyles } = node;\n const rc = rough51.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(triangle, \"triangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts\nimport rough52 from \"roughjs\";\nasync function waveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 8;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n const rc = rough52.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - extraW, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - extraW,\n finalH / 2,\n w / 2 + extraW,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + extraW, y: -finalH / 2 },\n { x: -w / 2 - extraW, y: -finalH / 2 }\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveEdgedRectangle, \"waveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveRectangle.ts\nimport rough53 from \"roughjs\";\nasync function waveRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 100;\n const minHeight = 50;\n const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const aspectRatio = baseWidth / baseHeight;\n let w = baseWidth;\n let h = baseHeight;\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n const rc = rough53.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: finalH / 2 },\n ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n { x: w / 2, y: -finalH / 2 },\n ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1)\n ];\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n const waveRect = shapeSvg.insert(() => waveRectNode, \":first-child\");\n waveRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, waveRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveRectangle, \"waveRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/windowPane.ts\nimport rough54 from \"roughjs\";\nasync function windowPane(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough54.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y - rectOffset },\n { x: x - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - rectOffset }\n ];\n const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n M${x - rectOffset},${y} L${x + w},${y}\n M${x},${y - rectOffset} L${x},${y + h}`;\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const no = rc.path(path, options);\n const windowPane2 = shapeSvg.insert(() => no, \":first-child\");\n windowPane2.attr(\"transform\", `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n windowPane2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, windowPane2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(windowPane, \"windowPane\");\n\n// src/rendering-util/rendering-elements/shapes/erBox.ts\nimport rough55 from \"roughjs\";\nimport { select as select5 } from \"d3\";\nasync function erBox(parent, node) {\n const entityNode = node;\n if (entityNode.alias) {\n node.label = entityNode.alias;\n }\n if (node.look === \"handDrawn\") {\n const { themeVariables: themeVariables2 } = getConfig();\n const { background } = themeVariables2;\n const backgroundNode = {\n ...node,\n id: node.id + \"-background\",\n look: \"default\",\n cssStyles: [\"stroke: none\", `fill: ${background}`]\n };\n await erBox(parent, backgroundNode);\n }\n const config = getConfig();\n node.useHtmlLabels = config.htmlLabels;\n let PADDING = config.er?.diagramPadding ?? 10;\n let TEXT_PADDING = config.er?.entityPadding ?? 6;\n const { cssStyles } = node;\n const { labelStyles, nodeStyles } = styles2String(node);\n if (entityNode.attributes.length === 0 && node.label) {\n const options2 = {\n rx: 0,\n ry: 0,\n labelPaddingX: PADDING,\n labelPaddingY: PADDING * 1.5,\n classes: \"\"\n };\n if (calculateTextWidth(node.label, config) + options2.labelPaddingX * 2 < config.er.minEntityWidth) {\n node.width = config.er.minEntityWidth;\n }\n const shapeSvg2 = await drawRect(parent, node, options2);\n if (!evaluate(config.htmlLabels)) {\n const textElement = shapeSvg2.select(\"text\");\n const bbox = textElement.node()?.getBBox();\n textElement.attr(\"transform\", `translate(${-bbox.width / 2}, 0)`);\n }\n return shapeSvg2;\n }\n if (!config.htmlLabels) {\n PADDING *= 1.25;\n TEXT_PADDING *= 1.25;\n }\n let cssClasses = getNodeClasses(node);\n if (!cssClasses) {\n cssClasses = \"node default\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const nameBBox = await addText(shapeSvg, node.label ?? \"\", config, 0, 0, [\"name\"], labelStyles);\n nameBBox.height += TEXT_PADDING;\n let yOffset = 0;\n const yOffsets = [];\n const rows = [];\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeysWidth = 0;\n let maxCommentWidth = 0;\n let keysPresent = true;\n let commentPresent = true;\n for (const attribute of entityNode.attributes) {\n const typeBBox = await addText(\n shapeSvg,\n attribute.type,\n config,\n 0,\n yOffset,\n [\"attribute-type\"],\n labelStyles\n );\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n const nameBBox2 = await addText(\n shapeSvg,\n attribute.name,\n config,\n 0,\n yOffset,\n [\"attribute-name\"],\n labelStyles\n );\n maxNameWidth = Math.max(maxNameWidth, nameBBox2.width + PADDING);\n const keysBBox = await addText(\n shapeSvg,\n attribute.keys.join(),\n config,\n 0,\n yOffset,\n [\"attribute-keys\"],\n labelStyles\n );\n maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n const commentBBox = await addText(\n shapeSvg,\n attribute.comment,\n config,\n 0,\n yOffset,\n [\"attribute-comment\"],\n labelStyles\n );\n maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n const rowHeight = Math.max(typeBBox.height, nameBBox2.height, keysBBox.height, commentBBox.height) + TEXT_PADDING;\n rows.push({ yOffset, rowHeight });\n yOffset += rowHeight;\n }\n let totalWidthSections = 4;\n if (maxKeysWidth <= PADDING) {\n keysPresent = false;\n maxKeysWidth = 0;\n totalWidthSections--;\n }\n if (maxCommentWidth <= PADDING) {\n commentPresent = false;\n maxCommentWidth = 0;\n totalWidthSections--;\n }\n const shapeBBox = shapeSvg.node().getBBox();\n if (nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) > 0) {\n const difference = nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n maxTypeWidth += difference / totalWidthSections;\n maxNameWidth += difference / totalWidthSections;\n if (maxKeysWidth > 0) {\n maxKeysWidth += difference / totalWidthSections;\n }\n if (maxCommentWidth > 0) {\n maxCommentWidth += difference / totalWidthSections;\n }\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n const rc = rough55.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let totalShapeBBoxHeight = 0;\n if (rows.length > 0) {\n totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n }\n const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n const x = -w / 2;\n const y = -h / 2;\n shapeSvg.selectAll(\"g:not(:first-child)\").each((_, i, nodes) => {\n const text2 = select5(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n if (text2.attr(\"class\").includes(\"attribute-name\")) {\n translateX += maxTypeWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-keys\")) {\n translateX += maxTypeWidth + maxNameWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-comment\")) {\n translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n }\n }\n }\n text2.attr(\n \"transform\",\n `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n );\n });\n shapeSvg.select(\".name\").attr(\"transform\", \"translate(\" + -nameBBox.width / 2 + \", \" + (y + TEXT_PADDING / 2) + \")\");\n const roughRect = rc.rectangle(x, y, w, h, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\").attr(\"style\", cssStyles.join(\"\"));\n const { themeVariables } = getConfig();\n const { rowEven, rowOdd, nodeBorder } = themeVariables;\n yOffsets.push(0);\n for (const [i, row] of rows.entries()) {\n const contentRowIndex = i + 1;\n const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n const roughRect2 = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n ...options,\n fill: isEven ? rowEven : rowOdd,\n stroke: nodeBorder\n });\n shapeSvg.insert(() => roughRect2, \"g.label\").attr(\"style\", cssStyles.join(\"\")).attr(\"class\", `row-rect-${isEven ? \"even\" : \"odd\"}`);\n }\n let roughLine = rc.line(x, nameBBox.height + y, w + x, nameBBox.height + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n roughLine = rc.line(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n if (keysPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n if (commentPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n for (const yOffset2 of yOffsets) {\n roughLine = rc.line(\n x,\n nameBBox.height + y + yOffset2,\n w + x,\n nameBBox.height + y + yOffset2,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n updateNodeBounds(node, rect2);\n if (nodeStyles && node.look !== \"handDrawn\") {\n const allStyle = nodeStyles.split(\";\");\n const strokeStyles = allStyle?.filter((e) => {\n return e.includes(\"stroke\");\n })?.map((s) => `${s}`).join(\"; \");\n shapeSvg.selectAll(\"path\").attr(\"style\", strokeStyles ?? \"\");\n shapeSvg.selectAll(\".row-rect-even path\").attr(\"style\", nodeStyles);\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(erBox, \"erBox\");\nasync function addText(shapeSvg, labelText, config, translateX = 0, translateY = 0, classes = [], style = \"\") {\n const label = shapeSvg.insert(\"g\").attr(\"class\", `label ${classes.join(\" \")}`).attr(\"transform\", `translate(${translateX}, ${translateY})`).attr(\"style\", style);\n if (labelText !== parseGenericTypes(labelText)) {\n labelText = parseGenericTypes(labelText);\n labelText = labelText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n const text2 = label.node().appendChild(\n await createText(\n label,\n labelText,\n {\n width: calculateTextWidth(labelText, config) + 100,\n style,\n useHtmlLabels: config.htmlLabels\n },\n config\n )\n );\n if (labelText.includes(\"<\") || labelText.includes(\">\")) {\n let child = text2.children[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n while (child.childNodes[0]) {\n child = child.childNodes[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n }\n let bbox = text2.getBBox();\n if (evaluate(config.htmlLabels)) {\n const div = text2.children[0];\n div.style.textAlign = \"start\";\n const dv = select5(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n return bbox;\n}\n__name(addText, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nimport { select as select7 } from \"d3\";\nimport rough56 from \"roughjs\";\n\n// src/diagrams/class/shapeUtil.ts\nimport { select as select6 } from \"d3\";\nasync function textHelper(parent, node, config, useHtmlLabels, GAP = config.class.padding ?? 12) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId || node.id);\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n annotationGroup = shapeSvg.insert(\"g\").attr(\"class\", \"annotation-group text\");\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText2(annotationGroup, { text: `\\xAB${annotation}\\xBB` }, 0);\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n labelGroup = shapeSvg.insert(\"g\").attr(\"class\", \"label-group text\");\n await addText2(labelGroup, node, 0, [\"font-weight: bolder\"]);\n const labelGroupBBox = labelGroup.node().getBBox();\n labelGroupHeight = labelGroupBBox.height;\n membersGroup = shapeSvg.insert(\"g\").attr(\"class\", \"members-group text\");\n let yOffset = 0;\n for (const member of node.members) {\n const height = await addText2(membersGroup, member, yOffset, [member.parseClassifier()]);\n yOffset += height + TEXT_PADDING;\n }\n membersGroupHeight = membersGroup.node().getBBox().height;\n if (membersGroupHeight <= 0) {\n membersGroupHeight = GAP / 2;\n }\n methodsGroup = shapeSvg.insert(\"g\").attr(\"class\", \"methods-group text\");\n let methodsYOffset = 0;\n for (const method of node.methods) {\n const height = await addText2(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n let bbox = shapeSvg.node().getBBox();\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroup.attr(\"transform\", `translate(${-annotationGroupBBox.width / 2})`);\n }\n labelGroup.attr(\"transform\", `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n bbox = shapeSvg.node().getBBox();\n membersGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n );\n bbox = shapeSvg.node().getBBox();\n methodsGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n );\n bbox = shapeSvg.node().getBBox();\n return { shapeSvg, bbox };\n}\n__name(textHelper, \"textHelper\");\nasync function addText2(parentGroup, node, yOffset, styles = []) {\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", styles.join(\"; \"));\n const config = getConfig();\n let useHtmlLabels = \"useHtmlLabels\" in node ? node.useHtmlLabels : evaluate(config.htmlLabels) ?? true;\n let textContent = \"\";\n if (\"text\" in node) {\n textContent = node.text;\n } else {\n textContent = node.label;\n }\n if (!useHtmlLabels && textContent.startsWith(\"\\\\\")) {\n textContent = textContent.substring(1);\n }\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels\n },\n config\n );\n let bbox;\n let numberOfLines = 1;\n if (!useHtmlLabels) {\n if (styles.includes(\"font-weight: bolder\")) {\n select6(text2).selectAll(\"tspan\").attr(\"font-weight\", \"\");\n }\n numberOfLines = text2.children.length;\n const textChild = text2.children[0];\n if (text2.textContent === \"\" || text2.textContent.includes(\">\")) {\n textChild.textContent = textContent[0] + textContent.substring(1).replaceAll(\">\", \">\").replaceAll(\"<\", \"<\").trim();\n const preserveSpace = textContent[1] === \" \";\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + \" \" + textChild.textContent.substring(1);\n }\n }\n if (textChild.textContent === \"undefined\") {\n textChild.textContent = \"\";\n }\n bbox = text2.getBBox();\n } else {\n const div = text2.children[0];\n const dv = select6(text2);\n numberOfLines = div.innerHTML.split(\"
    \").length;\n if (div.innerHTML.includes(\"\")) {\n numberOfLines += div.innerHTML.split(\"\").length - 1;\n }\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = textContent.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", \"translate(0,\" + (-bbox.height / (2 * numberOfLines) + yOffset) + \")\");\n return bbox.height;\n}\n__name(addText2, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nasync function classBox(parent, node) {\n const config = getConfig2();\n const PADDING = config.class.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n const classNode = node;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.cssStyles = classNode.styles || \"\";\n const styles = classNode.styles?.join(\";\") || nodeStyles || \"\";\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll(\"!important\", \"\").split(\";\");\n }\n const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config.class?.hideEmptyMembersBox;\n const rc = rough56.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const w = bbox.width;\n let h = bbox.height;\n if (classNode.members.length === 0 && classNode.methods.length === 0) {\n h += GAP;\n } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n h += GAP * 2;\n }\n const x = -w / 2;\n const y = -h / 2;\n const roughRect = rc.rectangle(\n x - PADDING,\n y - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0),\n w + 2 * PADDING,\n h + 2 * PADDING + (renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0),\n options\n );\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n const rectBBox = rect2.node().getBBox();\n shapeSvg.selectAll(\".text\").each((_, i, nodes) => {\n const text2 = select7(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateY = parseFloat(translate[2]);\n }\n }\n let newTranslateY = translateY + y + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0);\n if (!useHtmlLabels) {\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (text2.attr(\"class\").includes(\"label-group\") || text2.attr(\"class\").includes(\"annotation-group\")) {\n newTranslateX = -text2.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll(\"text\").each(function(_2, i2, nodes2) {\n if (window.getComputedStyle(nodes2[i2]).textAnchor === \"middle\") {\n newTranslateX = 0;\n }\n });\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY})`);\n });\n const annotationGroupHeight = shapeSvg.select(\".annotation-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight = shapeSvg.select(\".label-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight = shapeSvg.select(\".members-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (classNode.look !== \"handDrawn\") {\n shapeSvg.selectAll(\"path\").attr(\"style\", styles);\n }\n rect2.select(\":nth-child(2)\").attr(\"style\", styles);\n shapeSvg.selectAll(\".divider\").select(\"path\").attr(\"style\", styles);\n if (node.labelStyle) {\n shapeSvg.selectAll(\"span\").attr(\"style\", node.labelStyle);\n } else {\n shapeSvg.selectAll(\"span\").attr(\"style\", styles);\n }\n if (!useHtmlLabels) {\n const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n const match = colorRegex.exec(styles);\n if (match) {\n const colorStyle = match[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n } else if (labelStyles) {\n const match2 = colorRegex.exec(labelStyles);\n if (match2) {\n const colorStyle = match2[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n }\n }\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(classBox, \"classBox\");\n\n// src/rendering-util/rendering-elements/shapes/requirementBox.ts\nimport rough57 from \"roughjs\";\nimport { select as select8 } from \"d3\";\nasync function requirementBox(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const requirementNode = node;\n const elementNode = node;\n const padding = 20;\n const gap = 20;\n const isRequirementNode = \"verifyMethod\" in node;\n const classes = getNodeClasses(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId ?? node.id);\n let typeHeight;\n if (isRequirementNode) {\n typeHeight = await addText3(\n shapeSvg,\n `<<${requirementNode.type}>>`,\n 0,\n node.labelStyle\n );\n } else {\n typeHeight = await addText3(shapeSvg, \"<<Element>>\", 0, node.labelStyle);\n }\n let accumulativeHeight = typeHeight;\n const nameHeight = await addText3(\n shapeSvg,\n requirementNode.name,\n accumulativeHeight,\n node.labelStyle + \"; font-weight: bold;\"\n );\n accumulativeHeight += nameHeight + gap;\n if (isRequirementNode) {\n const idHeight = await addText3(\n shapeSvg,\n `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += idHeight;\n const textHeight = await addText3(\n shapeSvg,\n `${requirementNode.text ? `Text: ${requirementNode.text}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += textHeight;\n const riskHeight = await addText3(\n shapeSvg,\n `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += riskHeight;\n await addText3(\n shapeSvg,\n `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n } else {\n const typeHeight2 = await addText3(\n shapeSvg,\n `${elementNode.type ? `Type: ${elementNode.type}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += typeHeight2;\n await addText3(\n shapeSvg,\n `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n }\n const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rc = rough57.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n shapeSvg.selectAll(\".label\").each((_, i, nodes) => {\n const text2 = select8(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n }\n }\n const newTranslateY = translateY - totalHeight / 2;\n let newTranslateX = x + padding / 2;\n if (i === 0 || i === 1) {\n newTranslateX = translateX;\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY + padding})`);\n });\n if (accumulativeHeight > typeHeight + nameHeight + gap) {\n const roughLine = rc.line(\n x,\n y + typeHeight + nameHeight + gap,\n x + totalWidth,\n y + typeHeight + nameHeight + gap,\n options\n );\n const dividerLine = shapeSvg.insert(() => roughLine);\n dividerLine.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(requirementBox, \"requirementBox\");\nasync function addText3(parentGroup, inputText, yOffset, style = \"\") {\n if (inputText === \"\") {\n return 0;\n }\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", style);\n const config = getConfig2();\n const useHtmlLabels = config.htmlLabels ?? true;\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(inputText)),\n {\n width: calculateTextWidth(inputText, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels,\n style\n },\n config\n );\n let bbox;\n if (!useHtmlLabels) {\n const textChild = text2.children[0];\n for (const child of textChild.children) {\n child.textContent = child.textContent.replaceAll(\">\", \">\").replaceAll(\"<\", \"<\");\n if (style) {\n child.setAttribute(\"style\", style);\n }\n }\n bbox = text2.getBBox();\n bbox.height += 6;\n } else {\n const div = text2.children[0];\n const dv = select8(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n return bbox.height;\n}\n__name(addText3, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/kanbanItem.ts\nimport rough58 from \"roughjs\";\nvar colorFromPriority = /* @__PURE__ */ __name((priority) => {\n switch (priority) {\n case \"Very High\":\n return \"red\";\n case \"High\":\n return \"orange\";\n case \"Medium\":\n return null;\n // no stroke\n case \"Low\":\n return \"blue\";\n case \"Very Low\":\n return \"lightblue\";\n }\n}, \"colorFromPriority\");\nasync function kanbanItem(parent, kanbanNode, { config }) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || \"\";\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n const {\n shapeSvg,\n bbox,\n label: labelElTitle\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n let ticketUrl = \"\";\n let link;\n if (\"ticket\" in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace(\"#TICKET#\", kanbanNode.ticket);\n link = shapeSvg.insert(\"svg:a\", \":first-child\").attr(\"class\", \"kanban-ticket-link\").attr(\"xlink:href\", ticketUrl).attr(\"target\", \"_blank\");\n }\n const options = {\n useHtmlLabels: kanbanNode.useHtmlLabels,\n labelStyle: kanbanNode.labelStyle || \"\",\n width: kanbanNode.width,\n img: kanbanNode.img,\n padding: kanbanNode.padding || 8,\n centerLabel: false\n };\n let labelEl, bbox2;\n if (link) {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n link,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n } else {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n shapeSvg,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n }\n const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n shapeSvg,\n \"assigned\" in kanbanNode && kanbanNode.assigned || \"\",\n options\n );\n kanbanNode.width = orgWidth;\n const labelPaddingY = 10;\n const totalWidth = kanbanNode?.width || 0;\n const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n const totalHeight = Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n labelElTitle.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj - bbox.height / 2) + \")\"\n );\n labelEl.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n labelElAssigned.attr(\n \"transform\",\n \"translate(\" + (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n let rect2;\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n if (kanbanNode.look === \"handDrawn\") {\n const rc = rough58.svg(shapeSvg);\n const options2 = userNodeOverrides(kanbanNode, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", cssStyles ? cssStyles : null);\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container __APA__\").attr(\"style\", nodeStyles).attr(\"rx\", rx ?? 5).attr(\"ry\", ry ?? 5).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n const priority = \"priority\" in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append(\"line\");\n const lineX = x + 2;\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line.attr(\"x1\", lineX).attr(\"y1\", y1).attr(\"x2\", lineX).attr(\"y2\", y2).attr(\"stroke-width\", \"4\").attr(\"stroke\", colorFromPriority(priority));\n }\n }\n updateNodeBounds(kanbanNode, rect2);\n kanbanNode.height = totalHeight;\n kanbanNode.intersect = function(point) {\n return intersect_default.rect(kanbanNode, point);\n };\n return shapeSvg;\n}\n__name(kanbanItem, \"kanbanItem\");\n\n// src/rendering-util/rendering-elements/shapes/bang.ts\nimport rough59 from \"roughjs\";\nasync function bang(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 10 * halfPadding;\n const h = bbox.height + 8 * halfPadding;\n const r = 0.15 * w;\n const { cssStyles } = node;\n const minWidth = bbox.width + 20;\n const minHeight = bbox.height + 20;\n const effectiveWidth = Math.max(w, minWidth);\n const effectiveHeight = Math.max(h, minHeight);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n let bangElem;\n const path = `M0 0 \n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough59.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n bangElem = shapeSvg.insert(() => roughNode, \":first-child\");\n bangElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n bangElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n bangElem.attr(\"transform\", `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n updateNodeBounds(node, bangElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Bang intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(bang, \"bang\");\n\n// src/rendering-util/rendering-elements/shapes/cloud.ts\nimport rough60 from \"roughjs\";\nasync function cloud(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 2 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n const { cssStyles } = node;\n let cloudElem;\n const path = `M0 0 \n a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough60.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n cloudElem = shapeSvg.insert(() => roughNode, \":first-child\");\n cloudElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n cloudElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n cloudElem.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, cloudElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Cloud intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(cloud, \"cloud\");\n\n// src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts\nasync function defaultMindmapNode(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 8 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const rd = 5;\n const rectPath = `\n M${-w / 2} ${h / 2 - rd}\n v${-h + 2 * rd}\n q0,-${rd} ${rd},-${rd}\n h${w - 2 * rd}\n q${rd},0 ${rd},${rd}\n v${h - 2 * rd}\n q0,${rd} -${rd},${rd}\n h${-w + 2 * rd}\n q-${rd},0 -${rd},-${rd}\n Z\n `;\n const bg = shapeSvg.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + node.type).attr(\"style\", nodeStyles).attr(\"d\", rectPath);\n shapeSvg.append(\"line\").attr(\"class\", \"node-line-\").attr(\"x1\", -w / 2).attr(\"y1\", h / 2).attr(\"x2\", w / 2).attr(\"y2\", h / 2);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n shapeSvg.append(() => label.node());\n updateNodeBounds(node, bg);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(defaultMindmapNode, \"defaultMindmapNode\");\n\n// src/rendering-util/rendering-elements/shapes/mindmapCircle.ts\nasync function mindmapCircle(parent, node) {\n const options = {\n padding: node.padding ?? 0\n };\n return circle(parent, node, options);\n}\n__name(mindmapCircle, \"mindmapCircle\");\n\n// src/rendering-util/rendering-elements/shapes.ts\nvar shapesDefs = [\n {\n semanticName: \"Process\",\n name: \"Rectangle\",\n shortName: \"rect\",\n description: \"Standard process shape\",\n aliases: [\"proc\", \"process\", \"rectangle\"],\n internalAliases: [\"squareRect\"],\n handler: squareRect2\n },\n {\n semanticName: \"Event\",\n name: \"Rounded Rectangle\",\n shortName: \"rounded\",\n description: \"Represents an event\",\n aliases: [\"event\"],\n internalAliases: [\"roundedRect\"],\n handler: roundedRect\n },\n {\n semanticName: \"Terminal Point\",\n name: \"Stadium\",\n shortName: \"stadium\",\n description: \"Terminal point\",\n aliases: [\"terminal\", \"pill\"],\n handler: stadium\n },\n {\n semanticName: \"Subprocess\",\n name: \"Framed Rectangle\",\n shortName: \"fr-rect\",\n description: \"Subprocess\",\n aliases: [\"subprocess\", \"subproc\", \"framed-rectangle\", \"subroutine\"],\n handler: subroutine\n },\n {\n semanticName: \"Database\",\n name: \"Cylinder\",\n shortName: \"cyl\",\n description: \"Database storage\",\n aliases: [\"db\", \"database\", \"cylinder\"],\n handler: cylinder\n },\n {\n semanticName: \"Start\",\n name: \"Circle\",\n shortName: \"circle\",\n description: \"Starting point\",\n aliases: [\"circ\"],\n handler: circle\n },\n {\n semanticName: \"Bang\",\n name: \"Bang\",\n shortName: \"bang\",\n description: \"Bang\",\n aliases: [\"bang\"],\n handler: bang\n },\n {\n semanticName: \"Cloud\",\n name: \"Cloud\",\n shortName: \"cloud\",\n description: \"cloud\",\n aliases: [\"cloud\"],\n handler: cloud\n },\n {\n semanticName: \"Decision\",\n name: \"Diamond\",\n shortName: \"diam\",\n description: \"Decision-making step\",\n aliases: [\"decision\", \"diamond\", \"question\"],\n handler: question\n },\n {\n semanticName: \"Prepare Conditional\",\n name: \"Hexagon\",\n shortName: \"hex\",\n description: \"Preparation or condition step\",\n aliases: [\"hexagon\", \"prepare\"],\n handler: hexagon\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Right\",\n shortName: \"lean-r\",\n description: \"Represents input or output\",\n aliases: [\"lean-right\", \"in-out\"],\n internalAliases: [\"lean_right\"],\n handler: lean_right\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Left\",\n shortName: \"lean-l\",\n description: \"Represents output or input\",\n aliases: [\"lean-left\", \"out-in\"],\n internalAliases: [\"lean_left\"],\n handler: lean_left\n },\n {\n semanticName: \"Priority Action\",\n name: \"Trapezoid Base Bottom\",\n shortName: \"trap-b\",\n description: \"Priority action\",\n aliases: [\"priority\", \"trapezoid-bottom\", \"trapezoid\"],\n handler: trapezoid\n },\n {\n semanticName: \"Manual Operation\",\n name: \"Trapezoid Base Top\",\n shortName: \"trap-t\",\n description: \"Represents a manual task\",\n aliases: [\"manual\", \"trapezoid-top\", \"inv-trapezoid\"],\n internalAliases: [\"inv_trapezoid\"],\n handler: inv_trapezoid\n },\n {\n semanticName: \"Stop\",\n name: \"Double Circle\",\n shortName: \"dbl-circ\",\n description: \"Represents a stop point\",\n aliases: [\"double-circle\"],\n internalAliases: [\"doublecircle\"],\n handler: doublecircle\n },\n {\n semanticName: \"Text Block\",\n name: \"Text Block\",\n shortName: \"text\",\n description: \"Text block\",\n handler: text\n },\n {\n semanticName: \"Card\",\n name: \"Notched Rectangle\",\n shortName: \"notch-rect\",\n description: \"Represents a card\",\n aliases: [\"card\", \"notched-rectangle\"],\n handler: card\n },\n {\n semanticName: \"Lined/Shaded Process\",\n name: \"Lined Rectangle\",\n shortName: \"lin-rect\",\n description: \"Lined process shape\",\n aliases: [\"lined-rectangle\", \"lined-process\", \"lin-proc\", \"shaded-process\"],\n handler: shadedProcess\n },\n {\n semanticName: \"Start\",\n name: \"Small Circle\",\n shortName: \"sm-circ\",\n description: \"Small starting point\",\n aliases: [\"start\", \"small-circle\"],\n internalAliases: [\"stateStart\"],\n handler: stateStart\n },\n {\n semanticName: \"Stop\",\n name: \"Framed Circle\",\n shortName: \"fr-circ\",\n description: \"Stop point\",\n aliases: [\"stop\", \"framed-circle\"],\n internalAliases: [\"stateEnd\"],\n handler: stateEnd\n },\n {\n semanticName: \"Fork/Join\",\n name: \"Filled Rectangle\",\n shortName: \"fork\",\n description: \"Fork or join in process flow\",\n aliases: [\"join\"],\n internalAliases: [\"forkJoin\"],\n handler: forkJoin\n },\n {\n semanticName: \"Collate\",\n name: \"Hourglass\",\n shortName: \"hourglass\",\n description: \"Represents a collate operation\",\n aliases: [\"hourglass\", \"collate\"],\n handler: hourglass\n },\n {\n semanticName: \"Comment\",\n name: \"Curly Brace\",\n shortName: \"brace\",\n description: \"Adds a comment\",\n aliases: [\"comment\", \"brace-l\"],\n handler: curlyBraceLeft\n },\n {\n semanticName: \"Comment Right\",\n name: \"Curly Brace\",\n shortName: \"brace-r\",\n description: \"Adds a comment\",\n handler: curlyBraceRight\n },\n {\n semanticName: \"Comment with braces on both sides\",\n name: \"Curly Braces\",\n shortName: \"braces\",\n description: \"Adds a comment\",\n handler: curlyBraces\n },\n {\n semanticName: \"Com Link\",\n name: \"Lightning Bolt\",\n shortName: \"bolt\",\n description: \"Communication link\",\n aliases: [\"com-link\", \"lightning-bolt\"],\n handler: lightningBolt\n },\n {\n semanticName: \"Document\",\n name: \"Document\",\n shortName: \"doc\",\n description: \"Represents a document\",\n aliases: [\"doc\", \"document\"],\n handler: waveEdgedRectangle\n },\n {\n semanticName: \"Delay\",\n name: \"Half-Rounded Rectangle\",\n shortName: \"delay\",\n description: \"Represents a delay\",\n aliases: [\"half-rounded-rectangle\"],\n handler: halfRoundedRectangle\n },\n {\n semanticName: \"Direct Access Storage\",\n name: \"Horizontal Cylinder\",\n shortName: \"h-cyl\",\n description: \"Direct access storage\",\n aliases: [\"das\", \"horizontal-cylinder\"],\n handler: tiltedCylinder\n },\n {\n semanticName: \"Disk Storage\",\n name: \"Lined Cylinder\",\n shortName: \"lin-cyl\",\n description: \"Disk storage\",\n aliases: [\"disk\", \"lined-cylinder\"],\n handler: linedCylinder\n },\n {\n semanticName: \"Display\",\n name: \"Curved Trapezoid\",\n shortName: \"curv-trap\",\n description: \"Represents a display\",\n aliases: [\"curved-trapezoid\", \"display\"],\n handler: curvedTrapezoid\n },\n {\n semanticName: \"Divided Process\",\n name: \"Divided Rectangle\",\n shortName: \"div-rect\",\n description: \"Divided process shape\",\n aliases: [\"div-proc\", \"divided-rectangle\", \"divided-process\"],\n handler: dividedRectangle\n },\n {\n semanticName: \"Extract\",\n name: \"Triangle\",\n shortName: \"tri\",\n description: \"Extraction process\",\n aliases: [\"extract\", \"triangle\"],\n handler: triangle\n },\n {\n semanticName: \"Internal Storage\",\n name: \"Window Pane\",\n shortName: \"win-pane\",\n description: \"Internal storage\",\n aliases: [\"internal-storage\", \"window-pane\"],\n handler: windowPane\n },\n {\n semanticName: \"Junction\",\n name: \"Filled Circle\",\n shortName: \"f-circ\",\n description: \"Junction point\",\n aliases: [\"junction\", \"filled-circle\"],\n handler: filledCircle\n },\n {\n semanticName: \"Loop Limit\",\n name: \"Trapezoidal Pentagon\",\n shortName: \"notch-pent\",\n description: \"Loop limit step\",\n aliases: [\"loop-limit\", \"notched-pentagon\"],\n handler: trapezoidalPentagon\n },\n {\n semanticName: \"Manual File\",\n name: \"Flipped Triangle\",\n shortName: \"flip-tri\",\n description: \"Manual file operation\",\n aliases: [\"manual-file\", \"flipped-triangle\"],\n handler: flippedTriangle\n },\n {\n semanticName: \"Manual Input\",\n name: \"Sloped Rectangle\",\n shortName: \"sl-rect\",\n description: \"Manual input step\",\n aliases: [\"manual-input\", \"sloped-rectangle\"],\n handler: slopedRect\n },\n {\n semanticName: \"Multi-Document\",\n name: \"Stacked Document\",\n shortName: \"docs\",\n description: \"Multiple documents\",\n aliases: [\"documents\", \"st-doc\", \"stacked-document\"],\n handler: multiWaveEdgedRectangle\n },\n {\n semanticName: \"Multi-Process\",\n name: \"Stacked Rectangle\",\n shortName: \"st-rect\",\n description: \"Multiple processes\",\n aliases: [\"procs\", \"processes\", \"stacked-rectangle\"],\n handler: multiRect\n },\n {\n semanticName: \"Stored Data\",\n name: \"Bow Tie Rectangle\",\n shortName: \"bow-rect\",\n description: \"Stored data\",\n aliases: [\"stored-data\", \"bow-tie-rectangle\"],\n handler: bowTieRect\n },\n {\n semanticName: \"Summary\",\n name: \"Crossed Circle\",\n shortName: \"cross-circ\",\n description: \"Summary\",\n aliases: [\"summary\", \"crossed-circle\"],\n handler: crossedCircle\n },\n {\n semanticName: \"Tagged Document\",\n name: \"Tagged Document\",\n shortName: \"tag-doc\",\n description: \"Tagged document\",\n aliases: [\"tag-doc\", \"tagged-document\"],\n handler: taggedWaveEdgedRectangle\n },\n {\n semanticName: \"Tagged Process\",\n name: \"Tagged Rectangle\",\n shortName: \"tag-rect\",\n description: \"Tagged process\",\n aliases: [\"tagged-rectangle\", \"tag-proc\", \"tagged-process\"],\n handler: taggedRect\n },\n {\n semanticName: \"Paper Tape\",\n name: \"Flag\",\n shortName: \"flag\",\n description: \"Paper tape\",\n aliases: [\"paper-tape\"],\n handler: waveRectangle\n },\n {\n semanticName: \"Odd\",\n name: \"Odd\",\n shortName: \"odd\",\n description: \"Odd shape\",\n internalAliases: [\"rect_left_inv_arrow\"],\n handler: rect_left_inv_arrow\n },\n {\n semanticName: \"Lined Document\",\n name: \"Lined Document\",\n shortName: \"lin-doc\",\n description: \"Lined document\",\n aliases: [\"lined-document\"],\n handler: linedWaveEdgedRect\n }\n];\nvar generateShapeMap = /* @__PURE__ */ __name(() => {\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n // Rectangles\n rectWithTitle,\n labelRect,\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n // Kanban diagram\n kanbanItem,\n //Mindmap diagram\n mindmapCircle,\n defaultMindmapNode,\n // class diagram\n classBox,\n // er diagram\n erBox,\n // Requirement diagram\n requirementBox\n };\n const entries = [\n ...Object.entries(undocumentedShapes),\n ...shapesDefs.flatMap((shape) => {\n const aliases = [\n shape.shortName,\n ...\"aliases\" in shape ? shape.aliases : [],\n ...\"internalAliases\" in shape ? shape.internalAliases : []\n ];\n return aliases.map((alias) => [alias, shape.handler]);\n })\n ];\n return Object.fromEntries(entries);\n}, \"generateShapeMap\");\nvar shapes2 = generateShapeMap();\nfunction isValidShape(shape) {\n return shape in shapes2;\n}\n__name(isValidShape, \"isValidShape\");\n\n// src/rendering-util/rendering-elements/nodes.ts\nvar nodeElems = /* @__PURE__ */ new Map();\nasync function insertNode(elem, node, renderOptions) {\n let newEl;\n let el;\n if (node.shape === \"rect\") {\n if (node.rx && node.ry) {\n node.shape = \"roundedRect\";\n } else {\n node.shape = \"squareRect\";\n }\n }\n const shapeHandler = node.shape ? shapes2[node.shape] : void 0;\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n if (node.link) {\n let target;\n if (renderOptions.config.securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n nodeElems.set(node.id, newEl);\n if (node.haveCallback) {\n newEl.attr(\"class\", newEl.attr(\"class\") + \" clickable\");\n }\n return newEl;\n}\n__name(insertNode, \"insertNode\");\nvar setNodeElem = /* @__PURE__ */ __name((elem, node) => {\n nodeElems.set(node.id, elem);\n}, \"setNodeElem\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n nodeElems.clear();\n}, \"clear\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems.get(node.id);\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\nexport {\n labelHelper,\n updateNodeBounds,\n createLabel_default,\n isValidShape,\n insertCluster,\n clear,\n insertNode,\n setNodeElem,\n clear2,\n positionNode\n};\n","import {\n getLineFunctionsWithOffset,\n markerOffsets,\n markerOffsets2\n} from \"./chunk-HN2XXSSU.mjs\";\nimport {\n createLabel_default\n} from \"./chunk-JZLCHNYA.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n isLabelStyle,\n styles2String\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n createText\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n evaluate,\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/edges.js\nimport {\n curveBasis,\n curveLinear,\n curveCardinal,\n curveBumpX,\n curveBumpY,\n curveCatmullRom,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n line,\n select\n} from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/edgeMarker.ts\nvar addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id, diagramType, strokeColor) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, \"start\", edge.arrowTypeStart, url, id, diagramType, strokeColor);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, \"end\", edge.arrowTypeEnd, url, id, diagramType, strokeColor);\n }\n}, \"addEdgeMarkers\");\nvar arrowTypesMap = {\n arrow_cross: { type: \"cross\", fill: false },\n arrow_point: { type: \"point\", fill: true },\n arrow_barb: { type: \"barb\", fill: true },\n arrow_circle: { type: \"circle\", fill: false },\n aggregation: { type: \"aggregation\", fill: false },\n extension: { type: \"extension\", fill: false },\n composition: { type: \"composition\", fill: true },\n dependency: { type: \"dependency\", fill: true },\n lollipop: { type: \"lollipop\", fill: false },\n only_one: { type: \"onlyOne\", fill: false },\n zero_or_one: { type: \"zeroOrOne\", fill: false },\n one_or_more: { type: \"oneOrMore\", fill: false },\n zero_or_more: { type: \"zeroOrMore\", fill: false },\n requirement_arrow: { type: \"requirement_arrow\", fill: false },\n requirement_contains: { type: \"requirement_contains\", fill: false }\n};\nvar addEdgeMarker = /* @__PURE__ */ __name((svgPath, position, arrowType, url, id, diagramType, strokeColor) => {\n const arrowTypeInfo = arrowTypesMap[arrowType];\n if (!arrowTypeInfo) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return;\n }\n const endMarkerType = arrowTypeInfo.type;\n const suffix = position === \"start\" ? \"Start\" : \"End\";\n const originalMarkerId = `${id}_${diagramType}-${endMarkerType}${suffix}`;\n if (strokeColor && strokeColor.trim() !== \"\") {\n const colorId = strokeColor.replace(/[^\\dA-Za-z]/g, \"_\");\n const coloredMarkerId = `${originalMarkerId}_${colorId}`;\n if (!document.getElementById(coloredMarkerId)) {\n const originalMarker = document.getElementById(originalMarkerId);\n if (originalMarker) {\n const coloredMarker = originalMarker.cloneNode(true);\n coloredMarker.id = coloredMarkerId;\n const paths = coloredMarker.querySelectorAll(\"path, circle, line\");\n paths.forEach((path) => {\n path.setAttribute(\"stroke\", strokeColor);\n if (arrowTypeInfo.fill) {\n path.setAttribute(\"fill\", strokeColor);\n }\n });\n originalMarker.parentNode?.appendChild(coloredMarker);\n }\n }\n svgPath.attr(`marker-${position}`, `url(${url}#${coloredMarkerId})`);\n } else {\n svgPath.attr(`marker-${position}`, `url(${url}#${originalMarkerId})`);\n }\n}, \"addEdgeMarker\");\n\n// src/rendering-util/rendering-elements/edges.js\nvar edgeLabels = /* @__PURE__ */ new Map();\nvar terminalLabels = /* @__PURE__ */ new Map();\nvar clear = /* @__PURE__ */ __name(() => {\n edgeLabels.clear();\n terminalLabels.clear();\n}, \"clear\");\nvar getLabelStyles = /* @__PURE__ */ __name((styleArray) => {\n let styles = styleArray ? styleArray.reduce((acc, style) => acc + \";\" + style, \"\") : \"\";\n return styles;\n}, \"getLabelStyles\");\nvar insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => {\n let useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n const { labelStyles } = styles2String(edge);\n edge.labelStyle = labelStyles;\n const labelElement = await createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true,\n isNode: false\n });\n log.info(\"abc82\", edge, edge.labelType);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\").attr(\"data-id\", edge.id);\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels.set(edge.id, edgeLabel);\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = await createLabel_default(\n edge.startLabelLeft,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = await createLabel_default(\n edge.startLabelRight,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = await createLabel_default(edge.endLabelLeft, getLabelStyles(edge.labelStyle));\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = await createLabel_default(edge.endLabelRight, getLabelStyles(edge.labelStyle));\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n}, \"insertEdgeLabel\");\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\n__name(setTerminalWidth, \"setTerminalWidth\");\nvar positionEdgeLabel = /* @__PURE__ */ __name((edge, paths) => {\n log.debug(\"Moving label abc88 \", edge.id, edge.label, edgeLabels.get(edge.id), paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}, \"positionEdgeLabel\");\nvar outsideNode = /* @__PURE__ */ __name((node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n return dx >= w || dy >= h;\n}, \"outsideNode\");\nvar intersection = /* @__PURE__ */ __name((node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.debug(`abc89 top/bottom calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n}, \"intersection\");\nvar cutPathAtIntersect = /* @__PURE__ */ __name((_points, boundaryNode) => {\n log.warn(\"abc88 cutPathAtIntersect\", _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n log.info(\"abc88 checking point\", point2, boundaryNode);\n if (!outsideNode(boundaryNode, point2) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point2);\n log.debug(\"abc88 inside\", point2, lastPointOutside, inter);\n log.debug(\"abc88 intersection\", inter, boundaryNode);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn(\"abc88 no intersect\", inter, points);\n }\n isInside = true;\n } else {\n log.warn(\"abc88 outside\", point2, lastPointOutside);\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n log.debug(\"returning points\", points);\n return points;\n}, \"cutPathAtIntersect\");\nfunction extractCornerPoints(points) {\n const cornerPoints = [];\n const cornerPointPositions = [];\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n if (prev.x === curr.x && curr.y === next.y && Math.abs(curr.x - next.x) > 5 && Math.abs(curr.y - prev.y) > 5) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n } else if (prev.y === curr.y && curr.x === next.x && Math.abs(curr.x - prev.x) > 5 && Math.abs(curr.y - next.y) > 5) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n }\n }\n return { cornerPoints, cornerPointPositions };\n}\n__name(extractCornerPoints, \"extractCornerPoints\");\nvar findAdjacentPoint = /* @__PURE__ */ __name(function(pointA, pointB, distance) {\n const xDiff = pointB.x - pointA.x;\n const yDiff = pointB.y - pointA.y;\n const length = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n const ratio = distance / length;\n return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff };\n}, \"findAdjacentPoint\");\nvar fixCorners = /* @__PURE__ */ __name(function(lineData) {\n const { cornerPointPositions } = extractCornerPoints(lineData);\n const newLineData = [];\n for (let i = 0; i < lineData.length; i++) {\n if (cornerPointPositions.includes(i)) {\n const prevPoint = lineData[i - 1];\n const nextPoint = lineData[i + 1];\n const cornerPoint = lineData[i];\n const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5);\n const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5);\n const xDiff = newNextPoint.x - newPrevPoint.x;\n const yDiff = newNextPoint.y - newPrevPoint.y;\n newLineData.push(newPrevPoint);\n const a = Math.sqrt(2) * 2;\n let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y };\n if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) {\n log.debug(\n \"Corner point fixing\",\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n const r = 5;\n if (cornerPoint.x === newPrevPoint.x) {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - r + a : newPrevPoint.x + r - a,\n y: yDiff < 0 ? newPrevPoint.y - a : newPrevPoint.y + a\n };\n } else {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - a : newPrevPoint.x + a,\n y: yDiff < 0 ? newPrevPoint.y - r + a : newPrevPoint.y + r - a\n };\n }\n } else {\n log.debug(\n \"Corner point skipping fixing\",\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n }\n newLineData.push(newCornerPoint, newNextPoint);\n } else {\n newLineData.push(lineData[i]);\n }\n }\n return newLineData;\n}, \"fixCorners\");\nvar generateDashArray = /* @__PURE__ */ __name((len, oValueS, oValueE) => {\n const middleLength = len - oValueS - oValueE;\n const dashLength = 2;\n const gapLength = 2;\n const dashGapPairLength = dashLength + gapLength;\n const numberOfPairs = Math.floor(middleLength / dashGapPairLength);\n const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(\" \");\n const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`;\n return dashArray;\n}, \"generateDashArray\");\nvar insertEdge = /* @__PURE__ */ __name(function(elem, edge, clusterDb, diagramType, startNode, endNode, id, skipIntersect = false) {\n const { handDrawnSeed } = getConfig();\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = startNode;\n var head = endNode;\n const edgeClassStyles = [];\n for (const key in edge.cssCompiledStyles) {\n if (isLabelStyle(key)) {\n continue;\n }\n edgeClassStyles.push(edge.cssCompiledStyles[key]);\n }\n log.debug(\"UIO intersect check\", edge.points, head.x, tail.x);\n if (head.intersect && tail.intersect && !skipIntersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.debug(\n \"Last point UIO\",\n edge.start,\n \"-->\",\n edge.end,\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n const pointsStr = btoa(JSON.stringify(points));\n if (edge.toCluster) {\n log.info(\"to cluster abc88\", clusterDb.get(edge.toCluster));\n points = cutPathAtIntersect(edge.points, clusterDb.get(edge.toCluster).node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.debug(\n \"from cluster abc88\",\n clusterDb.get(edge.fromCluster),\n JSON.stringify(points, null, 2)\n );\n points = cutPathAtIntersect(points.reverse(), clusterDb.get(edge.fromCluster).node).reverse();\n pointsHasChanged = true;\n }\n let lineData = points.filter((p) => !Number.isNaN(p.y));\n lineData = fixCorners(lineData);\n let curve = curveBasis;\n curve = curveLinear;\n switch (edge.curve) {\n case \"linear\":\n curve = curveLinear;\n break;\n case \"basis\":\n curve = curveBasis;\n break;\n case \"cardinal\":\n curve = curveCardinal;\n break;\n case \"bumpX\":\n curve = curveBumpX;\n break;\n case \"bumpY\":\n curve = curveBumpY;\n break;\n case \"catmullRom\":\n curve = curveCatmullRom;\n break;\n case \"monotoneX\":\n curve = curveMonotoneX;\n break;\n case \"monotoneY\":\n curve = curveMonotoneY;\n break;\n case \"natural\":\n curve = curveNatural;\n break;\n case \"step\":\n curve = curveStep;\n break;\n case \"stepAfter\":\n curve = curveStepAfter;\n break;\n case \"stepBefore\":\n curve = curveStepBefore;\n break;\n default:\n curve = curveBasis;\n }\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-invisible\";\n break;\n default:\n strokeClasses = \"edge-thickness-normal\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n default:\n strokeClasses += \" edge-pattern-solid\";\n }\n let svgPath;\n let linePath = edge.curve === \"rounded\" ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) : lineFunction(lineData);\n const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];\n let strokeColor = edgeStyles.find((style) => style?.startsWith(\"stroke:\"));\n let animatedEdge = false;\n if (edge.look === \"handDrawn\") {\n const rc = rough.svg(elem);\n Object.assign([], lineData);\n const svgPathNode = rc.path(linePath, {\n roughness: 0.3,\n seed: handDrawnSeed\n });\n strokeClasses += \" transition\";\n svgPath = select(svgPathNode).select(\"path\").attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edgeStyles ? edgeStyles.reduce((acc, style) => acc + \";\" + style, \"\") : \"\");\n let d = svgPath.attr(\"d\");\n svgPath.attr(\"d\", d);\n elem.node().appendChild(svgPath.node());\n } else {\n const stylesFromClasses = edgeClassStyles.join(\";\");\n const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + \";\", \"\") : \"\";\n let animationClass = \"\";\n if (edge.animate) {\n animationClass = \" edge-animation-fast\";\n }\n if (edge.animation) {\n animationClass = \" edge-animation-\" + edge.animation;\n }\n const pathStyle = (stylesFromClasses ? stylesFromClasses + \";\" + styles + \";\" : styles) + \";\" + (edgeStyles ? edgeStyles.reduce((acc, style) => acc + \";\" + style, \"\") : \"\");\n svgPath = elem.append(\"path\").attr(\"d\", linePath).attr(\"id\", edge.id).attr(\n \"class\",\n \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\") + (animationClass ?? \"\")\n ).attr(\"style\", pathStyle);\n strokeColor = pathStyle.match(/stroke:([^;]+)/)?.[1];\n animatedEdge = edge.animate === true || !!edge.animation || stylesFromClasses.includes(\"animation\");\n const pathNode = svgPath.node();\n const len = typeof pathNode.getTotalLength === \"function\" ? pathNode.getTotalLength() : 0;\n const oValueS = markerOffsets2[edge.arrowTypeStart] || 0;\n const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0;\n if (edge.look === \"neo\" && !animatedEdge) {\n const dashArray = edge.pattern === \"dotted\" || edge.pattern === \"dashed\" ? generateDashArray(len, oValueS, oValueE) : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`;\n const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`;\n svgPath.attr(\"style\", mOffset + svgPath.attr(\"style\"));\n }\n }\n svgPath.attr(\"data-edge\", true);\n svgPath.attr(\"data-et\", \"edge\");\n svgPath.attr(\"data-id\", edge.id);\n svgPath.attr(\"data-points\", pointsStr);\n if (edge.showPoints) {\n lineData.forEach((point3) => {\n elem.append(\"circle\").style(\"stroke\", \"red\").style(\"fill\", \"red\").attr(\"r\", 1).attr(\"cx\", point3.x).attr(\"cy\", point3.y);\n });\n }\n let url = \"\";\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\").replace(/\\)/g, \"\\\\)\");\n }\n log.info(\"arrowTypeStart\", edge.arrowTypeStart);\n log.info(\"arrowTypeEnd\", edge.arrowTypeEnd);\n addEdgeMarkers(svgPath, edge, url, id, diagramType, strokeColor);\n const midIndex = Math.floor(points.length / 2);\n const point2 = points[midIndex];\n if (!utils_default.isLabelCoordinateInPath(point2, svgPath.attr(\"d\"))) {\n pointsHasChanged = true;\n }\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n}, \"insertEdge\");\nfunction generateRoundedPath(points, radius) {\n if (points.length < 2) {\n return \"\";\n }\n let path = \"\";\n const size = points.length;\n const epsilon = 1e-5;\n for (let i = 0; i < size; i++) {\n const currPoint = points[i];\n const prevPoint = points[i - 1];\n const nextPoint = points[i + 1];\n if (i === 0) {\n path += `M${currPoint.x},${currPoint.y}`;\n } else if (i === size - 1) {\n path += `L${currPoint.x},${currPoint.y}`;\n } else {\n const dx1 = currPoint.x - prevPoint.x;\n const dy1 = currPoint.y - prevPoint.y;\n const dx2 = nextPoint.x - currPoint.x;\n const dy2 = nextPoint.y - currPoint.y;\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n if (len1 < epsilon || len2 < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n const dot = nx1 * nx2 + ny1 * ny2;\n const clampedDot = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clampedDot);\n if (angle < epsilon || Math.abs(Math.PI - angle) < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n const startX = currPoint.x - nx1 * cutLen;\n const startY = currPoint.y - ny1 * cutLen;\n const endX = currPoint.x + nx2 * cutLen;\n const endY = currPoint.y + ny2 * cutLen;\n path += `L${startX},${startY}`;\n path += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`;\n }\n }\n return path;\n}\n__name(generateRoundedPath, \"generateRoundedPath\");\nfunction calculateDeltaAndAngle(point1, point2) {\n if (!point1 || !point2) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n const deltaX = point2.x - point1.x;\n const deltaY = point2.y - point1.y;\n const angle = Math.atan2(deltaY, deltaX);\n return { angle, deltaX, deltaY };\n}\n__name(calculateDeltaAndAngle, \"calculateDeltaAndAngle\");\nfunction applyMarkerOffsetsToPoints(points, edge) {\n const newPoints = points.map((point2) => ({ ...point2 }));\n if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) {\n const offsetValue = markerOffsets[edge.arrowTypeStart];\n const point1 = points[0];\n const point2 = points[1];\n const { angle } = calculateDeltaAndAngle(point1, point2);\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n newPoints[0].x = point1.x + offsetX;\n newPoints[0].y = point1.y + offsetY;\n }\n const n = points.length;\n if (n >= 2 && markerOffsets[edge.arrowTypeEnd]) {\n const offsetValue = markerOffsets[edge.arrowTypeEnd];\n const point1 = points[n - 1];\n const point2 = points[n - 2];\n const { angle } = calculateDeltaAndAngle(point2, point1);\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n newPoints[n - 1].x = point1.x - offsetX;\n newPoints[n - 1].y = point1.y - offsetY;\n }\n return newPoints;\n}\n__name(applyMarkerOffsetsToPoints, \"applyMarkerOffsetsToPoints\");\n\n// src/rendering-util/rendering-elements/markers.js\nvar insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n}, \"insertMarkers\");\nvar extension = /* @__PURE__ */ __name((elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n}, \"extension\");\nvar composition = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"composition\");\nvar aggregation = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"aggregation\");\nvar dependency = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 6).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"dependency\");\nvar lollipop = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopEnd\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n}, \"lollipop\");\nvar point = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 4.5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"point\");\nvar circle = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"circle\");\nvar cross = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n}, \"cross\");\nvar barb = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"barb\");\nvar only_one = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-onlyOneStart\").attr(\"class\", \"marker onlyOne \" + type).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M9,0 L9,18 M15,0 L15,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-onlyOneEnd\").attr(\"class\", \"marker onlyOne \" + type).attr(\"refX\", 18).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M3,0 L3,18 M9,0 L9,18\");\n}, \"only_one\");\nvar zero_or_one = /* @__PURE__ */ __name((elem, type, id) => {\n const startMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrOneStart\").attr(\"class\", \"marker zeroOrOne \" + type).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n startMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 21).attr(\"cy\", 9).attr(\"r\", 6);\n startMarker.append(\"path\").attr(\"d\", \"M9,0 L9,18\");\n const endMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrOneEnd\").attr(\"class\", \"marker zeroOrOne \" + type).attr(\"refX\", 30).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n endMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 9).attr(\"r\", 6);\n endMarker.append(\"path\").attr(\"d\", \"M21,0 L21,18\");\n}, \"zero_or_one\");\nvar one_or_more = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-oneOrMoreStart\").attr(\"class\", \"marker oneOrMore \" + type).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-oneOrMoreEnd\").attr(\"class\", \"marker oneOrMore \" + type).attr(\"refX\", 27).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18\");\n}, \"one_or_more\");\nvar zero_or_more = /* @__PURE__ */ __name((elem, type, id) => {\n const startMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrMoreStart\").attr(\"class\", \"marker zeroOrMore \" + type).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n startMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 48).attr(\"cy\", 18).attr(\"r\", 6);\n startMarker.append(\"path\").attr(\"d\", \"M0,18 Q18,0 36,18 Q18,36 0,18\");\n const endMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrMoreEnd\").attr(\"class\", \"marker zeroOrMore \" + type).attr(\"refX\", 39).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n endMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 18).attr(\"r\", 6);\n endMarker.append(\"path\").attr(\"d\", \"M21,18 Q39,0 57,18 Q39,36 21,18\");\n}, \"zero_or_more\");\nvar requirement_arrow = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-requirement_arrowEnd\").attr(\"refX\", 20).attr(\"refY\", 10).attr(\"markerWidth\", 20).attr(\"markerHeight\", 20).attr(\"orient\", \"auto\").append(\"path\").attr(\n \"d\",\n `M0,0\n L20,10\n M20,10\n L0,20`\n );\n}, \"requirement_arrow\");\nvar requirement_contains = /* @__PURE__ */ __name((elem, type, id) => {\n const containsNode = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-requirement_containsStart\").attr(\"refX\", 0).attr(\"refY\", 10).attr(\"markerWidth\", 20).attr(\"markerHeight\", 20).attr(\"orient\", \"auto\").append(\"g\");\n containsNode.append(\"circle\").attr(\"cx\", 10).attr(\"cy\", 10).attr(\"r\", 9).attr(\"fill\", \"none\");\n containsNode.append(\"line\").attr(\"x1\", 1).attr(\"x2\", 19).attr(\"y1\", 10).attr(\"y2\", 10);\n containsNode.append(\"line\").attr(\"y1\", 1).attr(\"y2\", 19).attr(\"x1\", 10).attr(\"x2\", 10);\n}, \"requirement_contains\");\nvar markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb,\n only_one,\n zero_or_one,\n one_or_more,\n zero_or_more,\n requirement_arrow,\n requirement_contains\n};\nvar markers_default = insertMarkers;\n\nexport {\n clear,\n insertEdgeLabel,\n positionEdgeLabel,\n insertEdge,\n markers_default\n};\n","import {\n insertEdge,\n insertEdgeLabel,\n markers_default,\n positionEdgeLabel\n} from \"./chunk-QXUST7PY.mjs\";\nimport {\n insertCluster,\n insertNode,\n labelHelper\n} from \"./chunk-JZLCHNYA.mjs\";\nimport {\n interpolateToCurve\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/internals.ts\nvar internalHelpers = {\n common: common_default,\n getConfig,\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers: markers_default,\n insertNode,\n interpolateToCurve,\n labelHelper,\n log,\n positionEdgeLabel\n};\n\n// src/rendering-util/render.ts\nvar layoutAlgorithms = {};\nvar registerLayoutLoaders = /* @__PURE__ */ __name((loaders) => {\n for (const loader of loaders) {\n layoutAlgorithms[loader.name] = loader;\n }\n}, \"registerLayoutLoaders\");\nvar registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {\n registerLayoutLoaders([\n {\n name: \"dagre\",\n loader: /* @__PURE__ */ __name(async () => await import(\"./dagre-6UL2VRFP.mjs\"), \"loader\")\n },\n ...true ? [\n {\n name: \"cose-bilkent\",\n loader: /* @__PURE__ */ __name(async () => await import(\"./cose-bilkent-S5V4N54A.mjs\"), \"loader\")\n }\n ] : []\n ]);\n}, \"registerDefaultLayoutLoaders\");\nregisterDefaultLayoutLoaders();\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg) => {\n if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) {\n throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`);\n }\n const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm];\n const layoutRenderer = await layoutDefinition.loader();\n return layoutRenderer.render(data4Layout, svg, internalHelpers, {\n algorithm: layoutDefinition.algorithm\n });\n}, \"render\");\nvar getRegisteredLayoutAlgorithm = /* @__PURE__ */ __name((algorithm = \"\", { fallback = \"dagre\" } = {}) => {\n if (algorithm in layoutAlgorithms) {\n return algorithm;\n }\n if (fallback in layoutAlgorithms) {\n log.warn(`Layout algorithm ${algorithm} is not registered. Using ${fallback} as fallback.`);\n return fallback;\n }\n throw new Error(`Both layout algorithms ${algorithm} and ${fallback} are not registered.`);\n}, \"getRegisteredLayoutAlgorithm\");\n\nexport {\n registerLayoutLoaders,\n render,\n getRegisteredLayoutAlgorithm\n};\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import {\n package_default\n} from \"./chunks/mermaid.core/chunk-XAJISQIX.mjs\";\nimport {\n selectSvgElement\n} from \"./chunks/mermaid.core/chunk-EXTU4WIE.mjs\";\nimport {\n JSON_SCHEMA,\n load\n} from \"./chunks/mermaid.core/chunk-MI3HLSF2.mjs\";\nimport {\n registerLayoutLoaders\n} from \"./chunks/mermaid.core/chunk-N4CR4FBY.mjs\";\nimport \"./chunks/mermaid.core/chunk-QXUST7PY.mjs\";\nimport \"./chunks/mermaid.core/chunk-HN2XXSSU.mjs\";\nimport \"./chunks/mermaid.core/chunk-JZLCHNYA.mjs\";\nimport \"./chunks/mermaid.core/chunk-CVBHYZKI.mjs\";\nimport \"./chunks/mermaid.core/chunk-ATLVNIR6.mjs\";\nimport {\n registerIconPacks\n} from \"./chunks/mermaid.core/chunk-JA3XYJ7Z.mjs\";\nimport {\n cleanAndMerge,\n decodeEntities,\n encodeEntities,\n isDetailedError,\n removeDirectives,\n utils_default\n} from \"./chunks/mermaid.core/chunk-S3R3BYOJ.mjs\";\nimport {\n UnknownDiagramError,\n addDirective,\n assignWithDepth_default,\n configureSvgSize,\n defaultConfig,\n detectType,\n detectors,\n evaluate,\n frontMatterRegex,\n getConfig,\n getDiagram,\n getDiagramLoader,\n getSiteConfig,\n registerDiagram,\n registerLazyLoadedDiagrams,\n reset,\n saveConfigFromInitialize,\n setConfig,\n setSiteConfig,\n styles_default,\n themes_default,\n updateSiteConfig\n} from \"./chunks/mermaid.core/chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log,\n setLogLevel\n} from \"./chunks/mermaid.core/chunk-AGHRB4JF.mjs\";\n\n// src/mermaid.ts\nimport { dedent } from \"ts-dedent\";\n\n// src/diagrams/c4/c4Detector.ts\nvar id = \"c4\";\nvar detector = /* @__PURE__ */ __name((txt) => {\n return /^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);\n}, \"detector\");\nvar loader = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/c4Diagram-YG6GDRKO.mjs\");\n return { id, diagram: diagram2 };\n}, \"loader\");\nvar plugin = {\n id,\n detector,\n loader\n};\nvar c4Detector_default = plugin;\n\n// src/diagrams/flowchart/flowDetector.ts\nvar id2 = \"flowchart\";\nvar detector2 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.flowchart?.defaultRenderer === \"dagre-wrapper\" || config?.flowchart?.defaultRenderer === \"elk\") {\n return false;\n }\n return /^\\s*graph/.test(txt);\n}, \"detector\");\nvar loader2 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id2, diagram: diagram2 };\n}, \"loader\");\nvar plugin2 = {\n id: id2,\n detector: detector2,\n loader: loader2\n};\nvar flowDetector_default = plugin2;\n\n// src/diagrams/flowchart/flowDetector-v2.ts\nvar id3 = \"flowchart-v2\";\nvar detector3 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.flowchart?.defaultRenderer === \"dagre-d3\") {\n return false;\n }\n if (config?.flowchart?.defaultRenderer === \"elk\") {\n config.layout = \"elk\";\n }\n if (/^\\s*graph/.test(txt) && config?.flowchart?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*flowchart/.test(txt);\n}, \"detector\");\nvar loader3 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id3, diagram: diagram2 };\n}, \"loader\");\nvar plugin3 = {\n id: id3,\n detector: detector3,\n loader: loader3\n};\nvar flowDetector_v2_default = plugin3;\n\n// src/diagrams/er/erDetector.ts\nvar id4 = \"er\";\nvar detector4 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*erDiagram/.test(txt);\n}, \"detector\");\nvar loader4 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs\");\n return { id: id4, diagram: diagram2 };\n}, \"loader\");\nvar plugin4 = {\n id: id4,\n detector: detector4,\n loader: loader4\n};\nvar erDetector_default = plugin4;\n\n// src/diagrams/git/gitGraphDetector.ts\nvar id5 = \"gitGraph\";\nvar detector5 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*gitGraph/.test(txt);\n}, \"detector\");\nvar loader5 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs\");\n return { id: id5, diagram: diagram2 };\n}, \"loader\");\nvar plugin5 = {\n id: id5,\n detector: detector5,\n loader: loader5\n};\nvar gitGraphDetector_default = plugin5;\n\n// src/diagrams/gantt/ganttDetector.ts\nvar id6 = \"gantt\";\nvar detector6 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*gantt/.test(txt);\n}, \"detector\");\nvar loader6 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/ganttDiagram-JELNMOA3.mjs\");\n return { id: id6, diagram: diagram2 };\n}, \"loader\");\nvar plugin6 = {\n id: id6,\n detector: detector6,\n loader: loader6\n};\nvar ganttDetector_default = plugin6;\n\n// src/diagrams/info/infoDetector.ts\nvar id7 = \"info\";\nvar detector7 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*info/.test(txt);\n}, \"detector\");\nvar loader7 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/infoDiagram-WHAUD3N6.mjs\");\n return { id: id7, diagram: diagram2 };\n}, \"loader\");\nvar info = {\n id: id7,\n detector: detector7,\n loader: loader7\n};\n\n// src/diagrams/pie/pieDetector.ts\nvar id8 = \"pie\";\nvar detector8 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*pie/.test(txt);\n}, \"detector\");\nvar loader8 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/pieDiagram-ADFJNKIX.mjs\");\n return { id: id8, diagram: diagram2 };\n}, \"loader\");\nvar pie = {\n id: id8,\n detector: detector8,\n loader: loader8\n};\n\n// src/diagrams/quadrant-chart/quadrantDetector.ts\nvar id9 = \"quadrantChart\";\nvar detector9 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*quadrantChart/.test(txt);\n}, \"detector\");\nvar loader9 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/quadrantDiagram-AYHSOK5B.mjs\");\n return { id: id9, diagram: diagram2 };\n}, \"loader\");\nvar plugin7 = {\n id: id9,\n detector: detector9,\n loader: loader9\n};\nvar quadrantDetector_default = plugin7;\n\n// src/diagrams/xychart/xychartDetector.ts\nvar id10 = \"xychart\";\nvar detector10 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*xychart(-beta)?/.test(txt);\n}, \"detector\");\nvar loader10 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/xychartDiagram-PRI3JC2R.mjs\");\n return { id: id10, diagram: diagram2 };\n}, \"loader\");\nvar plugin8 = {\n id: id10,\n detector: detector10,\n loader: loader10\n};\nvar xychartDetector_default = plugin8;\n\n// src/diagrams/requirement/requirementDetector.ts\nvar id11 = \"requirement\";\nvar detector11 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*requirement(Diagram)?/.test(txt);\n}, \"detector\");\nvar loader11 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/requirementDiagram-UZGBJVZJ.mjs\");\n return { id: id11, diagram: diagram2 };\n}, \"loader\");\nvar plugin9 = {\n id: id11,\n detector: detector11,\n loader: loader11\n};\nvar requirementDetector_default = plugin9;\n\n// src/diagrams/sequence/sequenceDetector.ts\nvar id12 = \"sequence\";\nvar detector12 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*sequenceDiagram/.test(txt);\n}, \"detector\");\nvar loader12 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/sequenceDiagram-WL72ISMW.mjs\");\n return { id: id12, diagram: diagram2 };\n}, \"loader\");\nvar plugin10 = {\n id: id12,\n detector: detector12,\n loader: loader12\n};\nvar sequenceDetector_default = plugin10;\n\n// src/diagrams/class/classDetector.ts\nvar id13 = \"class\";\nvar detector13 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.class?.defaultRenderer === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*classDiagram/.test(txt);\n}, \"detector\");\nvar loader13 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/classDiagram-2ON5EDUG.mjs\");\n return { id: id13, diagram: diagram2 };\n}, \"loader\");\nvar plugin11 = {\n id: id13,\n detector: detector13,\n loader: loader13\n};\nvar classDetector_default = plugin11;\n\n// src/diagrams/class/classDetector-V2.ts\nvar id14 = \"classDiagram\";\nvar detector14 = /* @__PURE__ */ __name((txt, config) => {\n if (/^\\s*classDiagram/.test(txt) && config?.class?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*classDiagram-v2/.test(txt);\n}, \"detector\");\nvar loader14 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs\");\n return { id: id14, diagram: diagram2 };\n}, \"loader\");\nvar plugin12 = {\n id: id14,\n detector: detector14,\n loader: loader14\n};\nvar classDetector_V2_default = plugin12;\n\n// src/diagrams/state/stateDetector.ts\nvar id15 = \"state\";\nvar detector15 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.state?.defaultRenderer === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*stateDiagram/.test(txt);\n}, \"detector\");\nvar loader15 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs\");\n return { id: id15, diagram: diagram2 };\n}, \"loader\");\nvar plugin13 = {\n id: id15,\n detector: detector15,\n loader: loader15\n};\nvar stateDetector_default = plugin13;\n\n// src/diagrams/state/stateDetector-V2.ts\nvar id16 = \"stateDiagram\";\nvar detector16 = /* @__PURE__ */ __name((txt, config) => {\n if (/^\\s*stateDiagram-v2/.test(txt)) {\n return true;\n }\n if (/^\\s*stateDiagram/.test(txt) && config?.state?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return false;\n}, \"detector\");\nvar loader16 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs\");\n return { id: id16, diagram: diagram2 };\n}, \"loader\");\nvar plugin14 = {\n id: id16,\n detector: detector16,\n loader: loader16\n};\nvar stateDetector_V2_default = plugin14;\n\n// src/diagrams/user-journey/journeyDetector.ts\nvar id17 = \"journey\";\nvar detector17 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*journey/.test(txt);\n}, \"detector\");\nvar loader17 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/journeyDiagram-XKPGCS4Q.mjs\");\n return { id: id17, diagram: diagram2 };\n}, \"loader\");\nvar plugin15 = {\n id: id17,\n detector: detector17,\n loader: loader17\n};\nvar journeyDetector_default = plugin15;\n\n// src/diagrams/error/errorRenderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id28, version) => {\n log.debug(\"rendering svg for syntax error\\n\");\n const svg = selectSvgElement(id28);\n const g = svg.append(\"g\");\n svg.attr(\"viewBox\", \"0 0 2412 512\");\n configureSvgSize(svg, 100, 512, true);\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z\"\n );\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1440).attr(\"y\", 250).attr(\"font-size\", \"150px\").style(\"text-anchor\", \"middle\").text(\"Syntax error in text\");\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1250).attr(\"y\", 400).attr(\"font-size\", \"100px\").style(\"text-anchor\", \"middle\").text(`mermaid version ${version}`);\n}, \"draw\");\nvar renderer = { draw };\nvar errorRenderer_default = renderer;\n\n// src/diagrams/error/errorDiagram.ts\nvar diagram = {\n db: {},\n renderer,\n parser: {\n parse: /* @__PURE__ */ __name(() => {\n return;\n }, \"parse\")\n }\n};\nvar errorDiagram_default = diagram;\n\n// src/diagrams/flowchart/elk/detector.ts\nvar id18 = \"flowchart-elk\";\nvar detector18 = /* @__PURE__ */ __name((txt, config = {}) => {\n if (\n // If diagram explicitly states flowchart-elk\n /^\\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk\n /^\\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === \"elk\"\n ) {\n config.layout = \"elk\";\n return true;\n }\n return false;\n}, \"detector\");\nvar loader18 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id18, diagram: diagram2 };\n}, \"loader\");\nvar plugin16 = {\n id: id18,\n detector: detector18,\n loader: loader18\n};\nvar detector_default = plugin16;\n\n// src/diagrams/timeline/detector.ts\nvar id19 = \"timeline\";\nvar detector19 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*timeline/.test(txt);\n}, \"detector\");\nvar loader19 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/timeline-definition-IT6M3QCI.mjs\");\n return { id: id19, diagram: diagram2 };\n}, \"loader\");\nvar plugin17 = {\n id: id19,\n detector: detector19,\n loader: loader19\n};\nvar detector_default2 = plugin17;\n\n// src/diagrams/mindmap/detector.ts\nvar id20 = \"mindmap\";\nvar detector20 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*mindmap/.test(txt);\n}, \"detector\");\nvar loader20 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/mindmap-definition-VGOIOE7T.mjs\");\n return { id: id20, diagram: diagram2 };\n}, \"loader\");\nvar plugin18 = {\n id: id20,\n detector: detector20,\n loader: loader20\n};\nvar detector_default3 = plugin18;\n\n// src/diagrams/kanban/detector.ts\nvar id21 = \"kanban\";\nvar detector21 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*kanban/.test(txt);\n}, \"detector\");\nvar loader21 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/kanban-definition-3W4ZIXB7.mjs\");\n return { id: id21, diagram: diagram2 };\n}, \"loader\");\nvar plugin19 = {\n id: id21,\n detector: detector21,\n loader: loader21\n};\nvar detector_default4 = plugin19;\n\n// src/diagrams/sankey/sankeyDetector.ts\nvar id22 = \"sankey\";\nvar detector22 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*sankey(-beta)?/.test(txt);\n}, \"detector\");\nvar loader22 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/sankeyDiagram-TZEHDZUN.mjs\");\n return { id: id22, diagram: diagram2 };\n}, \"loader\");\nvar plugin20 = {\n id: id22,\n detector: detector22,\n loader: loader22\n};\nvar sankeyDetector_default = plugin20;\n\n// src/diagrams/packet/detector.ts\nvar id23 = \"packet\";\nvar detector23 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*packet(-beta)?/.test(txt);\n}, \"detector\");\nvar loader23 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-S2PKOQOG.mjs\");\n return { id: id23, diagram: diagram2 };\n}, \"loader\");\nvar packet = {\n id: id23,\n detector: detector23,\n loader: loader23\n};\n\n// src/diagrams/radar/detector.ts\nvar id24 = \"radar\";\nvar detector24 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*radar-beta/.test(txt);\n}, \"detector\");\nvar loader24 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-QEK2KX5R.mjs\");\n return { id: id24, diagram: diagram2 };\n}, \"loader\");\nvar radar = {\n id: id24,\n detector: detector24,\n loader: loader24\n};\n\n// src/diagrams/block/blockDetector.ts\nvar id25 = \"block\";\nvar detector25 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*block(-beta)?/.test(txt);\n}, \"detector\");\nvar loader25 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/blockDiagram-VD42YOAC.mjs\");\n return { id: id25, diagram: diagram2 };\n}, \"loader\");\nvar plugin21 = {\n id: id25,\n detector: detector25,\n loader: loader25\n};\nvar blockDetector_default = plugin21;\n\n// src/diagrams/architecture/architectureDetector.ts\nvar id26 = \"architecture\";\nvar detector26 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*architecture/.test(txt);\n}, \"detector\");\nvar loader26 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/architectureDiagram-VXUJARFQ.mjs\");\n return { id: id26, diagram: diagram2 };\n}, \"loader\");\nvar architecture = {\n id: id26,\n detector: detector26,\n loader: loader26\n};\nvar architectureDetector_default = architecture;\n\n// src/diagrams/treemap/detector.ts\nvar id27 = \"treemap\";\nvar detector27 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*treemap/.test(txt);\n}, \"detector\");\nvar loader27 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-PSM6KHXK.mjs\");\n return { id: id27, diagram: diagram2 };\n}, \"loader\");\nvar treemap = {\n id: id27,\n detector: detector27,\n loader: loader27\n};\n\n// src/diagram-api/diagram-orchestration.ts\nvar hasLoadedDiagrams = false;\nvar addDiagrams = /* @__PURE__ */ __name(() => {\n if (hasLoadedDiagrams) {\n return;\n }\n hasLoadedDiagrams = true;\n registerDiagram(\"error\", errorDiagram_default, (text) => {\n return text.toLowerCase().trim() === \"error\";\n });\n registerDiagram(\n \"---\",\n // --- diagram type may appear if YAML front-matter is not parsed correctly\n {\n db: {\n clear: /* @__PURE__ */ __name(() => {\n }, \"clear\")\n },\n styles: {},\n // should never be used\n renderer: {\n draw: /* @__PURE__ */ __name(() => {\n }, \"draw\")\n },\n parser: {\n parse: /* @__PURE__ */ __name(() => {\n throw new Error(\n \"Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks\"\n );\n }, \"parse\")\n },\n init: /* @__PURE__ */ __name(() => null, \"init\")\n // no op\n },\n (text) => {\n return text.toLowerCase().trimStart().startsWith(\"---\");\n }\n );\n if (true) {\n registerLazyLoadedDiagrams(detector_default, detector_default3, architectureDetector_default);\n }\n registerLazyLoadedDiagrams(\n c4Detector_default,\n detector_default4,\n classDetector_V2_default,\n classDetector_default,\n erDetector_default,\n ganttDetector_default,\n info,\n pie,\n requirementDetector_default,\n sequenceDetector_default,\n flowDetector_v2_default,\n flowDetector_default,\n detector_default2,\n gitGraphDetector_default,\n stateDetector_V2_default,\n stateDetector_default,\n journeyDetector_default,\n quadrantDetector_default,\n sankeyDetector_default,\n packet,\n xychartDetector_default,\n blockDetector_default,\n radar,\n treemap\n );\n}, \"addDiagrams\");\n\n// src/diagram-api/loadDiagram.ts\nvar loadRegisteredDiagrams = /* @__PURE__ */ __name(async () => {\n log.debug(`Loading registered diagrams`);\n const results = await Promise.allSettled(\n Object.entries(detectors).map(async ([key, { detector: detector28, loader: loader28 }]) => {\n if (!loader28) {\n return;\n }\n try {\n getDiagram(key);\n } catch {\n try {\n const { diagram: diagram2, id: id28 } = await loader28();\n registerDiagram(id28, diagram2, detector28);\n } catch (err) {\n log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);\n delete detectors[key];\n throw err;\n }\n }\n })\n );\n const failed = results.filter((result) => result.status === \"rejected\");\n if (failed.length > 0) {\n log.error(`Failed to load ${failed.length} external diagrams`);\n for (const res of failed) {\n log.error(res);\n }\n throw new Error(`Failed to load ${failed.length} external diagrams`);\n }\n}, \"loadRegisteredDiagrams\");\n\n// src/mermaidAPI.ts\nimport { select } from \"d3\";\nimport { compile, serialize, stringify } from \"stylis\";\nimport DOMPurify from \"dompurify\";\nimport isEmpty from \"lodash-es/isEmpty.js\";\n\n// src/accessibility.ts\nvar SVG_ROLE = \"graphics-document document\";\nfunction setA11yDiagramInfo(svg, diagramType) {\n svg.attr(\"role\", SVG_ROLE);\n if (diagramType !== \"\") {\n svg.attr(\"aria-roledescription\", diagramType);\n }\n}\n__name(setA11yDiagramInfo, \"setA11yDiagramInfo\");\nfunction addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {\n if (svg.insert === void 0) {\n return;\n }\n if (a11yDesc) {\n const descId = `chart-desc-${baseId}`;\n svg.attr(\"aria-describedby\", descId);\n svg.insert(\"desc\", \":first-child\").attr(\"id\", descId).text(a11yDesc);\n }\n if (a11yTitle) {\n const titleId = `chart-title-${baseId}`;\n svg.attr(\"aria-labelledby\", titleId);\n svg.insert(\"title\", \":first-child\").attr(\"id\", titleId).text(a11yTitle);\n }\n}\n__name(addSVGa11yTitleDescription, \"addSVGa11yTitleDescription\");\n\n// src/Diagram.ts\nvar Diagram = class _Diagram {\n constructor(type, text, db, parser, renderer2) {\n this.type = type;\n this.text = text;\n this.db = db;\n this.parser = parser;\n this.renderer = renderer2;\n }\n static {\n __name(this, \"Diagram\");\n }\n static async fromText(text, metadata = {}) {\n const config = getConfig();\n const type = detectType(text, config);\n text = encodeEntities(text) + \"\\n\";\n try {\n getDiagram(type);\n } catch {\n const loader28 = getDiagramLoader(type);\n if (!loader28) {\n throw new UnknownDiagramError(`Diagram ${type} not found.`);\n }\n const { id: id28, diagram: diagram2 } = await loader28();\n registerDiagram(id28, diagram2);\n }\n const { db, parser, renderer: renderer2, init: init2 } = getDiagram(type);\n if (parser.parser) {\n parser.parser.yy = db;\n }\n db.clear?.();\n init2?.(config);\n if (metadata.title) {\n db.setDiagramTitle?.(metadata.title);\n }\n await parser.parse(text);\n return new _Diagram(type, text, db, parser, renderer2);\n }\n async render(id28, version) {\n await this.renderer.draw(this.text, id28, version, this);\n }\n getParser() {\n return this.parser;\n }\n getType() {\n return this.type;\n }\n};\n\n// src/interactionDb.ts\nvar interactionFunctions = [];\nvar attachFunctions = /* @__PURE__ */ __name(() => {\n interactionFunctions.forEach((f) => {\n f();\n });\n interactionFunctions = [];\n}, \"attachFunctions\");\n\n// src/diagram-api/comments.ts\nvar cleanupComments = /* @__PURE__ */ __name((text) => {\n return text.replace(/^\\s*%%(?!{)[^\\n]+\\n?/gm, \"\").trimStart();\n}, \"cleanupComments\");\n\n// src/diagram-api/frontmatter.ts\nfunction extractFrontMatter(text) {\n const matches = text.match(frontMatterRegex);\n if (!matches) {\n return {\n text,\n metadata: {}\n };\n }\n let parsed = load(matches[1], {\n // To support config, we need JSON schema.\n // https://www.yaml.org/spec/1.2/spec.html#id2803231\n schema: JSON_SCHEMA\n }) ?? {};\n parsed = typeof parsed === \"object\" && !Array.isArray(parsed) ? parsed : {};\n const metadata = {};\n if (parsed.displayMode) {\n metadata.displayMode = parsed.displayMode.toString();\n }\n if (parsed.title) {\n metadata.title = parsed.title.toString();\n }\n if (parsed.config) {\n metadata.config = parsed.config;\n }\n return {\n text: text.slice(matches[0].length),\n metadata\n };\n}\n__name(extractFrontMatter, \"extractFrontMatter\");\n\n// src/preprocess.ts\nvar cleanupText = /* @__PURE__ */ __name((code) => {\n return code.replace(/\\r\\n?/g, \"\\n\").replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => \"<\" + tag + attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\") + \">\"\n );\n}, \"cleanupText\");\nvar processFrontmatter = /* @__PURE__ */ __name((code) => {\n const { text, metadata } = extractFrontMatter(code);\n const { displayMode, title, config = {} } = metadata;\n if (displayMode) {\n if (!config.gantt) {\n config.gantt = {};\n }\n config.gantt.displayMode = displayMode;\n }\n return { title, config, text };\n}, \"processFrontmatter\");\nvar processDirectives = /* @__PURE__ */ __name((code) => {\n const initDirective = utils_default.detectInit(code) ?? {};\n const wrapDirectives = utils_default.detectDirective(code, \"wrap\");\n if (Array.isArray(wrapDirectives)) {\n initDirective.wrap = wrapDirectives.some(({ type }) => type === \"wrap\");\n } else if (wrapDirectives?.type === \"wrap\") {\n initDirective.wrap = true;\n }\n return {\n text: removeDirectives(code),\n directive: initDirective\n };\n}, \"processDirectives\");\nfunction preprocessDiagram(code) {\n const cleanedCode = cleanupText(code);\n const frontMatterResult = processFrontmatter(cleanedCode);\n const directiveResult = processDirectives(frontMatterResult.text);\n const config = cleanAndMerge(frontMatterResult.config, directiveResult.directive);\n code = cleanupComments(directiveResult.text);\n return {\n code,\n title: frontMatterResult.title,\n config\n };\n}\n__name(preprocessDiagram, \"preprocessDiagram\");\n\n// src/utils/base64.ts\nfunction toBase64(str) {\n const utf8Bytes = new TextEncoder().encode(str);\n const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join(\"\");\n return btoa(utf8Str);\n}\n__name(toBase64, \"toBase64\");\n\n// src/mermaidAPI.ts\nvar MAX_TEXTLENGTH = 5e4;\nvar MAX_TEXTLENGTH_EXCEEDED_MSG = \"graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa\";\nvar SECURITY_LVL_SANDBOX = \"sandbox\";\nvar SECURITY_LVL_LOOSE = \"loose\";\nvar XMLNS_SVG_STD = \"http://www.w3.org/2000/svg\";\nvar XMLNS_XLINK_STD = \"http://www.w3.org/1999/xlink\";\nvar XMLNS_XHTML_STD = \"http://www.w3.org/1999/xhtml\";\nvar IFRAME_WIDTH = \"100%\";\nvar IFRAME_HEIGHT = \"100%\";\nvar IFRAME_STYLES = \"border:0;margin:0;\";\nvar IFRAME_BODY_STYLE = \"margin:0\";\nvar IFRAME_SANDBOX_OPTS = \"allow-top-navigation-by-user-activation allow-popups\";\nvar IFRAME_NOT_SUPPORTED_MSG = 'The \"iframe\" tag is not supported by your browser.';\nvar DOMPURIFY_TAGS = [\"foreignobject\"];\nvar DOMPURIFY_ATTR = [\"dominant-baseline\"];\nfunction processAndSetConfigs(text) {\n const processed = preprocessDiagram(text);\n reset();\n addDirective(processed.config ?? {});\n return processed;\n}\n__name(processAndSetConfigs, \"processAndSetConfigs\");\nasync function parse(text, parseOptions) {\n addDiagrams();\n try {\n const { code, config } = processAndSetConfigs(text);\n const diagram2 = await getDiagramFromText(code);\n return { diagramType: diagram2.type, config };\n } catch (error) {\n if (parseOptions?.suppressErrors) {\n return false;\n }\n throw error;\n }\n}\n__name(parse, \"parse\");\nvar cssImportantStyles = /* @__PURE__ */ __name((cssClass, element, cssClasses = []) => {\n return `\n.${cssClass} ${element} { ${cssClasses.join(\" !important; \")} !important; }`;\n}, \"cssImportantStyles\");\nvar createCssStyles = /* @__PURE__ */ __name((config, classDefs = /* @__PURE__ */ new Map()) => {\n let cssStyles = \"\";\n if (config.themeCSS !== void 0) {\n cssStyles += `\n${config.themeCSS}`;\n }\n if (config.fontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-font-family: ${config.fontFamily}}`;\n }\n if (config.altFontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-alt-font-family: ${config.altFontFamily}}`;\n }\n if (classDefs instanceof Map) {\n const htmlLabels = config.htmlLabels ?? config.flowchart?.htmlLabels;\n const cssHtmlElements = [\"> *\", \"span\"];\n const cssShapeElements = [\"rect\", \"polygon\", \"ellipse\", \"circle\", \"path\"];\n const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;\n classDefs.forEach((styleClassDef) => {\n if (!isEmpty(styleClassDef.styles)) {\n cssElements.forEach((cssElement) => {\n cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);\n });\n }\n if (!isEmpty(styleClassDef.textStyles)) {\n cssStyles += cssImportantStyles(\n styleClassDef.id,\n \"tspan\",\n (styleClassDef?.textStyles || []).map((s) => s.replace(\"color\", \"fill\"))\n );\n }\n });\n }\n return cssStyles;\n}, \"createCssStyles\");\nvar createUserStyles = /* @__PURE__ */ __name((config, graphType, classDefs, svgId) => {\n const userCSSstyles = createCssStyles(config, classDefs);\n const allStyles = styles_default(graphType, userCSSstyles, config.themeVariables);\n return serialize(compile(`${svgId}{${allStyles}}`), stringify);\n}, \"createUserStyles\");\nvar cleanUpSvgCode = /* @__PURE__ */ __name((svgCode = \"\", inSandboxMode, useArrowMarkerUrls) => {\n let cleanedUpSvg = svgCode;\n if (!useArrowMarkerUrls && !inSandboxMode) {\n cleanedUpSvg = cleanedUpSvg.replace(\n /marker-end=\"url\\([\\d+./:=?A-Za-z-]*?#/g,\n 'marker-end=\"url(#'\n );\n }\n cleanedUpSvg = decodeEntities(cleanedUpSvg);\n cleanedUpSvg = cleanedUpSvg.replace(/
    /g, \"
    \");\n return cleanedUpSvg;\n}, \"cleanUpSvgCode\");\nvar putIntoIFrame = /* @__PURE__ */ __name((svgCode = \"\", svgElement) => {\n const height = svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + \"px\" : IFRAME_HEIGHT;\n const base64encodedSrc = toBase64(`${svgCode}`);\n return ``;\n}, \"putIntoIFrame\");\nvar appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id28, enclosingDivId, divStyle, svgXlink) => {\n const enclosingDiv = parentRoot.append(\"div\");\n enclosingDiv.attr(\"id\", enclosingDivId);\n if (divStyle) {\n enclosingDiv.attr(\"style\", divStyle);\n }\n const svgNode = enclosingDiv.append(\"svg\").attr(\"id\", id28).attr(\"width\", \"100%\").attr(\"xmlns\", XMLNS_SVG_STD);\n if (svgXlink) {\n svgNode.attr(\"xmlns:xlink\", svgXlink);\n }\n svgNode.append(\"g\");\n return parentRoot;\n}, \"appendDivSvgG\");\nfunction sandboxedIframe(parentNode, iFrameId) {\n return parentNode.append(\"iframe\").attr(\"id\", iFrameId).attr(\"style\", \"width: 100%; height: 100%;\").attr(\"sandbox\", \"\");\n}\n__name(sandboxedIframe, \"sandboxedIframe\");\nvar removeExistingElements = /* @__PURE__ */ __name((doc, id28, divId, iFrameId) => {\n doc.getElementById(id28)?.remove();\n doc.getElementById(divId)?.remove();\n doc.getElementById(iFrameId)?.remove();\n}, \"removeExistingElements\");\nvar render = /* @__PURE__ */ __name(async function(id28, text, svgContainingElement) {\n addDiagrams();\n const processed = processAndSetConfigs(text);\n text = processed.code;\n const config = getConfig();\n log.debug(config);\n if (text.length > (config?.maxTextSize ?? MAX_TEXTLENGTH)) {\n text = MAX_TEXTLENGTH_EXCEEDED_MSG;\n }\n const idSelector = \"#\" + id28;\n const iFrameID = \"i\" + id28;\n const iFrameID_selector = \"#\" + iFrameID;\n const enclosingDivID = \"d\" + id28;\n const enclosingDivID_selector = \"#\" + enclosingDivID;\n const removeTempElements = /* @__PURE__ */ __name(() => {\n const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;\n const node = select(tmpElementSelector).node();\n if (node && \"remove\" in node) {\n node.remove();\n }\n }, \"removeTempElements\");\n let root = select(\"body\");\n const isSandboxed = config.securityLevel === SECURITY_LVL_SANDBOX;\n const isLooseSecurityLevel = config.securityLevel === SECURITY_LVL_LOOSE;\n const fontFamily = config.fontFamily;\n if (svgContainingElement !== void 0) {\n if (svgContainingElement) {\n svgContainingElement.innerHTML = \"\";\n }\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(svgContainingElement), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(svgContainingElement);\n }\n appendDivSvgG(root, id28, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);\n } else {\n removeExistingElements(document, id28, enclosingDivID, iFrameID);\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(\"body\"), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(\"body\");\n }\n appendDivSvgG(root, id28, enclosingDivID);\n }\n let diag;\n let parseEncounteredException;\n try {\n diag = await Diagram.fromText(text, { title: processed.title });\n } catch (error) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n throw error;\n }\n diag = await Diagram.fromText(\"error\");\n parseEncounteredException = error;\n }\n const element = root.select(enclosingDivID_selector).node();\n const diagramType = diag.type;\n const svg = element.firstChild;\n const firstChild = svg.firstChild;\n const diagramClassDefs = diag.renderer.getClasses?.(text, diag);\n const rules = createUserStyles(config, diagramType, diagramClassDefs, idSelector);\n const style1 = document.createElement(\"style\");\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild);\n try {\n await diag.renderer.draw(text, id28, package_default.version, diag);\n } catch (e) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n } else {\n errorRenderer_default.draw(text, id28, package_default.version);\n }\n throw e;\n }\n const svgNode = root.select(`${enclosingDivID_selector} svg`);\n const a11yTitle = diag.db.getAccTitle?.();\n const a11yDescr = diag.db.getAccDescription?.();\n addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);\n root.select(`[id=\"${id28}\"]`).selectAll(\"foreignobject > *\").attr(\"xmlns\", XMLNS_XHTML_STD);\n let svgCode = root.select(enclosingDivID_selector).node().innerHTML;\n log.debug(\"config.arrowMarkerAbsolute\", config.arrowMarkerAbsolute);\n svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config.arrowMarkerAbsolute));\n if (isSandboxed) {\n const svgEl = root.select(enclosingDivID_selector + \" svg\").node();\n svgCode = putIntoIFrame(svgCode, svgEl);\n } else if (!isLooseSecurityLevel) {\n svgCode = DOMPurify.sanitize(svgCode, {\n ADD_TAGS: DOMPURIFY_TAGS,\n ADD_ATTR: DOMPURIFY_ATTR,\n HTML_INTEGRATION_POINTS: { foreignobject: true }\n });\n }\n attachFunctions();\n if (parseEncounteredException) {\n throw parseEncounteredException;\n }\n removeTempElements();\n return {\n diagramType,\n svg: svgCode,\n bindFunctions: diag.db.bindFunctions\n };\n}, \"render\");\nfunction initialize(userOptions = {}) {\n const options = assignWithDepth_default({}, userOptions);\n if (options?.fontFamily && !options.themeVariables?.fontFamily) {\n if (!options.themeVariables) {\n options.themeVariables = {};\n }\n options.themeVariables.fontFamily = options.fontFamily;\n }\n saveConfigFromInitialize(options);\n if (options?.theme && options.theme in themes_default) {\n options.themeVariables = themes_default[options.theme].getThemeVariables(\n options.themeVariables\n );\n } else if (options) {\n options.themeVariables = themes_default.default.getThemeVariables(options.themeVariables);\n }\n const config = typeof options === \"object\" ? setSiteConfig(options) : getSiteConfig();\n setLogLevel(config.logLevel);\n addDiagrams();\n}\n__name(initialize, \"initialize\");\nvar getDiagramFromText = /* @__PURE__ */ __name((text, metadata = {}) => {\n const { code } = preprocessDiagram(text);\n return Diagram.fromText(code, metadata);\n}, \"getDiagramFromText\");\nfunction addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr) {\n setA11yDiagramInfo(svgNode, diagramType);\n addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr(\"id\"));\n}\n__name(addA11yInfo, \"addA11yInfo\");\nvar mermaidAPI = Object.freeze({\n render,\n parse,\n getDiagramFromText,\n initialize,\n getConfig,\n setConfig,\n getSiteConfig,\n updateSiteConfig,\n reset: /* @__PURE__ */ __name(() => {\n reset();\n }, \"reset\"),\n globalReset: /* @__PURE__ */ __name(() => {\n reset(defaultConfig);\n }, \"globalReset\"),\n defaultConfig\n});\nsetLogLevel(getConfig().logLevel);\nreset(getConfig());\n\n// src/mermaid.ts\nvar handleError = /* @__PURE__ */ __name((error, errors, parseError) => {\n log.warn(error);\n if (isDetailedError(error)) {\n if (parseError) {\n parseError(error.str, error.hash);\n }\n errors.push({ ...error, message: error.str, error });\n } else {\n if (parseError) {\n parseError(error);\n }\n if (error instanceof Error) {\n errors.push({\n str: error.message,\n message: error.message,\n hash: error.name,\n error\n });\n }\n }\n}, \"handleError\");\nvar run = /* @__PURE__ */ __name(async function(options = {\n querySelector: \".mermaid\"\n}) {\n try {\n await runThrowsErrors(options);\n } catch (e) {\n if (isDetailedError(e)) {\n log.error(e.str);\n }\n if (mermaid.parseError) {\n mermaid.parseError(e);\n }\n if (!options.suppressErrors) {\n log.error(\"Use the suppressErrors option to suppress these errors\");\n throw e;\n }\n }\n}, \"run\");\nvar runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes } = {\n querySelector: \".mermaid\"\n}) {\n const conf = mermaidAPI.getConfig();\n log.debug(`${!postRenderCallback ? \"No \" : \"\"}Callback function found`);\n let nodesToProcess;\n if (nodes) {\n nodesToProcess = nodes;\n } else if (querySelector) {\n nodesToProcess = document.querySelectorAll(querySelector);\n } else {\n throw new Error(\"Nodes and querySelector are both undefined\");\n }\n log.debug(`Found ${nodesToProcess.length} diagrams`);\n if (conf?.startOnLoad !== void 0) {\n log.debug(\"Start On Load: \" + conf?.startOnLoad);\n mermaidAPI.updateSiteConfig({ startOnLoad: conf?.startOnLoad });\n }\n const idGenerator = new utils_default.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n let txt;\n const errors = [];\n for (const element of Array.from(nodesToProcess)) {\n log.info(\"Rendering diagram: \" + element.id);\n if (element.getAttribute(\"data-processed\")) {\n continue;\n }\n element.setAttribute(\"data-processed\", \"true\");\n const id28 = `mermaid-${idGenerator.next()}`;\n txt = element.innerHTML;\n txt = dedent(utils_default.entityDecode(txt)).trim().replace(//gi, \"
    \");\n const init2 = utils_default.detectInit(txt);\n if (init2) {\n log.debug(\"Detected early reinit: \", init2);\n }\n try {\n const { svg, bindFunctions } = await render2(id28, txt, element);\n element.innerHTML = svg;\n if (postRenderCallback) {\n await postRenderCallback(id28);\n }\n if (bindFunctions) {\n bindFunctions(element);\n }\n } catch (error) {\n handleError(error, errors, mermaid.parseError);\n }\n }\n if (errors.length > 0) {\n throw errors[0];\n }\n}, \"runThrowsErrors\");\nvar initialize2 = /* @__PURE__ */ __name(function(config) {\n mermaidAPI.initialize(config);\n}, \"initialize\");\nvar init = /* @__PURE__ */ __name(async function(config, nodes, callback) {\n log.warn(\"mermaid.init is deprecated. Please use run instead.\");\n if (config) {\n initialize2(config);\n }\n const runOptions = { postRenderCallback: callback, querySelector: \".mermaid\" };\n if (typeof nodes === \"string\") {\n runOptions.querySelector = nodes;\n } else if (nodes) {\n if (nodes instanceof HTMLElement) {\n runOptions.nodes = [nodes];\n } else {\n runOptions.nodes = nodes;\n }\n }\n await run(runOptions);\n}, \"init\");\nvar registerExternalDiagrams = /* @__PURE__ */ __name(async (diagrams, {\n lazyLoad = true\n} = {}) => {\n addDiagrams();\n registerLazyLoadedDiagrams(...diagrams);\n if (lazyLoad === false) {\n await loadRegisteredDiagrams();\n }\n}, \"registerExternalDiagrams\");\nvar contentLoaded = /* @__PURE__ */ __name(function() {\n if (mermaid.startOnLoad) {\n const { startOnLoad } = mermaidAPI.getConfig();\n if (startOnLoad) {\n mermaid.run().catch((err) => log.error(\"Mermaid failed to initialize\", err));\n }\n }\n}, \"contentLoaded\");\nif (typeof document !== \"undefined\") {\n window.addEventListener(\"load\", contentLoaded, false);\n}\nvar setParseErrorHandler = /* @__PURE__ */ __name(function(parseErrorHandler) {\n mermaid.parseError = parseErrorHandler;\n}, \"setParseErrorHandler\");\nvar executionQueue = [];\nvar executionQueueRunning = false;\nvar executeQueue = /* @__PURE__ */ __name(async () => {\n if (executionQueueRunning) {\n return;\n }\n executionQueueRunning = true;\n while (executionQueue.length > 0) {\n const f = executionQueue.shift();\n if (f) {\n try {\n await f();\n } catch (e) {\n log.error(\"Error executing queue\", e);\n }\n }\n }\n executionQueueRunning = false;\n}, \"executeQueue\");\nvar parse2 = /* @__PURE__ */ __name(async (text, parseOptions) => {\n return new Promise((resolve, reject) => {\n const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {\n mermaidAPI.parse(text, parseOptions).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n log.error(\"Error parsing\", e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n }), \"performCall\");\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n}, \"parse\");\nvar render2 = /* @__PURE__ */ __name((id28, text, container) => {\n return new Promise((resolve, reject) => {\n const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {\n mermaidAPI.render(id28, text, container).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n log.error(\"Error parsing\", e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n }), \"performCall\");\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n}, \"render\");\nvar getRegisteredDiagramsMetadata = /* @__PURE__ */ __name(() => {\n return Object.keys(detectors).map((id28) => ({\n id: id28\n }));\n}, \"getRegisteredDiagramsMetadata\");\nvar mermaid = {\n startOnLoad: true,\n mermaidAPI,\n parse: parse2,\n render: render2,\n init,\n run,\n registerExternalDiagrams,\n registerLayoutLoaders,\n initialize: initialize2,\n parseError: void 0,\n contentLoaded,\n setParseErrorHandler,\n detectType,\n registerIconPacks,\n getRegisteredDiagramsMetadata\n};\nvar mermaid_default = mermaid;\nexport {\n mermaid_default as default\n};\n/*! Check if previously processed */\n/*!\n * Wait for document loaded before starting the execution\n */\n","/**\n * Mermaid Preview Component\n *\n * Renders Mermaid diagrams (flowcharts, sequence diagrams, etc.)\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport { GitBranch, AlertCircle, Loader2 } from 'lucide-react';\nimport mermaid from 'mermaid';\n\ninterface MermaidPreviewProps {\n content: string;\n fileName: string;\n}\n\n// Initialize mermaid with dark theme\nmermaid.initialize({\n startOnLoad: false,\n theme: 'dark',\n themeVariables: {\n primaryColor: '#7dcfff',\n primaryTextColor: '#c0caf5',\n primaryBorderColor: '#3b4261',\n lineColor: '#7dcfff',\n secondaryColor: '#bb9af7',\n tertiaryColor: '#292e42',\n background: '#1a1b26',\n mainBkg: '#292e42',\n nodeBorder: '#3b4261',\n clusterBkg: '#24283b',\n titleColor: '#c0caf5',\n edgeLabelBackground: '#24283b',\n },\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n});\n\nexport function MermaidPreview({ content, fileName }: MermaidPreviewProps) {\n const containerRef = useRef(null);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n async function renderDiagram() {\n if (!containerRef.current) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n // Clear previous content\n containerRef.current.innerHTML = '';\n\n // Generate unique ID for this diagram\n const id = `mermaid-${Date.now()}`;\n\n // Render the diagram\n const { svg } = await mermaid.render(id, content);\n\n // Insert the rendered SVG\n if (containerRef.current) {\n containerRef.current.innerHTML = svg;\n }\n } catch (err) {\n console.error('Mermaid rendering error:', err);\n setError(err instanceof Error ? err.message : 'Failed to render diagram');\n } finally {\n setIsLoading(false);\n }\n }\n\n renderDiagram();\n }, [content]);\n\n return (\n
    \n {/* Header */}\n
    \n \n Mermaid Diagram\n - {fileName}\n
    \n\n {/* Diagram container */}\n
    \n {isLoading && (\n
    \n \n Rendering diagram...\n
    \n )}\n\n {error && (\n
    \n \n Failed to render diagram\n {error}\n
    \n              {content}\n            
    \n
    \n )}\n\n \n
    \n
    \n );\n}\n\nexport default MermaidPreview;\n","// Current version.\nexport var VERSION = '1.13.7';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","var isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n","\"use strict\";\nvar es5 = require(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n typeof global !== \"undefined\" ? global :\n this !== undefined ? this : null;\n\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return typeof value === \"function\" ||\n typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function FakeConstructor() {}\n FakeConstructor.prototype = obj;\n var l = 8;\n while (l--) new FakeConstructor();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction isError(obj) {\n return obj !== null &&\n typeof obj === \"object\" &&\n typeof obj.message === \"string\" &&\n typeof obj.name === \"string\";\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n }\n return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n return Array.from(v);\n } : function(v) {\n var ret = [];\n var it = v[Symbol.iterator]();\n var itResult;\n while (!((itResult = it.next()).done)) {\n ret.push(itResult.value);\n }\n return ret;\n };\n\n asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n return ArrayFrom(v);\n }\n return null;\n };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\";\n\nfunction env(key) {\n return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n if (typeof Promise === \"function\") {\n try {\n var promise = new Promise(function(){});\n if ({}.toString.call(promise) === \"[object Promise]\") {\n return Promise;\n }\n } catch (e) {}\n }\n}\n\nfunction domainBind(self, cb) {\n return self.bind(cb);\n}\n\nvar ret = {\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n asArray: asArray,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n isError: isError,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n typeof chrome.loadTimes === \"function\",\n isNode: isNode,\n hasEnvVariables: hasEnvVariables,\n env: env,\n global: globalObject,\n getNativePromise: getNativePromise,\n domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n var version = process.versions.node.split(\".\").map(Number);\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n","\"use strict\";\nvar util = require(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n typeof NativePromise.resolve === \"function\") {\n var nativePromise = NativePromise.resolve();\n schedule = function(fn) {\n nativePromise.then(fn);\n };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n (window.navigator.standalone || window.cordova))) {\n schedule = (function() {\n var div = document.createElement(\"div\");\n var opts = {attributes: true};\n var toggleScheduled = false;\n var div2 = document.createElement(\"div\");\n var o2 = new MutationObserver(function() {\n div.classList.toggle(\"foo\");\n toggleScheduled = false;\n });\n o2.observe(div2, opts);\n\n var scheduleToggle = function() {\n if (toggleScheduled) return;\n toggleScheduled = true;\n div2.classList.toggle(\"foo\");\n };\n\n return function schedule(fn) {\n var o = new MutationObserver(function() {\n o.disconnect();\n fn();\n });\n o.observe(div, opts);\n scheduleToggle();\n };\n })();\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n","\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n","\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule\");\nvar Queue = require(\"./queue\");\nvar util = require(\"./util\");\n\nfunction Async() {\n this._customScheduler = false;\n this._isTickUsed = false;\n this._lateQueue = new Queue(16);\n this._normalQueue = new Queue(16);\n this._haveDrainedQueues = false;\n this._trampolineEnabled = true;\n var self = this;\n this.drainQueues = function () {\n self._drainQueues();\n };\n this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n var prev = this._schedule;\n this._schedule = fn;\n this._customScheduler = true;\n return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n if (util.hasDevTools) {\n this._trampolineEnabled = false;\n }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n if (isNode) {\n process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n \"\\n\");\n process.exit(2);\n } else {\n this.throwLater(e);\n }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n if (arguments.length === 1) {\n arg = fn;\n fn = function () { throw arg; };\n }\n if (typeof setTimeout !== \"undefined\") {\n setTimeout(function() {\n fn(arg);\n }, 0);\n } else try {\n this._schedule(function() {\n fn(arg);\n });\n } catch (e) {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n this._lateQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n this._normalQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n this._normalQueue._pushOne(promise);\n this._queueTick();\n}\n\nif (!util.hasDevTools) {\n Async.prototype.invokeLater = AsyncInvokeLater;\n Async.prototype.invoke = AsyncInvoke;\n Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n Async.prototype.invokeLater = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvokeLater.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n setTimeout(function() {\n fn.call(receiver, arg);\n }, 100);\n });\n }\n };\n\n Async.prototype.invoke = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvoke.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n fn.call(receiver, arg);\n });\n }\n };\n\n Async.prototype.settlePromises = function(promise) {\n if (this._trampolineEnabled) {\n AsyncSettlePromises.call(this, promise);\n } else {\n this._schedule(function() {\n promise._settlePromises();\n });\n }\n };\n}\n\nAsync.prototype._drainQueue = function(queue) {\n while (queue.length() > 0) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n continue;\n }\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n};\n\nAsync.prototype._drainQueues = function () {\n this._drainQueue(this._normalQueue);\n this._reset();\n this._haveDrainedQueues = true;\n this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n","\"use strict\";\nvar es5 = require(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n value: errorTypes,\n writable: false,\n enumerable: false,\n configurable: false\n });\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) return obj;\n var then = getThen(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfill,\n ret._reject,\n undefined,\n ret,\n null\n );\n return ret;\n }\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction doGetThen(obj) {\n return obj.then;\n}\n\nfunction getThen(obj) {\n try {\n return doGetThen(obj);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n try {\n return hasProp.call(obj, \"_promise0\");\n } catch (e) {\n return false;\n }\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x, resolve, reject);\n synchronous = false;\n\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolve(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function reject(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection, Proxyable) {\nvar util = require(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n if (values instanceof Promise) {\n promise._propagateFrom(values, 3);\n }\n promise._setOnCancel(this);\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n var bitField = values._bitField;\n ;\n this._values = values;\n\n if (((bitField & 50397184) === 0)) {\n this._promise._setAsyncGuaranteed();\n return values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n } else if (((bitField & 33554432) !== 0)) {\n values = values._value();\n } else if (((bitField & 16777216) !== 0)) {\n return this._reject(values._reason());\n } else {\n return this._cancel();\n }\n }\n values = util.asArray(values);\n if (values === null) {\n var err = apiRejection(\n \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n this._promise._rejectCallback(err, false);\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var result = this._promise;\n var isResolved = false;\n var bitField = null;\n for (var i = 0; i < len; ++i) {\n var maybePromise = tryConvertToPromise(values[i], result);\n\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n bitField = maybePromise._bitField;\n } else {\n bitField = null;\n }\n\n if (isResolved) {\n if (bitField !== null) {\n maybePromise.suppressUnhandledRejections();\n }\n } else if (bitField !== null) {\n if (((bitField & 50397184) === 0)) {\n maybePromise._proxy(this, i);\n this._values[i] = maybePromise;\n } else if (((bitField & 33554432) !== 0)) {\n isResolved = this._promiseFulfilled(maybePromise._value(), i);\n } else if (((bitField & 16777216) !== 0)) {\n isResolved = this._promiseRejected(maybePromise._reason(), i);\n } else {\n isResolved = this._promiseCancelled(i);\n }\n } else {\n isResolved = this._promiseFulfilled(maybePromise, i);\n }\n }\n if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n if (this._isResolved() || !this._promise._isCancellable()) return;\n this._values = null;\n this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n this._cancel();\n return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n this._totalResolved++;\n this._reject(reason);\n return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n if (this._isResolved()) return;\n var values = this._values;\n this._cancel();\n if (values instanceof Promise) {\n values.cancel();\n } else {\n for (var i = 0; i < values.length; ++i) {\n if (values[i] instanceof Promise) {\n values[i].cancel();\n }\n }\n }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (this._trace !== undefined) {\n this._trace._promiseCreated = null;\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (this._trace !== undefined) {\n var trace = contextStack.pop();\n var ret = trace._promiseCreated;\n trace._promiseCreated = null;\n return ret;\n }\n return null;\n};\n\nfunction createContext() {\n if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n var Promise_pushContext = Promise.prototype._pushContext;\n var Promise_popContext = Promise.prototype._popContext;\n var Promise_PeekContext = Promise._peekContext;\n var Promise_peekContext = Promise.prototype._peekContext;\n var Promise_promiseCreated = Promise.prototype._promiseCreated;\n Context.deactivateLongStackTraces = function() {\n Promise.prototype._pushContext = Promise_pushContext;\n Promise.prototype._popContext = Promise_popContext;\n Promise._peekContext = Promise_PeekContext;\n Promise.prototype._peekContext = Promise_peekContext;\n Promise.prototype._promiseCreated = Promise_promiseCreated;\n longStackTraces = false;\n };\n longStackTraces = true;\n Promise.prototype._pushContext = Context.prototype._pushContext;\n Promise.prototype._popContext = Context.prototype._popContext;\n Promise._peekContext = Promise.prototype._peekContext = peekContext;\n Promise.prototype._promiseCreated = function() {\n var ctx = this._peekContext();\n if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n };\n};\nreturn Context;\n};\n","\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = require(\"./errors\").Warning;\nvar util = require(\"./util\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n (false ||\n util.env(\"BLUEBIRD_DEBUG\") ||\n util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n var target = this._target();\n target._bitField = ((target._bitField & (~1048576)) |\n 524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 524288) !== 0) return;\n this._setRejectionIsUnhandled();\n async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._settledValue();\n this._setUnhandledRejectionIsNotified();\n fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~1048576);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var domain = getDomain();\n possiblyUnhandledRejection =\n typeof fn === \"function\" ? (domain === null ?\n fn : util.domainBind(domain, fn))\n : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var domain = getDomain();\n unhandledRejectionHandled =\n typeof fn === \"function\" ? (domain === null ?\n fn : util.domainBind(domain, fn))\n : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (!config.longStackTraces && longStackTracesIsSupported()) {\n var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n config.longStackTraces = true;\n disableLongStackTraces = function() {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n Context.deactivateLongStackTraces();\n async.enableTrampoline();\n config.longStackTraces = false;\n };\n Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n Context.activateLongStackTraces();\n async.disableTrampolineIfNecessary();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n try {\n if (typeof CustomEvent === \"function\") {\n var event = new CustomEvent(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = new CustomEvent(name.toLowerCase(), {\n detail: event,\n cancelable: true\n });\n return !util.global.dispatchEvent(domEvent);\n };\n } else if (typeof Event === \"function\") {\n var event = new Event(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = new Event(name.toLowerCase(), {\n cancelable: true\n });\n domEvent.detail = event;\n return !util.global.dispatchEvent(domEvent);\n };\n } else {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = document.createEvent(\"CustomEvent\");\n domEvent.initCustomEvent(name.toLowerCase(), false, true,\n event);\n return !util.global.dispatchEvent(domEvent);\n };\n }\n } catch (e) {}\n return function() {\n return false;\n };\n})();\n\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function() {\n return process.emit.apply(process, arguments);\n };\n } else {\n if (!util.global) {\n return function() {\n return false;\n };\n }\n return function(name) {\n var methodName = \"on\" + name.toLowerCase();\n var method = util.global[methodName];\n if (!method) return false;\n method.apply(util.global, [].slice.call(arguments, 1));\n return true;\n };\n }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n promiseCreated: generatePromiseLifecycleEventObject,\n promiseFulfilled: generatePromiseLifecycleEventObject,\n promiseRejected: generatePromiseLifecycleEventObject,\n promiseResolved: generatePromiseLifecycleEventObject,\n promiseCancelled: generatePromiseLifecycleEventObject,\n promiseChained: function(name, promise, child) {\n return {promise: promise, child: child};\n },\n warning: function(name, warning) {\n return {warning: warning};\n },\n unhandledRejection: function (name, reason, promise) {\n return {reason: reason, promise: promise};\n },\n rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent.apply(null, arguments);\n } catch (e) {\n async.throwLater(e);\n globalEventFired = true;\n }\n\n var domEventFired = false;\n try {\n domEventFired = fireDomEvent(name,\n eventToObjectGenerator[name].apply(null, arguments));\n } catch (e) {\n async.throwLater(e);\n domEventFired = true;\n }\n\n return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n opts = Object(opts);\n if (\"longStackTraces\" in opts) {\n if (opts.longStackTraces) {\n Promise.longStackTraces();\n } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n disableLongStackTraces();\n }\n }\n if (\"warnings\" in opts) {\n var warningsOption = opts.warnings;\n config.warnings = !!warningsOption;\n wForgottenReturn = config.warnings;\n\n if (util.isObject(warningsOption)) {\n if (\"wForgottenReturn\" in warningsOption) {\n wForgottenReturn = !!warningsOption.wForgottenReturn;\n }\n }\n }\n if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n if (async.haveItemsQueued()) {\n throw new Error(\n \"cannot enable cancellation after promises are in use\");\n }\n Promise.prototype._clearCancellationData =\n cancellationClearCancellationData;\n Promise.prototype._propagateFrom = cancellationPropagateFrom;\n Promise.prototype._onCancel = cancellationOnCancel;\n Promise.prototype._setOnCancel = cancellationSetOnCancel;\n Promise.prototype._attachCancellationCallback =\n cancellationAttachCancellationCallback;\n Promise.prototype._execute = cancellationExecute;\n propagateFromFunction = cancellationPropagateFrom;\n config.cancellation = true;\n }\n if (\"monitoring\" in opts) {\n if (opts.monitoring && !config.monitoring) {\n config.monitoring = true;\n Promise.prototype._fireEvent = activeFireEvent;\n } else if (!opts.monitoring && config.monitoring) {\n config.monitoring = false;\n Promise.prototype._fireEvent = defaultFireEvent;\n }\n }\n return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n try {\n executor(resolve, reject);\n } catch (e) {\n return e;\n }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n ;\n ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n var promise = this;\n try {\n executor(resolve, reject, function(onCancel) {\n if (typeof onCancel !== \"function\") {\n throw new TypeError(\"onCancel must be a function, got: \" +\n util.toString(onCancel));\n }\n promise._attachCancellationCallback(onCancel);\n });\n } catch (e) {\n return e;\n }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n if (!this._isCancellable()) return this;\n\n var previousOnCancel = this._onCancel();\n if (previousOnCancel !== undefined) {\n if (util.isArray(previousOnCancel)) {\n previousOnCancel.push(onCancel);\n } else {\n this._setOnCancel([previousOnCancel, onCancel]);\n }\n } else {\n this._setOnCancel(onCancel);\n }\n}\n\nfunction cancellationOnCancel() {\n return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n this._cancellationParent = undefined;\n this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n if ((flags & 1) !== 0) {\n this._cancellationParent = parent;\n var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n if (branchesRemainingToCancel === undefined) {\n branchesRemainingToCancel = 0;\n }\n parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n }\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n if (canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n parent) {\n if (returnValue === undefined && promiseCreated !== null &&\n wForgottenReturn) {\n if (parent !== undefined && parent._returnedNonUndefined()) return;\n if ((promise._bitField & 65535) === 0) return;\n\n if (name) name = name + \" \";\n var handlerLine = \"\";\n var creatorLine = \"\";\n if (promiseCreated._trace) {\n var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n var stack = cleanStack(traceLines);\n for (var i = stack.length - 1; i >= 0; --i) {\n var line = stack[i];\n if (!nodeFramePattern.test(line)) {\n var lineMatches = line.match(parseLinePattern);\n if (lineMatches) {\n handlerLine = \"at \" + lineMatches[1] +\n \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n }\n break;\n }\n }\n\n if (stack.length > 0) {\n var firstUserLine = stack[0];\n for (var i = 0; i < traceLines.length; ++i) {\n\n if (traceLines[i] === firstUserLine) {\n if (i > 0) {\n creatorLine = \"\\n\" + traceLines[i - 1];\n }\n break;\n }\n }\n\n }\n }\n var msg = \"a promise was created in a \" + name +\n \"handler \" + handlerLine + \"but was not returned from it, \" +\n \"see http://goo.gl/rRqMUw\" +\n creatorLine;\n promise._warn(msg, true, promiseCreated);\n }\n}\n\nfunction deprecated(name, replacement) {\n var message = name +\n \" is deprecated and will be removed in a future version.\";\n if (replacement) message += \" Use \" + replacement + \" instead.\";\n return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n if (!config.warnings) return;\n var warning = new Warning(message);\n var ctx;\n if (shouldUseOwnTrace) {\n promise._attachExtraTrace(warning);\n } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n\n if (!activeFireEvent(\"warning\", warning)) {\n formatAndLogError(warning, \"\", true);\n }\n}\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = \" (No stack trace)\" === line ||\n stackFramePattern.test(line);\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0 && error.name != \"SyntaxError\") {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nfunction parseStackAndMessage(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n if (typeof console !== \"undefined\") {\n var message;\n if (util.isObject(error)) {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof printWarning === \"function\") {\n printWarning(message, isSoft);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n if (name === \"unhandledRejection\") {\n if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n formatAndLogError(reason, \"Unhandled rejection \");\n }\n } else {\n activeFireEvent(name, promise);\n }\n}\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj && typeof obj.toString === \"function\"\n ? obj.toString() : util.toString(obj);\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n if (!longStackTracesIsSupported()) return;\n var firstStackLines = firstLineError.stack.split(\"\\n\");\n var lastStackLines = lastLineError.stack.split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n this._promisesCreated = 0;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit += 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit += 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit -= 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit += 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit -= 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n printWarning = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n printWarning = function(message, isSoft) {\n var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n console.warn(color + message + \"\\u001b[0m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n printWarning = function(message, isSoft) {\n console.warn(\"%c\" + message,\n isSoft ? \"color: darkorange\" : \"color: red\");\n };\n }\n}\n\nvar config = {\n warnings: warnings,\n longStackTraces: false,\n cancellation: false,\n monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n longStackTraces: function() {\n return config.longStackTraces;\n },\n warnings: function() {\n return config.warnings;\n },\n cancellation: function() {\n return config.cancellation;\n },\n monitoring: function() {\n return config.monitoring;\n },\n propagateFromFunction: function() {\n return propagateFromFunction;\n },\n boundValueFunction: function() {\n return boundValueFunction;\n },\n checkForgottenReturns: checkForgottenReturns,\n setBounds: setBounds,\n warn: warn,\n deprecated: deprecated,\n CapturedTrace: CapturedTrace,\n fireDomEvent: fireDomEvent,\n fireGlobalEvent: fireGlobalEvent\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise) {\nvar util = require(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n this.promise = promise;\n this.type = type;\n this.handler = handler;\n this.called = false;\n this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n if (ctx.cancelPromise != null) {\n if (arguments.length > 1) {\n ctx.cancelPromise._reject(reason);\n } else {\n ctx.cancelPromise._cancel();\n }\n ctx.cancelPromise = null;\n return true;\n }\n return false;\n}\n\nfunction succeed() {\n return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n if (checkCancel(this, reason)) return;\n errorObj.e = reason;\n return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n if (!this.called) {\n this.called = true;\n var ret = this.isFinallyHandler()\n ? handler.call(promise._boundValue())\n : handler.call(promise._boundValue(), reasonOrValue);\n if (ret !== undefined) {\n promise._setReturnedNonUndefined();\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n if (this.cancelPromise != null) {\n if (maybePromise._isCancelled()) {\n var reason =\n new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n errorObj.e = reason;\n return errorObj;\n } else if (maybePromise.isPending()) {\n maybePromise._attachCancellationCallback(\n new FinallyHandlerCancelReaction(this));\n }\n }\n return maybePromise._then(\n succeed, fail, undefined, this, undefined);\n }\n }\n }\n\n if (promise.isRejected()) {\n checkCancel(this);\n errorObj.e = reasonOrValue;\n return errorObj;\n } else {\n checkCancel(this);\n return reasonOrValue;\n }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n if (typeof handler !== \"function\") return this.then();\n return this._then(success,\n fail,\n undefined,\n new PassThroughHandlerContext(this, type, handler),\n undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThrough(handler,\n 0,\n finallyHandler,\n finallyHandler);\n};\n\nPromise.prototype.tap = function (handler) {\n return this._passThrough(handler, 1, finallyHandler);\n};\n\nreturn PassThroughHandlerContext;\n};\n","\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util\");\nvar getKeys = require(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n return function(e) {\n var boundTo = promise._boundValue();\n predicateLoop: for (var i = 0; i < instances.length; ++i) {\n var item = instances[i];\n\n if (item === Error ||\n (item != null && item.prototype instanceof Error)) {\n if (e instanceof item) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (typeof item === \"function\") {\n var matchesPredicate = tryCatch(item).call(boundTo, e);\n if (matchesPredicate === errorObj) {\n return matchesPredicate;\n } else if (matchesPredicate) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (util.isObject(e)) {\n var keys = getKeys(item);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n if (item[key] != e[key]) {\n continue predicateLoop;\n }\n }\n return tryCatch(cb).call(boundTo, e);\n }\n }\n return NEXT_FILTER;\n };\n}\n\nreturn catchFilter;\n};\n","\"use strict\";\nvar util = require(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = require(\"./es5\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n return function(err, value) {\n if (promise === null) return;\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (!multiArgs) {\n promise._fulfill(value);\n } else {\n var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n promise._fulfill(args);\n }\n promise = null;\n };\n}\n\nmodule.exports = nodebackForPromise;\n","\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.method\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value;\n if (arguments.length > 1) {\n debug.deprecated(\"calling Promise.try with more than 1 argument\");\n var arg = arguments[1];\n var ctx = arguments[2];\n value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n : tryCatch(fn).call(ctx, arg);\n } else {\n value = tryCatch(fn)();\n }\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.try\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (((this._bitField & 50397184) === 0)) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n if (!calledBind) {\n calledBind = true;\n Promise.prototype._propagateFrom = debug.propagateFromFunction();\n Promise.prototype._boundValue = debug.boundValueFunction();\n }\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, undefined, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, undefined, ret, context);\n ret._setOnCancel(maybePromise);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 2097152;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~2097152);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n return Promise.resolve(value).bind(thisArg);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n var promise = this;\n var child = promise;\n while (promise._isCancellable()) {\n if (!promise._cancelBy(child)) {\n if (child._isFollowing()) {\n child._followee().cancel();\n } else {\n child._cancelBranched();\n }\n break;\n }\n\n var parent = promise._cancellationParent;\n if (parent == null || !parent._isCancellable()) {\n if (promise._isFollowing()) {\n promise._followee().cancel();\n } else {\n promise._cancelBranched();\n }\n break;\n } else {\n if (promise._isFollowing()) promise._followee().cancel();\n promise._setWillBeCancelled();\n child = promise;\n promise = parent;\n }\n }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n return this._branchesRemainingToCancel === undefined ||\n this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n if (canceller === this) {\n this._branchesRemainingToCancel = 0;\n this._invokeOnCancel();\n return true;\n } else {\n this._branchHasCancelled();\n if (this._enoughBranchesHaveCancelled()) {\n this._invokeOnCancel();\n return true;\n }\n }\n return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n if (this._enoughBranchesHaveCancelled()) {\n this._cancel();\n }\n};\n\nPromise.prototype._cancel = function() {\n if (!this._isCancellable()) return;\n this._setCancelled();\n async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n if (util.isArray(onCancelCallback)) {\n for (var i = 0; i < onCancelCallback.length; ++i) {\n this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n }\n } else if (onCancelCallback !== undefined) {\n if (typeof onCancelCallback === \"function\") {\n if (!internalOnly) {\n var e = tryCatch(onCancelCallback).call(this._boundValue());\n if (e === errorObj) {\n this._attachExtraTrace(e.e);\n async.throwLater(e.e);\n }\n }\n } else {\n onCancelCallback._resultCancelled(this);\n }\n }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n var onCancelCallback = this._onCancel();\n this._unsetOnCancel();\n async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n if (this._isCancellable()) {\n this._doInvokeOnCancel(this._onCancel(), true);\n this._unsetOnCancel();\n }\n};\n\nPromise.prototype._resultCancelled = function() {\n this.cancel();\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n return this.value;\n}\nfunction thrower() {\n throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n return this._then(\n thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n if (arguments.length <= 1) {\n return this._then(\n undefined, thrower, undefined, {reason: reason}, undefined);\n } else {\n var _reason = arguments[1];\n var handler = function() {throw _reason;};\n return this.caught(reason, handler);\n }\n};\n\nPromise.prototype.catchReturn = function (value) {\n if (arguments.length <= 1) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n undefined, returner, undefined, {value: value}, undefined);\n } else {\n var _value = arguments[1];\n if (_value instanceof Promise) _value.suppressUnhandledRejections();\n var handler = function() {return _value;};\n return this.caught(value, handler);\n }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValueField = promise._isFateSealed()\n ? promise._settledValue() : undefined;\n }\n else {\n this._bitField = 0;\n this._settledValueField = undefined;\n }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n target._unsetRejectionIsUnhandled();\n return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n getDomain) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n var thenCallback = function(i) {\n return new Function(\"value\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = value; \\n\\\n holder.checkFulfillment(this); \\n\\\n \".replace(/Index/g, i));\n };\n\n var promiseSetter = function(i) {\n return new Function(\"promise\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = promise; \\n\\\n \".replace(/Index/g, i));\n };\n\n var generateHolderClass = function(total) {\n var props = new Array(total);\n for (var i = 0; i < props.length; ++i) {\n props[i] = \"this.p\" + (i+1);\n }\n var assignment = props.join(\" = \") + \" = null;\";\n var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n return \" \\n\\\n promise = \" + prop + \"; \\n\\\n if (promise instanceof Promise) { \\n\\\n promise.cancel(); \\n\\\n } \\n\\\n \";\n }).join(\"\\n\");\n var passedArguments = props.join(\", \");\n var name = \"Holder$\" + total;\n\n\n var code = \"return function(tryCatch, errorObj, Promise, async) { \\n\\\n 'use strict'; \\n\\\n function [TheName](fn) { \\n\\\n [TheProperties] \\n\\\n this.fn = fn; \\n\\\n this.asyncNeeded = true; \\n\\\n this.now = 0; \\n\\\n } \\n\\\n \\n\\\n [TheName].prototype._callFunction = function(promise) { \\n\\\n promise._pushContext(); \\n\\\n var ret = tryCatch(this.fn)([ThePassedArguments]); \\n\\\n promise._popContext(); \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(ret.e, false); \\n\\\n } else { \\n\\\n promise._resolveCallback(ret); \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype.checkFulfillment = function(promise) { \\n\\\n var now = ++this.now; \\n\\\n if (now === [TheTotal]) { \\n\\\n if (this.asyncNeeded) { \\n\\\n async.invoke(this._callFunction, this, promise); \\n\\\n } else { \\n\\\n this._callFunction(promise); \\n\\\n } \\n\\\n \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype._resultCancelled = function() { \\n\\\n [CancellationCode] \\n\\\n }; \\n\\\n \\n\\\n return [TheName]; \\n\\\n }(tryCatch, errorObj, Promise, async); \\n\\\n \";\n\n code = code.replace(/\\[TheName\\]/g, name)\n .replace(/\\[TheTotal\\]/g, total)\n .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n .replace(/\\[TheProperties\\]/g, assignment)\n .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n (tryCatch, errorObj, Promise, async);\n };\n\n var holderClasses = [];\n var thenCallbacks = [];\n var promiseSetters = [];\n\n for (var i = 0; i < 8; ++i) {\n holderClasses.push(generateHolderClass(i + 1));\n thenCallbacks.push(thenCallback(i + 1));\n promiseSetters.push(promiseSetter(i + 1));\n }\n\n reject = function (reason) {\n this._reject(reason);\n };\n}}\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (!false) {\n if (last <= 8 && canEvaluate) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var HolderClass = holderClasses[last - 1];\n var holder = new HolderClass(fn);\n var callbacks = thenCallbacks;\n\n for (var i = 0; i < last; ++i) {\n var maybePromise = tryConvertToPromise(arguments[i], ret);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n maybePromise._then(callbacks[i], reject,\n undefined, ret, holder);\n promiseSetters[i](maybePromise, holder);\n holder.asyncNeeded = false;\n } else if (((bitField & 33554432) !== 0)) {\n callbacks[i].call(ret,\n maybePromise._value(), holder);\n } else if (((bitField & 16777216) !== 0)) {\n ret._reject(maybePromise._reason());\n } else {\n ret._cancel();\n }\n } else {\n callbacks[i].call(ret, maybePromise, holder);\n }\n }\n\n if (!ret._isFateSealed()) {\n if (holder.asyncNeeded) {\n var domain = getDomain();\n if (domain !== null) {\n holder.fn = util.domainBind(domain, holder.fn);\n }\n }\n ret._setAsyncGuaranteed();\n ret._setOnCancel(holder);\n }\n return ret;\n }\n }\n }\n var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];};\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var domain = getDomain();\n this._callback = domain === null ? fn : util.domainBind(domain, fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = [];\n async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n\n if (index < 0) {\n index = (index * -1) - 1;\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return true;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return false;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var promise = this._promise;\n var callback = this._callback;\n var receiver = promise._boundValue();\n promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n promise\n );\n if (ret === errorObj) {\n this._reject(ret.e);\n return true;\n }\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n if (limit >= 1) this._inFlight++;\n values[index] = maybePromise;\n maybePromise._proxy(this, (index + 1) * -1);\n return false;\n } else if (((bitField & 33554432) !== 0)) {\n ret = maybePromise._value();\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(maybePromise._reason());\n return true;\n } else {\n this._cancel();\n return true;\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n return true;\n }\n return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n\n var limit = 0;\n if (options !== undefined) {\n if (typeof options === \"object\" && options !== null) {\n if (typeof options.concurrency !== \"number\") {\n return Promise.reject(\n new TypeError(\"'concurrency' must be a number but it is \" +\n util.classString(options.concurrency)));\n }\n limit = options.concurrency;\n } else {\n return Promise.reject(new TypeError(\n \"options argument must be an object but it is \" +\n util.classString(options)));\n }\n }\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n return map(promises, fn, options, _filter);\n};\n\n\n};\n","\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n return new Function(\"ensureMethod\", \" \\n\\\n return function(obj) { \\n\\\n 'use strict' \\n\\\n var len = this.length; \\n\\\n ensureMethod(obj, 'methodName'); \\n\\\n switch(len) { \\n\\\n case 1: return obj.methodName(this[0]); \\n\\\n case 2: return obj.methodName(this[0], this[1]); \\n\\\n case 3: return obj.methodName(this[0], this[1], this[2]); \\n\\\n case 0: return obj.methodName(); \\n\\\n default: \\n\\\n return obj.methodName.apply(obj, this); \\n\\\n } \\n\\\n }; \\n\\\n \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n return new Function(\"obj\", \" \\n\\\n 'use strict'; \\n\\\n return obj.propertyName; \\n\\\n \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n var ret = cache[name];\n if (typeof ret !== \"function\") {\n if (!isIdentifier(name)) {\n return null;\n }\n ret = compiler(name);\n cache[name] = ret;\n cache[\" size\"]++;\n if (cache[\" size\"] > 512) {\n var keys = Object.keys(cache);\n for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n cache[\" size\"] = keys.length - 256;\n }\n }\n return ret;\n};\n\ngetMethodCaller = function(name) {\n return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n if (!false) {\n if (canEvaluate) {\n var maybeCaller = getMethodCaller(methodName);\n if (maybeCaller !== null) {\n return this._then(\n maybeCaller, undefined, undefined, args, undefined);\n }\n }\n }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n","\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext, INTERNAL, debug) {\n var util = require(\"./util\");\n var TypeError = require(\"./errors\").TypeError;\n var inherits = require(\"./util\").inherits;\n var errorObj = util.errorObj;\n var tryCatch = util.tryCatch;\n var NULL = {};\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = new Promise(INTERNAL);\n function iterator() {\n if (i >= len) return ret._fulfill();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret;\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return NULL;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== NULL\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n function ResourceList(length) {\n this.length = length;\n this.promise = null;\n this[length-1] = null;\n }\n\n ResourceList.prototype._resultCancelled = function() {\n var len = this.length;\n for (var i = 0; i < len; ++i) {\n var item = this[i];\n if (item instanceof Promise) {\n item.cancel();\n }\n }\n };\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var input;\n var spreadArgs = true;\n if (len === 2 && Array.isArray(arguments[0])) {\n input = arguments[0];\n len = input.length;\n spreadArgs = false;\n } else {\n input = arguments;\n len--;\n }\n var resources = new ResourceList(len);\n for (var i = 0; i < len; ++i) {\n var resource = input[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var reflectedResources = new Array(resources.length);\n for (var i = 0; i < reflectedResources.length; ++i) {\n reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n }\n\n var resultPromise = Promise.all(reflectedResources)\n .then(function(inspections) {\n for (var i = 0; i < inspections.length; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n errorObj.e = inspection.error();\n return errorObj;\n } else if (!inspection.isFulfilled()) {\n resultPromise.cancel();\n return;\n }\n inspections[i] = inspection.value();\n }\n promise._pushContext();\n\n fn = tryCatch(fn);\n var ret = spreadArgs\n ? fn.apply(undefined, inspections) : fn(inspections);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret, promiseCreated, \"Promise.using\", promise);\n return ret;\n });\n\n var promise = resultPromise.lastly(function() {\n var inspection = new Promise.PromiseInspection(resultPromise);\n return dispose(resources, inspection);\n });\n resources.promise = promise;\n promise._setOnCancel(resources);\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 131072;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 131072) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~131072);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = require(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle) {\n this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n var ret;\n var handle;\n if (value !== undefined) {\n ret = Promise.resolve(value)\n ._then(afterValue, null, null, ms, undefined);\n if (debug.cancellation() && value instanceof Promise) {\n ret._setOnCancel(value);\n }\n } else {\n ret = new Promise(INTERNAL);\n handle = setTimeout(function() { ret._fulfill(); }, +ms);\n if (debug.cancellation()) {\n ret._setOnCancel(new HandleWrapper(handle));\n }\n ret._captureStackTrace();\n }\n ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n var err;\n if (typeof message !== \"string\") {\n if (message instanceof Error) {\n err = message;\n } else {\n err = new TimeoutError(\"operation timed out\");\n }\n } else {\n err = new TimeoutError(message);\n }\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._reject(err);\n\n if (parent != null) {\n parent.cancel();\n }\n};\n\nfunction successClear(value) {\n clearTimeout(this.handle);\n return value;\n}\n\nfunction failureClear(reason) {\n clearTimeout(this.handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret, parent;\n\n var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n if (ret.isPending()) {\n afterTimeout(ret, message, parent);\n }\n }, ms));\n\n if (debug.cancellation()) {\n parent = this.then();\n ret = parent._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n ret._setOnCancel(handleWrapper);\n } else {\n ret = this._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n }\n\n return ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise,\n Proxyable,\n debug) {\nvar errors = require(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n if (debug.cancellation()) {\n var internal = new Promise(INTERNAL);\n var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n this._promise = internal.lastly(function() {\n return _finallyPromise;\n });\n internal._captureStackTrace();\n internal._setOnCancel(this);\n } else {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n }\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n this._yieldedPromise = null;\n this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n this._promise = this._generator = null;\n if (debug.cancellation() && this._finallyPromise !== null) {\n this._finallyPromise._fulfill();\n this._finallyPromise = null;\n }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n if (this._isResolved()) return;\n var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n var result;\n if (!implementsReturn) {\n var reason = new Promise.CancellationError(\n \"generator .return() sentinel\");\n Promise.coroutine.returnSentinel = reason;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n reason);\n this._promise._popContext();\n } else {\n this._promise._pushContext();\n result = tryCatch(this._generator[\"return\"]).call(this._generator,\n undefined);\n this._promise._popContext();\n }\n this._cancellationPhase = true;\n this._yieldedPromise = null;\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n this._yieldedPromise = null;\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n this._yieldedPromise = null;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n if (this._yieldedPromise instanceof Promise) {\n var promise = this._yieldedPromise;\n this._yieldedPromise = null;\n promise.cancel();\n }\n};\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n var promise = this._promise;\n if (result === errorObj) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._rejectCallback(result.e, false);\n }\n }\n\n var value = result.value;\n if (result.done === true) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._resolveCallback(value);\n }\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._promiseRejected(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", value) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n this._yieldedPromise = maybePromise;\n maybePromise._proxy(this, null);\n } else if (((bitField & 33554432) !== 0)) {\n Promise._async.invoke(\n this._promiseFulfilled, this, maybePromise._value()\n );\n } else if (((bitField & 16777216) !== 0)) {\n Promise._async.invoke(\n this._promiseRejected, this, maybePromise._reason()\n );\n } else {\n this._promiseCancelled();\n }\n }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n var ret = spawn.promise();\n spawn._generator = generator;\n spawn._promiseFulfilled(undefined);\n return ret;\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var newReason = new Error(reason + \"\");\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util\");\nvar nodebackForPromise = require(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n var ret = [likelyArgumentCount];\n var min = Math.max(0, likelyArgumentCount - 1 - 3);\n for(var i = likelyArgumentCount - 1; i >= min; --i) {\n ret.push(i);\n }\n for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n ret.push(i);\n }\n return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n return util.filledRange(\n Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n if (typeof fn.length === \"number\") {\n return Math.max(Math.min(fn.length, 1023 + 1), 0);\n }\n return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n function generateCallForArgumentCount(count) {\n var args = argumentSequence(count).join(\", \");\n var comma = count > 0 ? \", \" : \"\";\n var ret;\n if (shouldProxyThis) {\n ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n } else {\n ret = receiver === undefined\n ? \"ret = callback({{args}}, nodeback); break;\\n\"\n : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n }\n return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n }\n\n function generateArgumentSwitchCase() {\n var ret = \"\";\n for (var i = 0; i < argumentOrder.length; ++i) {\n ret += \"case \" + argumentOrder[i] +\":\" +\n generateCallForArgumentCount(argumentOrder[i]);\n }\n\n ret += \" \\n\\\n default: \\n\\\n var args = new Array(len + 1); \\n\\\n var i = 0; \\n\\\n for (var i = 0; i < len; ++i) { \\n\\\n args[i] = arguments[i]; \\n\\\n } \\n\\\n args[i] = nodeback; \\n\\\n [CodeForCall] \\n\\\n break; \\n\\\n \".replace(\"[CodeForCall]\", (shouldProxyThis\n ? \"ret = callback.apply(this, args);\\n\"\n : \"ret = callback.apply(receiver, args);\\n\"));\n return ret;\n }\n\n var getFunctionCode = typeof callback === \"string\"\n ? (\"this != null ? this['\"+callback+\"'] : fn\")\n : \"fn\";\n var body = \"'use strict'; \\n\\\n var ret = function (Parameters) { \\n\\\n 'use strict'; \\n\\\n var len = arguments.length; \\n\\\n var promise = new Promise(INTERNAL); \\n\\\n promise._captureStackTrace(); \\n\\\n var nodeback = nodebackForPromise(promise, \" + multiArgs + \"); \\n\\\n var ret; \\n\\\n var callback = tryCatch([GetFunctionCode]); \\n\\\n switch(len) { \\n\\\n [CodeForSwitchCase] \\n\\\n } \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n } \\n\\\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \\n\\\n return promise; \\n\\\n }; \\n\\\n notEnumerableProp(ret, '__isPromisified__', true); \\n\\\n return ret; \\n\\\n \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n .replace(\"[GetFunctionCode]\", getFunctionCode);\n body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n return new Function(\"Promise\",\n \"fn\",\n \"receiver\",\n \"withAppended\",\n \"maybeWrapAsError\",\n \"nodebackForPromise\",\n \"tryCatch\",\n \"errorObj\",\n \"notEnumerableProp\",\n \"INTERNAL\",\n body)(\n Promise,\n fn,\n receiver,\n withAppended,\n maybeWrapAsError,\n nodebackForPromise,\n util.tryCatch,\n util.errorObj,\n util.notEnumerableProp,\n INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise, multiArgs);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n if (promisifier === makeNodePromisified) {\n obj[promisifiedKey] =\n makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n } else {\n var promisified = promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key,\n fn, suffix, multiArgs);\n });\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n obj[promisifiedKey] = promisified;\n }\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n return makeNodePromisified(callback, receiver, undefined,\n callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n if (isPromisified(fn)) {\n return fn;\n }\n options = Object(options);\n var receiver = options.context === undefined ? THIS : options.context;\n var multiArgs = !!options.multiArgs;\n var ret = promisify(fn, receiver, multiArgs);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n options = Object(options);\n var multiArgs = !!options.multiArgs;\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier,\n multiArgs);\n promisifyAll(value, suffix, filter, promisifier, multiArgs);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n","\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n var index = 0;\n var size = 0;\n\n function extractEntry(value, key) {\n this[index] = value;\n this[index + size] = key;\n index++;\n }\n\n return function mapToEntries(map) {\n size = map.size;\n index = 0;\n var ret = new Array(map.size * 2);\n map.forEach(extractEntry, ret);\n return ret;\n };\n})();\n\nvar entriesToMap = function(entries) {\n var ret = new Es6Map();\n var length = entries.length / 2 | 0;\n for (var i = 0; i < length; ++i) {\n var key = entries[length + i];\n var value = entries[i];\n ret.set(key, value);\n }\n return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n var isMap = false;\n var entries;\n if (Es6Map !== undefined && obj instanceof Es6Map) {\n entries = mapToEntries(obj);\n isMap = true;\n } else {\n var keys = es5.keys(obj);\n var len = keys.length;\n entries = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n entries[i] = obj[key];\n entries[i + len] = key;\n }\n }\n this.constructor$(entries);\n this._isMap = isMap;\n this._init$(undefined, -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val;\n if (this._isMap) {\n val = entriesToMap(this._values);\n } else {\n val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n }\n this._resolve(val);\n return true;\n }\n return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 2);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n","\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else {\n promises = util.asArray(promises);\n if (promises === null)\n return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 3);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n this.constructor$(promises);\n var domain = getDomain();\n this._fn = domain === null ? fn : util.domainBind(domain, fn);\n if (initialValue !== undefined) {\n initialValue = Promise.resolve(initialValue);\n initialValue._attachCancellationCallback(this);\n }\n this._initialValue = initialValue;\n this._currentCancellable = null;\n if(_each === INTERNAL) {\n this._eachValues = Array(this._length);\n } else if (_each === 0) {\n this._eachValues = null;\n } else {\n this._eachValues = undefined;\n }\n this._promise._captureStackTrace();\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n if (this._eachValues !== undefined && \n this._eachValues !== null && \n accum !== INTERNAL) {\n this._eachValues.push(accum);\n }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n if (this._eachValues !== null) {\n this._eachValues.push(value);\n }\n return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n this._resolve(this._eachValues !== undefined ? this._eachValues\n : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n this._promise._resolveCallback(value);\n this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n if (sender === this._initialValue) return this._cancel();\n if (this._isResolved()) return;\n this._resultCancelled$();\n if (this._currentCancellable instanceof Promise) {\n this._currentCancellable.cancel();\n }\n if (this._initialValue instanceof Promise) {\n this._initialValue.cancel();\n }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n this._values = values;\n var value;\n var i;\n var length = values.length;\n if (this._initialValue !== undefined) {\n value = this._initialValue;\n i = 0;\n } else {\n value = Promise.resolve(values[0]);\n i = 1;\n }\n\n this._currentCancellable = value;\n\n if (!value.isRejected()) {\n for (; i < length; ++i) {\n var ctx = {\n accum: null,\n value: values[i],\n index: i,\n length: length,\n array: this\n };\n value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n }\n }\n\n if (this._eachValues !== undefined) {\n value = value\n ._then(this._eachComplete, undefined, undefined, this, undefined);\n }\n value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n if (this.isFulfilled()) {\n array._resolve(valueOrReason);\n } else {\n array._reject(valueOrReason);\n }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nfunction gotAccum(accum) {\n this.accum = accum;\n this.array._gotAccum(accum);\n var value = tryConvertToPromise(this.value, this.array._promise);\n if (value instanceof Promise) {\n this.array._currentCancellable = value;\n return value._then(gotValue, undefined, undefined, this, undefined);\n } else {\n return gotValue.call(this, value);\n }\n}\n\nfunction gotValue(value) {\n var array = this.array;\n var promise = array._promise;\n var fn = tryCatch(array._fn);\n promise._pushContext();\n var ret;\n if (array._eachValues !== undefined) {\n ret = fn.call(promise._boundValue(), value, this.index, this.length);\n } else {\n ret = fn.call(promise._boundValue(),\n this.accum, value, this.index, this.length);\n }\n if (ret instanceof Promise) {\n array._currentCancellable = ret;\n }\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n promise\n );\n return ret;\n}\n};\n","\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 33554432;\n ret._settledValueField = value;\n return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 16777216;\n ret._settledValueField = reason;\n return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n debug.deprecated(\".settle()\", \".reflect()\");\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return Promise.settle(this);\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util\");\nvar RangeError = require(\"./errors\").RangeError;\nvar AggregateError = require(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n return true;\n }\n return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n if (this._values instanceof Promise || this._values == null) {\n return this._cancel();\n }\n this._addRejected(CANCELLATION);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n if (this._values[i] !== CANCELLATION) {\n e.push(this._values[i]);\n }\n }\n if (e.length > 0) {\n this._reject(e);\n } else {\n this._cancel();\n }\n return true;\n }\n return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(1);\n ret.setUnwrap();\n ret.init();\n return promise;\n}\n\nPromise.any = function (promises) {\n return any(promises);\n};\n\nPromise.prototype.any = function () {\n return any(this);\n};\n\n};\n","\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = require(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n getDomain = function() {\n var ret = process.domain;\n if (ret === undefined) ret = null;\n return ret;\n };\n} else {\n getDomain = function() {\n return null;\n };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = require(\"./es5\");\nvar Async = require(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = require(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = require(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n require(\"./promise_array\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection, Proxyable);\nvar Context = require(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = require(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n require(\"./finally\")(Promise, tryConvertToPromise);\nvar catchFilter = require(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = require(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n if (typeof executor !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n }\n if (self.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n}\n\nfunction Promise(executor) {\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n if (executor !== INTERNAL) {\n check(this, executor);\n this._resolveFromExecutor(executor);\n }\n this._promiseCreated();\n this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return apiRejection(\"expecting an object but got \" +\n \"A catch statement predicate \" + util.classString(item));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n return this.then(undefined, catchFilter(catchInstances, fn, this));\n }\n return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflectHandler,\n reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n if (debug.warnings() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n var promise =\n this._then(didFulfill, didReject, undefined, undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n if (arguments.length > 0) {\n this._warn(\".all() was passed arguments but it does not take any\");\n }\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n : false;\n var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true);\n }\n if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._setFulfilled();\n ret._rejectionHandler0 = obj;\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n _, receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n var target = this._target();\n var bitField = target._bitField;\n\n if (!haveInternalData) {\n promise._propagateFrom(this, 3);\n promise._captureStackTrace();\n if (receiver === undefined &&\n ((this._bitField & 2097152) !== 0)) {\n if (!((bitField & 50397184) === 0)) {\n receiver = this._boundValue();\n } else {\n receiver = target === this ? undefined : this._boundTo;\n }\n }\n this._fireEvent(\"promiseChained\", this, promise);\n }\n\n var domain = getDomain();\n if (!((bitField & 50397184) === 0)) {\n var handler, value, settler = target._settlePromiseCtx;\n if (((bitField & 33554432) !== 0)) {\n value = target._rejectionHandler0;\n handler = didFulfill;\n } else if (((bitField & 16777216) !== 0)) {\n value = target._fulfillmentHandler0;\n handler = didReject;\n target._unsetRejectionIsUnhandled();\n } else {\n settler = target._settlePromiseLateCancellationObserver;\n value = new CancellationError(\"late cancellation observer\");\n target._attachExtraTrace(value);\n handler = didReject;\n }\n\n async.invoke(settler, target, {\n handler: domain === null ? handler\n : (typeof handler === \"function\" &&\n util.domainBind(domain, handler)),\n promise: promise,\n receiver: receiver,\n value: value\n });\n } else {\n target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n }\n\n return promise;\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -65536) |\n (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 33554432;\n this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 16777216;\n this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 67108864;\n this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n this._bitField = this._bitField | 65536;\n this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n if (async.hasCustomScheduler()) return;\n this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0 ? this._receiver0 : this[\n index * 4 - 4 + 3];\n if (ret === UNDEFINED_BINDING) {\n return undefined;\n } else if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return this[\n index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n var bitField = follower._bitField;\n var fulfill = follower._fulfillmentHandler0;\n var reject = follower._rejectionHandler0;\n var promise = follower._promise0;\n var receiver = follower._receiverAt(0);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n promise,\n receiver,\n domain\n) {\n var index = this._length();\n\n if (index >= 65535 - 4) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n this._receiver0 = receiver;\n if (typeof fulfill === \"function\") {\n this._fulfillmentHandler0 =\n domain === null ? fulfill : util.domainBind(domain, fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 =\n domain === null ? reject : util.domainBind(domain, reject);\n }\n } else {\n var base = index * 4 - 4;\n this[base + 2] = promise;\n this[base + 3] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n domain === null ? fulfill : util.domainBind(domain, fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n domain === null ? reject : util.domainBind(domain, reject);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (((this._bitField & 117506048) !== 0)) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n var promise = maybePromise._target();\n\n if (promise === this) {\n this._reject(makeSelfResolutionError());\n return;\n }\n\n var bitField = promise._bitField;\n if (((bitField & 50397184) === 0)) {\n var len = this._length();\n if (len > 0) promise._migrateCallback0(this);\n for (var i = 1; i < len; ++i) {\n promise._migrateCallbackAt(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(promise);\n } else if (((bitField & 33554432) !== 0)) {\n this._fulfill(promise._value());\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(promise._reason());\n } else {\n var reason = new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n this._reject(reason);\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n var message = \"a promise was rejected with a non-error: \" +\n util.classString(reason);\n this._warn(message, true);\n }\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = this._execute(executor, function(value) {\n promise._resolveCallback(value);\n }, function (reason) {\n promise._rejectCallback(reason, synchronous);\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined) {\n promise._rejectCallback(r, true);\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n var bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY) {\n if (!value || typeof value.length !== \"number\") {\n x = errorObj;\n x.e = new TypeError(\"cannot .spread() a non-array: \" +\n util.classString(value));\n } else {\n x = tryCatch(handler).apply(this._boundValue(), value);\n }\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n var promiseCreated = promise._popContext();\n bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n\n if (x === NEXT_FILTER) {\n promise._reject(value);\n } else if (x === errorObj) {\n promise._rejectCallback(x.e, false);\n } else {\n debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n var isPromise = promise instanceof Promise;\n var bitField = this._bitField;\n var asyncGuaranteed = ((bitField & 134217728) !== 0);\n if (((bitField & 65536) !== 0)) {\n if (isPromise) promise._invokeInternalOnCancel();\n\n if (receiver instanceof PassThroughHandlerContext &&\n receiver.isFinallyHandler()) {\n receiver.cancelPromise = promise;\n if (tryCatch(handler).call(receiver, value) === errorObj) {\n promise._reject(errorObj.e);\n }\n } else if (handler === reflectHandler) {\n promise._fulfill(reflectHandler.call(receiver));\n } else if (receiver instanceof Proxyable) {\n receiver._promiseCancelled(promise);\n } else if (isPromise || promise instanceof PromiseArray) {\n promise._cancel();\n } else {\n receiver.cancel();\n }\n } else if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof Proxyable) {\n if (!receiver._isResolved()) {\n if (((bitField & 33554432) !== 0)) {\n receiver._promiseFulfilled(value, promise);\n } else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n if (((bitField & 33554432) !== 0)) {\n promise._fulfill(value);\n } else {\n promise._reject(value);\n }\n }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n var handler = ctx.handler;\n var promise = ctx.promise;\n var receiver = ctx.receiver;\n var value = ctx.value;\n if (typeof handler === \"function\") {\n if (!(promise instanceof Promise)) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (promise instanceof Promise) {\n promise._reject(value);\n }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n var promise = this._promise0;\n var receiver = this._receiverAt(0);\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n var base = index * 4 - 4;\n this[base + 2] =\n this[base + 3] =\n this[base + 0] =\n this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._reject(err);\n }\n this._setFulfilled();\n this._rejectionHandler0 = value;\n\n if ((bitField & 65535) > 0) {\n if (((bitField & 134217728) !== 0)) {\n this._settlePromises();\n } else {\n async.settlePromises(this);\n }\n }\n};\n\nPromise.prototype._reject = function (reason) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n this._setRejected();\n this._fulfillmentHandler0 = reason;\n\n if (this._isFinal()) {\n return async.fatalError(reason, util.isNode);\n }\n\n if ((bitField & 65535) > 0) {\n async.settlePromises(this);\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n for (var i = 1; i < len; i++) {\n var handler = this._fulfillmentHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, value);\n }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n for (var i = 1; i < len; i++) {\n var handler = this._rejectionHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, reason);\n }\n};\n\nPromise.prototype._settlePromises = function () {\n var bitField = this._bitField;\n var len = (bitField & 65535);\n\n if (len > 0) {\n if (((bitField & 16842752) !== 0)) {\n var reason = this._fulfillmentHandler0;\n this._settlePromise0(this._rejectionHandler0, reason, bitField);\n this._rejectPromises(len, reason);\n } else {\n var value = this._rejectionHandler0;\n this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n this._fulfillPromises(len, value);\n }\n this._setLength(0);\n }\n this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n var bitField = this._bitField;\n if (((bitField & 33554432) !== 0)) {\n return this._rejectionHandler0;\n } else if (((bitField & 16777216) !== 0)) {\n return this._fulfillmentHandler0;\n }\n};\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n debug.deprecated(\"Promise.defer\", \"new Promise\");\n var promise = new Promise(INTERNAL);\n return {\n promise: promise,\n resolve: deferResolve,\n reject: deferReject\n };\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\nrequire(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n debug);\nrequire(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\nrequire(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\nrequire(\"./direct_resolve\")(Promise);\nrequire(\"./synchronous_inspection\")(Promise);\nrequire(\"./join\")(\n Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.4.7\";\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./call_get.js')(Promise);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\nrequire('./timers.js')(Promise, INTERNAL, debug);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\nrequire('./nodeify.js')(Promise);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./settle.js')(Promise, PromiseArray, debug);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./filter.js')(Promise, INTERNAL);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./any.js')(Promise);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n debug.setBounds(Async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n","var _ = require(\"underscore\");\nvar bluebird = require(\"bluebird/js/release/promise\")();\n\nexports.defer = defer;\nexports.when = bluebird.resolve;\nexports.resolve = bluebird.resolve;\nexports.all = bluebird.all;\nexports.props = bluebird.props;\nexports.reject = bluebird.reject;\nexports.promisify = bluebird.promisify;\nexports.mapSeries = bluebird.mapSeries;\nexports.attempt = bluebird.attempt;\n\nexports.nfcall = function(func) {\n var args = Array.prototype.slice.call(arguments, 1);\n var promisedFunc = bluebird.promisify(func);\n return promisedFunc.apply(null, args);\n};\n\nbluebird.prototype.fail = bluebird.prototype.caught;\n\nbluebird.prototype.also = function(func) {\n return this.then(function(value) {\n var returnValue = _.extend({}, value, func(value));\n return bluebird.props(returnValue);\n });\n};\n\nfunction defer() {\n var resolve;\n var reject;\n var promise = new bluebird.Promise(function(resolveArg, rejectArg) {\n resolve = resolveArg;\n reject = rejectArg;\n });\n\n return {\n resolve: resolve,\n reject: reject,\n promise: promise\n };\n}\n","var _ = require(\"underscore\");\n\nvar types = exports.types = {\n document: \"document\",\n paragraph: \"paragraph\",\n run: \"run\",\n text: \"text\",\n tab: \"tab\",\n checkbox: \"checkbox\",\n hyperlink: \"hyperlink\",\n noteReference: \"noteReference\",\n image: \"image\",\n note: \"note\",\n commentReference: \"commentReference\",\n comment: \"comment\",\n table: \"table\",\n tableRow: \"tableRow\",\n tableCell: \"tableCell\",\n \"break\": \"break\",\n bookmarkStart: \"bookmarkStart\"\n};\n\nfunction Document(children, options) {\n options = options || {};\n return {\n type: types.document,\n children: children,\n notes: options.notes || new Notes({}),\n comments: options.comments || []\n };\n}\n\nfunction Paragraph(children, properties) {\n properties = properties || {};\n var indent = properties.indent || {};\n return {\n type: types.paragraph,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null,\n numbering: properties.numbering || null,\n alignment: properties.alignment || null,\n indent: {\n start: indent.start || null,\n end: indent.end || null,\n firstLine: indent.firstLine || null,\n hanging: indent.hanging || null\n }\n };\n}\n\nfunction Run(children, properties) {\n properties = properties || {};\n return {\n type: types.run,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null,\n isBold: !!properties.isBold,\n isUnderline: !!properties.isUnderline,\n isItalic: !!properties.isItalic,\n isStrikethrough: !!properties.isStrikethrough,\n isAllCaps: !!properties.isAllCaps,\n isSmallCaps: !!properties.isSmallCaps,\n verticalAlignment: properties.verticalAlignment || verticalAlignment.baseline,\n font: properties.font || null,\n fontSize: properties.fontSize || null,\n highlight: properties.highlight || null\n };\n}\n\nvar verticalAlignment = {\n baseline: \"baseline\",\n superscript: \"superscript\",\n subscript: \"subscript\"\n};\n\nfunction Text(value) {\n return {\n type: types.text,\n value: value\n };\n}\n\nfunction Tab() {\n return {\n type: types.tab\n };\n}\n\nfunction Checkbox(options) {\n return {\n type: types.checkbox,\n checked: options.checked\n };\n}\n\nfunction Hyperlink(children, options) {\n return {\n type: types.hyperlink,\n children: children,\n href: options.href,\n anchor: options.anchor,\n targetFrame: options.targetFrame\n };\n}\n\nfunction NoteReference(options) {\n return {\n type: types.noteReference,\n noteType: options.noteType,\n noteId: options.noteId\n };\n}\n\nfunction Notes(notes) {\n this._notes = _.indexBy(notes, function(note) {\n return noteKey(note.noteType, note.noteId);\n });\n}\n\nNotes.prototype.resolve = function(reference) {\n return this.findNoteByKey(noteKey(reference.noteType, reference.noteId));\n};\n\nNotes.prototype.findNoteByKey = function(key) {\n return this._notes[key] || null;\n};\n\nfunction Note(options) {\n return {\n type: types.note,\n noteType: options.noteType,\n noteId: options.noteId,\n body: options.body\n };\n}\n\nfunction commentReference(options) {\n return {\n type: types.commentReference,\n commentId: options.commentId\n };\n}\n\nfunction comment(options) {\n return {\n type: types.comment,\n commentId: options.commentId,\n body: options.body,\n authorName: options.authorName,\n authorInitials: options.authorInitials\n };\n}\n\nfunction noteKey(noteType, id) {\n return noteType + \"-\" + id;\n}\n\nfunction Image(options) {\n return {\n type: types.image,\n // `read` is retained for backwards compatibility, but other read\n // methods should be preferred.\n read: function(encoding) {\n if (encoding) {\n return options.readImage(encoding);\n } else {\n return options.readImage().then(function(arrayBuffer) {\n return Buffer.from(arrayBuffer);\n });\n }\n },\n readAsArrayBuffer: function() {\n return options.readImage();\n },\n readAsBase64String: function() {\n return options.readImage(\"base64\");\n },\n readAsBuffer: function() {\n return options.readImage().then(function(arrayBuffer) {\n return Buffer.from(arrayBuffer);\n });\n },\n altText: options.altText,\n contentType: options.contentType\n };\n}\n\nfunction Table(children, properties) {\n properties = properties || {};\n return {\n type: types.table,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null\n };\n}\n\nfunction TableRow(children, options) {\n options = options || {};\n return {\n type: types.tableRow,\n children: children,\n isHeader: options.isHeader || false\n };\n}\n\nfunction TableCell(children, options) {\n options = options || {};\n return {\n type: types.tableCell,\n children: children,\n colSpan: options.colSpan == null ? 1 : options.colSpan,\n rowSpan: options.rowSpan == null ? 1 : options.rowSpan\n };\n}\n\nfunction Break(breakType) {\n return {\n type: types[\"break\"],\n breakType: breakType\n };\n}\n\nfunction BookmarkStart(options) {\n return {\n type: types.bookmarkStart,\n name: options.name\n };\n}\n\nexports.document = exports.Document = Document;\nexports.paragraph = exports.Paragraph = Paragraph;\nexports.run = exports.Run = Run;\nexports.text = exports.Text = Text;\nexports.tab = exports.Tab = Tab;\nexports.checkbox = exports.Checkbox = Checkbox;\nexports.Hyperlink = Hyperlink;\nexports.noteReference = exports.NoteReference = NoteReference;\nexports.Notes = Notes;\nexports.Note = Note;\nexports.commentReference = commentReference;\nexports.comment = comment;\nexports.Image = Image;\nexports.Table = Table;\nexports.TableRow = TableRow;\nexports.TableCell = TableCell;\nexports.lineBreak = Break(\"line\");\nexports.pageBreak = Break(\"page\");\nexports.columnBreak = Break(\"column\");\nexports.BookmarkStart = BookmarkStart;\n\nexports.verticalAlignment = verticalAlignment;\n","var _ = require(\"underscore\");\n\n\nexports.Result = Result;\nexports.success = success;\nexports.warning = warning;\nexports.error = error;\n\n\nfunction Result(value, messages) {\n this.value = value;\n this.messages = messages || [];\n}\n\nResult.prototype.map = function(func) {\n return new Result(func(this.value), this.messages);\n};\n\nResult.prototype.flatMap = function(func) {\n var funcResult = func(this.value);\n return new Result(funcResult.value, combineMessages([this, funcResult]));\n};\n\nResult.prototype.flatMapThen = function(func) {\n var that = this;\n return func(this.value).then(function(otherResult) {\n return new Result(otherResult.value, combineMessages([that, otherResult]));\n });\n};\n\nResult.combine = function(results) {\n var values = _.flatten(_.pluck(results, \"value\"));\n var messages = combineMessages(results);\n return new Result(values, messages);\n};\n\nfunction success(value) {\n return new Result(value, []);\n}\n\nfunction warning(message) {\n return {\n type: \"warning\",\n message: message\n };\n}\n\nfunction error(exception) {\n return {\n type: \"error\",\n message: exception.message,\n error: exception\n };\n}\n\nfunction combineMessages(results) {\n var messages = [];\n _.flatten(_.pluck(results, \"messages\"), true).forEach(function(message) {\n if (!containsMessage(messages, message)) {\n messages.push(message);\n }\n });\n return messages;\n}\n\nfunction containsMessage(messages, message) {\n return _.find(messages, isSameMessage.bind(null, message)) !== undefined;\n}\n\nfunction isSameMessage(first, second) {\n return first.type === second.type && first.message === second.message;\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t\t// Update ownerDocument for each node being inserted\n\t\tvar targetDoc = parent.ownerDocument || parent;\n\t\t_updateOwnerDocument(newFirst, targetDoc);\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Recursively updates the ownerDocument property for a node and all its descendants\n * @param {Node} node\n * @param {Document} newOwnerDocument\n * @private\n */\nfunction _updateOwnerDocument(node, newOwnerDocument) {\n\tif (node.ownerDocument === newOwnerDocument) {\n\t\treturn;\n\t}\n\t\n\tnode.ownerDocument = newOwnerDocument;\n\t\n\t// Update attributes if this is an element\n\tif (node.nodeType === ELEMENT_NODE && node.attributes) {\n\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\tvar attr = node.attributes.item(i);\n\t\t\tif (attr) {\n\t\t\t\tattr.ownerDocument = newOwnerDocument;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Recursively update child nodes\n\tvar child = node.firstChild;\n\twhile (child) {\n\t\t_updateOwnerDocument(child, newOwnerDocument);\n\t\tchild = child.nextSibling;\n\t}\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\t\n\t// Update ownerDocument for the new child and all its descendants\n\tvar targetDoc = parentNode.ownerDocument || parentNode;\n\t_updateOwnerDocument(newChild, targetDoc);\n\t\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\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\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\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\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\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\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//' + this.newline;\n };\n\n XMLStringWriter.prototype.declaration = function(node, level) {\n var r;\n r = this.space(level);\n r += '';\n r += this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.docType = function(node, level) {\n var child, i, len, r, ref;\n level || (level = 0);\n r = this.space(level);\n r += ' 0) {\n r += ' [';\n r += this.newline;\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += (function() {\n switch (false) {\n case !(child instanceof XMLDTDAttList):\n return this.dtdAttList(child, level + 1);\n case !(child instanceof XMLDTDElement):\n return this.dtdElement(child, level + 1);\n case !(child instanceof XMLDTDEntity):\n return this.dtdEntity(child, level + 1);\n case !(child instanceof XMLDTDNotation):\n return this.dtdNotation(child, level + 1);\n case !(child instanceof XMLCData):\n return this.cdata(child, level + 1);\n case !(child instanceof XMLComment):\n return this.comment(child, level + 1);\n case !(child instanceof XMLProcessingInstruction):\n return this.processingInstruction(child, level + 1);\n default:\n throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n }\n }).call(this);\n }\n r += ']';\n }\n r += this.spacebeforeslash + '>';\n r += this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.element = function(node, level) {\n var att, child, i, j, len, len1, name, r, ref, ref1, ref2, space, textispresentwasset;\n level || (level = 0);\n textispresentwasset = false;\n if (this.textispresent) {\n this.newline = '';\n this.pretty = false;\n } else {\n this.newline = this.newlinedefault;\n this.pretty = this.prettydefault;\n }\n space = this.space(level);\n r = '';\n r += space + '<' + node.name;\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att);\n }\n if (node.children.length === 0 || node.children.every(function(e) {\n return e.value === '';\n })) {\n if (this.allowEmpty) {\n r += '>' + this.newline;\n } else {\n r += this.spacebeforeslash + '/>' + this.newline;\n }\n } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n r += '>';\n r += node.children[0].value;\n r += '' + this.newline;\n } else {\n if (this.dontprettytextnodes) {\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n if (child.value != null) {\n this.textispresent++;\n textispresentwasset = true;\n break;\n }\n }\n }\n if (this.textispresent) {\n this.newline = '';\n this.pretty = false;\n space = this.space(level);\n }\n r += '>' + this.newline;\n ref2 = node.children;\n for (j = 0, len1 = ref2.length; j < len1; j++) {\n child = ref2[j];\n r += (function() {\n switch (false) {\n case !(child instanceof XMLCData):\n return this.cdata(child, level + 1);\n case !(child instanceof XMLComment):\n return this.comment(child, level + 1);\n case !(child instanceof XMLElement):\n return this.element(child, level + 1);\n case !(child instanceof XMLRaw):\n return this.raw(child, level + 1);\n case !(child instanceof XMLText):\n return this.text(child, level + 1);\n case !(child instanceof XMLProcessingInstruction):\n return this.processingInstruction(child, level + 1);\n case !(child instanceof XMLDummy):\n return '';\n default:\n throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n }\n }).call(this);\n }\n if (textispresentwasset) {\n this.textispresent--;\n }\n if (!this.textispresent) {\n this.newline = this.newlinedefault;\n this.pretty = this.prettydefault;\n }\n r += space + '' + this.newline;\n }\n return r;\n };\n\n XMLStringWriter.prototype.processingInstruction = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.raw = function(node, level) {\n return this.space(level) + node.value + this.newline;\n };\n\n XMLStringWriter.prototype.text = function(node, level) {\n return this.space(level) + node.value + this.newline;\n };\n\n XMLStringWriter.prototype.dtdAttList = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.dtdElement = function(node, level) {\n return this.space(level) + '' + this.newline;\n };\n\n XMLStringWriter.prototype.dtdEntity = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.dtdNotation = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.openNode = function(node, level) {\n var att, name, r, ref;\n level || (level = 0);\n if (node instanceof XMLElement) {\n r = this.space(level) + '<' + node.name;\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att);\n }\n r += (node.children ? '>' : '/>') + this.newline;\n return r;\n } else {\n r = this.space(level) + '') + this.newline;\n return r;\n }\n };\n\n XMLStringWriter.prototype.closeNode = function(node, level) {\n level || (level = 0);\n switch (false) {\n case !(node instanceof XMLElement):\n return this.space(level) + '' + this.newline;\n case !(node instanceof XMLDocType):\n return this.space(level) + ']>' + this.newline;\n }\n };\n\n return XMLStringWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isPlainObject = require('./Utility').isPlainObject;\n\n XMLNode = require('./XMLNode');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocument = (function(superClass) {\n extend(XMLDocument, superClass);\n\n function XMLDocument(options) {\n XMLDocument.__super__.constructor.call(this, null);\n this.name = \"?xml\";\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.stringify = new XMLStringifier(options);\n this.isDocument = true;\n }\n\n XMLDocument.prototype.end = function(writer) {\n var writerOptions;\n if (!writer) {\n writer = this.options.writer;\n } else if (isPlainObject(writer)) {\n writerOptions = writer;\n writer = this.options.writer.set(writerOptions);\n }\n return writer.document(this);\n };\n\n XMLDocument.prototype.toString = function(options) {\n return this.options.writer.set(options).document(this);\n };\n\n return XMLDocument;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n XMLElement = require('./XMLElement');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocumentCB = (function() {\n function XMLDocumentCB(options, onData, onEnd) {\n var writerOptions;\n this.name = \"?xml\";\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter(options);\n } else if (isPlainObject(options.writer)) {\n writerOptions = options.writer;\n options.writer = new XMLStringWriter(writerOptions);\n }\n this.options = options;\n this.writer = options.writer;\n this.stringify = new XMLStringifier(options);\n this.onDataCallback = onData || function() {};\n this.onEndCallback = onEnd || function() {};\n this.currentNode = null;\n this.currentLevel = -1;\n this.openTags = {};\n this.documentStarted = false;\n this.documentCompleted = false;\n this.root = null;\n }\n\n XMLDocumentCB.prototype.node = function(name, attributes, text) {\n var ref1, ref2;\n if (name == null) {\n throw new Error(\"Missing node name.\");\n }\n if (this.root && this.currentLevel === -1) {\n throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n }\n this.openCurrent();\n name = getValue(name);\n if (attributes === null && (text == null)) {\n ref1 = [{}, null], attributes = ref1[0], text = ref1[1];\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n }\n this.currentNode = new XMLElement(this, name, attributes);\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n if (text != null) {\n this.text(text);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.element = function(name, attributes, text) {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.dtdElement.apply(this, arguments);\n } else {\n return this.node(name, attributes, text);\n }\n };\n\n XMLDocumentCB.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (!this.currentNode || this.currentNode.children) {\n throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n }\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (!this.options.skipNullAttributes || (value != null)) {\n this.currentNode.attributes[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.text = function(value) {\n var node;\n this.openCurrent();\n node = new XMLText(this, value);\n this.onData(this.writer.text(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.cdata = function(value) {\n var node;\n this.openCurrent();\n node = new XMLCData(this, value);\n this.onData(this.writer.cdata(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.comment = function(value) {\n var node;\n this.openCurrent();\n node = new XMLComment(this, value);\n this.onData(this.writer.comment(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.raw = function(value) {\n var node;\n this.openCurrent();\n node = new XMLRaw(this, value);\n this.onData(this.writer.raw(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, len, node;\n this.openCurrent();\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n node = new XMLProcessingInstruction(this, target, value);\n this.onData(this.writer.processingInstruction(node, this.currentLevel + 1), this.currentLevel + 1);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n var node;\n this.openCurrent();\n if (this.documentStarted) {\n throw new Error(\"declaration() must be the first node.\");\n }\n node = new XMLDeclaration(this, version, encoding, standalone);\n this.onData(this.writer.declaration(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n this.openCurrent();\n if (root == null) {\n throw new Error(\"Missing root node name.\");\n }\n if (this.root) {\n throw new Error(\"dtd() must come before the root node.\");\n }\n this.currentNode = new XMLDocType(this, pubID, sysID);\n this.currentNode.rootNodeName = root;\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n return this;\n };\n\n XMLDocumentCB.prototype.dtdElement = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDElement(this, name, value);\n this.onData(this.writer.dtdElement(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var node;\n this.openCurrent();\n node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.onData(this.writer.dtdAttList(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.entity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, false, name, value);\n this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.pEntity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, true, name, value);\n this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.notation = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDNotation(this, name, value);\n this.onData(this.writer.dtdNotation(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.up = function() {\n if (this.currentLevel < 0) {\n throw new Error(\"The document node has no parent.\");\n }\n if (this.currentNode) {\n if (this.currentNode.children) {\n this.closeNode(this.currentNode);\n } else {\n this.openNode(this.currentNode);\n }\n this.currentNode = null;\n } else {\n this.closeNode(this.openTags[this.currentLevel]);\n }\n delete this.openTags[this.currentLevel];\n this.currentLevel--;\n return this;\n };\n\n XMLDocumentCB.prototype.end = function() {\n while (this.currentLevel >= 0) {\n this.up();\n }\n return this.onEnd();\n };\n\n XMLDocumentCB.prototype.openCurrent = function() {\n if (this.currentNode) {\n this.currentNode.children = true;\n return this.openNode(this.currentNode);\n }\n };\n\n XMLDocumentCB.prototype.openNode = function(node) {\n if (!node.isOpen) {\n if (!this.root && this.currentLevel === 0 && node instanceof XMLElement) {\n this.root = node;\n }\n this.onData(this.writer.openNode(node, this.currentLevel), this.currentLevel);\n return node.isOpen = true;\n }\n };\n\n XMLDocumentCB.prototype.closeNode = function(node) {\n if (!node.isClosed) {\n this.onData(this.writer.closeNode(node, this.currentLevel), this.currentLevel);\n return node.isClosed = true;\n }\n };\n\n XMLDocumentCB.prototype.onData = function(chunk, level) {\n this.documentStarted = true;\n return this.onDataCallback(chunk, level + 1);\n };\n\n XMLDocumentCB.prototype.onEnd = function() {\n this.documentCompleted = true;\n return this.onEndCallback();\n };\n\n XMLDocumentCB.prototype.debugInfo = function(name) {\n if (name == null) {\n return \"\";\n } else {\n return \"node: <\" + name + \">\";\n }\n };\n\n XMLDocumentCB.prototype.ele = function() {\n return this.element.apply(this, arguments);\n };\n\n XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n return this.doctype(root, pubID, sysID);\n };\n\n XMLDocumentCB.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLDocumentCB.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.att = function() {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.a = function() {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocumentCB.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocumentCB.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n return XMLDocumentCB;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStreamWriter, XMLText, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLElement = require('./XMLElement');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDummy = require('./XMLDummy');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLWriterBase = require('./XMLWriterBase');\n\n module.exports = XMLStreamWriter = (function(superClass) {\n extend(XMLStreamWriter, superClass);\n\n function XMLStreamWriter(stream, options) {\n XMLStreamWriter.__super__.constructor.call(this, options);\n this.stream = stream;\n }\n\n XMLStreamWriter.prototype.document = function(doc) {\n var child, i, j, len, len1, ref, ref1, results;\n ref = doc.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n child.isLastRootNode = false;\n }\n doc.children[doc.children.length - 1].isLastRootNode = true;\n ref1 = doc.children;\n results = [];\n for (j = 0, len1 = ref1.length; j < len1; j++) {\n child = ref1[j];\n if (child instanceof XMLDummy) {\n continue;\n }\n switch (false) {\n case !(child instanceof XMLDeclaration):\n results.push(this.declaration(child));\n break;\n case !(child instanceof XMLDocType):\n results.push(this.docType(child));\n break;\n case !(child instanceof XMLComment):\n results.push(this.comment(child));\n break;\n case !(child instanceof XMLProcessingInstruction):\n results.push(this.processingInstruction(child));\n break;\n default:\n results.push(this.element(child));\n }\n }\n return results;\n };\n\n XMLStreamWriter.prototype.attribute = function(att) {\n return this.stream.write(' ' + att.name + '=\"' + att.value + '\"');\n };\n\n XMLStreamWriter.prototype.cdata = function(node, level) {\n return this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.comment = function(node, level) {\n return this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.declaration = function(node, level) {\n this.stream.write(this.space(level));\n this.stream.write('');\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.docType = function(node, level) {\n var child, i, len, ref;\n level || (level = 0);\n this.stream.write(this.space(level));\n this.stream.write(' 0) {\n this.stream.write(' [');\n this.stream.write(this.endline(node));\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n switch (false) {\n case !(child instanceof XMLDTDAttList):\n this.dtdAttList(child, level + 1);\n break;\n case !(child instanceof XMLDTDElement):\n this.dtdElement(child, level + 1);\n break;\n case !(child instanceof XMLDTDEntity):\n this.dtdEntity(child, level + 1);\n break;\n case !(child instanceof XMLDTDNotation):\n this.dtdNotation(child, level + 1);\n break;\n case !(child instanceof XMLCData):\n this.cdata(child, level + 1);\n break;\n case !(child instanceof XMLComment):\n this.comment(child, level + 1);\n break;\n case !(child instanceof XMLProcessingInstruction):\n this.processingInstruction(child, level + 1);\n break;\n default:\n throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n }\n }\n this.stream.write(']');\n }\n this.stream.write(this.spacebeforeslash + '>');\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.element = function(node, level) {\n var att, child, i, len, name, ref, ref1, space;\n level || (level = 0);\n space = this.space(level);\n this.stream.write(space + '<' + node.name);\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n this.attribute(att);\n }\n if (node.children.length === 0 || node.children.every(function(e) {\n return e.value === '';\n })) {\n if (this.allowEmpty) {\n this.stream.write('>');\n } else {\n this.stream.write(this.spacebeforeslash + '/>');\n }\n } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n this.stream.write('>');\n this.stream.write(node.children[0].value);\n this.stream.write('');\n } else {\n this.stream.write('>' + this.newline);\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n switch (false) {\n case !(child instanceof XMLCData):\n this.cdata(child, level + 1);\n break;\n case !(child instanceof XMLComment):\n this.comment(child, level + 1);\n break;\n case !(child instanceof XMLElement):\n this.element(child, level + 1);\n break;\n case !(child instanceof XMLRaw):\n this.raw(child, level + 1);\n break;\n case !(child instanceof XMLText):\n this.text(child, level + 1);\n break;\n case !(child instanceof XMLProcessingInstruction):\n this.processingInstruction(child, level + 1);\n break;\n case !(child instanceof XMLDummy):\n '';\n break;\n default:\n throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n }\n }\n this.stream.write(space + '');\n }\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.processingInstruction = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.raw = function(node, level) {\n return this.stream.write(this.space(level) + node.value + this.endline(node));\n };\n\n XMLStreamWriter.prototype.text = function(node, level) {\n return this.stream.write(this.space(level) + node.value + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdAttList = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdElement = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdEntity = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdNotation = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.endline = function(node) {\n if (!node.isLastRootNode) {\n return this.newline;\n } else {\n return '';\n }\n };\n\n return XMLStreamWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n XMLDocument = require('./XMLDocument');\n\n XMLDocumentCB = require('./XMLDocumentCB');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n XMLStreamWriter = require('./XMLStreamWriter');\n\n module.exports.create = function(name, xmldec, doctype, options) {\n var doc, root;\n if (name == null) {\n throw new Error(\"Root element needs a name.\");\n }\n options = assign({}, xmldec, doctype, options);\n doc = new XMLDocument(options);\n root = doc.element(name);\n if (!options.headless) {\n doc.declaration(options);\n if ((options.pubID != null) || (options.sysID != null)) {\n doc.doctype(options);\n }\n }\n return root;\n };\n\n module.exports.begin = function(options, onData, onEnd) {\n var ref1;\n if (isFunction(options)) {\n ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n options = {};\n }\n if (onData) {\n return new XMLDocumentCB(options, onData, onEnd);\n } else {\n return new XMLDocument(options);\n }\n };\n\n module.exports.stringWriter = function(options) {\n return new XMLStringWriter(options);\n };\n\n module.exports.streamWriter = function(stream, options) {\n return new XMLStreamWriter(stream, options);\n };\n\n}).call(this);\n","var _ = require(\"underscore\");\nvar xmlbuilder = require(\"xmlbuilder\");\n\n\nexports.writeString = writeString;\n\n\nfunction writeString(root, namespaces) {\n var uriToPrefix = _.invert(namespaces);\n \n var nodeWriters = {\n element: writeElement,\n text: writeTextNode\n };\n\n function writeNode(builder, node) {\n return nodeWriters[node.type](builder, node);\n }\n\n function writeElement(builder, element) {\n var elementBuilder = builder.element(mapElementName(element.name), element.attributes);\n element.children.forEach(function(child) {\n writeNode(elementBuilder, child);\n });\n }\n \n function mapElementName(name) {\n var longFormMatch = /^\\{(.*)\\}(.*)$/.exec(name);\n if (longFormMatch) {\n var prefix = uriToPrefix[longFormMatch[1]];\n return prefix + (prefix === \"\" ? \"\" : \":\") + longFormMatch[2];\n } else {\n return name;\n }\n }\n \n function writeDocument(root) {\n var builder = xmlbuilder\n .create(mapElementName(root.name), {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: true\n });\n \n _.forEach(namespaces, function(uri, prefix) {\n var key = \"xmlns\" + (prefix === \"\" ? \"\" : \":\" + prefix);\n builder.attribute(key, uri);\n });\n \n root.children.forEach(function(child) {\n writeNode(builder, child);\n });\n return builder.end();\n }\n\n return writeDocument(root);\n}\n\nfunction writeTextNode(builder, node) {\n builder.text(node.value);\n}\n","var nodes = require(\"./nodes\");\n\nexports.Element = nodes.Element;\nexports.element = nodes.element;\nexports.emptyElement = nodes.emptyElement;\nexports.text = nodes.text;\nexports.readString = require(\"./reader\").readString;\nexports.writeString = require(\"./writer\").writeString;\n","var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\n\nexports.read = read;\nexports.readXmlFromZipFile = readXmlFromZipFile;\n\nvar xmlNamespaceMap = {\n // Transitional format\n \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\": \"w\",\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\": \"r\",\n \"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\": \"wp\",\n \"http://schemas.openxmlformats.org/drawingml/2006/main\": \"a\",\n \"http://schemas.openxmlformats.org/drawingml/2006/picture\": \"pic\",\n\n // Strict format\n \"http://purl.oclc.org/ooxml/wordprocessingml/main\": \"w\",\n \"http://purl.oclc.org/ooxml/officeDocument/relationships\": \"r\",\n \"http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing\": \"wp\",\n \"http://purl.oclc.org/ooxml/drawingml/main\": \"a\",\n \"http://purl.oclc.org/ooxml/drawingml/picture\": \"pic\",\n\n // Common\n \"http://schemas.openxmlformats.org/package/2006/content-types\": \"content-types\",\n \"http://schemas.openxmlformats.org/package/2006/relationships\": \"relationships\",\n \"http://schemas.openxmlformats.org/markup-compatibility/2006\": \"mc\",\n \"urn:schemas-microsoft-com:vml\": \"v\",\n \"urn:schemas-microsoft-com:office:word\": \"office-word\",\n\n // [MS-DOCX]: Word Extensions to the Office Open XML (.docx) File Format\n // https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b839fe1f-e1ca-4fa6-8c26-5954d0abbccd\n \"http://schemas.microsoft.com/office/word/2010/wordml\": \"wordml\"\n};\n\n\nfunction read(xmlString) {\n return xml.readString(xmlString, xmlNamespaceMap)\n .then(function(document) {\n return collapseAlternateContent(document)[0];\n });\n}\n\n\nfunction readXmlFromZipFile(docxFile, path) {\n if (docxFile.exists(path)) {\n return docxFile.read(path, \"utf-8\")\n .then(stripUtf8Bom)\n .then(read);\n } else {\n return promises.resolve(null);\n }\n}\n\n\nfunction stripUtf8Bom(xmlString) {\n return xmlString.replace(/^\\uFEFF/g, '');\n}\n\n\nfunction collapseAlternateContent(node) {\n if (node.type === \"element\") {\n if (node.name === \"mc:AlternateContent\") {\n return node.firstOrEmpty(\"mc:Fallback\").children;\n } else {\n node.children = _.flatten(node.children.map(collapseAlternateContent, true));\n return [node];\n }\n } else {\n return [node];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dingbats = [\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"33\", \"Unicode hex\": \"21\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"8704\", \"Unicode hex\": \"2200\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"35\", \"Unicode hex\": \"23\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"8707\", \"Unicode hex\": \"2203\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"37\", \"Unicode hex\": \"25\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"38\", \"Unicode hex\": \"26\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"8717\", \"Unicode hex\": \"220D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"40\", \"Unicode hex\": \"28\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"41\", \"Unicode hex\": \"29\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"42\", \"Unicode hex\": \"2A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"43\", \"Unicode hex\": \"2B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"44\", \"Unicode hex\": \"2C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"8722\", \"Unicode hex\": \"2212\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"46\", \"Unicode hex\": \"2E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"47\", \"Unicode hex\": \"2F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"48\", \"Unicode hex\": \"30\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"49\", \"Unicode hex\": \"31\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"50\", \"Unicode hex\": \"32\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"51\", \"Unicode hex\": \"33\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"52\", \"Unicode hex\": \"34\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"53\", \"Unicode hex\": \"35\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"54\", \"Unicode hex\": \"36\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"55\", \"Unicode hex\": \"37\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"56\", \"Unicode hex\": \"38\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"57\", \"Unicode hex\": \"39\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"58\", \"Unicode hex\": \"3A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"59\", \"Unicode hex\": \"3B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"60\", \"Unicode hex\": \"3C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"61\", \"Unicode hex\": \"3D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"62\", \"Unicode hex\": \"3E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"63\", \"Unicode hex\": \"3F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"8773\", \"Unicode hex\": \"2245\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"913\", \"Unicode hex\": \"391\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"914\", \"Unicode hex\": \"392\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"935\", \"Unicode hex\": \"3A7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"916\", \"Unicode hex\": \"394\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"917\", \"Unicode hex\": \"395\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"934\", \"Unicode hex\": \"3A6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"915\", \"Unicode hex\": \"393\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"919\", \"Unicode hex\": \"397\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"921\", \"Unicode hex\": \"399\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"977\", \"Unicode hex\": \"3D1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"922\", \"Unicode hex\": \"39A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"923\", \"Unicode hex\": \"39B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"924\", \"Unicode hex\": \"39C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"925\", \"Unicode hex\": \"39D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"927\", \"Unicode hex\": \"39F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"928\", \"Unicode hex\": \"3A0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"920\", \"Unicode hex\": \"398\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"929\", \"Unicode hex\": \"3A1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"931\", \"Unicode hex\": \"3A3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"932\", \"Unicode hex\": \"3A4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"933\", \"Unicode hex\": \"3A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"962\", \"Unicode hex\": \"3C2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"937\", \"Unicode hex\": \"3A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"926\", \"Unicode hex\": \"39E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"936\", \"Unicode hex\": \"3A8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"918\", \"Unicode hex\": \"396\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"91\", \"Unicode hex\": \"5B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"8756\", \"Unicode hex\": \"2234\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"93\", \"Unicode hex\": \"5D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"8869\", \"Unicode hex\": \"22A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"95\", \"Unicode hex\": \"5F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"8254\", \"Unicode hex\": \"203E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"945\", \"Unicode hex\": \"3B1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"946\", \"Unicode hex\": \"3B2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"967\", \"Unicode hex\": \"3C7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"948\", \"Unicode hex\": \"3B4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"949\", \"Unicode hex\": \"3B5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"966\", \"Unicode hex\": \"3C6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"947\", \"Unicode hex\": \"3B3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"951\", \"Unicode hex\": \"3B7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"953\", \"Unicode hex\": \"3B9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"981\", \"Unicode hex\": \"3D5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"954\", \"Unicode hex\": \"3BA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"955\", \"Unicode hex\": \"3BB\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"956\", \"Unicode hex\": \"3BC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"957\", \"Unicode hex\": \"3BD\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"959\", \"Unicode hex\": \"3BF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"960\", \"Unicode hex\": \"3C0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"952\", \"Unicode hex\": \"3B8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"961\", \"Unicode hex\": \"3C1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"963\", \"Unicode hex\": \"3C3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"964\", \"Unicode hex\": \"3C4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"965\", \"Unicode hex\": \"3C5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"982\", \"Unicode hex\": \"3D6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"969\", \"Unicode hex\": \"3C9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"958\", \"Unicode hex\": \"3BE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"968\", \"Unicode hex\": \"3C8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"950\", \"Unicode hex\": \"3B6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"123\", \"Unicode hex\": \"7B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"124\", \"Unicode hex\": \"7C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"125\", \"Unicode hex\": \"7D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"126\", \"Unicode hex\": \"7E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"8364\", \"Unicode hex\": \"20AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"978\", \"Unicode hex\": \"3D2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"8242\", \"Unicode hex\": \"2032\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"8804\", \"Unicode hex\": \"2264\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"8260\", \"Unicode hex\": \"2044\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"8734\", \"Unicode hex\": \"221E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"402\", \"Unicode hex\": \"192\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9827\", \"Unicode hex\": \"2663\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9830\", \"Unicode hex\": \"2666\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"9829\", \"Unicode hex\": \"2665\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"9824\", \"Unicode hex\": \"2660\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"8596\", \"Unicode hex\": \"2194\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"8592\", \"Unicode hex\": \"2190\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"8593\", \"Unicode hex\": \"2191\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"8594\", \"Unicode hex\": \"2192\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"8595\", \"Unicode hex\": \"2193\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"176\", \"Unicode hex\": \"B0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"177\", \"Unicode hex\": \"B1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"8243\", \"Unicode hex\": \"2033\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"8805\", \"Unicode hex\": \"2265\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"215\", \"Unicode hex\": \"D7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"8733\", \"Unicode hex\": \"221D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"8706\", \"Unicode hex\": \"2202\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"247\", \"Unicode hex\": \"F7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"8800\", \"Unicode hex\": \"2260\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"8801\", \"Unicode hex\": \"2261\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"8776\", \"Unicode hex\": \"2248\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"8230\", \"Unicode hex\": \"2026\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"9135\", \"Unicode hex\": \"23AF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"8629\", \"Unicode hex\": \"21B5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"8501\", \"Unicode hex\": \"2135\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"8465\", \"Unicode hex\": \"2111\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"8476\", \"Unicode hex\": \"211C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"8472\", \"Unicode hex\": \"2118\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"8855\", \"Unicode hex\": \"2297\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"8853\", \"Unicode hex\": \"2295\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"8709\", \"Unicode hex\": \"2205\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"8745\", \"Unicode hex\": \"2229\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"8746\", \"Unicode hex\": \"222A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"8835\", \"Unicode hex\": \"2283\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"8839\", \"Unicode hex\": \"2287\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"8836\", \"Unicode hex\": \"2284\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"8834\", \"Unicode hex\": \"2282\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"8838\", \"Unicode hex\": \"2286\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"8712\", \"Unicode hex\": \"2208\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"8713\", \"Unicode hex\": \"2209\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"8736\", \"Unicode hex\": \"2220\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"8711\", \"Unicode hex\": \"2207\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"8719\", \"Unicode hex\": \"220F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8730\", \"Unicode hex\": \"221A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"172\", \"Unicode hex\": \"AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"8743\", \"Unicode hex\": \"2227\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"8744\", \"Unicode hex\": \"2228\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"8660\", \"Unicode hex\": \"21D4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"8656\", \"Unicode hex\": \"21D0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"8657\", \"Unicode hex\": \"21D1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"8658\", \"Unicode hex\": \"21D2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"8659\", \"Unicode hex\": \"21D3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"12296\", \"Unicode hex\": \"3008\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"8721\", \"Unicode hex\": \"2211\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"9115\", \"Unicode hex\": \"239B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"9116\", \"Unicode hex\": \"239C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9117\", \"Unicode hex\": \"239D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9121\", \"Unicode hex\": \"23A1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"9122\", \"Unicode hex\": \"23A2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"9123\", \"Unicode hex\": \"23A3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"9127\", \"Unicode hex\": \"23A7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"9128\", \"Unicode hex\": \"23A8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"9129\", \"Unicode hex\": \"23A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"9130\", \"Unicode hex\": \"23AA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"63743\", \"Unicode hex\": \"F8FF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"12297\", \"Unicode hex\": \"3009\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8747\", \"Unicode hex\": \"222B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"8992\", \"Unicode hex\": \"2320\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"9134\", \"Unicode hex\": \"23AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"8993\", \"Unicode hex\": \"2321\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"9118\", \"Unicode hex\": \"239E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"9119\", \"Unicode hex\": \"239F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"9120\", \"Unicode hex\": \"23A0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"9124\", \"Unicode hex\": \"23A4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"9125\", \"Unicode hex\": \"23A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"9126\", \"Unicode hex\": \"23A6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"9131\", \"Unicode hex\": \"23AB\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"9132\", \"Unicode hex\": \"23AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"9133\", \"Unicode hex\": \"23AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128375\", \"Unicode hex\": \"1F577\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128376\", \"Unicode hex\": \"1F578\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128370\", \"Unicode hex\": \"1F572\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128374\", \"Unicode hex\": \"1F576\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"127942\", \"Unicode hex\": \"1F3C6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"127894\", \"Unicode hex\": \"1F396\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128391\", \"Unicode hex\": \"1F587\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128488\", \"Unicode hex\": \"1F5E8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128489\", \"Unicode hex\": \"1F5E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128496\", \"Unicode hex\": \"1F5F0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128497\", \"Unicode hex\": \"1F5F1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"127798\", \"Unicode hex\": \"1F336\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"127895\", \"Unicode hex\": \"1F397\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128638\", \"Unicode hex\": \"1F67E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128636\", \"Unicode hex\": \"1F67C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128469\", \"Unicode hex\": \"1F5D5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128470\", \"Unicode hex\": \"1F5D6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128471\", \"Unicode hex\": \"1F5D7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"9204\", \"Unicode hex\": \"23F4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"9205\", \"Unicode hex\": \"23F5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"9206\", \"Unicode hex\": \"23F6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"9207\", \"Unicode hex\": \"23F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"9194\", \"Unicode hex\": \"23EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"9193\", \"Unicode hex\": \"23E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"9198\", \"Unicode hex\": \"23EE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"9197\", \"Unicode hex\": \"23ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"9208\", \"Unicode hex\": \"23F8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"9209\", \"Unicode hex\": \"23F9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"9210\", \"Unicode hex\": \"23FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128474\", \"Unicode hex\": \"1F5DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128499\", \"Unicode hex\": \"1F5F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128736\", \"Unicode hex\": \"1F6E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"127959\", \"Unicode hex\": \"1F3D7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"127960\", \"Unicode hex\": \"1F3D8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"127961\", \"Unicode hex\": \"1F3D9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"127962\", \"Unicode hex\": \"1F3DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"127964\", \"Unicode hex\": \"1F3DC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"127981\", \"Unicode hex\": \"1F3ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"127963\", \"Unicode hex\": \"1F3DB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"127968\", \"Unicode hex\": \"1F3E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"127958\", \"Unicode hex\": \"1F3D6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"127965\", \"Unicode hex\": \"1F3DD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128739\", \"Unicode hex\": \"1F6E3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128269\", \"Unicode hex\": \"1F50D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"127956\", \"Unicode hex\": \"1F3D4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128065\", \"Unicode hex\": \"1F441\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128066\", \"Unicode hex\": \"1F442\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127966\", \"Unicode hex\": \"1F3DE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"127957\", \"Unicode hex\": \"1F3D5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"128740\", \"Unicode hex\": \"1F6E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127967\", \"Unicode hex\": \"1F3DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"128755\", \"Unicode hex\": \"1F6F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128364\", \"Unicode hex\": \"1F56C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"128363\", \"Unicode hex\": \"1F56B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128360\", \"Unicode hex\": \"1F568\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"128264\", \"Unicode hex\": \"1F508\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"127892\", \"Unicode hex\": \"1F394\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"127893\", \"Unicode hex\": \"1F395\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128492\", \"Unicode hex\": \"1F5EC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128637\", \"Unicode hex\": \"1F67D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"128493\", \"Unicode hex\": \"1F5ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128490\", \"Unicode hex\": \"1F5EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128491\", \"Unicode hex\": \"1F5EB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"11156\", \"Unicode hex\": \"2B94\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"10004\", \"Unicode hex\": \"2714\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128690\", \"Unicode hex\": \"1F6B2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"11036\", \"Unicode hex\": \"2B1C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128737\", \"Unicode hex\": \"1F6E1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128230\", \"Unicode hex\": \"1F4E6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128753\", \"Unicode hex\": \"1F6F1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"11035\", \"Unicode hex\": \"2B1B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128657\", \"Unicode hex\": \"1F691\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"128712\", \"Unicode hex\": \"1F6C8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128745\", \"Unicode hex\": \"1F6E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128752\", \"Unicode hex\": \"1F6F0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"128968\", \"Unicode hex\": \"1F7C8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128372\", \"Unicode hex\": \"1F574\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"11044\", \"Unicode hex\": \"2B24\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128741\", \"Unicode hex\": \"1F6E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128660\", \"Unicode hex\": \"1F694\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"128472\", \"Unicode hex\": \"1F5D8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"128473\", \"Unicode hex\": \"1F5D9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"10067\", \"Unicode hex\": \"2753\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"128754\", \"Unicode hex\": \"1F6F2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"128647\", \"Unicode hex\": \"1F687\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"128653\", \"Unicode hex\": \"1F68D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9971\", \"Unicode hex\": \"26F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"8854\", \"Unicode hex\": \"2296\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"128685\", \"Unicode hex\": \"1F6AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"128494\", \"Unicode hex\": \"1F5EE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128495\", \"Unicode hex\": \"1F5EF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128498\", \"Unicode hex\": \"1F5F2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128697\", \"Unicode hex\": \"1F6B9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"128698\", \"Unicode hex\": \"1F6BA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"128713\", \"Unicode hex\": \"1F6C9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"128714\", \"Unicode hex\": \"1F6CA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"128700\", \"Unicode hex\": \"1F6BC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"128125\", \"Unicode hex\": \"1F47D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"127947\", \"Unicode hex\": \"1F3CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"9975\", \"Unicode hex\": \"26F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"127938\", \"Unicode hex\": \"1F3C2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"127948\", \"Unicode hex\": \"1F3CC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"127946\", \"Unicode hex\": \"1F3CA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127940\", \"Unicode hex\": \"1F3C4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"127949\", \"Unicode hex\": \"1F3CD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"127950\", \"Unicode hex\": \"1F3CE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128664\", \"Unicode hex\": \"1F698\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128480\", \"Unicode hex\": \"1F5E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128738\", \"Unicode hex\": \"1F6E2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128176\", \"Unicode hex\": \"1F4B0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"127991\", \"Unicode hex\": \"1F3F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128179\", \"Unicode hex\": \"1F4B3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128106\", \"Unicode hex\": \"1F46A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"128481\", \"Unicode hex\": \"1F5E1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128482\", \"Unicode hex\": \"1F5E2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128483\", \"Unicode hex\": \"1F5E3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128388\", \"Unicode hex\": \"1F584\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128389\", \"Unicode hex\": \"1F585\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128390\", \"Unicode hex\": \"1F586\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128441\", \"Unicode hex\": \"1F5B9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"128442\", \"Unicode hex\": \"1F5BA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128443\", \"Unicode hex\": \"1F5BB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128373\", \"Unicode hex\": \"1F575\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"128368\", \"Unicode hex\": \"1F570\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128445\", \"Unicode hex\": \"1F5BD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128446\", \"Unicode hex\": \"1F5BE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128466\", \"Unicode hex\": \"1F5D2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128467\", \"Unicode hex\": \"1F5D3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128218\", \"Unicode hex\": \"1F4DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128478\", \"Unicode hex\": \"1F5DE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128479\", \"Unicode hex\": \"1F5DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128451\", \"Unicode hex\": \"1F5C3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128450\", \"Unicode hex\": \"1F5C2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128444\", \"Unicode hex\": \"1F5BC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"127917\", \"Unicode hex\": \"1F3AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"127900\", \"Unicode hex\": \"1F39C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"127896\", \"Unicode hex\": \"1F398\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"127897\", \"Unicode hex\": \"1F399\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"127911\", \"Unicode hex\": \"1F3A7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128191\", \"Unicode hex\": \"1F4BF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"127902\", \"Unicode hex\": \"1F39E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128247\", \"Unicode hex\": \"1F4F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"127903\", \"Unicode hex\": \"1F39F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"127916\", \"Unicode hex\": \"1F3AC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128253\", \"Unicode hex\": \"1F4FD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128249\", \"Unicode hex\": \"1F4F9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128254\", \"Unicode hex\": \"1F4FE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128251\", \"Unicode hex\": \"1F4FB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"127898\", \"Unicode hex\": \"1F39A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"127899\", \"Unicode hex\": \"1F39B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128250\", \"Unicode hex\": \"1F4FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128187\", \"Unicode hex\": \"1F4BB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128421\", \"Unicode hex\": \"1F5A5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128422\", \"Unicode hex\": \"1F5A6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128423\", \"Unicode hex\": \"1F5A7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"128377\", \"Unicode hex\": \"1F579\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"127918\", \"Unicode hex\": \"1F3AE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"128379\", \"Unicode hex\": \"1F57B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128380\", \"Unicode hex\": \"1F57C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128223\", \"Unicode hex\": \"1F4DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128385\", \"Unicode hex\": \"1F581\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128384\", \"Unicode hex\": \"1F580\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128424\", \"Unicode hex\": \"1F5A8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128425\", \"Unicode hex\": \"1F5A9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128447\", \"Unicode hex\": \"1F5BF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128426\", \"Unicode hex\": \"1F5AA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128476\", \"Unicode hex\": \"1F5DC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128274\", \"Unicode hex\": \"1F512\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128275\", \"Unicode hex\": \"1F513\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128477\", \"Unicode hex\": \"1F5DD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128229\", \"Unicode hex\": \"1F4E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128228\", \"Unicode hex\": \"1F4E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128371\", \"Unicode hex\": \"1F573\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"127779\", \"Unicode hex\": \"1F323\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"127780\", \"Unicode hex\": \"1F324\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"127781\", \"Unicode hex\": \"1F325\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"127782\", \"Unicode hex\": \"1F326\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"9729\", \"Unicode hex\": \"2601\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"127784\", \"Unicode hex\": \"1F328\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"127783\", \"Unicode hex\": \"1F327\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"127785\", \"Unicode hex\": \"1F329\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"127786\", \"Unicode hex\": \"1F32A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"127788\", \"Unicode hex\": \"1F32C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"127787\", \"Unicode hex\": \"1F32B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"127772\", \"Unicode hex\": \"1F31C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"127777\", \"Unicode hex\": \"1F321\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128715\", \"Unicode hex\": \"1F6CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128719\", \"Unicode hex\": \"1F6CF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"127869\", \"Unicode hex\": \"1F37D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"127864\", \"Unicode hex\": \"1F378\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128718\", \"Unicode hex\": \"1F6CE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128717\", \"Unicode hex\": \"1F6CD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9413\", \"Unicode hex\": \"24C5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9855\", \"Unicode hex\": \"267F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128710\", \"Unicode hex\": \"1F6C6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"128392\", \"Unicode hex\": \"1F588\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"127891\", \"Unicode hex\": \"1F393\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128484\", \"Unicode hex\": \"1F5E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128485\", \"Unicode hex\": \"1F5E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128486\", \"Unicode hex\": \"1F5E6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"128487\", \"Unicode hex\": \"1F5E7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128746\", \"Unicode hex\": \"1F6EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128063\", \"Unicode hex\": \"1F43F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"128038\", \"Unicode hex\": \"1F426\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128031\", \"Unicode hex\": \"1F41F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128021\", \"Unicode hex\": \"1F415\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"128008\", \"Unicode hex\": \"1F408\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"128620\", \"Unicode hex\": \"1F66C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"128622\", \"Unicode hex\": \"1F66E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"128621\", \"Unicode hex\": \"1F66D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"128623\", \"Unicode hex\": \"1F66F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128506\", \"Unicode hex\": \"1F5FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"127757\", \"Unicode hex\": \"1F30D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"127759\", \"Unicode hex\": \"1F30F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"127758\", \"Unicode hex\": \"1F30E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"255\", \"Dingbat hex\": \"FF\", \"Unicode dec\": \"128330\", \"Unicode hex\": \"1F54A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128393\", \"Unicode hex\": \"1F589\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"9986\", \"Unicode hex\": \"2702\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"9985\", \"Unicode hex\": \"2701\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128083\", \"Unicode hex\": \"1F453\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"128365\", \"Unicode hex\": \"1F56D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128367\", \"Unicode hex\": \"1F56F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128383\", \"Unicode hex\": \"1F57F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"9990\", \"Unicode hex\": \"2706\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128386\", \"Unicode hex\": \"1F582\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128234\", \"Unicode hex\": \"1F4EA\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128235\", \"Unicode hex\": \"1F4EB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128236\", \"Unicode hex\": \"1F4EC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128237\", \"Unicode hex\": \"1F4ED\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128448\", \"Unicode hex\": \"1F5C0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128449\", \"Unicode hex\": \"1F5C1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128462\", \"Unicode hex\": \"1F5CE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128463\", \"Unicode hex\": \"1F5CF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128464\", \"Unicode hex\": \"1F5D0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128452\", \"Unicode hex\": \"1F5C4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"8987\", \"Unicode hex\": \"231B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128430\", \"Unicode hex\": \"1F5AE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128432\", \"Unicode hex\": \"1F5B0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128434\", \"Unicode hex\": \"1F5B2\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128435\", \"Unicode hex\": \"1F5B3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128436\", \"Unicode hex\": \"1F5B4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128427\", \"Unicode hex\": \"1F5AB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128428\", \"Unicode hex\": \"1F5AC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"9991\", \"Unicode hex\": \"2707\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"9997\", \"Unicode hex\": \"270D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128398\", \"Unicode hex\": \"1F58E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"9996\", \"Unicode hex\": \"270C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128399\", \"Unicode hex\": \"1F58F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128077\", \"Unicode hex\": \"1F44D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128078\", \"Unicode hex\": \"1F44E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"9756\", \"Unicode hex\": \"261C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"9758\", \"Unicode hex\": \"261E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"9757\", \"Unicode hex\": \"261D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"9759\", \"Unicode hex\": \"261F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128400\", \"Unicode hex\": \"1F590\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"9786\", \"Unicode hex\": \"263A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128528\", \"Unicode hex\": \"1F610\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"9785\", \"Unicode hex\": \"2639\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128163\", \"Unicode hex\": \"1F4A3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128369\", \"Unicode hex\": \"1F571\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"127987\", \"Unicode hex\": \"1F3F3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127985\", \"Unicode hex\": \"1F3F1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"9992\", \"Unicode hex\": \"2708\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9788\", \"Unicode hex\": \"263C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127778\", \"Unicode hex\": \"1F322\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"10052\", \"Unicode hex\": \"2744\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128326\", \"Unicode hex\": \"1F546\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"10014\", \"Unicode hex\": \"271E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128328\", \"Unicode hex\": \"1F548\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10016\", \"Unicode hex\": \"2720\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"10017\", \"Unicode hex\": \"2721\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"9770\", \"Unicode hex\": \"262A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"9775\", \"Unicode hex\": \"262F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128329\", \"Unicode hex\": \"1F549\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"9784\", \"Unicode hex\": \"2638\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"9800\", \"Unicode hex\": \"2648\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"9801\", \"Unicode hex\": \"2649\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"9802\", \"Unicode hex\": \"264A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"9803\", \"Unicode hex\": \"264B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"9804\", \"Unicode hex\": \"264C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"9805\", \"Unicode hex\": \"264D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"9806\", \"Unicode hex\": \"264E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"9807\", \"Unicode hex\": \"264F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"9808\", \"Unicode hex\": \"2650\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"9809\", \"Unicode hex\": \"2651\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"9810\", \"Unicode hex\": \"2652\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9811\", \"Unicode hex\": \"2653\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128624\", \"Unicode hex\": \"1F670\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128629\", \"Unicode hex\": \"1F675\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9899\", \"Unicode hex\": \"26AB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128318\", \"Unicode hex\": \"1F53E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9724\", \"Unicode hex\": \"25FC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128911\", \"Unicode hex\": \"1F78F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128912\", \"Unicode hex\": \"1F790\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"10065\", \"Unicode hex\": \"2751\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"10066\", \"Unicode hex\": \"2752\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"128927\", \"Unicode hex\": \"1F79F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"10731\", \"Unicode hex\": \"29EB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9670\", \"Unicode hex\": \"25C6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10070\", \"Unicode hex\": \"2756\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"8999\", \"Unicode hex\": \"2327\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"11193\", \"Unicode hex\": \"2BB9\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"8984\", \"Unicode hex\": \"2318\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"127989\", \"Unicode hex\": \"1F3F5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"127990\", \"Unicode hex\": \"1F3F6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128630\", \"Unicode hex\": \"1F676\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128631\", \"Unicode hex\": \"1F677\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"127\", \"Dingbat hex\": \"7F\", \"Unicode dec\": \"9647\", \"Unicode hex\": \"25AF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"127243\", \"Unicode hex\": \"1F10B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"10112\", \"Unicode hex\": \"2780\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"10113\", \"Unicode hex\": \"2781\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"10114\", \"Unicode hex\": \"2782\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"10115\", \"Unicode hex\": \"2783\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10116\", \"Unicode hex\": \"2784\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"10117\", \"Unicode hex\": \"2785\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"10118\", \"Unicode hex\": \"2786\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"10119\", \"Unicode hex\": \"2787\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"10120\", \"Unicode hex\": \"2788\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"10121\", \"Unicode hex\": \"2789\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127244\", \"Unicode hex\": \"1F10C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"10122\", \"Unicode hex\": \"278A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"10123\", \"Unicode hex\": \"278B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"10124\", \"Unicode hex\": \"278C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"10125\", \"Unicode hex\": \"278D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"10126\", \"Unicode hex\": \"278E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"10127\", \"Unicode hex\": \"278F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"10128\", \"Unicode hex\": \"2790\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"10129\", \"Unicode hex\": \"2791\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"10130\", \"Unicode hex\": \"2792\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"10131\", \"Unicode hex\": \"2793\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128610\", \"Unicode hex\": \"1F662\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128608\", \"Unicode hex\": \"1F660\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"128609\", \"Unicode hex\": \"1F661\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128611\", \"Unicode hex\": \"1F663\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128606\", \"Unicode hex\": \"1F65E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128604\", \"Unicode hex\": \"1F65C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128605\", \"Unicode hex\": \"1F65D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128607\", \"Unicode hex\": \"1F65F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"8729\", \"Unicode hex\": \"2219\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"11037\", \"Unicode hex\": \"2B1D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"11096\", \"Unicode hex\": \"2B58\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128902\", \"Unicode hex\": \"1F786\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128904\", \"Unicode hex\": \"1F788\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128906\", \"Unicode hex\": \"1F78A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128907\", \"Unicode hex\": \"1F78B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128319\", \"Unicode hex\": \"1F53F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9642\", \"Unicode hex\": \"25AA\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128910\", \"Unicode hex\": \"1F78E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128961\", \"Unicode hex\": \"1F7C1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128965\", \"Unicode hex\": \"1F7C5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"9733\", \"Unicode hex\": \"2605\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128971\", \"Unicode hex\": \"1F7CB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128975\", \"Unicode hex\": \"1F7CF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"128979\", \"Unicode hex\": \"1F7D3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"128977\", \"Unicode hex\": \"1F7D1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"11216\", \"Unicode hex\": \"2BD0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"8982\", \"Unicode hex\": \"2316\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"11214\", \"Unicode hex\": \"2BCE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"11215\", \"Unicode hex\": \"2BCF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"11217\", \"Unicode hex\": \"2BD1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"10026\", \"Unicode hex\": \"272A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"10032\", \"Unicode hex\": \"2730\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"128336\", \"Unicode hex\": \"1F550\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128337\", \"Unicode hex\": \"1F551\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128338\", \"Unicode hex\": \"1F552\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128339\", \"Unicode hex\": \"1F553\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128340\", \"Unicode hex\": \"1F554\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"128341\", \"Unicode hex\": \"1F555\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"128342\", \"Unicode hex\": \"1F556\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128343\", \"Unicode hex\": \"1F557\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128344\", \"Unicode hex\": \"1F558\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128345\", \"Unicode hex\": \"1F559\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128346\", \"Unicode hex\": \"1F55A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128347\", \"Unicode hex\": \"1F55B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11184\", \"Unicode hex\": \"2BB0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11185\", \"Unicode hex\": \"2BB1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11186\", \"Unicode hex\": \"2BB2\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"11187\", \"Unicode hex\": \"2BB3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"11188\", \"Unicode hex\": \"2BB4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"11189\", \"Unicode hex\": \"2BB5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11190\", \"Unicode hex\": \"2BB6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11191\", \"Unicode hex\": \"2BB7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128618\", \"Unicode hex\": \"1F66A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128619\", \"Unicode hex\": \"1F66B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128597\", \"Unicode hex\": \"1F655\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128596\", \"Unicode hex\": \"1F654\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128599\", \"Unicode hex\": \"1F657\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128598\", \"Unicode hex\": \"1F656\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128592\", \"Unicode hex\": \"1F650\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128593\", \"Unicode hex\": \"1F651\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128594\", \"Unicode hex\": \"1F652\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128595\", \"Unicode hex\": \"1F653\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"9003\", \"Unicode hex\": \"232B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8998\", \"Unicode hex\": \"2326\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"11160\", \"Unicode hex\": \"2B98\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"11162\", \"Unicode hex\": \"2B9A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"11161\", \"Unicode hex\": \"2B99\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"11163\", \"Unicode hex\": \"2B9B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"11144\", \"Unicode hex\": \"2B88\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"11146\", \"Unicode hex\": \"2B8A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"11145\", \"Unicode hex\": \"2B89\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"11147\", \"Unicode hex\": \"2B8B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129128\", \"Unicode hex\": \"1F868\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129130\", \"Unicode hex\": \"1F86A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129129\", \"Unicode hex\": \"1F869\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129131\", \"Unicode hex\": \"1F86B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129132\", \"Unicode hex\": \"1F86C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129133\", \"Unicode hex\": \"1F86D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129135\", \"Unicode hex\": \"1F86F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129134\", \"Unicode hex\": \"1F86E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129144\", \"Unicode hex\": \"1F878\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129146\", \"Unicode hex\": \"1F87A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129145\", \"Unicode hex\": \"1F879\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129147\", \"Unicode hex\": \"1F87B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129148\", \"Unicode hex\": \"1F87C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129149\", \"Unicode hex\": \"1F87D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129151\", \"Unicode hex\": \"1F87F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129150\", \"Unicode hex\": \"1F87E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"8678\", \"Unicode hex\": \"21E6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"8680\", \"Unicode hex\": \"21E8\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"8679\", \"Unicode hex\": \"21E7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8681\", \"Unicode hex\": \"21E9\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"11012\", \"Unicode hex\": \"2B04\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"8691\", \"Unicode hex\": \"21F3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"11009\", \"Unicode hex\": \"2B01\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11008\", \"Unicode hex\": \"2B00\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11011\", \"Unicode hex\": \"2B03\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"11010\", \"Unicode hex\": \"2B02\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"129196\", \"Unicode hex\": \"1F8AC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"129197\", \"Unicode hex\": \"1F8AD\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128502\", \"Unicode hex\": \"1F5F6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"10003\", \"Unicode hex\": \"2713\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"128503\", \"Unicode hex\": \"1F5F7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"128505\", \"Unicode hex\": \"1F5F9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128394\", \"Unicode hex\": \"1F58A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128395\", \"Unicode hex\": \"1F58B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128396\", \"Unicode hex\": \"1F58C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128397\", \"Unicode hex\": \"1F58D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"9988\", \"Unicode hex\": \"2704\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"9984\", \"Unicode hex\": \"2700\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128382\", \"Unicode hex\": \"1F57E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128381\", \"Unicode hex\": \"1F57D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128453\", \"Unicode hex\": \"1F5C5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128454\", \"Unicode hex\": \"1F5C6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128455\", \"Unicode hex\": \"1F5C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128456\", \"Unicode hex\": \"1F5C8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128457\", \"Unicode hex\": \"1F5C9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128458\", \"Unicode hex\": \"1F5CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128459\", \"Unicode hex\": \"1F5CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128460\", \"Unicode hex\": \"1F5CC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128461\", \"Unicode hex\": \"1F5CD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128465\", \"Unicode hex\": \"1F5D1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128468\", \"Unicode hex\": \"1F5D4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128437\", \"Unicode hex\": \"1F5B5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"128438\", \"Unicode hex\": \"1F5B6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128439\", \"Unicode hex\": \"1F5B7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128440\", \"Unicode hex\": \"1F5B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128429\", \"Unicode hex\": \"1F5AD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128431\", \"Unicode hex\": \"1F5AF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128433\", \"Unicode hex\": \"1F5B1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128402\", \"Unicode hex\": \"1F592\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128403\", \"Unicode hex\": \"1F593\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128408\", \"Unicode hex\": \"1F598\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128409\", \"Unicode hex\": \"1F599\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128410\", \"Unicode hex\": \"1F59A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"128411\", \"Unicode hex\": \"1F59B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128072\", \"Unicode hex\": \"1F448\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128073\", \"Unicode hex\": \"1F449\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128412\", \"Unicode hex\": \"1F59C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"128413\", \"Unicode hex\": \"1F59D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"128414\", \"Unicode hex\": \"1F59E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"128415\", \"Unicode hex\": \"1F59F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"128416\", \"Unicode hex\": \"1F5A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128417\", \"Unicode hex\": \"1F5A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"128070\", \"Unicode hex\": \"1F446\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128071\", \"Unicode hex\": \"1F447\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128418\", \"Unicode hex\": \"1F5A2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128419\", \"Unicode hex\": \"1F5A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128401\", \"Unicode hex\": \"1F591\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128500\", \"Unicode hex\": \"1F5F4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"128504\", \"Unicode hex\": \"1F5F8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"128501\", \"Unicode hex\": \"1F5F5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9745\", \"Unicode hex\": \"2611\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"11197\", \"Unicode hex\": \"2BBD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"9746\", \"Unicode hex\": \"2612\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"11198\", \"Unicode hex\": \"2BBE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"11199\", \"Unicode hex\": \"2BBF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128711\", \"Unicode hex\": \"1F6C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"128625\", \"Unicode hex\": \"1F671\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"128628\", \"Unicode hex\": \"1F674\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128626\", \"Unicode hex\": \"1F672\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128627\", \"Unicode hex\": \"1F673\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"8253\", \"Unicode hex\": \"203D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128633\", \"Unicode hex\": \"1F679\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128634\", \"Unicode hex\": \"1F67A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"128635\", \"Unicode hex\": \"1F67B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"128614\", \"Unicode hex\": \"1F666\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128612\", \"Unicode hex\": \"1F664\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"128613\", \"Unicode hex\": \"1F665\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128615\", \"Unicode hex\": \"1F667\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128602\", \"Unicode hex\": \"1F65A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128600\", \"Unicode hex\": \"1F658\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"128601\", \"Unicode hex\": \"1F659\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128603\", \"Unicode hex\": \"1F65B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9450\", \"Unicode hex\": \"24EA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"9312\", \"Unicode hex\": \"2460\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"9313\", \"Unicode hex\": \"2461\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9314\", \"Unicode hex\": \"2462\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"9315\", \"Unicode hex\": \"2463\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9316\", \"Unicode hex\": \"2464\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"9317\", \"Unicode hex\": \"2465\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9318\", \"Unicode hex\": \"2466\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9319\", \"Unicode hex\": \"2467\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9320\", \"Unicode hex\": \"2468\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9321\", \"Unicode hex\": \"2469\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9471\", \"Unicode hex\": \"24FF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"10102\", \"Unicode hex\": \"2776\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10103\", \"Unicode hex\": \"2777\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"10104\", \"Unicode hex\": \"2778\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10105\", \"Unicode hex\": \"2779\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"10106\", \"Unicode hex\": \"277A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"10107\", \"Unicode hex\": \"277B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"10108\", \"Unicode hex\": \"277C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"10109\", \"Unicode hex\": \"277D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"10110\", \"Unicode hex\": \"277E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"10111\", \"Unicode hex\": \"277F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"9737\", \"Unicode hex\": \"2609\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"127765\", \"Unicode hex\": \"1F315\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"9789\", \"Unicode hex\": \"263D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"9790\", \"Unicode hex\": \"263E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11839\", \"Unicode hex\": \"2E3F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10013\", \"Unicode hex\": \"271D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"128327\", \"Unicode hex\": \"1F547\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"128348\", \"Unicode hex\": \"1F55C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"128349\", \"Unicode hex\": \"1F55D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"128350\", \"Unicode hex\": \"1F55E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"128351\", \"Unicode hex\": \"1F55F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"128352\", \"Unicode hex\": \"1F560\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"128353\", \"Unicode hex\": \"1F561\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"128354\", \"Unicode hex\": \"1F562\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128355\", \"Unicode hex\": \"1F563\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128356\", \"Unicode hex\": \"1F564\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128357\", \"Unicode hex\": \"1F565\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128358\", \"Unicode hex\": \"1F566\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"128359\", \"Unicode hex\": \"1F567\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128616\", \"Unicode hex\": \"1F668\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128617\", \"Unicode hex\": \"1F669\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128900\", \"Unicode hex\": \"1F784\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"10625\", \"Unicode hex\": \"2981\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"9679\", \"Unicode hex\": \"25CF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"9675\", \"Unicode hex\": \"25CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128901\", \"Unicode hex\": \"1F785\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128903\", \"Unicode hex\": \"1F787\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128905\", \"Unicode hex\": \"1F789\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"8857\", \"Unicode hex\": \"2299\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"10687\", \"Unicode hex\": \"29BF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128908\", \"Unicode hex\": \"1F78C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128909\", \"Unicode hex\": \"1F78D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"9726\", \"Unicode hex\": \"25FE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"9632\", \"Unicode hex\": \"25A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"9633\", \"Unicode hex\": \"25A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128913\", \"Unicode hex\": \"1F791\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128914\", \"Unicode hex\": \"1F792\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128915\", \"Unicode hex\": \"1F793\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128916\", \"Unicode hex\": \"1F794\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9635\", \"Unicode hex\": \"25A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128917\", \"Unicode hex\": \"1F795\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128918\", \"Unicode hex\": \"1F796\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128919\", \"Unicode hex\": \"1F797\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128920\", \"Unicode hex\": \"1F798\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"11045\", \"Unicode hex\": \"2B25\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"9671\", \"Unicode hex\": \"25C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"128922\", \"Unicode hex\": \"1F79A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"9672\", \"Unicode hex\": \"25C8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"128923\", \"Unicode hex\": \"1F79B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128924\", \"Unicode hex\": \"1F79C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"128925\", \"Unicode hex\": \"1F79D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128926\", \"Unicode hex\": \"1F79E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"11050\", \"Unicode hex\": \"2B2A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"11047\", \"Unicode hex\": \"2B27\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128928\", \"Unicode hex\": \"1F7A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"9686\", \"Unicode hex\": \"25D6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"9687\", \"Unicode hex\": \"25D7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"11210\", \"Unicode hex\": \"2BCA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"11211\", \"Unicode hex\": \"2BCB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"11200\", \"Unicode hex\": \"2BC0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"11201\", \"Unicode hex\": \"2BC1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"11039\", \"Unicode hex\": \"2B1F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"11202\", \"Unicode hex\": \"2BC2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"11043\", \"Unicode hex\": \"2B23\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11042\", \"Unicode hex\": \"2B22\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11203\", \"Unicode hex\": \"2BC3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11204\", \"Unicode hex\": \"2BC4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128929\", \"Unicode hex\": \"1F7A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128930\", \"Unicode hex\": \"1F7A2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128931\", \"Unicode hex\": \"1F7A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128932\", \"Unicode hex\": \"1F7A4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128933\", \"Unicode hex\": \"1F7A5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128934\", \"Unicode hex\": \"1F7A6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128935\", \"Unicode hex\": \"1F7A7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128936\", \"Unicode hex\": \"1F7A8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128937\", \"Unicode hex\": \"1F7A9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128938\", \"Unicode hex\": \"1F7AA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128939\", \"Unicode hex\": \"1F7AB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128940\", \"Unicode hex\": \"1F7AC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128941\", \"Unicode hex\": \"1F7AD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128942\", \"Unicode hex\": \"1F7AE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128943\", \"Unicode hex\": \"1F7AF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"128944\", \"Unicode hex\": \"1F7B0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"128945\", \"Unicode hex\": \"1F7B1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"128946\", \"Unicode hex\": \"1F7B2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"128947\", \"Unicode hex\": \"1F7B3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"128948\", \"Unicode hex\": \"1F7B4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"128949\", \"Unicode hex\": \"1F7B5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"128950\", \"Unicode hex\": \"1F7B6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"128951\", \"Unicode hex\": \"1F7B7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"128952\", \"Unicode hex\": \"1F7B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"128953\", \"Unicode hex\": \"1F7B9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"128954\", \"Unicode hex\": \"1F7BA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"128955\", \"Unicode hex\": \"1F7BB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"128956\", \"Unicode hex\": \"1F7BC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128957\", \"Unicode hex\": \"1F7BD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128958\", \"Unicode hex\": \"1F7BE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"128959\", \"Unicode hex\": \"1F7BF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"128960\", \"Unicode hex\": \"1F7C0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128962\", \"Unicode hex\": \"1F7C2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128964\", \"Unicode hex\": \"1F7C4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"128966\", \"Unicode hex\": \"1F7C6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"128969\", \"Unicode hex\": \"1F7C9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128970\", \"Unicode hex\": \"1F7CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"10038\", \"Unicode hex\": \"2736\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"128972\", \"Unicode hex\": \"1F7CC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128974\", \"Unicode hex\": \"1F7CE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128976\", \"Unicode hex\": \"1F7D0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128978\", \"Unicode hex\": \"1F7D2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"10041\", \"Unicode hex\": \"2739\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128963\", \"Unicode hex\": \"1F7C3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128967\", \"Unicode hex\": \"1F7C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128973\", \"Unicode hex\": \"1F7CD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128980\", \"Unicode hex\": \"1F7D4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11212\", \"Unicode hex\": \"2BCC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11213\", \"Unicode hex\": \"2BCD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"8251\", \"Unicode hex\": \"203B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"8258\", \"Unicode hex\": \"2042\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"11104\", \"Unicode hex\": \"2B60\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"11106\", \"Unicode hex\": \"2B62\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"11105\", \"Unicode hex\": \"2B61\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"11107\", \"Unicode hex\": \"2B63\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"11110\", \"Unicode hex\": \"2B66\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"11111\", \"Unicode hex\": \"2B67\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"11113\", \"Unicode hex\": \"2B69\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"11112\", \"Unicode hex\": \"2B68\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"11120\", \"Unicode hex\": \"2B70\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"11122\", \"Unicode hex\": \"2B72\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"11121\", \"Unicode hex\": \"2B71\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"11123\", \"Unicode hex\": \"2B73\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"11126\", \"Unicode hex\": \"2B76\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"11128\", \"Unicode hex\": \"2B78\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"11131\", \"Unicode hex\": \"2B7B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"11133\", \"Unicode hex\": \"2B7D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"11108\", \"Unicode hex\": \"2B64\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"11109\", \"Unicode hex\": \"2B65\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"11114\", \"Unicode hex\": \"2B6A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"11116\", \"Unicode hex\": \"2B6C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"11115\", \"Unicode hex\": \"2B6B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"11117\", \"Unicode hex\": \"2B6D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"11085\", \"Unicode hex\": \"2B4D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"11168\", \"Unicode hex\": \"2BA0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"11169\", \"Unicode hex\": \"2BA1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"11170\", \"Unicode hex\": \"2BA2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"11171\", \"Unicode hex\": \"2BA3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"11172\", \"Unicode hex\": \"2BA4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"11173\", \"Unicode hex\": \"2BA5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"11174\", \"Unicode hex\": \"2BA6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"11175\", \"Unicode hex\": \"2BA7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"11152\", \"Unicode hex\": \"2B90\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"11153\", \"Unicode hex\": \"2B91\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"11154\", \"Unicode hex\": \"2B92\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"11155\", \"Unicode hex\": \"2B93\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"11136\", \"Unicode hex\": \"2B80\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"11139\", \"Unicode hex\": \"2B83\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"11134\", \"Unicode hex\": \"2B7E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"11135\", \"Unicode hex\": \"2B7F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"11140\", \"Unicode hex\": \"2B84\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"11142\", \"Unicode hex\": \"2B86\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"11141\", \"Unicode hex\": \"2B85\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"11143\", \"Unicode hex\": \"2B87\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"11151\", \"Unicode hex\": \"2B8F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"11149\", \"Unicode hex\": \"2B8D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"11150\", \"Unicode hex\": \"2B8E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"11148\", \"Unicode hex\": \"2B8C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"11118\", \"Unicode hex\": \"2B6E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"11119\", \"Unicode hex\": \"2B6F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9099\", \"Unicode hex\": \"238B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"8996\", \"Unicode hex\": \"2324\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"8963\", \"Unicode hex\": \"2303\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"8997\", \"Unicode hex\": \"2325\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"9251\", \"Unicode hex\": \"2423\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"9085\", \"Unicode hex\": \"237D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"8682\", \"Unicode hex\": \"21EA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"11192\", \"Unicode hex\": \"2BB8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"129184\", \"Unicode hex\": \"1F8A0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"129185\", \"Unicode hex\": \"1F8A1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"129186\", \"Unicode hex\": \"1F8A2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"129187\", \"Unicode hex\": \"1F8A3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"129188\", \"Unicode hex\": \"1F8A4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"129189\", \"Unicode hex\": \"1F8A5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"129190\", \"Unicode hex\": \"1F8A6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"129191\", \"Unicode hex\": \"1F8A7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"129192\", \"Unicode hex\": \"1F8A8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"129193\", \"Unicode hex\": \"1F8A9\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"129194\", \"Unicode hex\": \"1F8AA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"129195\", \"Unicode hex\": \"1F8AB\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"129104\", \"Unicode hex\": \"1F850\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"129106\", \"Unicode hex\": \"1F852\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"129105\", \"Unicode hex\": \"1F851\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"129107\", \"Unicode hex\": \"1F853\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"129108\", \"Unicode hex\": \"1F854\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"129109\", \"Unicode hex\": \"1F855\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"129111\", \"Unicode hex\": \"1F857\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"129110\", \"Unicode hex\": \"1F856\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"129112\", \"Unicode hex\": \"1F858\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"129113\", \"Unicode hex\": \"1F859\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9650\", \"Unicode hex\": \"25B2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9660\", \"Unicode hex\": \"25BC\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9651\", \"Unicode hex\": \"25B3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9661\", \"Unicode hex\": \"25BD\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9664\", \"Unicode hex\": \"25C0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9654\", \"Unicode hex\": \"25B6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"9665\", \"Unicode hex\": \"25C1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9655\", \"Unicode hex\": \"25B7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"9699\", \"Unicode hex\": \"25E3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"9698\", \"Unicode hex\": \"25E2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"9700\", \"Unicode hex\": \"25E4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"9701\", \"Unicode hex\": \"25E5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"128896\", \"Unicode hex\": \"1F780\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128898\", \"Unicode hex\": \"1F782\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128897\", \"Unicode hex\": \"1F781\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128899\", \"Unicode hex\": \"1F783\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"11205\", \"Unicode hex\": \"2BC5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"11206\", \"Unicode hex\": \"2BC6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"11207\", \"Unicode hex\": \"2BC7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11208\", \"Unicode hex\": \"2BC8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"11164\", \"Unicode hex\": \"2B9C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"11166\", \"Unicode hex\": \"2B9E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"11165\", \"Unicode hex\": \"2B9D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"11167\", \"Unicode hex\": \"2B9F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"129040\", \"Unicode hex\": \"1F810\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"129042\", \"Unicode hex\": \"1F812\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"129041\", \"Unicode hex\": \"1F811\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"129043\", \"Unicode hex\": \"1F813\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"129044\", \"Unicode hex\": \"1F814\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"129046\", \"Unicode hex\": \"1F816\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"129045\", \"Unicode hex\": \"1F815\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"129047\", \"Unicode hex\": \"1F817\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"129048\", \"Unicode hex\": \"1F818\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"129050\", \"Unicode hex\": \"1F81A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"129049\", \"Unicode hex\": \"1F819\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"129051\", \"Unicode hex\": \"1F81B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"129052\", \"Unicode hex\": \"1F81C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"129054\", \"Unicode hex\": \"1F81E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"129053\", \"Unicode hex\": \"1F81D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"129055\", \"Unicode hex\": \"1F81F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"129024\", \"Unicode hex\": \"1F800\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"129026\", \"Unicode hex\": \"1F802\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"129025\", \"Unicode hex\": \"1F801\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"129027\", \"Unicode hex\": \"1F803\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"129028\", \"Unicode hex\": \"1F804\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"129030\", \"Unicode hex\": \"1F806\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"129029\", \"Unicode hex\": \"1F805\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"129031\", \"Unicode hex\": \"1F807\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"129032\", \"Unicode hex\": \"1F808\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"129034\", \"Unicode hex\": \"1F80A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"129033\", \"Unicode hex\": \"1F809\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"129035\", \"Unicode hex\": \"1F80B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"129056\", \"Unicode hex\": \"1F820\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"129058\", \"Unicode hex\": \"1F822\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"129060\", \"Unicode hex\": \"1F824\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"129062\", \"Unicode hex\": \"1F826\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"129064\", \"Unicode hex\": \"1F828\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"129066\", \"Unicode hex\": \"1F82A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"129068\", \"Unicode hex\": \"1F82C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"129180\", \"Unicode hex\": \"1F89C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"129181\", \"Unicode hex\": \"1F89D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"129182\", \"Unicode hex\": \"1F89E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"129183\", \"Unicode hex\": \"1F89F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"129070\", \"Unicode hex\": \"1F82E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"129072\", \"Unicode hex\": \"1F830\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"129074\", \"Unicode hex\": \"1F832\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"129076\", \"Unicode hex\": \"1F834\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"129078\", \"Unicode hex\": \"1F836\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"129080\", \"Unicode hex\": \"1F838\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"129082\", \"Unicode hex\": \"1F83A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"129081\", \"Unicode hex\": \"1F839\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"129083\", \"Unicode hex\": \"1F83B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"129176\", \"Unicode hex\": \"1F898\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"129178\", \"Unicode hex\": \"1F89A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"129177\", \"Unicode hex\": \"1F899\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"129179\", \"Unicode hex\": \"1F89B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"129084\", \"Unicode hex\": \"1F83C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"129086\", \"Unicode hex\": \"1F83E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"129085\", \"Unicode hex\": \"1F83D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"129087\", \"Unicode hex\": \"1F83F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"129088\", \"Unicode hex\": \"1F840\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"129090\", \"Unicode hex\": \"1F842\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"129089\", \"Unicode hex\": \"1F841\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"129091\", \"Unicode hex\": \"1F843\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"129092\", \"Unicode hex\": \"1F844\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"129094\", \"Unicode hex\": \"1F846\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"129093\", \"Unicode hex\": \"1F845\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"129095\", \"Unicode hex\": \"1F847\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11176\", \"Unicode hex\": \"2BA8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11177\", \"Unicode hex\": \"2BA9\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"11178\", \"Unicode hex\": \"2BAA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"11179\", \"Unicode hex\": \"2BAB\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"11180\", \"Unicode hex\": \"2BAC\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"11181\", \"Unicode hex\": \"2BAD\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"11182\", \"Unicode hex\": \"2BAE\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"11183\", \"Unicode hex\": \"2BAF\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"129120\", \"Unicode hex\": \"1F860\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"129122\", \"Unicode hex\": \"1F862\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"129121\", \"Unicode hex\": \"1F861\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"129123\", \"Unicode hex\": \"1F863\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"129124\", \"Unicode hex\": \"1F864\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"129125\", \"Unicode hex\": \"1F865\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"129127\", \"Unicode hex\": \"1F867\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"129126\", \"Unicode hex\": \"1F866\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"129136\", \"Unicode hex\": \"1F870\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"129138\", \"Unicode hex\": \"1F872\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"129137\", \"Unicode hex\": \"1F871\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"129139\", \"Unicode hex\": \"1F873\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"129140\", \"Unicode hex\": \"1F874\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"129141\", \"Unicode hex\": \"1F875\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129143\", \"Unicode hex\": \"1F877\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129142\", \"Unicode hex\": \"1F876\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129152\", \"Unicode hex\": \"1F880\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129154\", \"Unicode hex\": \"1F882\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129153\", \"Unicode hex\": \"1F881\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129155\", \"Unicode hex\": \"1F883\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129156\", \"Unicode hex\": \"1F884\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129157\", \"Unicode hex\": \"1F885\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129159\", \"Unicode hex\": \"1F887\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129158\", \"Unicode hex\": \"1F886\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129168\", \"Unicode hex\": \"1F890\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129170\", \"Unicode hex\": \"1F892\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129169\", \"Unicode hex\": \"1F891\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129171\", \"Unicode hex\": \"1F893\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129172\", \"Unicode hex\": \"1F894\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129174\", \"Unicode hex\": \"1F896\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"129173\", \"Unicode hex\": \"1F895\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"129175\", \"Unicode hex\": \"1F897\" },\n];\nexports.default = dingbats;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hex = exports.dec = exports.codePoint = void 0;\nvar dingbats_1 = __importDefault(require(\"./dingbats\"));\nvar dingbatsByCodePoint = {};\nvar fromCodePoint = String.fromCodePoint ? String.fromCodePoint : fromCodePointPolyfill;\nfor (var _i = 0, dingbats_2 = dingbats_1.default; _i < dingbats_2.length; _i++) {\n var dingbat = dingbats_2[_i];\n var codePoint_1 = parseInt(dingbat[\"Unicode dec\"], 10);\n var scalarValue = {\n codePoint: codePoint_1,\n string: fromCodePoint(codePoint_1),\n };\n dingbatsByCodePoint[dingbat[\"Typeface name\"].toUpperCase() + \"_\" + dingbat[\"Dingbat dec\"]] = scalarValue;\n}\nfunction codePoint(typeface, codePoint) {\n return dingbatsByCodePoint[typeface.toUpperCase() + \"_\" + codePoint];\n}\nexports.codePoint = codePoint;\nfunction dec(typeface, dec) {\n return codePoint(typeface, parseInt(dec, 10));\n}\nexports.dec = dec;\nfunction hex(typeface, hex) {\n return codePoint(typeface, parseInt(hex, 16));\n}\nexports.hex = hex;\nfunction fromCodePointPolyfill(codePoint) {\n if (codePoint <= 0xFFFF) {\n // BMP\n return String.fromCharCode(codePoint);\n }\n else {\n // Astral\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n var highSurrogate = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;\n var lowSurrogate = (codePoint - 0x10000) % 0x400 + 0xDC00;\n return String.fromCharCode(highSurrogate, lowSurrogate);\n }\n}\n;\n","var _ = require(\"underscore\");\n\nexports.paragraph = paragraph;\nexports.run = run;\nexports._elements = elements;\nexports._elementsOfType = elementsOfType;\nexports.getDescendantsOfType = getDescendantsOfType;\nexports.getDescendants = getDescendants;\n\nfunction paragraph(transform) {\n return elementsOfType(\"paragraph\", transform);\n}\n\nfunction run(transform) {\n return elementsOfType(\"run\", transform);\n}\n\nfunction elementsOfType(elementType, transform) {\n return elements(function(element) {\n if (element.type === elementType) {\n return transform(element);\n } else {\n return element;\n }\n });\n}\n\nfunction elements(transform) {\n return function transformElement(element) {\n if (element.children) {\n var children = _.map(element.children, transformElement);\n element = _.extend(element, {children: children});\n }\n return transform(element);\n };\n}\n\n\nfunction getDescendantsOfType(element, type) {\n return getDescendants(element).filter(function(descendant) {\n return descendant.type === type;\n });\n}\n\nfunction getDescendants(element) {\n var descendants = [];\n\n visitDescendants(element, function(descendant) {\n descendants.push(descendant);\n });\n\n return descendants;\n}\n\nfunction visitDescendants(element, visit) {\n if (element.children) {\n element.children.forEach(function(child) {\n visitDescendants(child, visit);\n visit(child);\n });\n }\n}\n","exports.uriToZipEntryName = uriToZipEntryName;\nexports.replaceFragment = replaceFragment;\n\nfunction uriToZipEntryName(base, uri) {\n if (uri.charAt(0) === \"/\") {\n return uri.substr(1);\n } else {\n // In general, we should check first and second for trailing and leading slashes,\n // but in our specific case this seems to be sufficient\n return base + \"/\" + uri;\n }\n}\n\n\nfunction replaceFragment(uri, fragment) {\n var hashIndex = uri.indexOf(\"#\");\n if (hashIndex !== -1) {\n uri = uri.substring(0, hashIndex);\n }\n return uri + \"#\" + fragment;\n}\n","exports.createBodyReader = createBodyReader;\nexports._readNumberingProperties = readNumberingProperties;\n\nvar dingbatToUnicode = require(\"dingbat-to-unicode\");\nvar _ = require(\"underscore\");\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar warning = require(\"../results\").warning;\nvar xml = require(\"../xml\");\nvar transforms = require(\"../transforms\");\nvar uris = require(\"./uris\");\n\nfunction createBodyReader(options) {\n return {\n readXmlElement: function(element) {\n return new BodyReader(options).readXmlElement(element);\n },\n readXmlElements: function(elements) {\n return new BodyReader(options).readXmlElements(elements);\n }\n };\n}\n\nfunction BodyReader(options) {\n var complexFieldStack = [];\n var currentInstrText = [];\n\n // When a paragraph is marked as deleted, its contents should be combined\n // with the following paragraph. See 17.13.5.15 del (Deleted Paragraph) of\n // ECMA-376 4th edition Part 1.\n var deletedParagraphContents = [];\n\n var relationships = options.relationships;\n var contentTypes = options.contentTypes;\n var docxFile = options.docxFile;\n var files = options.files;\n var numbering = options.numbering;\n var styles = options.styles;\n\n function readXmlElements(elements) {\n var results = elements.map(readXmlElement);\n return combineResults(results);\n }\n\n function readXmlElement(element) {\n if (element.type === \"element\") {\n var handler = xmlElementReaders[element.name];\n if (handler) {\n return handler(element);\n } else if (!Object.prototype.hasOwnProperty.call(ignoreElements, element.name)) {\n var message = warning(\"An unrecognised element was ignored: \" + element.name);\n return emptyResultWithMessages([message]);\n }\n }\n return emptyResult();\n }\n\n function readParagraphProperties(element) {\n return readParagraphStyle(element).map(function(style) {\n return {\n type: \"paragraphProperties\",\n styleId: style.styleId,\n styleName: style.name,\n alignment: element.firstOrEmpty(\"w:jc\").attributes[\"w:val\"],\n numbering: readNumberingProperties(style.styleId, element.firstOrEmpty(\"w:numPr\"), numbering),\n indent: readParagraphIndent(element.firstOrEmpty(\"w:ind\"))\n };\n });\n }\n\n function readParagraphIndent(element) {\n return {\n start: element.attributes[\"w:start\"] || element.attributes[\"w:left\"],\n end: element.attributes[\"w:end\"] || element.attributes[\"w:right\"],\n firstLine: element.attributes[\"w:firstLine\"],\n hanging: element.attributes[\"w:hanging\"]\n };\n }\n\n function readRunProperties(element) {\n return readRunStyle(element).map(function(style) {\n var fontSizeString = element.firstOrEmpty(\"w:sz\").attributes[\"w:val\"];\n // w:sz gives the font size in half points, so halve the value to get the size in points\n var fontSize = /^[0-9]+$/.test(fontSizeString) ? parseInt(fontSizeString, 10) / 2 : null;\n\n return {\n type: \"runProperties\",\n styleId: style.styleId,\n styleName: style.name,\n verticalAlignment: element.firstOrEmpty(\"w:vertAlign\").attributes[\"w:val\"],\n font: element.firstOrEmpty(\"w:rFonts\").attributes[\"w:ascii\"],\n fontSize: fontSize,\n isBold: readBooleanElement(element.first(\"w:b\")),\n isUnderline: readUnderline(element.first(\"w:u\")),\n isItalic: readBooleanElement(element.first(\"w:i\")),\n isStrikethrough: readBooleanElement(element.first(\"w:strike\")),\n isAllCaps: readBooleanElement(element.first(\"w:caps\")),\n isSmallCaps: readBooleanElement(element.first(\"w:smallCaps\")),\n highlight: readHighlightValue(element.firstOrEmpty(\"w:highlight\").attributes[\"w:val\"])\n };\n });\n }\n\n function readUnderline(element) {\n if (element) {\n var value = element.attributes[\"w:val\"];\n return value !== undefined && value !== \"false\" && value !== \"0\" && value !== \"none\";\n } else {\n return false;\n }\n }\n\n function readBooleanElement(element) {\n if (element) {\n var value = element.attributes[\"w:val\"];\n return value !== \"false\" && value !== \"0\";\n } else {\n return false;\n }\n }\n\n function readBooleanAttributeValue(value) {\n return value !== \"false\" && value !== \"0\";\n }\n\n function readHighlightValue(value) {\n if (!value || value === \"none\") {\n return null;\n } else {\n return value;\n }\n }\n\n function readParagraphStyle(element) {\n return readStyle(element, \"w:pStyle\", \"Paragraph\", styles.findParagraphStyleById);\n }\n\n function readRunStyle(element) {\n return readStyle(element, \"w:rStyle\", \"Run\", styles.findCharacterStyleById);\n }\n\n function readTableStyle(element) {\n return readStyle(element, \"w:tblStyle\", \"Table\", styles.findTableStyleById);\n }\n\n function readStyle(element, styleTagName, styleType, findStyleById) {\n var messages = [];\n var styleElement = element.first(styleTagName);\n var styleId = null;\n var name = null;\n if (styleElement) {\n styleId = styleElement.attributes[\"w:val\"];\n if (styleId) {\n var style = findStyleById(styleId);\n if (style) {\n name = style.name;\n } else {\n messages.push(undefinedStyleWarning(styleType, styleId));\n }\n }\n }\n return elementResultWithMessages({styleId: styleId, name: name}, messages);\n }\n\n function readFldChar(element) {\n var type = element.attributes[\"w:fldCharType\"];\n if (type === \"begin\") {\n complexFieldStack.push({type: \"begin\", fldChar: element});\n currentInstrText = [];\n } else if (type === \"end\") {\n var complexFieldEnd = complexFieldStack.pop();\n if (complexFieldEnd.type === \"begin\") {\n complexFieldEnd = parseCurrentInstrText(complexFieldEnd);\n }\n if (complexFieldEnd.type === \"checkbox\") {\n return elementResult(documents.checkbox({\n checked: complexFieldEnd.checked\n }));\n }\n } else if (type === \"separate\") {\n var complexFieldSeparate = complexFieldStack.pop();\n var complexField = parseCurrentInstrText(complexFieldSeparate);\n complexFieldStack.push(complexField);\n }\n return emptyResult();\n }\n\n function currentHyperlinkOptions() {\n var topHyperlink = _.last(complexFieldStack.filter(function(complexField) {\n return complexField.type === \"hyperlink\";\n }));\n return topHyperlink ? topHyperlink.options : null;\n }\n\n function parseCurrentInstrText(complexField) {\n return parseInstrText(\n currentInstrText.join(''),\n complexField.type === \"begin\"\n ? complexField.fldChar\n : xml.emptyElement\n );\n }\n\n function parseInstrText(instrText, fldChar) {\n var externalLinkResult = /\\s*HYPERLINK \"(.*)\"/.exec(instrText);\n if (externalLinkResult) {\n return {type: \"hyperlink\", options: {href: externalLinkResult[1]}};\n }\n\n var internalLinkResult = /\\s*HYPERLINK\\s+\\\\l\\s+\"(.*)\"/.exec(instrText);\n if (internalLinkResult) {\n return {type: \"hyperlink\", options: {anchor: internalLinkResult[1]}};\n }\n\n var checkboxResult = /\\s*FORMCHECKBOX\\s*/.exec(instrText);\n if (checkboxResult) {\n var checkboxElement = fldChar\n .firstOrEmpty(\"w:ffData\")\n .firstOrEmpty(\"w:checkBox\");\n var checkedElement = checkboxElement.first(\"w:checked\");\n var checked = checkedElement == null\n ? readBooleanElement(checkboxElement.first(\"w:default\"))\n : readBooleanElement(checkedElement);\n return {type: \"checkbox\", checked: checked};\n }\n\n return {type: \"unknown\"};\n }\n\n function readInstrText(element) {\n currentInstrText.push(element.text());\n return emptyResult();\n }\n\n function readSymbol(element) {\n // See 17.3.3.30 sym (Symbol Character) of ECMA-376 4th edition Part 1\n var font = element.attributes[\"w:font\"];\n var char = element.attributes[\"w:char\"];\n var unicodeCharacter = dingbatToUnicode.hex(font, char);\n if (unicodeCharacter == null && /^F0..$/.test(char)) {\n unicodeCharacter = dingbatToUnicode.hex(font, char.substring(2));\n }\n\n if (unicodeCharacter == null) {\n return emptyResultWithMessages([warning(\n \"A w:sym element with an unsupported character was ignored: char \" + char + \" in font \" + font\n )]);\n } else {\n return elementResult(new documents.Text(unicodeCharacter.string));\n }\n }\n\n function noteReferenceReader(noteType) {\n return function(element) {\n var noteId = element.attributes[\"w:id\"];\n return elementResult(new documents.NoteReference({\n noteType: noteType,\n noteId: noteId\n }));\n };\n }\n\n function readCommentReference(element) {\n return elementResult(documents.commentReference({\n commentId: element.attributes[\"w:id\"]\n }));\n }\n\n function readChildElements(element) {\n return readXmlElements(element.children);\n }\n\n var xmlElementReaders = {\n \"w:p\": function(element) {\n var paragraphPropertiesElement = element.firstOrEmpty(\"w:pPr\");\n\n var isDeleted = !!paragraphPropertiesElement\n .firstOrEmpty(\"w:rPr\")\n .first(\"w:del\");\n\n if (isDeleted) {\n element.children.forEach(function(child) {\n deletedParagraphContents.push(child);\n });\n return emptyResult();\n } else {\n var childrenXml = element.children;\n if (deletedParagraphContents.length > 0) {\n childrenXml = deletedParagraphContents.concat(childrenXml);\n deletedParagraphContents = [];\n }\n return ReadResult.map(\n readParagraphProperties(paragraphPropertiesElement),\n readXmlElements(childrenXml),\n function(properties, children) {\n return new documents.Paragraph(children, properties);\n }\n ).insertExtra();\n }\n },\n \"w:r\": function(element) {\n return ReadResult.map(\n readRunProperties(element.firstOrEmpty(\"w:rPr\")),\n readXmlElements(element.children),\n function(properties, children) {\n var hyperlinkOptions = currentHyperlinkOptions();\n if (hyperlinkOptions !== null) {\n children = [new documents.Hyperlink(children, hyperlinkOptions)];\n }\n\n return new documents.Run(children, properties);\n }\n );\n },\n \"w:fldChar\": readFldChar,\n \"w:instrText\": readInstrText,\n \"w:t\": function(element) {\n return elementResult(new documents.Text(element.text()));\n },\n \"w:tab\": function(element) {\n return elementResult(new documents.Tab());\n },\n \"w:noBreakHyphen\": function() {\n return elementResult(new documents.Text(\"\\u2011\"));\n },\n \"w:softHyphen\": function(element) {\n return elementResult(new documents.Text(\"\\u00AD\"));\n },\n \"w:sym\": readSymbol,\n \"w:hyperlink\": function(element) {\n var relationshipId = element.attributes[\"r:id\"];\n var anchor = element.attributes[\"w:anchor\"];\n return readXmlElements(element.children).map(function(children) {\n function create(options) {\n var targetFrame = element.attributes[\"w:tgtFrame\"] || null;\n\n return new documents.Hyperlink(\n children,\n _.extend({targetFrame: targetFrame}, options)\n );\n }\n\n if (relationshipId) {\n var href = relationships.findTargetByRelationshipId(relationshipId);\n if (anchor) {\n href = uris.replaceFragment(href, anchor);\n }\n return create({href: href});\n } else if (anchor) {\n return create({anchor: anchor});\n } else {\n return children;\n }\n });\n },\n \"w:tbl\": readTable,\n \"w:tr\": readTableRow,\n \"w:tc\": readTableCell,\n \"w:footnoteReference\": noteReferenceReader(\"footnote\"),\n \"w:endnoteReference\": noteReferenceReader(\"endnote\"),\n \"w:commentReference\": readCommentReference,\n \"w:br\": function(element) {\n var breakType = element.attributes[\"w:type\"];\n if (breakType == null || breakType === \"textWrapping\") {\n return elementResult(documents.lineBreak);\n } else if (breakType === \"page\") {\n return elementResult(documents.pageBreak);\n } else if (breakType === \"column\") {\n return elementResult(documents.columnBreak);\n } else {\n return emptyResultWithMessages([warning(\"Unsupported break type: \" + breakType)]);\n }\n },\n \"w:bookmarkStart\": function(element){\n var name = element.attributes[\"w:name\"];\n if (name === \"_GoBack\") {\n return emptyResult();\n } else {\n return elementResult(new documents.BookmarkStart({name: name}));\n }\n },\n\n \"mc:AlternateContent\": function(element) {\n return readChildElements(element.firstOrEmpty(\"mc:Fallback\"));\n },\n\n \"w:sdt\": function(element) {\n var contentResult = readXmlElements(element.firstOrEmpty(\"w:sdtContent\").children);\n return contentResult.map(function(content) {\n // From the WordML standard: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/3350cb64-931f-41f7-8824-f18b2568ce66\n //\n // > A CT_SdtCheckbox element that specifies that the parent\n // > structured document tag is a checkbox when displayed in the\n // > document. The parent structured document tag contents MUST\n // > contain a single character and optionally an additional\n // > character in a deleted run.\n\n var checkbox = element\n .firstOrEmpty(\"w:sdtPr\")\n .first(\"wordml:checkbox\");\n\n if (checkbox) {\n var checkedElement = checkbox.first(\"wordml:checked\");\n var isChecked = !!checkedElement && readBooleanAttributeValue(\n checkedElement.attributes[\"wordml:val\"]\n );\n var documentCheckbox = documents.checkbox({\n checked: isChecked\n });\n\n var hasCheckbox = false;\n var replacedContent = content.map(transforms._elementsOfType(\n documents.types.text,\n function(text) {\n if (text.value.length > 0 && !hasCheckbox) {\n hasCheckbox = true;\n return documentCheckbox;\n } else {\n return text;\n }\n }\n ));\n\n if (hasCheckbox) {\n return replacedContent;\n } else {\n return documentCheckbox;\n }\n\n } else {\n return content;\n }\n });\n },\n\n \"w:ins\": readChildElements,\n \"w:object\": readChildElements,\n \"w:smartTag\": readChildElements,\n \"w:drawing\": readChildElements,\n \"w:pict\": function(element) {\n return readChildElements(element).toExtra();\n },\n \"v:roundrect\": readChildElements,\n \"v:shape\": readChildElements,\n \"v:textbox\": readChildElements,\n \"w:txbxContent\": readChildElements,\n \"wp:inline\": readDrawingElement,\n \"wp:anchor\": readDrawingElement,\n \"v:imagedata\": readImageData,\n \"v:group\": readChildElements,\n \"v:rect\": readChildElements\n };\n\n return {\n readXmlElement: readXmlElement,\n readXmlElements: readXmlElements\n };\n\n\n function readTable(element) {\n var propertiesResult = readTableProperties(element.firstOrEmpty(\"w:tblPr\"));\n return readXmlElements(element.children)\n .flatMap(calculateRowSpans)\n .flatMap(function(children) {\n return propertiesResult.map(function(properties) {\n return documents.Table(children, properties);\n });\n });\n }\n\n function readTableProperties(element) {\n return readTableStyle(element).map(function(style) {\n return {\n styleId: style.styleId,\n styleName: style.name\n };\n });\n }\n\n function readTableRow(element) {\n var properties = element.firstOrEmpty(\"w:trPr\");\n\n // See 17.13.5.12 del (Deleted Table Row) of ECMA-376 4th edition Part 1\n var isDeleted = !!properties.first(\"w:del\");\n if (isDeleted) {\n return emptyResult();\n }\n\n var isHeader = !!properties.first(\"w:tblHeader\");\n return readXmlElements(element.children).map(function(children) {\n return documents.TableRow(children, {isHeader: isHeader});\n });\n }\n\n function readTableCell(element) {\n return readXmlElements(element.children).map(function(children) {\n var properties = element.firstOrEmpty(\"w:tcPr\");\n\n var gridSpan = properties.firstOrEmpty(\"w:gridSpan\").attributes[\"w:val\"];\n var colSpan = gridSpan ? parseInt(gridSpan, 10) : 1;\n\n var cell = documents.TableCell(children, {colSpan: colSpan});\n cell._vMerge = readVMerge(properties);\n return cell;\n });\n }\n\n function readVMerge(properties) {\n var element = properties.first(\"w:vMerge\");\n if (element) {\n var val = element.attributes[\"w:val\"];\n return val === \"continue\" || !val;\n } else {\n return null;\n }\n }\n\n function calculateRowSpans(rows) {\n var unexpectedNonRows = _.any(rows, function(row) {\n return row.type !== documents.types.tableRow;\n });\n if (unexpectedNonRows) {\n removeVMergeProperties(rows);\n return elementResultWithMessages(rows, [warning(\n \"unexpected non-row element in table, cell merging may be incorrect\"\n )]);\n }\n var unexpectedNonCells = _.any(rows, function(row) {\n return _.any(row.children, function(cell) {\n return cell.type !== documents.types.tableCell;\n });\n });\n if (unexpectedNonCells) {\n removeVMergeProperties(rows);\n return elementResultWithMessages(rows, [warning(\n \"unexpected non-cell element in table row, cell merging may be incorrect\"\n )]);\n }\n\n var columns = {};\n\n rows.forEach(function(row) {\n var cellIndex = 0;\n row.children.forEach(function(cell) {\n if (cell._vMerge && columns[cellIndex]) {\n columns[cellIndex].rowSpan++;\n } else {\n columns[cellIndex] = cell;\n cell._vMerge = false;\n }\n cellIndex += cell.colSpan;\n });\n });\n\n rows.forEach(function(row) {\n row.children = row.children.filter(function(cell) {\n return !cell._vMerge;\n });\n row.children.forEach(function(cell) {\n delete cell._vMerge;\n });\n });\n\n return elementResult(rows);\n }\n\n function removeVMergeProperties(rows) {\n rows.forEach(function(row) {\n var cells = transforms.getDescendantsOfType(row, documents.types.tableCell);\n cells.forEach(function(cell) {\n delete cell._vMerge;\n });\n });\n }\n\n function readDrawingElement(element) {\n var blips = element\n .getElementsByTagName(\"a:graphic\")\n .getElementsByTagName(\"a:graphicData\")\n .getElementsByTagName(\"pic:pic\")\n .getElementsByTagName(\"pic:blipFill\")\n .getElementsByTagName(\"a:blip\");\n\n return combineResults(blips.map(readBlip.bind(null, element)));\n }\n\n function readBlip(element, blip) {\n var properties = element.first(\"wp:docPr\").attributes;\n var altText = isBlank(properties.descr) ? properties.title : properties.descr;\n var blipImageFile = findBlipImageFile(blip);\n if (blipImageFile === null) {\n return emptyResultWithMessages([warning(\"Could not find image file for a:blip element\")]);\n } else {\n return readImage(blipImageFile, altText);\n }\n }\n\n function isBlank(value) {\n return value == null || /^\\s*$/.test(value);\n }\n\n function findBlipImageFile(blip) {\n var embedRelationshipId = blip.attributes[\"r:embed\"];\n var linkRelationshipId = blip.attributes[\"r:link\"];\n if (embedRelationshipId) {\n return findEmbeddedImageFile(embedRelationshipId);\n } else if (linkRelationshipId) {\n var imagePath = relationships.findTargetByRelationshipId(linkRelationshipId);\n return {\n path: imagePath,\n read: files.read.bind(files, imagePath)\n };\n } else {\n return null;\n }\n }\n\n function readImageData(element) {\n var relationshipId = element.attributes['r:id'];\n\n if (relationshipId) {\n return readImage(\n findEmbeddedImageFile(relationshipId),\n element.attributes[\"o:title\"]);\n } else {\n return emptyResultWithMessages([warning(\"A v:imagedata element without a relationship ID was ignored\")]);\n }\n }\n\n function findEmbeddedImageFile(relationshipId) {\n var path = uris.uriToZipEntryName(\"word\", relationships.findTargetByRelationshipId(relationshipId));\n return {\n path: path,\n read: docxFile.read.bind(docxFile, path)\n };\n }\n\n function readImage(imageFile, altText) {\n var contentType = contentTypes.findContentType(imageFile.path);\n\n var image = documents.Image({\n readImage: imageFile.read,\n altText: altText,\n contentType: contentType\n });\n var warnings = supportedImageTypes[contentType] ?\n [] : warning(\"Image of type \" + contentType + \" is unlikely to display in web browsers\");\n return elementResultWithMessages(image, warnings);\n }\n\n function undefinedStyleWarning(type, styleId) {\n return warning(\n type + \" style with ID \" + styleId + \" was referenced but not defined in the document\");\n }\n}\n\n\nfunction readNumberingProperties(styleId, element, numbering) {\n var level = element.firstOrEmpty(\"w:ilvl\").attributes[\"w:val\"];\n var numId = element.firstOrEmpty(\"w:numId\").attributes[\"w:val\"];\n if (level !== undefined && numId !== undefined) {\n return numbering.findLevel(numId, level);\n }\n\n if (styleId != null) {\n var levelByStyleId = numbering.findLevelByParagraphStyleId(styleId);\n if (levelByStyleId != null) {\n return levelByStyleId;\n }\n }\n\n // Some malformed documents define numbering levels without an index, and\n // reference the numbering using a w:numPr element without a w:ilvl child.\n // To handle such cases, we assume a level of 0 as a fallback.\n if (numId !== undefined) {\n return numbering.findLevel(numId, \"0\");\n }\n\n return null;\n}\n\nvar supportedImageTypes = {\n \"image/png\": true,\n \"image/gif\": true,\n \"image/jpeg\": true,\n \"image/svg+xml\": true,\n \"image/tiff\": true\n};\n\nvar ignoreElements = {\n \"office-word:wrap\": true,\n \"v:shadow\": true,\n \"v:shapetype\": true,\n \"w:annotationRef\": true,\n \"w:bookmarkEnd\": true,\n \"w:sectPr\": true,\n \"w:proofErr\": true,\n \"w:lastRenderedPageBreak\": true,\n \"w:commentRangeStart\": true,\n \"w:commentRangeEnd\": true,\n \"w:del\": true,\n \"w:footnoteRef\": true,\n \"w:endnoteRef\": true,\n \"w:pPr\": true,\n \"w:rPr\": true,\n \"w:tblPr\": true,\n \"w:tblGrid\": true,\n \"w:trPr\": true,\n \"w:tcPr\": true\n};\n\nfunction emptyResultWithMessages(messages) {\n return new ReadResult(null, null, messages);\n}\n\nfunction emptyResult() {\n return new ReadResult(null);\n}\n\nfunction elementResult(element) {\n return new ReadResult(element);\n}\n\nfunction elementResultWithMessages(element, messages) {\n return new ReadResult(element, null, messages);\n}\n\nfunction ReadResult(element, extra, messages) {\n this.value = element || [];\n this.extra = extra || [];\n this._result = new Result({\n element: this.value,\n extra: extra\n }, messages);\n this.messages = this._result.messages;\n}\n\nReadResult.prototype.toExtra = function() {\n return new ReadResult(null, joinElements(this.extra, this.value), this.messages);\n};\n\nReadResult.prototype.insertExtra = function() {\n var extra = this.extra;\n if (extra && extra.length) {\n return new ReadResult(joinElements(this.value, extra), null, this.messages);\n } else {\n return this;\n }\n};\n\nReadResult.prototype.map = function(func) {\n var result = this._result.map(function(value) {\n return func(value.element);\n });\n return new ReadResult(result.value, this.extra, result.messages);\n};\n\nReadResult.prototype.flatMap = function(func) {\n var result = this._result.flatMap(function(value) {\n return func(value.element)._result;\n });\n return new ReadResult(result.value.element, joinElements(this.extra, result.value.extra), result.messages);\n};\n\nReadResult.map = function(first, second, func) {\n return new ReadResult(\n func(first.value, second.value),\n joinElements(first.extra, second.extra),\n first.messages.concat(second.messages)\n );\n};\n\nfunction combineResults(results) {\n var result = Result.combine(_.pluck(results, \"_result\"));\n return new ReadResult(\n _.flatten(_.pluck(result.value, \"element\")),\n _.filter(_.flatten(_.pluck(result.value, \"extra\")), identity),\n result.messages\n );\n}\n\nfunction joinElements(first, second) {\n return _.flatten([first, second]);\n}\n\nfunction identity(value) {\n return value;\n}\n","exports.DocumentXmlReader = DocumentXmlReader;\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\n\nfunction DocumentXmlReader(options) {\n var bodyReader = options.bodyReader;\n\n function convertXmlToDocument(element) {\n var body = element.first(\"w:body\");\n\n if (body == null) {\n throw new Error(\"Could not find the body element: are you sure this is a docx file?\");\n }\n\n var result = bodyReader.readXmlElements(body.children)\n .map(function(children) {\n return new documents.Document(children, {\n notes: options.notes,\n comments: options.comments\n });\n });\n return new Result(result.value, result.messages);\n }\n\n return {\n convertXmlToDocument: convertXmlToDocument\n };\n}\n","exports.readRelationships = readRelationships;\nexports.defaultValue = new Relationships([]);\nexports.Relationships = Relationships;\n\n\nfunction readRelationships(element) {\n var relationships = [];\n element.children.forEach(function(child) {\n if (child.name === \"relationships:Relationship\") {\n var relationship = {\n relationshipId: child.attributes.Id,\n target: child.attributes.Target,\n type: child.attributes.Type\n };\n relationships.push(relationship);\n }\n });\n return new Relationships(relationships);\n}\n\nfunction Relationships(relationships) {\n var targetsByRelationshipId = {};\n relationships.forEach(function(relationship) {\n targetsByRelationshipId[relationship.relationshipId] = relationship.target;\n });\n\n var targetsByType = {};\n relationships.forEach(function(relationship) {\n if (!targetsByType[relationship.type]) {\n targetsByType[relationship.type] = [];\n }\n targetsByType[relationship.type].push(relationship.target);\n });\n\n return {\n findTargetByRelationshipId: function(relationshipId) {\n return targetsByRelationshipId[relationshipId];\n },\n findTargetsByType: function(type) {\n return targetsByType[type] || [];\n }\n };\n}\n","exports.readContentTypesFromXml = readContentTypesFromXml;\n\nvar fallbackContentTypes = {\n \"png\": \"png\",\n \"gif\": \"gif\",\n \"jpeg\": \"jpeg\",\n \"jpg\": \"jpeg\",\n \"tif\": \"tiff\",\n \"tiff\": \"tiff\",\n \"bmp\": \"bmp\"\n};\n\nexports.defaultContentTypes = contentTypes({}, {});\n\n\nfunction readContentTypesFromXml(element) {\n var extensionDefaults = {};\n var overrides = {};\n \n element.children.forEach(function(child) {\n if (child.name === \"content-types:Default\") {\n extensionDefaults[child.attributes.Extension] = child.attributes.ContentType;\n }\n if (child.name === \"content-types:Override\") {\n var name = child.attributes.PartName;\n if (name.charAt(0) === \"/\") {\n name = name.substring(1);\n }\n overrides[name] = child.attributes.ContentType;\n }\n });\n return contentTypes(overrides, extensionDefaults);\n}\n\nfunction contentTypes(overrides, extensionDefaults) {\n return {\n findContentType: function(path) {\n var overrideContentType = overrides[path];\n if (overrideContentType) {\n return overrideContentType;\n } else {\n var pathParts = path.split(\".\");\n var extension = pathParts[pathParts.length - 1];\n if (extensionDefaults.hasOwnProperty(extension)) {\n return extensionDefaults[extension];\n } else {\n var fallback = fallbackContentTypes[extension.toLowerCase()];\n if (fallback) {\n return \"image/\" + fallback;\n } else {\n return null;\n }\n }\n }\n }\n };\n \n}\n","var _ = require(\"underscore\");\n\nexports.readNumberingXml = readNumberingXml;\nexports.Numbering = Numbering;\nexports.defaultNumbering = new Numbering({}, {});\n\nfunction Numbering(nums, abstractNums, styles) {\n var allLevels = _.flatten(_.values(abstractNums).map(function(abstractNum) {\n return _.values(abstractNum.levels);\n }));\n\n var levelsByParagraphStyleId = _.indexBy(\n allLevels.filter(function(level) {\n return level.paragraphStyleId != null;\n }),\n \"paragraphStyleId\"\n );\n\n function findLevel(numId, level) {\n var num = nums[numId];\n if (num) {\n var abstractNum = abstractNums[num.abstractNumId];\n if (!abstractNum) {\n return null;\n } else if (abstractNum.numStyleLink == null) {\n return abstractNums[num.abstractNumId].levels[level];\n } else {\n var style = styles.findNumberingStyleById(abstractNum.numStyleLink);\n return findLevel(style.numId, level);\n }\n } else {\n return null;\n }\n }\n\n function findLevelByParagraphStyleId(styleId) {\n return levelsByParagraphStyleId[styleId] || null;\n }\n\n return {\n findLevel: findLevel,\n findLevelByParagraphStyleId: findLevelByParagraphStyleId\n };\n}\n\nfunction readNumberingXml(root, options) {\n if (!options || !options.styles) {\n throw new Error(\"styles is missing\");\n }\n\n var abstractNums = readAbstractNums(root);\n var nums = readNums(root, abstractNums);\n return new Numbering(nums, abstractNums, options.styles);\n}\n\nfunction readAbstractNums(root) {\n var abstractNums = {};\n root.getElementsByTagName(\"w:abstractNum\").forEach(function(element) {\n var id = element.attributes[\"w:abstractNumId\"];\n abstractNums[id] = readAbstractNum(element);\n });\n return abstractNums;\n}\n\nfunction readAbstractNum(element) {\n var levels = {};\n\n // Some malformed documents define numbering levels without an index, and\n // reference the numbering using a w:numPr element without a w:ilvl child.\n // To handle such cases, we assume a level of 0 as a fallback.\n var levelWithoutIndex = null;\n\n element.getElementsByTagName(\"w:lvl\").forEach(function(levelElement) {\n var levelIndex = levelElement.attributes[\"w:ilvl\"];\n var numFmt = levelElement.firstOrEmpty(\"w:numFmt\").attributes[\"w:val\"];\n var isOrdered = numFmt !== \"bullet\";\n var paragraphStyleId = levelElement.firstOrEmpty(\"w:pStyle\").attributes[\"w:val\"];\n\n if (levelIndex === undefined) {\n levelWithoutIndex = {\n isOrdered: isOrdered,\n level: \"0\",\n paragraphStyleId: paragraphStyleId\n };\n } else {\n levels[levelIndex] = {\n isOrdered: isOrdered,\n level: levelIndex,\n paragraphStyleId: paragraphStyleId\n };\n }\n });\n\n if (levelWithoutIndex !== null && levels[levelWithoutIndex.level] === undefined) {\n levels[levelWithoutIndex.level] = levelWithoutIndex;\n }\n\n var numStyleLink = element.firstOrEmpty(\"w:numStyleLink\").attributes[\"w:val\"];\n\n return {levels: levels, numStyleLink: numStyleLink};\n}\n\nfunction readNums(root) {\n var nums = {};\n root.getElementsByTagName(\"w:num\").forEach(function(element) {\n var numId = element.attributes[\"w:numId\"];\n var abstractNumId = element.first(\"w:abstractNumId\").attributes[\"w:val\"];\n nums[numId] = {abstractNumId: abstractNumId};\n });\n return nums;\n}\n","exports.readStylesXml = readStylesXml;\nexports.Styles = Styles;\nexports.defaultStyles = new Styles({}, {});\n\nfunction Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles) {\n return {\n findParagraphStyleById: function(styleId) {\n return paragraphStyles[styleId];\n },\n findCharacterStyleById: function(styleId) {\n return characterStyles[styleId];\n },\n findTableStyleById: function(styleId) {\n return tableStyles[styleId];\n },\n findNumberingStyleById: function(styleId) {\n return numberingStyles[styleId];\n }\n };\n}\n\nStyles.EMPTY = new Styles({}, {}, {}, {});\n\nfunction readStylesXml(root) {\n var paragraphStyles = {};\n var characterStyles = {};\n var tableStyles = {};\n var numberingStyles = {};\n\n var styles = {\n \"paragraph\": paragraphStyles,\n \"character\": characterStyles,\n \"table\": tableStyles,\n \"numbering\": numberingStyles\n };\n\n root.getElementsByTagName(\"w:style\").forEach(function(styleElement) {\n var style = readStyleElement(styleElement);\n var styleSet = styles[style.type];\n\n // Per 17.7.4.17 style (Style Definition) of ECMA-376 4th edition Part 1:\n //\n // > If multiple style definitions each declare the same value for their\n // > styleId, then the first such instance shall keep its current\n // > identifier with all other instances being reassigned in any manner\n // > desired.\n //\n // For the purpose of conversion, there's no point holding onto styles\n // with reassigned style IDs, so we ignore such style definitions.\n\n if (styleSet && styleSet[style.styleId] === undefined) {\n styleSet[style.styleId] = style;\n }\n });\n\n return new Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles);\n}\n\nfunction readStyleElement(styleElement) {\n var type = styleElement.attributes[\"w:type\"];\n\n if (type === \"numbering\") {\n return readNumberingStyleElement(type, styleElement);\n } else {\n var styleId = readStyleId(styleElement);\n var name = styleName(styleElement);\n return {type: type, styleId: styleId, name: name};\n }\n}\n\nfunction styleName(styleElement) {\n var nameElement = styleElement.first(\"w:name\");\n return nameElement ? nameElement.attributes[\"w:val\"] : null;\n}\n\nfunction readNumberingStyleElement(type, styleElement) {\n var styleId = readStyleId(styleElement);\n\n var numId = styleElement\n .firstOrEmpty(\"w:pPr\")\n .firstOrEmpty(\"w:numPr\")\n .firstOrEmpty(\"w:numId\")\n .attributes[\"w:val\"];\n\n return {type: type, numId: numId, styleId: styleId};\n}\n\nfunction readStyleId(styleElement) {\n return styleElement.attributes[\"w:styleId\"];\n}\n","var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nexports.createFootnotesReader = createReader.bind(this, \"footnote\");\nexports.createEndnotesReader = createReader.bind(this, \"endnote\");\n\nfunction createReader(noteType, bodyReader) {\n function readNotesXml(element) {\n return Result.combine(element.getElementsByTagName(\"w:\" + noteType)\n .filter(isFootnoteElement)\n .map(readFootnoteElement));\n }\n\n function isFootnoteElement(element) {\n var type = element.attributes[\"w:type\"];\n return type !== \"continuationSeparator\" && type !== \"separator\";\n }\n\n function readFootnoteElement(footnoteElement) {\n var id = footnoteElement.attributes[\"w:id\"];\n return bodyReader.readXmlElements(footnoteElement.children)\n .map(function(body) {\n return documents.Note({noteType: noteType, noteId: id, body: body});\n });\n }\n \n return readNotesXml;\n}\n","var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nfunction createCommentsReader(bodyReader) {\n function readCommentsXml(element) {\n return Result.combine(element.getElementsByTagName(\"w:comment\")\n .map(readCommentElement));\n }\n\n function readCommentElement(element) {\n var id = element.attributes[\"w:id\"];\n\n function readOptionalAttribute(name) {\n return (element.attributes[name] || \"\").trim() || null;\n }\n\n return bodyReader.readXmlElements(element.children)\n .map(function(body) {\n return documents.comment({\n commentId: id,\n body: body,\n authorName: readOptionalAttribute(\"w:author\"),\n authorInitials: readOptionalAttribute(\"w:initials\")\n });\n });\n }\n \n return readCommentsXml;\n}\n\nexports.createCommentsReader = createCommentsReader;\n","var promises = require(\"../../lib/promises\");\n\nexports.Files = Files;\n\n\nfunction Files() {\n function read(uri) {\n return promises.reject(new Error(\"could not open external image: '\" + uri + \"'\\ncannot open linked files from a web browser\"));\n }\n \n return {\n read: read\n };\n}\n","exports.read = read;\nexports._findPartPaths = findPartPaths;\n\nvar promises = require(\"../promises\");\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar zipfile = require(\"../zipfile\");\n\nvar readXmlFromZipFile = require(\"./office-xml-reader\").readXmlFromZipFile;\nvar createBodyReader = require(\"./body-reader\").createBodyReader;\nvar DocumentXmlReader = require(\"./document-xml-reader\").DocumentXmlReader;\nvar relationshipsReader = require(\"./relationships-reader\");\nvar contentTypesReader = require(\"./content-types-reader\");\nvar numberingXml = require(\"./numbering-xml\");\nvar stylesReader = require(\"./styles-reader\");\nvar notesReader = require(\"./notes-reader\");\nvar commentsReader = require(\"./comments-reader\");\nvar Files = require(\"./files\").Files;\n\n\nfunction read(docxFile, input, options) {\n input = input || {};\n options = options || {};\n\n var files = new Files({\n externalFileAccess: options.externalFileAccess,\n relativeToFile: input.path\n });\n\n return promises.props({\n contentTypes: readContentTypesFromZipFile(docxFile),\n partPaths: findPartPaths(docxFile),\n docxFile: docxFile,\n files: files\n }).also(function(result) {\n return {\n styles: readStylesFromZipFile(docxFile, result.partPaths.styles)\n };\n }).also(function(result) {\n return {\n numbering: readNumberingFromZipFile(docxFile, result.partPaths.numbering, result.styles)\n };\n }).also(function(result) {\n return {\n footnotes: readXmlFileWithBody(result.partPaths.footnotes, result, function(bodyReader, xml) {\n if (xml) {\n return notesReader.createFootnotesReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n }),\n endnotes: readXmlFileWithBody(result.partPaths.endnotes, result, function(bodyReader, xml) {\n if (xml) {\n return notesReader.createEndnotesReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n }),\n comments: readXmlFileWithBody(result.partPaths.comments, result, function(bodyReader, xml) {\n if (xml) {\n return commentsReader.createCommentsReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n })\n };\n }).also(function(result) {\n return {\n notes: result.footnotes.flatMap(function(footnotes) {\n return result.endnotes.map(function(endnotes) {\n return new documents.Notes(footnotes.concat(endnotes));\n });\n })\n };\n }).then(function(result) {\n return readXmlFileWithBody(result.partPaths.mainDocument, result, function(bodyReader, xml) {\n return result.notes.flatMap(function(notes) {\n return result.comments.flatMap(function(comments) {\n var reader = new DocumentXmlReader({\n bodyReader: bodyReader,\n notes: notes,\n comments: comments\n });\n return reader.convertXmlToDocument(xml);\n });\n });\n });\n });\n}\n\nfunction findPartPaths(docxFile) {\n return readPackageRelationships(docxFile).then(function(packageRelationships) {\n var mainDocumentPath = findPartPath({\n docxFile: docxFile,\n relationships: packageRelationships,\n relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n basePath: \"\",\n fallbackPath: \"word/document.xml\"\n });\n\n if (!docxFile.exists(mainDocumentPath)) {\n throw new Error(\"Could not find main document part. Are you sure this is a valid .docx file?\");\n }\n\n return xmlFileReader({\n filename: relationshipsFilename(mainDocumentPath),\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n })(docxFile).then(function(documentRelationships) {\n function findPartRelatedToMainDocument(name) {\n return findPartPath({\n docxFile: docxFile,\n relationships: documentRelationships,\n relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/\" + name,\n basePath: zipfile.splitPath(mainDocumentPath).dirname,\n fallbackPath: \"word/\" + name + \".xml\"\n });\n }\n\n return {\n mainDocument: mainDocumentPath,\n comments: findPartRelatedToMainDocument(\"comments\"),\n endnotes: findPartRelatedToMainDocument(\"endnotes\"),\n footnotes: findPartRelatedToMainDocument(\"footnotes\"),\n numbering: findPartRelatedToMainDocument(\"numbering\"),\n styles: findPartRelatedToMainDocument(\"styles\")\n };\n });\n });\n}\n\nfunction findPartPath(options) {\n var docxFile = options.docxFile;\n var relationships = options.relationships;\n var relationshipType = options.relationshipType;\n var basePath = options.basePath;\n var fallbackPath = options.fallbackPath;\n\n var targets = relationships.findTargetsByType(relationshipType);\n var normalisedTargets = targets.map(function(target) {\n return stripPrefix(zipfile.joinPath(basePath, target), \"/\");\n });\n var validTargets = normalisedTargets.filter(function(target) {\n return docxFile.exists(target);\n });\n if (validTargets.length === 0) {\n return fallbackPath;\n } else {\n return validTargets[0];\n }\n}\n\nfunction stripPrefix(value, prefix) {\n if (value.substring(0, prefix.length) === prefix) {\n return value.substring(prefix.length);\n } else {\n return value;\n }\n}\n\nfunction xmlFileReader(options) {\n return function(zipFile) {\n return readXmlFromZipFile(zipFile, options.filename)\n .then(function(element) {\n return element ? options.readElement(element) : options.defaultValue;\n });\n };\n}\n\nfunction readXmlFileWithBody(filename, options, func) {\n var readRelationshipsFromZipFile = xmlFileReader({\n filename: relationshipsFilename(filename),\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n });\n\n return readRelationshipsFromZipFile(options.docxFile).then(function(relationships) {\n var bodyReader = new createBodyReader({\n relationships: relationships,\n contentTypes: options.contentTypes,\n docxFile: options.docxFile,\n numbering: options.numbering,\n styles: options.styles,\n files: options.files\n });\n return readXmlFromZipFile(options.docxFile, filename)\n .then(function(xml) {\n return func(bodyReader, xml);\n });\n });\n}\n\nfunction relationshipsFilename(filename) {\n var split = zipfile.splitPath(filename);\n return zipfile.joinPath(split.dirname, \"_rels\", split.basename + \".rels\");\n}\n\nvar readContentTypesFromZipFile = xmlFileReader({\n filename: \"[Content_Types].xml\",\n readElement: contentTypesReader.readContentTypesFromXml,\n defaultValue: contentTypesReader.defaultContentTypes\n});\n\nfunction readNumberingFromZipFile(zipFile, path, styles) {\n return xmlFileReader({\n filename: path,\n readElement: function(element) {\n return numberingXml.readNumberingXml(element, {styles: styles});\n },\n defaultValue: numberingXml.defaultNumbering\n })(zipFile);\n}\n\nfunction readStylesFromZipFile(zipFile, path) {\n return xmlFileReader({\n filename: path,\n readElement: stylesReader.readStylesXml,\n defaultValue: stylesReader.defaultStyles\n })(zipFile);\n}\n\nvar readPackageRelationships = xmlFileReader({\n filename: \"_rels/.rels\",\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n});\n","var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\nexports.writeStyleMap = writeStyleMap;\nexports.readStyleMap = readStyleMap;\n\n\nvar schema = \"http://schemas.zwobble.org/mammoth/style-map\";\nvar styleMapPath = \"mammoth/style-map\";\nvar styleMapAbsolutePath = \"/\" + styleMapPath;\n\nfunction writeStyleMap(docxFile, styleMap) {\n docxFile.write(styleMapPath, styleMap);\n return updateRelationships(docxFile).then(function() {\n return updateContentTypes(docxFile);\n });\n}\n\nfunction updateRelationships(docxFile) {\n var path = \"word/_rels/document.xml.rels\";\n var relationshipsUri = \"http://schemas.openxmlformats.org/package/2006/relationships\";\n var relationshipElementName = \"{\" + relationshipsUri + \"}Relationship\";\n return docxFile.read(path, \"utf8\")\n .then(xml.readString)\n .then(function(relationshipsContainer) {\n var relationships = relationshipsContainer.children;\n addOrUpdateElement(relationships, relationshipElementName, \"Id\", {\n \"Id\": \"rMammothStyleMap\",\n \"Type\": schema,\n \"Target\": styleMapAbsolutePath\n });\n \n var namespaces = {\"\": relationshipsUri};\n return docxFile.write(path, xml.writeString(relationshipsContainer, namespaces));\n });\n}\n\nfunction updateContentTypes(docxFile) {\n var path = \"[Content_Types].xml\";\n var contentTypesUri = \"http://schemas.openxmlformats.org/package/2006/content-types\";\n var overrideName = \"{\" + contentTypesUri + \"}Override\";\n return docxFile.read(path, \"utf8\")\n .then(xml.readString)\n .then(function(typesElement) {\n var children = typesElement.children;\n addOrUpdateElement(children, overrideName, \"PartName\", {\n \"PartName\": styleMapAbsolutePath,\n \"ContentType\": \"text/prs.mammoth.style-map\"\n });\n var namespaces = {\"\": contentTypesUri};\n return docxFile.write(path, xml.writeString(typesElement, namespaces));\n });\n}\n\nfunction addOrUpdateElement(elements, name, identifyingAttribute, attributes) {\n var existingElement = _.find(elements, function(element) {\n return element.name === name &&\n element.attributes[identifyingAttribute] === attributes[identifyingAttribute];\n });\n if (existingElement) {\n existingElement.attributes = attributes;\n } else {\n elements.push(xml.element(name, attributes));\n }\n}\n\nfunction readStyleMap(docxFile) {\n if (docxFile.exists(styleMapPath)) {\n return docxFile.read(styleMapPath, \"utf8\");\n } else {\n return promises.resolve(null);\n }\n}\n","var htmlPaths = require(\"../styles/html-paths\");\n\n\nfunction nonFreshElement(tagName, attributes, children) {\n return elementWithTag(\n htmlPaths.element(tagName, attributes, {fresh: false}),\n children);\n}\n\nfunction freshElement(tagName, attributes, children) {\n var tag = htmlPaths.element(tagName, attributes, {fresh: true});\n return elementWithTag(tag, children);\n}\n\nfunction elementWithTag(tag, children) {\n return {\n type: \"element\",\n tag: tag,\n children: children || []\n };\n}\n\nfunction text(value) {\n return {\n type: \"text\",\n value: value\n };\n}\n\nvar forceWrite = {\n type: \"forceWrite\"\n};\n\nexports.freshElement = freshElement;\nexports.nonFreshElement = nonFreshElement;\nexports.elementWithTag = elementWithTag;\nexports.text = text;\nexports.forceWrite = forceWrite;\n\nvar voidTagNames = {\n \"br\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true\n};\n\nfunction isVoidElement(node) {\n return (node.children.length === 0) && voidTagNames[node.tag.tagName];\n}\n\nexports.isVoidElement = isVoidElement;\n","var _ = require(\"underscore\");\n\nvar ast = require(\"./ast\");\n\nfunction simplify(nodes) {\n return collapse(removeEmpty(nodes));\n}\n\nfunction collapse(nodes) {\n var children = [];\n \n nodes.map(collapseNode).forEach(function(child) {\n appendChild(children, child);\n });\n return children;\n}\n\nfunction collapseNode(node) {\n return collapsers[node.type](node);\n}\n\nvar collapsers = {\n element: collapseElement,\n text: identity,\n forceWrite: identity\n};\n\nfunction collapseElement(node) {\n return ast.elementWithTag(node.tag, collapse(node.children));\n}\n\nfunction identity(value) {\n return value;\n}\n\nfunction appendChild(children, child) {\n var lastChild = children[children.length - 1];\n if (child.type === \"element\" && !child.tag.fresh && lastChild && lastChild.type === \"element\" && child.tag.matchesElement(lastChild.tag)) {\n if (child.tag.separator) {\n appendChild(lastChild.children, ast.text(child.tag.separator));\n }\n child.children.forEach(function(grandChild) {\n // Mutation is fine since simplifying elements create a copy of the children.\n appendChild(lastChild.children, grandChild);\n });\n } else {\n children.push(child);\n }\n}\n\nfunction removeEmpty(nodes) {\n return flatMap(nodes, function(node) {\n return emptiers[node.type](node);\n });\n}\n\nfunction flatMap(values, func) {\n return _.flatten(_.map(values, func), true);\n}\n\nvar emptiers = {\n element: elementEmptier,\n text: textEmptier,\n forceWrite: neverEmpty\n};\n\nfunction neverEmpty(node) {\n return [node];\n}\n\nfunction elementEmptier(element) {\n var children = removeEmpty(element.children);\n if (children.length === 0 && !ast.isVoidElement(element)) {\n return [];\n } else {\n return [ast.elementWithTag(element.tag, children)];\n }\n}\n\nfunction textEmptier(node) {\n if (node.value.length === 0) {\n return [];\n } else {\n return [node];\n }\n}\n\nmodule.exports = simplify;\n","var ast = require(\"./ast\");\n\nexports.freshElement = ast.freshElement;\nexports.nonFreshElement = ast.nonFreshElement;\nexports.elementWithTag = ast.elementWithTag;\nexports.text = ast.text;\nexports.forceWrite = ast.forceWrite;\n\nexports.simplify = require(\"./simplify\");\n\nfunction write(writer, nodes) {\n nodes.forEach(function(node) {\n writeNode(writer, node);\n });\n}\n\nfunction writeNode(writer, node) {\n toStrings[node.type](writer, node);\n}\n\nvar toStrings = {\n element: generateElementString,\n text: generateTextString,\n forceWrite: function() { }\n};\n\nfunction generateElementString(writer, node) {\n if (ast.isVoidElement(node)) {\n writer.selfClosing(node.tag.tagName, node.tag.attributes);\n } else {\n writer.open(node.tag.tagName, node.tag.attributes);\n write(writer, node.children);\n writer.close(node.tag.tagName);\n }\n}\n\nfunction generateTextString(writer, node) {\n writer.text(node.value);\n}\n\nexports.write = write;\n","var _ = require(\"underscore\");\n\nvar html = require(\"../html\");\n\nexports.topLevelElement = topLevelElement;\nexports.elements = elements;\nexports.element = element;\n\nfunction topLevelElement(tagName, attributes) {\n return elements([element(tagName, attributes, {fresh: true})]);\n}\n\nfunction elements(elementStyles) {\n return new HtmlPath(elementStyles.map(function(elementStyle) {\n if (_.isString(elementStyle)) {\n return element(elementStyle);\n } else {\n return elementStyle;\n }\n }));\n}\n\nfunction HtmlPath(elements) {\n this._elements = elements;\n}\n\nHtmlPath.prototype.wrap = function wrap(children) {\n var result = children();\n for (var index = this._elements.length - 1; index >= 0; index--) {\n result = this._elements[index].wrapNodes(result);\n }\n return result;\n};\n\nfunction element(tagName, attributes, options) {\n options = options || {};\n return new Element(tagName, attributes, options);\n}\n\nfunction Element(tagName, attributes, options) {\n var tagNames = {};\n if (_.isArray(tagName)) {\n tagName.forEach(function(tagName) {\n tagNames[tagName] = true;\n });\n tagName = tagName[0];\n } else {\n tagNames[tagName] = true;\n }\n \n this.tagName = tagName;\n this.tagNames = tagNames;\n this.attributes = attributes || {};\n this.fresh = options.fresh;\n this.separator = options.separator;\n}\n\nElement.prototype.matchesElement = function(element) {\n return this.tagNames[element.tagName] && _.isEqual(this.attributes || {}, element.attributes || {});\n};\n\nElement.prototype.wrap = function wrap(generateNodes) {\n return this.wrapNodes(generateNodes());\n};\n\nElement.prototype.wrapNodes = function wrapNodes(nodes) {\n return [html.elementWithTag(this, nodes)];\n};\n\nexports.empty = elements([]);\nexports.ignore = {\n wrap: function() {\n return [];\n }\n};\n","var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar Html = require(\"./html\");\n\nexports.imgElement = imgElement;\n\nfunction imgElement(func) {\n return function(element, messages) {\n return promises.when(func(element)).then(function(result) {\n var attributes = {};\n if (element.altText) {\n attributes.alt = element.altText;\n }\n _.extend(attributes, result);\n\n return [Html.freshElement(\"img\", attributes)];\n });\n };\n}\n\n// Undocumented, but retained for backwards-compatibility with 0.3.x\nexports.inline = exports.imgElement;\n\nexports.dataUri = imgElement(function(element) {\n return element.readAsBase64String().then(function(imageBuffer) {\n return {\n src: \"data:\" + element.contentType + \";base64,\" + imageBuffer\n };\n });\n});\n","var _ = require(\"underscore\");\n\nexports.writer = writer;\n\nfunction writer(options) {\n options = options || {};\n if (options.prettyPrint) {\n return prettyWriter();\n } else {\n return simpleWriter();\n }\n}\n\n\nvar indentedElements = {\n div: true,\n p: true,\n ul: true,\n li: true\n};\n\n\nfunction prettyWriter() {\n var indentationLevel = 0;\n var indentation = \" \";\n var stack = [];\n var start = true;\n var inText = false;\n\n var writer = simpleWriter();\n\n function open(tagName, attributes) {\n if (indentedElements[tagName]) {\n indent();\n }\n stack.push(tagName);\n writer.open(tagName, attributes);\n if (indentedElements[tagName]) {\n indentationLevel++;\n }\n start = false;\n }\n\n function close(tagName) {\n if (indentedElements[tagName]) {\n indentationLevel--;\n indent();\n }\n stack.pop();\n writer.close(tagName);\n }\n\n function text(value) {\n startText();\n var text = isInPre() ? value : value.replace(\"\\n\", \"\\n\" + indentation);\n writer.text(text);\n }\n\n function selfClosing(tagName, attributes) {\n indent();\n writer.selfClosing(tagName, attributes);\n }\n\n function insideIndentedElement() {\n return stack.length === 0 || indentedElements[stack[stack.length - 1]];\n }\n\n function startText() {\n if (!inText) {\n indent();\n inText = true;\n }\n }\n\n function indent() {\n inText = false;\n if (!start && insideIndentedElement() && !isInPre()) {\n writer._append(\"\\n\");\n for (var i = 0; i < indentationLevel; i++) {\n writer._append(indentation);\n }\n }\n }\n\n function isInPre() {\n return _.some(stack, function(tagName) {\n return tagName === \"pre\";\n });\n }\n\n return {\n asString: writer.asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing\n };\n}\n\n\nfunction simpleWriter() {\n var fragments = [];\n\n function open(tagName, attributes) {\n var attributeString = generateAttributeString(attributes);\n fragments.push(\"<\" + tagName + attributeString + \">\");\n }\n\n function close(tagName) {\n fragments.push(\"\");\n }\n\n function selfClosing(tagName, attributes) {\n var attributeString = generateAttributeString(attributes);\n fragments.push(\"<\" + tagName + attributeString + \" />\");\n }\n\n function generateAttributeString(attributes) {\n return _.map(attributes, function(value, key) {\n return \" \" + key + '=\"' + escapeHtmlAttribute(value) + '\"';\n }).join(\"\");\n }\n\n function text(value) {\n fragments.push(escapeHtmlText(value));\n }\n\n function append(html) {\n fragments.push(html);\n }\n\n function asString() {\n return fragments.join(\"\");\n }\n\n return {\n asString: asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing,\n _append: append\n };\n}\n\nfunction escapeHtmlText(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>');\n}\n\nfunction escapeHtmlAttribute(value) {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(//g, '>');\n}\n","var _ = require(\"underscore\");\n\n\nfunction symmetricMarkdownElement(end) {\n return markdownElement(end, end);\n}\n\nfunction markdownElement(start, end) {\n return function() {\n return {start: start, end: end};\n };\n}\n\nfunction markdownLink(attributes) {\n var href = attributes.href || \"\";\n if (href) {\n return {\n start: \"[\",\n end: \"](\" + href + \")\",\n anchorPosition: \"before\"\n };\n } else {\n return {};\n }\n}\n\nfunction markdownImage(attributes) {\n var src = attributes.src || \"\";\n var altText = attributes.alt || \"\";\n if (src || altText) {\n return {start: \"![\" + altText + \"](\" + src + \")\"};\n } else {\n return {};\n }\n}\n\nfunction markdownList(options) {\n return function(attributes, list) {\n return {\n start: list ? \"\\n\" : \"\",\n end: list ? \"\" : \"\\n\",\n list: {\n isOrdered: options.isOrdered,\n indent: list ? list.indent + 1 : 0,\n count: 0\n }\n };\n };\n}\n\nfunction markdownListItem(attributes, list, listItem) {\n list = list || {indent: 0, isOrdered: false, count: 0};\n list.count++;\n listItem.hasClosed = false;\n \n var bullet = list.isOrdered ? list.count + \".\" : \"-\";\n var start = repeatString(\"\\t\", list.indent) + bullet + \" \";\n \n return {\n start: start,\n end: function() {\n if (!listItem.hasClosed) {\n listItem.hasClosed = true;\n return \"\\n\";\n }\n }\n };\n}\n\nvar htmlToMarkdown = {\n \"p\": markdownElement(\"\", \"\\n\\n\"),\n \"br\": markdownElement(\"\", \" \\n\"),\n \"ul\": markdownList({isOrdered: false}),\n \"ol\": markdownList({isOrdered: true}),\n \"li\": markdownListItem,\n \"strong\": symmetricMarkdownElement(\"__\"),\n \"em\": symmetricMarkdownElement(\"*\"),\n \"a\": markdownLink,\n \"img\": markdownImage\n};\n\n(function() {\n for (var i = 1; i <= 6; i++) {\n htmlToMarkdown[\"h\" + i] = markdownElement(repeatString(\"#\", i) + \" \", \"\\n\\n\");\n }\n})();\n\nfunction repeatString(value, count) {\n return new Array(count + 1).join(value);\n}\n\nfunction markdownWriter() {\n var fragments = [];\n var elementStack = [];\n var list = null;\n var listItem = {};\n \n function open(tagName, attributes) {\n attributes = attributes || {};\n \n var createElement = htmlToMarkdown[tagName] || function() {\n return {};\n };\n var element = createElement(attributes, list, listItem);\n elementStack.push({end: element.end, list: list});\n \n if (element.list) {\n list = element.list;\n }\n \n var anchorBeforeStart = element.anchorPosition === \"before\";\n if (anchorBeforeStart) {\n writeAnchor(attributes);\n }\n\n fragments.push(element.start || \"\");\n if (!anchorBeforeStart) {\n writeAnchor(attributes);\n }\n }\n \n function writeAnchor(attributes) {\n if (attributes.id) {\n fragments.push('');\n }\n }\n \n function close(tagName) {\n var element = elementStack.pop();\n list = element.list;\n var end = _.isFunction(element.end) ? element.end() : element.end;\n fragments.push(end || \"\");\n }\n \n function selfClosing(tagName, attributes) {\n open(tagName, attributes);\n close(tagName);\n }\n \n function text(value) {\n fragments.push(escapeMarkdown(value));\n }\n \n function asString() {\n return fragments.join(\"\");\n }\n\n return {\n asString: asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing\n };\n}\n\nexports.writer = markdownWriter;\n\nfunction escapeMarkdown(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/([\\`\\*_\\{\\}\\[\\]\\(\\)\\#\\+\\-\\.\\!])/g, '\\\\$1');\n}\n","var htmlWriter = require(\"./html-writer\");\nvar markdownWriter = require(\"./markdown-writer\");\n\nexports.writer = writer;\n\n\nfunction writer(options) {\n options = options || {};\n if (options.outputFormat === \"markdown\") {\n return markdownWriter.writer();\n } else {\n return htmlWriter.writer(options);\n }\n}\n","var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar documents = require(\"./documents\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar results = require(\"./results\");\nvar images = require(\"./images\");\nvar Html = require(\"./html\");\nvar writers = require(\"./writers\");\n\nexports.DocumentConverter = DocumentConverter;\n\n\nfunction DocumentConverter(options) {\n return {\n convertToHtml: function(element) {\n var comments = _.indexBy(\n element.type === documents.types.document ? element.comments : [],\n \"commentId\"\n );\n var conversion = new DocumentConversion(options, comments);\n return conversion.convertToHtml(element);\n }\n };\n}\n\nfunction DocumentConversion(options, comments) {\n var noteNumber = 1;\n\n var noteReferences = [];\n\n var referencedComments = [];\n\n options = _.extend({ignoreEmptyParagraphs: true}, options);\n var idPrefix = options.idPrefix === undefined ? \"\" : options.idPrefix;\n var ignoreEmptyParagraphs = options.ignoreEmptyParagraphs;\n\n var defaultParagraphStyle = htmlPaths.topLevelElement(\"p\");\n\n var styleMap = options.styleMap || [];\n\n function convertToHtml(document) {\n var messages = [];\n\n var html = elementToHtml(document, messages, {});\n\n var deferredNodes = [];\n walkHtml(html, function(node) {\n if (node.type === \"deferred\") {\n deferredNodes.push(node);\n }\n });\n var deferredValues = {};\n return promises.mapSeries(deferredNodes, function(deferred) {\n return deferred.value().then(function(value) {\n deferredValues[deferred.id] = value;\n });\n }).then(function() {\n function replaceDeferred(nodes) {\n return flatMap(nodes, function(node) {\n if (node.type === \"deferred\") {\n return deferredValues[node.id];\n } else if (node.children) {\n return [\n _.extend({}, node, {\n children: replaceDeferred(node.children)\n })\n ];\n } else {\n return [node];\n }\n });\n }\n var writer = writers.writer({\n prettyPrint: options.prettyPrint,\n outputFormat: options.outputFormat\n });\n Html.write(writer, Html.simplify(replaceDeferred(html)));\n return new results.Result(writer.asString(), messages);\n });\n }\n\n function convertElements(elements, messages, options) {\n return flatMap(elements, function(element) {\n return elementToHtml(element, messages, options);\n });\n }\n\n function elementToHtml(element, messages, options) {\n if (!options) {\n throw new Error(\"options not set\");\n }\n var handler = elementConverters[element.type];\n if (handler) {\n return handler(element, messages, options);\n } else {\n return [];\n }\n }\n\n function convertParagraph(element, messages, options) {\n return htmlPathForParagraph(element, messages).wrap(function() {\n var content = convertElements(element.children, messages, options);\n if (ignoreEmptyParagraphs) {\n return content;\n } else {\n return [Html.forceWrite].concat(content);\n }\n });\n }\n\n function htmlPathForParagraph(element, messages) {\n var style = findStyle(element);\n\n if (style) {\n return style.to;\n } else {\n if (element.styleId) {\n messages.push(unrecognisedStyleWarning(\"paragraph\", element));\n }\n return defaultParagraphStyle;\n }\n }\n\n function convertRun(run, messages, options) {\n var nodes = function() {\n return convertElements(run.children, messages, options);\n };\n var paths = [];\n if (run.highlight !== null) {\n var path = findHtmlPath({type: \"highlight\", color: run.highlight});\n if (path) {\n paths.push(path);\n }\n }\n if (run.isSmallCaps) {\n paths.push(findHtmlPathForRunProperty(\"smallCaps\"));\n }\n if (run.isAllCaps) {\n paths.push(findHtmlPathForRunProperty(\"allCaps\"));\n }\n if (run.isStrikethrough) {\n paths.push(findHtmlPathForRunProperty(\"strikethrough\", \"s\"));\n }\n if (run.isUnderline) {\n paths.push(findHtmlPathForRunProperty(\"underline\"));\n }\n if (run.verticalAlignment === documents.verticalAlignment.subscript) {\n paths.push(htmlPaths.element(\"sub\", {}, {fresh: false}));\n }\n if (run.verticalAlignment === documents.verticalAlignment.superscript) {\n paths.push(htmlPaths.element(\"sup\", {}, {fresh: false}));\n }\n if (run.isItalic) {\n paths.push(findHtmlPathForRunProperty(\"italic\", \"em\"));\n }\n if (run.isBold) {\n paths.push(findHtmlPathForRunProperty(\"bold\", \"strong\"));\n }\n var stylePath = htmlPaths.empty;\n var style = findStyle(run);\n if (style) {\n stylePath = style.to;\n } else if (run.styleId) {\n messages.push(unrecognisedStyleWarning(\"run\", run));\n }\n paths.push(stylePath);\n\n paths.forEach(function(path) {\n nodes = path.wrap.bind(path, nodes);\n });\n\n return nodes();\n }\n\n function findHtmlPathForRunProperty(elementType, defaultTagName) {\n var path = findHtmlPath({type: elementType});\n if (path) {\n return path;\n } else if (defaultTagName) {\n return htmlPaths.element(defaultTagName, {}, {fresh: false});\n } else {\n return htmlPaths.empty;\n }\n }\n\n function findHtmlPath(element, defaultPath) {\n var style = findStyle(element);\n return style ? style.to : defaultPath;\n }\n\n function findStyle(element) {\n for (var i = 0; i < styleMap.length; i++) {\n if (styleMap[i].from.matches(element)) {\n return styleMap[i];\n }\n }\n }\n\n function recoveringConvertImage(convertImage) {\n return function(image, messages) {\n return promises.attempt(function() {\n return convertImage(image, messages);\n }).caught(function(error) {\n messages.push(results.error(error));\n return [];\n });\n };\n }\n\n function noteHtmlId(note) {\n return referentHtmlId(note.noteType, note.noteId);\n }\n\n function noteRefHtmlId(note) {\n return referenceHtmlId(note.noteType, note.noteId);\n }\n\n function referentHtmlId(referenceType, referenceId) {\n return htmlId(referenceType + \"-\" + referenceId);\n }\n\n function referenceHtmlId(referenceType, referenceId) {\n return htmlId(referenceType + \"-ref-\" + referenceId);\n }\n\n function htmlId(suffix) {\n return idPrefix + suffix;\n }\n\n var defaultTablePath = htmlPaths.elements([\n htmlPaths.element(\"table\", {}, {fresh: true})\n ]);\n\n function convertTable(element, messages, options) {\n return findHtmlPath(element, defaultTablePath).wrap(function() {\n return convertTableChildren(element, messages, options);\n });\n }\n\n function convertTableChildren(element, messages, options) {\n var bodyIndex = _.findIndex(element.children, function(child) {\n return !child.type === documents.types.tableRow || !child.isHeader;\n });\n if (bodyIndex === -1) {\n bodyIndex = element.children.length;\n }\n var children;\n if (bodyIndex === 0) {\n children = convertElements(\n element.children,\n messages,\n _.extend({}, options, {isTableHeader: false})\n );\n } else {\n var headRows = convertElements(\n element.children.slice(0, bodyIndex),\n messages,\n _.extend({}, options, {isTableHeader: true})\n );\n var bodyRows = convertElements(\n element.children.slice(bodyIndex),\n messages,\n _.extend({}, options, {isTableHeader: false})\n );\n children = [\n Html.freshElement(\"thead\", {}, headRows),\n Html.freshElement(\"tbody\", {}, bodyRows)\n ];\n }\n return [Html.forceWrite].concat(children);\n }\n\n function convertTableRow(element, messages, options) {\n var children = convertElements(element.children, messages, options);\n return [\n Html.freshElement(\"tr\", {}, [Html.forceWrite].concat(children))\n ];\n }\n\n function convertTableCell(element, messages, options) {\n var tagName = options.isTableHeader ? \"th\" : \"td\";\n var children = convertElements(element.children, messages, options);\n var attributes = {};\n if (element.colSpan !== 1) {\n attributes.colspan = element.colSpan.toString();\n }\n if (element.rowSpan !== 1) {\n attributes.rowspan = element.rowSpan.toString();\n }\n\n return [\n Html.freshElement(tagName, attributes, [Html.forceWrite].concat(children))\n ];\n }\n\n function convertCommentReference(reference, messages, options) {\n return findHtmlPath(reference, htmlPaths.ignore).wrap(function() {\n var comment = comments[reference.commentId];\n var count = referencedComments.length + 1;\n var label = \"[\" + commentAuthorLabel(comment) + count + \"]\";\n referencedComments.push({label: label, comment: comment});\n // TODO: remove duplication with note references\n return [\n Html.freshElement(\"a\", {\n href: \"#\" + referentHtmlId(\"comment\", reference.commentId),\n id: referenceHtmlId(\"comment\", reference.commentId)\n }, [Html.text(label)])\n ];\n });\n }\n\n function convertComment(referencedComment, messages, options) {\n // TODO: remove duplication with note references\n\n var label = referencedComment.label;\n var comment = referencedComment.comment;\n var body = convertElements(comment.body, messages, options).concat([\n Html.nonFreshElement(\"p\", {}, [\n Html.text(\" \"),\n Html.freshElement(\"a\", {\"href\": \"#\" + referenceHtmlId(\"comment\", comment.commentId)}, [\n Html.text(\"↑\")\n ])\n ])\n ]);\n\n return [\n Html.freshElement(\n \"dt\",\n {\"id\": referentHtmlId(\"comment\", comment.commentId)},\n [Html.text(\"Comment \" + label)]\n ),\n Html.freshElement(\"dd\", {}, body)\n ];\n }\n\n function convertBreak(element, messages, options) {\n return htmlPathForBreak(element).wrap(function() {\n return [];\n });\n }\n\n function htmlPathForBreak(element) {\n var style = findStyle(element);\n if (style) {\n return style.to;\n } else if (element.breakType === \"line\") {\n return htmlPaths.topLevelElement(\"br\");\n } else {\n return htmlPaths.empty;\n }\n }\n\n var elementConverters = {\n \"document\": function(document, messages, options) {\n var children = convertElements(document.children, messages, options);\n var notes = noteReferences.map(function(noteReference) {\n return document.notes.resolve(noteReference);\n });\n var notesNodes = convertElements(notes, messages, options);\n return children.concat([\n Html.freshElement(\"ol\", {}, notesNodes),\n Html.freshElement(\"dl\", {}, flatMap(referencedComments, function(referencedComment) {\n return convertComment(referencedComment, messages, options);\n }))\n ]);\n },\n \"paragraph\": convertParagraph,\n \"run\": convertRun,\n \"text\": function(element, messages, options) {\n return [Html.text(element.value)];\n },\n \"tab\": function(element, messages, options) {\n return [Html.text(\"\\t\")];\n },\n \"hyperlink\": function(element, messages, options) {\n var href = element.anchor ? \"#\" + htmlId(element.anchor) : element.href;\n var attributes = {href: href};\n if (element.targetFrame != null) {\n attributes.target = element.targetFrame;\n }\n\n var children = convertElements(element.children, messages, options);\n return [Html.nonFreshElement(\"a\", attributes, children)];\n },\n \"checkbox\": function(element) {\n var attributes = {type: \"checkbox\"};\n if (element.checked) {\n attributes[\"checked\"] = \"checked\";\n }\n return [Html.freshElement(\"input\", attributes)];\n },\n \"bookmarkStart\": function(element, messages, options) {\n var anchor = Html.freshElement(\"a\", {\n id: htmlId(element.name)\n }, [Html.forceWrite]);\n return [anchor];\n },\n \"noteReference\": function(element, messages, options) {\n noteReferences.push(element);\n var anchor = Html.freshElement(\"a\", {\n href: \"#\" + noteHtmlId(element),\n id: noteRefHtmlId(element)\n }, [Html.text(\"[\" + (noteNumber++) + \"]\")]);\n\n return [Html.freshElement(\"sup\", {}, [anchor])];\n },\n \"note\": function(element, messages, options) {\n var children = convertElements(element.body, messages, options);\n var backLink = Html.elementWithTag(htmlPaths.element(\"p\", {}, {fresh: false}), [\n Html.text(\" \"),\n Html.freshElement(\"a\", {href: \"#\" + noteRefHtmlId(element)}, [Html.text(\"↑\")])\n ]);\n var body = children.concat([backLink]);\n\n return Html.freshElement(\"li\", {id: noteHtmlId(element)}, body);\n },\n \"commentReference\": convertCommentReference,\n \"comment\": convertComment,\n \"image\": deferredConversion(recoveringConvertImage(options.convertImage || images.dataUri)),\n \"table\": convertTable,\n \"tableRow\": convertTableRow,\n \"tableCell\": convertTableCell,\n \"break\": convertBreak\n };\n return {\n convertToHtml: convertToHtml\n };\n}\n\nvar deferredId = 1;\n\nfunction deferredConversion(func) {\n return function(element, messages, options) {\n return [\n {\n type: \"deferred\",\n id: deferredId++,\n value: function() {\n return func(element, messages, options);\n }\n }\n ];\n };\n}\n\nfunction unrecognisedStyleWarning(type, element) {\n return results.warning(\n \"Unrecognised \" + type + \" style: '\" + element.styleName + \"'\" +\n \" (Style ID: \" + element.styleId + \")\"\n );\n}\n\nfunction flatMap(values, func) {\n return _.flatten(values.map(func), true);\n}\n\nfunction walkHtml(nodes, callback) {\n nodes.forEach(function(node) {\n callback(node);\n if (node.children) {\n walkHtml(node.children, callback);\n }\n });\n}\n\nvar commentAuthorLabel = exports.commentAuthorLabel = function commentAuthorLabel(comment) {\n return comment.authorInitials || \"\";\n};\n","var documents = require(\"./documents\");\n\nfunction convertElementToRawText(element) {\n if (element.type === \"text\") {\n return element.value;\n } else if (element.type === documents.types.tab) {\n return \"\\t\";\n } else {\n var tail = element.type === \"paragraph\" ? \"\\n\\n\" : \"\";\n return (element.children || []).map(convertElementToRawText).join(\"\") + tail;\n }\n}\n\nexports.convertElementToRawText = convertElementToRawText;\n","var TokenIterator = module.exports = function(tokens, startIndex) {\n this._tokens = tokens;\n this._startIndex = startIndex || 0;\n};\n\nTokenIterator.prototype.head = function() {\n return this._tokens[this._startIndex];\n};\n\nTokenIterator.prototype.tail = function(startIndex) {\n return new TokenIterator(this._tokens, this._startIndex + 1);\n};\n\nTokenIterator.prototype.toArray = function() {\n return this._tokens.slice(this._startIndex);\n};\n\nTokenIterator.prototype.end = function() {\n return this._tokens[this._tokens.length - 1];\n};\n\n// TODO: doesn't need to be a method, can be a separate function,\n// which simplifies implementation of the TokenIterator interface\nTokenIterator.prototype.to = function(end) {\n var start = this.head().source;\n var endToken = end.head() || end.end();\n return start.to(endToken.source);\n};\n","var TokenIterator = require(\"./TokenIterator\");\n\nexports.Parser = function(options) {\n var parseTokens = function(parser, tokens) {\n return parser(new TokenIterator(tokens));\n };\n \n return {\n parseTokens: parseTokens\n };\n};\n","exports.none = Object.create({\n value: function() {\n throw new Error('Called value on none');\n },\n isNone: function() {\n return true;\n },\n isSome: function() {\n return false;\n },\n map: function() {\n return exports.none;\n },\n flatMap: function() {\n return exports.none;\n },\n filter: function() {\n return exports.none;\n },\n toArray: function() {\n return [];\n },\n orElse: callOrReturn,\n valueOrElse: callOrReturn\n});\n\nfunction callOrReturn(value) {\n if (typeof(value) == \"function\") {\n return value();\n } else {\n return value;\n }\n}\n\nexports.some = function(value) {\n return new Some(value);\n};\n\nvar Some = function(value) {\n this._value = value;\n};\n\nSome.prototype.value = function() {\n return this._value;\n};\n\nSome.prototype.isNone = function() {\n return false;\n};\n\nSome.prototype.isSome = function() {\n return true;\n};\n\nSome.prototype.map = function(func) {\n return new Some(func(this._value));\n};\n\nSome.prototype.flatMap = function(func) {\n return func(this._value);\n};\n\nSome.prototype.filter = function(predicate) {\n return predicate(this._value) ? this : exports.none;\n};\n\nSome.prototype.toArray = function() {\n return [this._value];\n};\n\nSome.prototype.orElse = function(value) {\n return this;\n};\n\nSome.prototype.valueOrElse = function(value) {\n return this._value;\n};\n\nexports.isOption = function(value) {\n return value === exports.none || value instanceof Some;\n};\n\nexports.fromNullable = function(value) {\n if (value == null) {\n return exports.none;\n }\n return new Some(value);\n}\n","module.exports = {\n failure: function(errors, remaining) {\n if (errors.length < 1) {\n throw new Error(\"Failure must have errors\");\n }\n return new Result({\n status: \"failure\",\n remaining: remaining,\n errors: errors\n });\n },\n error: function(errors, remaining) {\n if (errors.length < 1) {\n throw new Error(\"Failure must have errors\");\n }\n return new Result({\n status: \"error\",\n remaining: remaining,\n errors: errors\n });\n },\n success: function(value, remaining, source) {\n return new Result({\n status: \"success\",\n value: value,\n source: source,\n remaining: remaining,\n errors: []\n });\n },\n cut: function(remaining) {\n return new Result({\n status: \"cut\",\n remaining: remaining,\n errors: []\n });\n }\n};\n\nvar Result = function(options) {\n this._value = options.value;\n this._status = options.status;\n this._hasValue = options.value !== undefined;\n this._remaining = options.remaining;\n this._source = options.source;\n this._errors = options.errors;\n};\n\nResult.prototype.map = function(func) {\n if (this._hasValue) {\n return new Result({\n value: func(this._value, this._source),\n status: this._status,\n remaining: this._remaining,\n source: this._source,\n errors: this._errors\n });\n } else {\n return this;\n }\n};\n\nResult.prototype.changeRemaining = function(remaining) {\n return new Result({\n value: this._value,\n status: this._status,\n remaining: remaining,\n source: this._source,\n errors: this._errors\n });\n};\n\nResult.prototype.isSuccess = function() {\n return this._status === \"success\" || this._status === \"cut\";\n};\n\nResult.prototype.isFailure = function() {\n return this._status === \"failure\";\n};\n\nResult.prototype.isError = function() {\n return this._status === \"error\";\n};\n\nResult.prototype.isCut = function() {\n return this._status === \"cut\";\n};\n\nResult.prototype.value = function() {\n return this._value;\n};\n\nResult.prototype.remaining = function() {\n return this._remaining;\n};\n\nResult.prototype.source = function() {\n return this._source;\n};\n\nResult.prototype.errors = function() {\n return this._errors;\n};\n","exports.error = function(options) {\n return new Error(options);\n};\n\nvar Error = function(options) {\n this.expected = options.expected;\n this.actual = options.actual;\n this._location = options.location;\n};\n\nError.prototype.describe = function() {\n var locationDescription = this._location ? this._location.describe() + \":\\n\" : \"\";\n return locationDescription + \"Expected \" + this.expected + \"\\nbut got \" + this.actual;\n};\n\nError.prototype.lineNumber = function() {\n return this._location.lineNumber();\n};\n\nError.prototype.characterNumber = function() {\n return this._location.characterNumber();\n};\n","var fromArray = exports.fromArray = function(array) {\n var index = 0;\n var hasNext = function() {\n return index < array.length;\n };\n return new LazyIterator({\n hasNext: hasNext,\n next: function() {\n if (!hasNext()) {\n throw new Error(\"No more elements\");\n } else {\n return array[index++];\n }\n }\n });\n};\n\nvar LazyIterator = function(iterator) {\n this._iterator = iterator;\n};\n\nLazyIterator.prototype.map = function(func) {\n var iterator = this._iterator;\n return new LazyIterator({\n hasNext: function() {\n return iterator.hasNext();\n },\n next: function() {\n return func(iterator.next());\n }\n });\n};\n\nLazyIterator.prototype.filter = function(condition) {\n var iterator = this._iterator;\n \n var moved = false;\n var hasNext = false;\n var next;\n var moveIfNecessary = function() {\n if (moved) {\n return;\n }\n moved = true;\n hasNext = false;\n while (iterator.hasNext() && !hasNext) {\n next = iterator.next();\n hasNext = condition(next);\n }\n };\n \n return new LazyIterator({\n hasNext: function() {\n moveIfNecessary();\n return hasNext;\n },\n next: function() {\n moveIfNecessary();\n var toReturn = next;\n moved = false;\n return toReturn;\n }\n });\n};\n\nLazyIterator.prototype.first = function() {\n var iterator = this._iterator;\n if (this._iterator.hasNext()) {\n return iterator.next();\n } else {\n return null;\n }\n};\n\nLazyIterator.prototype.toArray = function() {\n var result = [];\n while (this._iterator.hasNext()) {\n result.push(this._iterator.next());\n }\n return result;\n};\n","var _ = require(\"underscore\");\nvar options = require(\"option\");\nvar results = require(\"./parsing-results\");\nvar errors = require(\"./errors\");\nvar lazyIterators = require(\"./lazy-iterators\");\n\nexports.token = function(tokenType, value) {\n var matchValue = value !== undefined;\n return function(input) {\n var token = input.head();\n if (token && token.name === tokenType && (!matchValue || token.value === value)) {\n return results.success(token.value, input.tail(), token.source);\n } else {\n var expected = describeToken({name: tokenType, value: value});\n return describeTokenMismatch(input, expected);\n }\n };\n};\n\nexports.tokenOfType = function(tokenType) {\n return exports.token(tokenType);\n};\n\nexports.firstOf = function(name, parsers) {\n if (!_.isArray(parsers)) {\n parsers = Array.prototype.slice.call(arguments, 1);\n }\n return function(input) {\n return lazyIterators\n .fromArray(parsers)\n .map(function(parser) {\n return parser(input);\n })\n .filter(function(result) {\n return result.isSuccess() || result.isError();\n })\n .first() || describeTokenMismatch(input, name);\n };\n};\n\nexports.then = function(parser, func) {\n return function(input) {\n var result = parser(input);\n if (!result.map) {\n console.log(result);\n }\n return result.map(func);\n };\n};\n\nexports.sequence = function() {\n var parsers = Array.prototype.slice.call(arguments, 0);\n var rule = function(input) {\n var result = _.foldl(parsers, function(memo, parser) {\n var result = memo.result;\n var hasCut = memo.hasCut;\n if (!result.isSuccess()) {\n return {result: result, hasCut: hasCut};\n }\n var subResult = parser(result.remaining());\n if (subResult.isCut()) {\n return {result: result, hasCut: true};\n } else if (subResult.isSuccess()) {\n var values;\n if (parser.isCaptured) {\n values = result.value().withValue(parser, subResult.value());\n } else {\n values = result.value();\n }\n var remaining = subResult.remaining();\n var source = input.to(remaining);\n return {\n result: results.success(values, remaining, source),\n hasCut: hasCut\n };\n } else if (hasCut) {\n return {result: results.error(subResult.errors(), subResult.remaining()), hasCut: hasCut};\n } else {\n return {result: subResult, hasCut: hasCut};\n }\n }, {result: results.success(new SequenceValues(), input), hasCut: false}).result;\n var source = input.to(result.remaining());\n return result.map(function(values) {\n return values.withValue(exports.sequence.source, source);\n });\n };\n rule.head = function() {\n var firstCapture = _.find(parsers, isCapturedRule);\n return exports.then(\n rule,\n exports.sequence.extract(firstCapture)\n );\n };\n rule.map = function(func) {\n return exports.then(\n rule,\n function(result) {\n return func.apply(this, result.toArray());\n }\n );\n };\n \n function isCapturedRule(subRule) {\n return subRule.isCaptured;\n }\n \n return rule;\n};\n\nvar SequenceValues = function(values, valuesArray) {\n this._values = values || {};\n this._valuesArray = valuesArray || [];\n};\n\nSequenceValues.prototype.withValue = function(rule, value) {\n if (rule.captureName && rule.captureName in this._values) {\n throw new Error(\"Cannot add second value for capture \\\"\" + rule.captureName + \"\\\"\");\n } else {\n var newValues = _.clone(this._values);\n newValues[rule.captureName] = value;\n var newValuesArray = this._valuesArray.concat([value]);\n return new SequenceValues(newValues, newValuesArray);\n }\n};\n\nSequenceValues.prototype.get = function(rule) {\n if (rule.captureName in this._values) {\n return this._values[rule.captureName];\n } else {\n throw new Error(\"No value for capture \\\"\" + rule.captureName + \"\\\"\");\n }\n};\n\nSequenceValues.prototype.toArray = function() {\n return this._valuesArray;\n};\n\nexports.sequence.capture = function(rule, name) {\n var captureRule = function() {\n return rule.apply(this, arguments);\n };\n captureRule.captureName = name;\n captureRule.isCaptured = true;\n return captureRule;\n};\n\nexports.sequence.extract = function(rule) {\n return function(result) {\n return result.get(rule);\n };\n};\n\nexports.sequence.applyValues = function(func) {\n // TODO: check captureName doesn't conflict with source or other captures\n var rules = Array.prototype.slice.call(arguments, 1);\n return function(result) {\n var values = rules.map(function(rule) {\n return result.get(rule);\n });\n return func.apply(this, values);\n };\n};\n\nexports.sequence.source = {\n captureName: \"☃source☃\"\n};\n\nexports.sequence.cut = function() {\n return function(input) {\n return results.cut(input);\n };\n};\n\nexports.optional = function(rule) {\n return function(input) {\n var result = rule(input);\n if (result.isSuccess()) {\n return result.map(options.some);\n } else if (result.isFailure()) {\n return results.success(options.none, input);\n } else {\n return result;\n }\n };\n};\n\nexports.zeroOrMoreWithSeparator = function(rule, separator) {\n return repeatedWithSeparator(rule, separator, false);\n};\n\nexports.oneOrMoreWithSeparator = function(rule, separator) {\n return repeatedWithSeparator(rule, separator, true);\n};\n\nvar zeroOrMore = exports.zeroOrMore = function(rule) {\n return function(input) {\n var values = [];\n var result;\n while ((result = rule(input)) && result.isSuccess()) {\n input = result.remaining();\n values.push(result.value());\n }\n if (result.isError()) {\n return result;\n } else {\n return results.success(values, input);\n }\n };\n};\n\nexports.oneOrMore = function(rule) {\n return exports.oneOrMoreWithSeparator(rule, noOpRule);\n};\n\nfunction noOpRule(input) {\n return results.success(null, input);\n}\n\nvar repeatedWithSeparator = function(rule, separator, isOneOrMore) {\n return function(input) {\n var result = rule(input);\n if (result.isSuccess()) {\n var mainRule = exports.sequence.capture(rule, \"main\");\n var remainingRule = zeroOrMore(exports.then(\n exports.sequence(separator, mainRule),\n exports.sequence.extract(mainRule)\n ));\n var remainingResult = remainingRule(result.remaining());\n return results.success([result.value()].concat(remainingResult.value()), remainingResult.remaining());\n } else if (isOneOrMore || result.isError()) {\n return result;\n } else {\n return results.success([], input);\n }\n };\n};\n\nexports.leftAssociative = function(leftRule, rightRule, func) {\n var rights;\n if (func) {\n rights = [{func: func, rule: rightRule}];\n } else {\n rights = rightRule;\n }\n rights = rights.map(function(right) {\n return exports.then(right.rule, function(rightValue) {\n return function(leftValue, source) {\n return right.func(leftValue, rightValue, source);\n };\n });\n });\n var repeatedRule = exports.firstOf.apply(null, [\"rules\"].concat(rights));\n \n return function(input) {\n var start = input;\n var leftResult = leftRule(input);\n if (!leftResult.isSuccess()) {\n return leftResult;\n }\n var repeatedResult = repeatedRule(leftResult.remaining());\n while (repeatedResult.isSuccess()) {\n var remaining = repeatedResult.remaining();\n var source = start.to(repeatedResult.remaining());\n var right = repeatedResult.value();\n leftResult = results.success(\n right(leftResult.value(), source),\n remaining,\n source\n );\n repeatedResult = repeatedRule(leftResult.remaining());\n }\n if (repeatedResult.isError()) {\n return repeatedResult;\n }\n return leftResult;\n };\n};\n\nexports.leftAssociative.firstOf = function() {\n return Array.prototype.slice.call(arguments, 0);\n};\n\nexports.nonConsuming = function(rule) {\n return function(input) {\n return rule(input).changeRemaining(input);\n };\n};\n\nvar describeToken = function(token) {\n if (token.value) {\n return token.name + \" \\\"\" + token.value + \"\\\"\";\n } else {\n return token.name;\n }\n};\n\nfunction describeTokenMismatch(input, expected) {\n var error;\n var token = input.head();\n if (token) {\n error = errors.error({\n expected: expected,\n actual: describeToken(token),\n location: token.source\n });\n } else {\n error = errors.error({\n expected: expected,\n actual: \"end of tokens\"\n });\n }\n return results.failure([error], input);\n}\n","var StringSource = module.exports = function(string, description) {\n var self = {\n asString: function() {\n return string;\n },\n range: function(startIndex, endIndex) {\n return new StringSourceRange(string, description, startIndex, endIndex);\n }\n };\n return self;\n};\n\nvar StringSourceRange = function(string, description, startIndex, endIndex) {\n this._string = string;\n this._description = description;\n this._startIndex = startIndex;\n this._endIndex = endIndex;\n};\n\nStringSourceRange.prototype.to = function(otherRange) {\n // TODO: Assert that tokens are the same across both iterators\n return new StringSourceRange(this._string, this._description, this._startIndex, otherRange._endIndex);\n};\n\nStringSourceRange.prototype.describe = function() {\n var position = this._position();\n var description = this._description ? this._description + \"\\n\" : \"\";\n return description + \"Line number: \" + position.lineNumber + \"\\nCharacter number: \" + position.characterNumber;\n};\n\nStringSourceRange.prototype.lineNumber = function() {\n return this._position().lineNumber;\n};\n\nStringSourceRange.prototype.characterNumber = function() {\n return this._position().characterNumber;\n};\n\nStringSourceRange.prototype._position = function() {\n var self = this;\n var index = 0;\n var nextNewLine = function() {\n return self._string.indexOf(\"\\n\", index);\n };\n\n var lineNumber = 1;\n while (nextNewLine() !== -1 && nextNewLine() < this._startIndex) {\n index = nextNewLine() + 1;\n lineNumber += 1;\n }\n var characterNumber = this._startIndex - index + 1;\n return {lineNumber: lineNumber, characterNumber: characterNumber};\n};\n","module.exports = function(name, value, source) {\n this.name = name;\n this.value = value;\n if (source) {\n this.source = source;\n }\n};\n","var rules = require(\"./rules\");\nvar results = require(\"./parsing-results\");\n\nexports.parser = function(name, prefixRules, infixRuleBuilders) {\n var self = {\n rule: rule,\n leftAssociative: leftAssociative,\n rightAssociative: rightAssociative\n };\n \n var infixRules = new InfixRules(infixRuleBuilders.map(createInfixRule));\n var prefixRule = rules.firstOf(name, prefixRules);\n \n function createInfixRule(infixRuleBuilder) {\n return {\n name: infixRuleBuilder.name,\n rule: lazyRule(infixRuleBuilder.ruleBuilder.bind(null, self))\n };\n }\n \n function rule() {\n return createRule(infixRules);\n }\n \n function leftAssociative(name) {\n return createRule(infixRules.untilExclusive(name));\n }\n \n function rightAssociative(name) {\n return createRule(infixRules.untilInclusive(name));\n }\n \n function createRule(infixRules) {\n return apply.bind(null, infixRules);\n }\n \n function apply(infixRules, tokens) {\n var leftResult = prefixRule(tokens);\n if (leftResult.isSuccess()) {\n return infixRules.apply(leftResult);\n } else {\n return leftResult;\n }\n }\n \n return self;\n};\n\nfunction InfixRules(infixRules) {\n function untilExclusive(name) {\n return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name)));\n }\n \n function untilInclusive(name) {\n return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name) + 1));\n }\n \n function ruleNames() {\n return infixRules.map(function(rule) {\n return rule.name;\n });\n }\n \n function apply(leftResult) {\n var currentResult;\n var source;\n while (true) {\n currentResult = applyToTokens(leftResult.remaining());\n if (currentResult.isSuccess()) {\n source = leftResult.source().to(currentResult.source());\n leftResult = results.success(\n currentResult.value()(leftResult.value(), source),\n currentResult.remaining(),\n source\n )\n } else if (currentResult.isFailure()) {\n return leftResult;\n } else {\n return currentResult;\n }\n }\n }\n \n function applyToTokens(tokens) {\n return rules.firstOf(\"infix\", infixRules.map(function(infix) {\n return infix.rule;\n }))(tokens);\n }\n \n return {\n apply: apply,\n untilExclusive: untilExclusive,\n untilInclusive: untilInclusive\n }\n}\n\nexports.infix = function(name, ruleBuilder) {\n function map(func) {\n return exports.infix(name, function(parser) {\n var rule = ruleBuilder(parser);\n return function(tokens) {\n var result = rule(tokens);\n return result.map(function(right) {\n return function(left, source) {\n return func(left, right, source);\n };\n });\n };\n });\n }\n \n return {\n name: name,\n ruleBuilder: ruleBuilder,\n map: map\n };\n}\n\n// TODO: move into a sensible place and remove duplication\nvar lazyRule = function(ruleBuilder) {\n var rule;\n return function(input) {\n if (!rule) {\n rule = ruleBuilder();\n }\n return rule(input);\n };\n};\n","var Token = require(\"./Token\");\nvar StringSource = require(\"./StringSource\");\n\nexports.RegexTokeniser = RegexTokeniser;\n\nfunction RegexTokeniser(rules) {\n rules = rules.map(function(rule) {\n return {\n name: rule.name,\n regex: new RegExp(rule.regex.source, \"g\")\n };\n });\n \n function tokenise(input, description) {\n var source = new StringSource(input, description);\n var index = 0;\n var tokens = [];\n \n while (index < input.length) {\n var result = readNextToken(input, index, source);\n index = result.endIndex;\n tokens.push(result.token);\n }\n \n tokens.push(endToken(input, source));\n return tokens;\n }\n\n function readNextToken(string, startIndex, source) {\n for (var i = 0; i < rules.length; i++) {\n var regex = rules[i].regex;\n regex.lastIndex = startIndex;\n var result = regex.exec(string);\n \n if (result) {\n var endIndex = startIndex + result[0].length;\n if (result.index === startIndex && endIndex > startIndex) {\n var value = result[1];\n var token = new Token(\n rules[i].name,\n value,\n source.range(startIndex, endIndex)\n );\n return {token: token, endIndex: endIndex};\n }\n }\n }\n var endIndex = startIndex + 1;\n var token = new Token(\n \"unrecognisedCharacter\",\n string.substring(startIndex, endIndex),\n source.range(startIndex, endIndex)\n );\n return {token: token, endIndex: endIndex};\n }\n \n function endToken(input, source) {\n return new Token(\n \"end\",\n null,\n source.range(input.length, input.length)\n );\n }\n \n return {\n tokenise: tokenise\n }\n}\n\n\n","exports.Parser = require(\"./lib/parser\").Parser;\nexports.rules = require(\"./lib/rules\");\nexports.errors = require(\"./lib/errors\");\nexports.results = require(\"./lib/parsing-results\");\nexports.StringSource = require(\"./lib/StringSource\");\nexports.Token = require(\"./lib/Token\");\nexports.bottomUp = require(\"./lib/bottom-up\");\nexports.RegexTokeniser = require(\"./lib/regex-tokeniser\").RegexTokeniser;\n\nexports.rule = function(ruleBuilder) {\n var rule;\n return function(input) {\n if (!rule) {\n rule = ruleBuilder();\n }\n return rule(input);\n };\n};\n","exports.paragraph = paragraph;\nexports.run = run;\nexports.table = table;\nexports.bold = new Matcher(\"bold\");\nexports.italic = new Matcher(\"italic\");\nexports.underline = new Matcher(\"underline\");\nexports.strikethrough = new Matcher(\"strikethrough\");\nexports.allCaps = new Matcher(\"allCaps\");\nexports.smallCaps = new Matcher(\"smallCaps\");\nexports.highlight = highlight;\nexports.commentReference = new Matcher(\"commentReference\");\nexports.lineBreak = new BreakMatcher({breakType: \"line\"});\nexports.pageBreak = new BreakMatcher({breakType: \"page\"});\nexports.columnBreak = new BreakMatcher({breakType: \"column\"});\nexports.equalTo = equalTo;\nexports.startsWith = startsWith;\n\n\nfunction paragraph(options) {\n return new Matcher(\"paragraph\", options);\n}\n\nfunction run(options) {\n return new Matcher(\"run\", options);\n}\n\nfunction table(options) {\n return new Matcher(\"table\", options);\n}\n\nfunction highlight(options) {\n return new HighlightMatcher(options);\n}\n\nfunction Matcher(elementType, options) {\n options = options || {};\n this._elementType = elementType;\n this._styleId = options.styleId;\n this._styleName = options.styleName;\n if (options.list) {\n this._listIndex = options.list.levelIndex;\n this._listIsOrdered = options.list.isOrdered;\n }\n}\n\nMatcher.prototype.matches = function(element) {\n return element.type === this._elementType &&\n (this._styleId === undefined || element.styleId === this._styleId) &&\n (this._styleName === undefined || (element.styleName && this._styleName.operator(this._styleName.operand, element.styleName))) &&\n (this._listIndex === undefined || isList(element, this._listIndex, this._listIsOrdered)) &&\n (this._breakType === undefined || this._breakType === element.breakType);\n};\n\nfunction HighlightMatcher(options) {\n options = options || {};\n this._color = options.color;\n}\n\nHighlightMatcher.prototype.matches = function(element) {\n return element.type === \"highlight\" &&\n (this._color === undefined || element.color === this._color);\n};\n\nfunction BreakMatcher(options) {\n options = options || {};\n this._breakType = options.breakType;\n}\n\nBreakMatcher.prototype.matches = function(element) {\n return element.type === \"break\" &&\n (this._breakType === undefined || element.breakType === this._breakType);\n};\n\nfunction isList(element, levelIndex, isOrdered) {\n return element.numbering &&\n element.numbering.level == levelIndex &&\n element.numbering.isOrdered == isOrdered;\n}\n\nfunction equalTo(value) {\n return {\n operator: operatorEqualTo,\n operand: value\n };\n}\n\nfunction startsWith(value) {\n return {\n operator: operatorStartsWith,\n operand: value\n };\n}\n\nfunction operatorEqualTo(first, second) {\n return first.toUpperCase() === second.toUpperCase();\n}\n\nfunction operatorStartsWith(first, second) {\n return second.toUpperCase().indexOf(first.toUpperCase()) === 0;\n}\n","var lop = require(\"lop\");\nvar RegexTokeniser = lop.RegexTokeniser;\n\nexports.tokenise = tokenise;\n\nvar stringPrefix = \"'((?:\\\\\\\\.|[^'])*)\";\n\nfunction tokenise(string) {\n var identifierCharacter = \"(?:[a-zA-Z\\\\-_]|\\\\\\\\.)\";\n var tokeniser = new RegexTokeniser([\n {name: \"identifier\", regex: new RegExp(\"(\" + identifierCharacter + \"(?:\" + identifierCharacter + \"|[0-9])*)\")},\n {name: \"dot\", regex: /\\./},\n {name: \"colon\", regex: /:/},\n {name: \"gt\", regex: />/},\n {name: \"whitespace\", regex: /\\s+/},\n {name: \"arrow\", regex: /=>/},\n {name: \"equals\", regex: /=/},\n {name: \"startsWith\", regex: /\\^=/},\n {name: \"open-paren\", regex: /\\(/},\n {name: \"close-paren\", regex: /\\)/},\n {name: \"open-square-bracket\", regex: /\\[/},\n {name: \"close-square-bracket\", regex: /\\]/},\n {name: \"string\", regex: new RegExp(stringPrefix + \"'\")},\n {name: \"unterminated-string\", regex: new RegExp(stringPrefix)},\n {name: \"integer\", regex: /([0-9]+)/},\n {name: \"choice\", regex: /\\|/},\n {name: \"bang\", regex: /(!)/}\n ]);\n return tokeniser.tokenise(string);\n}\n","var _ = require(\"underscore\");\nvar lop = require(\"lop\");\n\nvar documentMatchers = require(\"./styles/document-matchers\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar tokenise = require(\"./styles/parser/tokeniser\").tokenise;\nvar results = require(\"./results\");\n\nexports.readHtmlPath = readHtmlPath;\nexports.readDocumentMatcher = readDocumentMatcher;\nexports.readStyle = readStyle;\n\n\nfunction readStyle(string) {\n return parseString(styleRule, string);\n}\n\nfunction createStyleRule() {\n return lop.rules.sequence(\n lop.rules.sequence.capture(documentMatcherRule()),\n lop.rules.tokenOfType(\"whitespace\"),\n lop.rules.tokenOfType(\"arrow\"),\n lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"whitespace\"),\n lop.rules.sequence.capture(htmlPathRule())\n ).head())),\n lop.rules.tokenOfType(\"end\")\n ).map(function(documentMatcher, htmlPath) {\n return {\n from: documentMatcher,\n to: htmlPath.valueOrElse(htmlPaths.empty)\n };\n });\n}\n\nfunction readDocumentMatcher(string) {\n return parseString(documentMatcherRule(), string);\n}\n\nfunction documentMatcherRule() {\n var sequence = lop.rules.sequence;\n\n var identifierToConstant = function(identifier, constant) {\n return lop.rules.then(\n lop.rules.token(\"identifier\", identifier),\n function() {\n return constant;\n }\n );\n };\n\n var paragraphRule = identifierToConstant(\"p\", documentMatchers.paragraph);\n var runRule = identifierToConstant(\"r\", documentMatchers.run);\n\n var elementTypeRule = lop.rules.firstOf(\"p or r or table\",\n paragraphRule,\n runRule\n );\n\n var styleIdRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"dot\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule)\n ).map(function(styleId) {\n return {styleId: styleId};\n });\n\n var styleNameMatcherRule = lop.rules.firstOf(\"style name matcher\",\n lop.rules.then(\n lop.rules.sequence(\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(stringRule)\n ).head(),\n function(styleName) {\n return {styleName: documentMatchers.equalTo(styleName)};\n }\n ),\n lop.rules.then(\n lop.rules.sequence(\n lop.rules.tokenOfType(\"startsWith\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(stringRule)\n ).head(),\n function(styleName) {\n return {styleName: documentMatchers.startsWith(styleName)};\n }\n )\n );\n\n var styleNameRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.token(\"identifier\", \"style-name\"),\n lop.rules.sequence.capture(styleNameMatcherRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).head();\n\n\n var listTypeRule = lop.rules.firstOf(\"list type\",\n identifierToConstant(\"ordered-list\", {isOrdered: true}),\n identifierToConstant(\"unordered-list\", {isOrdered: false})\n );\n var listRule = sequence(\n lop.rules.tokenOfType(\"colon\"),\n sequence.capture(listTypeRule),\n sequence.cut(),\n lop.rules.tokenOfType(\"open-paren\"),\n sequence.capture(integerRule),\n lop.rules.tokenOfType(\"close-paren\")\n ).map(function(listType, levelNumber) {\n return {\n list: {\n isOrdered: listType.isOrdered,\n levelIndex: levelNumber - 1\n }\n };\n });\n\n function createMatcherSuffixesRule(rules) {\n var matcherSuffix = lop.rules.firstOf.apply(\n lop.rules.firstOf,\n [\"matcher suffix\"].concat(rules)\n );\n var matcherSuffixes = lop.rules.zeroOrMore(matcherSuffix);\n return lop.rules.then(matcherSuffixes, function(suffixes) {\n var matcherOptions = {};\n suffixes.forEach(function(suffix) {\n _.extend(matcherOptions, suffix);\n });\n return matcherOptions;\n });\n }\n\n var paragraphOrRun = sequence(\n sequence.capture(elementTypeRule),\n sequence.capture(createMatcherSuffixesRule([\n styleIdRule,\n styleNameRule,\n listRule\n ]))\n ).map(function(createMatcher, matcherOptions) {\n return createMatcher(matcherOptions);\n });\n\n var table = sequence(\n lop.rules.token(\"identifier\", \"table\"),\n sequence.capture(createMatcherSuffixesRule([\n styleIdRule,\n styleNameRule\n ]))\n ).map(function(options) {\n return documentMatchers.table(options);\n });\n\n var bold = identifierToConstant(\"b\", documentMatchers.bold);\n var italic = identifierToConstant(\"i\", documentMatchers.italic);\n var underline = identifierToConstant(\"u\", documentMatchers.underline);\n var strikethrough = identifierToConstant(\"strike\", documentMatchers.strikethrough);\n var allCaps = identifierToConstant(\"all-caps\", documentMatchers.allCaps);\n var smallCaps = identifierToConstant(\"small-caps\", documentMatchers.smallCaps);\n\n var highlight = sequence(\n lop.rules.token(\"identifier\", \"highlight\"),\n lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.token(\"identifier\", \"color\"),\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).head()))\n ).map(function(color) {\n return documentMatchers.highlight({\n color: color.valueOrElse(undefined)\n });\n });\n\n var commentReference = identifierToConstant(\"comment-reference\", documentMatchers.commentReference);\n\n var breakMatcher = sequence(\n lop.rules.token(\"identifier\", \"br\"),\n sequence.cut(),\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.token(\"identifier\", \"type\"),\n lop.rules.tokenOfType(\"equals\"),\n sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).map(function(breakType) {\n switch (breakType) {\n case \"line\":\n return documentMatchers.lineBreak;\n case \"page\":\n return documentMatchers.pageBreak;\n case \"column\":\n return documentMatchers.columnBreak;\n default:\n // TODO: handle unknown document matchers\n }\n });\n\n return lop.rules.firstOf(\"element type\",\n paragraphOrRun,\n table,\n bold,\n italic,\n underline,\n strikethrough,\n allCaps,\n smallCaps,\n highlight,\n commentReference,\n breakMatcher\n );\n}\n\nfunction readHtmlPath(string) {\n return parseString(htmlPathRule(), string);\n}\n\nfunction htmlPathRule() {\n var capture = lop.rules.sequence.capture;\n var whitespaceRule = lop.rules.tokenOfType(\"whitespace\");\n var freshRule = lop.rules.then(\n lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"colon\"),\n lop.rules.token(\"identifier\", \"fresh\")\n )),\n function(option) {\n return option.map(function() {\n return true;\n }).valueOrElse(false);\n }\n );\n\n var separatorRule = lop.rules.then(\n lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"colon\"),\n lop.rules.token(\"identifier\", \"separator\"),\n lop.rules.tokenOfType(\"open-paren\"),\n capture(stringRule),\n lop.rules.tokenOfType(\"close-paren\")\n ).head()),\n function(option) {\n return option.valueOrElse(\"\");\n }\n );\n\n var tagNamesRule = lop.rules.oneOrMoreWithSeparator(\n identifierRule,\n lop.rules.tokenOfType(\"choice\")\n );\n\n var styleElementRule = lop.rules.sequence(\n capture(tagNamesRule),\n capture(lop.rules.zeroOrMore(attributeOrClassRule)),\n capture(freshRule),\n capture(separatorRule)\n ).map(function(tagName, attributesList, fresh, separator) {\n var attributes = {};\n var options = {};\n attributesList.forEach(function(attribute) {\n if (attribute.append && attributes[attribute.name]) {\n attributes[attribute.name] += \" \" + attribute.value;\n } else {\n attributes[attribute.name] = attribute.value;\n }\n });\n if (fresh) {\n options.fresh = true;\n }\n if (separator) {\n options.separator = separator;\n }\n return htmlPaths.element(tagName, attributes, options);\n });\n\n return lop.rules.firstOf(\"html path\",\n lop.rules.then(lop.rules.tokenOfType(\"bang\"), function() {\n return htmlPaths.ignore;\n }),\n lop.rules.then(\n lop.rules.zeroOrMoreWithSeparator(\n styleElementRule,\n lop.rules.sequence(\n whitespaceRule,\n lop.rules.tokenOfType(\"gt\"),\n whitespaceRule\n )\n ),\n htmlPaths.elements\n )\n );\n}\n\nvar identifierRule = lop.rules.then(\n lop.rules.tokenOfType(\"identifier\"),\n decodeEscapeSequences\n);\nvar integerRule = lop.rules.tokenOfType(\"integer\");\n\nvar stringRule = lop.rules.then(\n lop.rules.tokenOfType(\"string\"),\n decodeEscapeSequences\n);\n\nvar escapeSequences = {\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"t\": \"\\t\"\n};\n\nfunction decodeEscapeSequences(value) {\n return value.replace(/\\\\(.)/g, function(match, code) {\n return escapeSequences[code] || code;\n });\n}\n\nvar attributeRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule),\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n).map(function(name, value) {\n return {name: name, value: value, append: false};\n});\n\nvar classRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"dot\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule)\n).map(function(className) {\n return {name: \"class\", value: className, append: true};\n});\n\nvar attributeOrClassRule = lop.rules.firstOf(\n \"attribute or class\",\n attributeRule,\n classRule\n);\n\nfunction parseString(rule, string) {\n var tokens = tokenise(string);\n var parser = lop.Parser();\n var parseResult = parser.parseTokens(rule, tokens);\n if (parseResult.isSuccess()) {\n return results.success(parseResult.value());\n } else {\n return new results.Result(null, [results.warning(describeFailure(string, parseResult))]);\n }\n}\n\nfunction describeFailure(input, parseResult) {\n return \"Did not understand this style mapping, so ignored it: \" + input + \"\\n\" +\n parseResult.errors().map(describeError).join(\"\\n\");\n}\n\nfunction describeError(error) {\n return \"Error was at character number \" + error.characterNumber() + \": \" +\n \"Expected \" + error.expected + \" but got \" + error.actual;\n}\n\nvar styleRule = createStyleRule();\n","exports.readOptions = readOptions;\n\n\nvar _ = require(\"underscore\");\n\nvar defaultStyleMap = exports._defaultStyleMap = [\n \"p.Heading1 => h1:fresh\",\n \"p.Heading2 => h2:fresh\",\n \"p.Heading3 => h3:fresh\",\n \"p.Heading4 => h4:fresh\",\n \"p.Heading5 => h5:fresh\",\n \"p.Heading6 => h6:fresh\",\n \"p[style-name='Heading 1'] => h1:fresh\",\n \"p[style-name='Heading 2'] => h2:fresh\",\n \"p[style-name='Heading 3'] => h3:fresh\",\n \"p[style-name='Heading 4'] => h4:fresh\",\n \"p[style-name='Heading 5'] => h5:fresh\",\n \"p[style-name='Heading 6'] => h6:fresh\",\n \"p[style-name='heading 1'] => h1:fresh\",\n \"p[style-name='heading 2'] => h2:fresh\",\n \"p[style-name='heading 3'] => h3:fresh\",\n \"p[style-name='heading 4'] => h4:fresh\",\n \"p[style-name='heading 5'] => h5:fresh\",\n \"p[style-name='heading 6'] => h6:fresh\",\n\n // Apple Pages\n \"p.Heading => h1:fresh\",\n \"p[style-name='Heading'] => h1:fresh\",\n\n \"r[style-name='Strong'] => strong\",\n\n \"p[style-name='footnote text'] => p:fresh\",\n \"r[style-name='footnote reference'] =>\",\n \"p[style-name='endnote text'] => p:fresh\",\n \"r[style-name='endnote reference'] =>\",\n \"p[style-name='annotation text'] => p:fresh\",\n \"r[style-name='annotation reference'] =>\",\n\n // LibreOffice\n \"p[style-name='Footnote'] => p:fresh\",\n \"r[style-name='Footnote anchor'] =>\",\n \"p[style-name='Endnote'] => p:fresh\",\n \"r[style-name='Endnote anchor'] =>\",\n\n \"p:unordered-list(1) => ul > li:fresh\",\n \"p:unordered-list(2) => ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:ordered-list(1) => ol > li:fresh\",\n \"p:ordered-list(2) => ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n\n \"r[style-name='Hyperlink'] =>\",\n\n \"p[style-name='Normal'] => p:fresh\",\n\n // Apple Pages\n \"p.Body => p:fresh\",\n \"p[style-name='Body'] => p:fresh\"\n];\n\nvar standardOptions = exports._standardOptions = {\n externalFileAccess: false,\n transformDocument: identity,\n includeDefaultStyleMap: true,\n includeEmbeddedStyleMap: true\n};\n\nfunction readOptions(options) {\n options = options || {};\n return _.extend({}, standardOptions, options, {\n customStyleMap: readStyleMap(options.styleMap),\n readStyleMap: function() {\n var styleMap = this.customStyleMap;\n if (this.includeEmbeddedStyleMap) {\n styleMap = styleMap.concat(readStyleMap(this.embeddedStyleMap));\n }\n if (this.includeDefaultStyleMap) {\n styleMap = styleMap.concat(defaultStyleMap);\n }\n return styleMap;\n }\n });\n}\n\nfunction readStyleMap(styleMap) {\n if (!styleMap) {\n return [];\n } else if (_.isString(styleMap)) {\n return styleMap.split(\"\\n\")\n .map(function(line) {\n return line.trim();\n })\n .filter(function(line) {\n return line !== \"\" && line.charAt(0) !== \"#\";\n });\n } else {\n return styleMap;\n }\n}\n\nfunction identity(value) {\n return value;\n}\n","var promises = require(\"../lib/promises\");\nvar zipfile = require(\"../lib/zipfile\");\n\nexports.openZip = openZip;\n\nfunction openZip(options) {\n if (options.arrayBuffer) {\n return promises.resolve(zipfile.openArrayBuffer(options.arrayBuffer));\n } else {\n return promises.reject(new Error(\"Could not find file in options\"));\n }\n}\n","var htmlPaths = require(\"./styles/html-paths\");\nvar Html = require(\"./html\");\n\n\nexports.element = element;\n\nfunction element(name) {\n return function(html) {\n return Html.elementWithTag(htmlPaths.element(name), [html]);\n };\n}\n","var _ = require(\"underscore\");\n\nvar docxReader = require(\"./docx/docx-reader\");\nvar docxStyleMap = require(\"./docx/style-map\");\nvar DocumentConverter = require(\"./document-to-html\").DocumentConverter;\nvar convertElementToRawText = require(\"./raw-text\").convertElementToRawText;\nvar readStyle = require(\"./style-reader\").readStyle;\nvar readOptions = require(\"./options-reader\").readOptions;\nvar unzip = require(\"./unzip\");\nvar Result = require(\"./results\").Result;\n\nexports.convertToHtml = convertToHtml;\nexports.convertToMarkdown = convertToMarkdown;\nexports.convert = convert;\nexports.extractRawText = extractRawText;\nexports.images = require(\"./images\");\nexports.transforms = require(\"./transforms\");\nexports.underline = require(\"./underline\");\nexports.embedStyleMap = embedStyleMap;\nexports.readEmbeddedStyleMap = readEmbeddedStyleMap;\n\nfunction convertToHtml(input, options) {\n return convert(input, options);\n}\n\nfunction convertToMarkdown(input, options) {\n var markdownOptions = Object.create(options || {});\n markdownOptions.outputFormat = \"markdown\";\n return convert(input, markdownOptions);\n}\n\nfunction convert(input, options) {\n options = readOptions(options);\n\n return unzip.openZip(input)\n .tap(function(docxFile) {\n return docxStyleMap.readStyleMap(docxFile).then(function(styleMap) {\n options.embeddedStyleMap = styleMap;\n });\n })\n .then(function(docxFile) {\n return docxReader.read(docxFile, input, options)\n .then(function(documentResult) {\n return documentResult.map(options.transformDocument);\n })\n .then(function(documentResult) {\n return convertDocumentToHtml(documentResult, options);\n });\n });\n}\n\nfunction readEmbeddedStyleMap(input) {\n return unzip.openZip(input)\n .then(docxStyleMap.readStyleMap);\n}\n\nfunction convertDocumentToHtml(documentResult, options) {\n var styleMapResult = parseStyleMap(options.readStyleMap());\n var parsedOptions = _.extend({}, options, {\n styleMap: styleMapResult.value\n });\n var documentConverter = new DocumentConverter(parsedOptions);\n\n return documentResult.flatMapThen(function(document) {\n return styleMapResult.flatMapThen(function(styleMap) {\n return documentConverter.convertToHtml(document);\n });\n });\n}\n\nfunction parseStyleMap(styleMap) {\n return Result.combine((styleMap || []).map(readStyle))\n .map(function(styleMap) {\n return styleMap.filter(function(styleMapping) {\n return !!styleMapping;\n });\n });\n}\n\n\nfunction extractRawText(input) {\n return unzip.openZip(input)\n .then(docxReader.read)\n .then(function(documentResult) {\n return documentResult.map(convertElementToRawText);\n });\n}\n\nfunction embedStyleMap(input, styleMap) {\n return unzip.openZip(input)\n .tap(function(docxFile) {\n return docxStyleMap.writeStyleMap(docxFile, styleMap);\n })\n .then(function(docxFile) {\n return docxFile.toArrayBuffer();\n })\n .then(function(arrayBuffer) {\n return {\n toArrayBuffer: function() {\n return arrayBuffer;\n },\n toBuffer: function() {\n return Buffer.from(arrayBuffer);\n }\n };\n });\n}\n\nexports.styleMapping = function() {\n throw new Error('Use a raw string instead of mammoth.styleMapping e.g. \"p[style-name=\\'Title\\'] => h1\" instead of mammoth.styleMapping(\"p[style-name=\\'Title\\'] => h1\")');\n};\n","/**\n * DOCX Preview Component\n *\n * Renders Word documents by:\n * 1. Attempting Docker-based PDF conversion for full fidelity (if available)\n * 2. Falling back to HTML conversion using mammoth.js\n */\n\nimport { useEffect, useState, useRef } from 'react';\nimport { FileText, AlertCircle, Loader2, FileImage } from 'lucide-react';\nimport mammoth from 'mammoth';\nimport PdfPreview from './PdfPreview';\n\ninterface DocxPreviewProps {\n content: string; // Base64 encoded DOCX data\n fileName: string;\n // Optional: workspace context for Docker conversion\n workspacePath?: string;\n filePath?: string;\n}\n\ntype PreviewMode = 'auto' | 'pdf' | 'html';\n\nexport function DocxPreview({ content, fileName, workspacePath, filePath }: DocxPreviewProps) {\n const [htmlContent, setHtmlContent] = useState('');\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [previewMode, setPreviewMode] = useState('auto');\n\n // PDF conversion state\n const [pdfContent, setPdfContent] = useState(null);\n const [isConverting, setIsConverting] = useState(false);\n const [dockerAvailable, setDockerAvailable] = useState(null);\n\n // AbortController for canceling in-flight requests\n const abortControllerRef = useRef(null);\n\n // Try Docker PDF conversion\n useEffect(() => {\n async function tryDockerConversion() {\n if (!workspacePath || !filePath) {\n setDockerAvailable(false);\n return;\n }\n\n // Cancel any previous conversion request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsConverting(true);\n\n try {\n const response = await fetch('/api/convert/document', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n path: filePath,\n workspace: workspacePath,\n }),\n signal: controller.signal,\n });\n\n // Check if request was aborted\n if (controller.signal.aborted) return;\n\n const data = await response.json();\n\n // Double-check abort status after parsing\n if (controller.signal.aborted) return;\n\n if (data.success && data.content) {\n setPdfContent(data.content);\n setDockerAvailable(true);\n } else {\n setDockerAvailable(data.docker_required === true ? false : null);\n }\n } catch (err) {\n // Ignore abort errors - they're expected when switching files\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Docker conversion failed:', err);\n setDockerAvailable(false);\n } finally {\n // Only update loading state if this request wasn't aborted\n if (!controller.signal.aborted) {\n setIsConverting(false);\n }\n }\n }\n\n if (previewMode === 'auto' || previewMode === 'pdf') {\n tryDockerConversion();\n }\n\n // Cleanup: abort on unmount or when dependencies change\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, [workspacePath, filePath, previewMode]);\n\n // Convert DOCX to HTML using mammoth (fallback)\n useEffect(() => {\n async function convertDocx() {\n setIsLoading(true);\n setError(null);\n\n try {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(content);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const arrayBuffer = bytes.buffer;\n\n // Convert DOCX to HTML using mammoth\n const result = await mammoth.convertToHtml({ arrayBuffer });\n\n // Wrap in styled HTML document\n const styledHtml = `\n\n\n\n \n \n\n\n${result.value}\n\n`;\n\n setHtmlContent(styledHtml);\n\n // Log any warnings\n if (result.messages.length > 0) {\n console.warn('Mammoth conversion warnings:', result.messages);\n }\n } catch (err) {\n console.error('DOCX conversion error:', err);\n setError(err instanceof Error ? err.message : 'Failed to convert document');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content && (previewMode === 'auto' || previewMode === 'html')) {\n convertDocx();\n }\n }, [content, previewMode]);\n\n // Determine what to show\n const showPdf = pdfContent && (previewMode === 'pdf' || (previewMode === 'auto' && dockerAvailable));\n const showHtml = !showPdf && htmlContent;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Word Document\n - {fileName}\n
    \n\n {/* Mode toggle */}\n {(pdfContent || htmlContent) && (\n
    \n setPreviewMode('pdf')}\n disabled={!pdfContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showPdf ? 'bg-blue-600 text-white' : 'text-gray-400 hover:text-gray-300'\n } ${!pdfContent ? 'opacity-50 cursor-not-allowed' : ''}`}\n title={pdfContent ? 'Full fidelity preview' : 'Docker container required for PDF preview'}\n >\n \n PDF\n \n setPreviewMode('html')}\n disabled={!htmlContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showHtml ? 'bg-blue-600 text-white' : 'text-gray-400 hover:text-gray-300'\n }`}\n title=\"HTML conversion mode\"\n >\n \n HTML\n \n
    \n )}\n
    \n\n {/* Content */}\n
    \n {/* Loading state */}\n {(isLoading || isConverting) && (\n
    \n \n {isConverting ? 'Converting to PDF...' : 'Converting document...'}\n
    \n )}\n\n {/* Error state */}\n {error && !pdfContent && (\n
    \n \n Failed to convert document\n {error}\n
    \n )}\n\n {/* PDF preview mode */}\n {!isLoading && !isConverting && showPdf && pdfContent && (\n
    \n \n
    \n )}\n\n {/* HTML preview mode */}\n {!isLoading && !isConverting && showHtml && (\n <>\n {/* Docker not available notice - show when not using PDF mode */}\n {!pdfContent && (\n
    \n
    \n \n \n {!workspacePath\n ? \"Full document preview available when viewing from workspace (requires Docker).\"\n : \"Full preview requires Docker with MassGen container.\"\n } Showing HTML conversion.\n \n
    \n
    \n )}\n \n \n )}\n
    \n
    \n );\n}\n\nexport default DocxPreview;\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.18.5';\nvar current_codepage = 1200, current_ansi = 1252;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t/*::[*/0/*::]*/: 1252, /* ANSI */\n\t/*::[*/1/*::]*/: 65001, /* DEFAULT */\n\t/*::[*/2/*::]*/: 65001, /* SYMBOL */\n\t/*::[*/77/*::]*/: 10000, /* MAC */\n\t/*::[*/128/*::]*/: 932, /* SHIFTJIS */\n\t/*::[*/129/*::]*/: 949, /* HANGUL */\n\t/*::[*/130/*::]*/: 1361, /* JOHAB */\n\t/*::[*/134/*::]*/: 936, /* GB2312 */\n\t/*::[*/136/*::]*/: 950, /* CHINESEBIG5 */\n\t/*::[*/161/*::]*/: 1253, /* GREEK */\n\t/*::[*/162/*::]*/: 1254, /* TURKISH */\n\t/*::[*/163/*::]*/: 1258, /* VIETNAMESE */\n\t/*::[*/177/*::]*/: 1255, /* HEBREW */\n\t/*::[*/178/*::]*/: 1256, /* ARABIC */\n\t/*::[*/186/*::]*/: 1257, /* BALTIC */\n\t/*::[*/204/*::]*/: 1251, /* RUSSIAN */\n\t/*::[*/222/*::]*/: 874, /* THAI */\n\t/*::[*/238/*::]*/: 1250, /* EASTEUROPE */\n\t/*::[*/255/*::]*/: 1252, /* OEM */\n\t/*::[*/69/*::]*/: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nvar $cptable;\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nexport { set_cptable };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n for (var i = 0; i < input.length; ) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") { throw \"wtf\"; }\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5: 37, 6: 38, 7: 39, 8: 40, // 5 -> 37 ... 8 -> 40\n\n\t23: 0, 24: 0, 25: 0, 26: 0, // 23 -> 0 ... 26 -> 0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59: 1, 60: 2, 61: 3, 62: 4, // 59 -> 1 ... 62 -> 4\n\n\t67: 9, 68: 10, // 67 -> 9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14, // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17, // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22, // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47, // 79 -> 45 ... 81 -> 47\n\t82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= SSFbase1904) epoch += 24*60*60*1000;\n\treturn (epoch - (SSFdnthresh + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports = {};\nexports.version = '1.2.1';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = {}); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\tif(!s) {\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nlet _fs = void 0;\nfunction set_fs(fs) { _fs = fs; }\nexport { set_fs };\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\nfunction numdate(v/*:number*/)/*:Date*/ {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN(/*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {\n\tvar d = new Date(str);\n\tif(good_pd) {\n\t\t/*:: if(fixdate == null) fixdate = 0; */\n\t\tif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr/*:Array*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [];\n\tfor(var i = 0; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tvar lower = s.toLowerCase();\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
    \").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); }\n\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\n// matches ... extracts content\nvar matchtag = /*#__PURE__*/(function() {\n\tvar mtcache/*:{[k:string]:RegExp}*/ = ({}/*:any*/);\n\treturn function matchtag(f/*:string*/,g/*:?string*/)/*:RegExp*/ {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)',((g||\"\")/*:any*/)));\n\t};\n})();\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = /*#__PURE__*/(function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = data.match(vtregex(h.baseType))||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + ''; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || (dense ? ([]/*:any*/) : ({}/*:any*/));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}/*:any*/));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\nvar VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Category', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'PresentationFormat', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'ByteCount', t: VT_I4 },\n\t/*::[*/0x05/*::]*/: { n: 'LineCount', t: VT_I4 },\n\t/*::[*/0x06/*::]*/: { n: 'ParagraphCount', t: VT_I4 },\n\t/*::[*/0x07/*::]*/: { n: 'SlideCount', t: VT_I4 },\n\t/*::[*/0x08/*::]*/: { n: 'NoteCount', t: VT_I4 },\n\t/*::[*/0x09/*::]*/: { n: 'HiddenCount', t: VT_I4 },\n\t/*::[*/0x0a/*::]*/: { n: 'MultimediaClipCount', t: VT_I4 },\n\t/*::[*/0x0b/*::]*/: { n: 'ScaleCrop', t: VT_BOOL },\n\t/*::[*/0x0c/*::]*/: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t/*::[*/0x0d/*::]*/: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t/*::[*/0x0e/*::]*/: { n: 'Manager', t: VT_STRING },\n\t/*::[*/0x0f/*::]*/: { n: 'Company', t: VT_STRING },\n\t/*::[*/0x10/*::]*/: { n: 'LinksUpToDate', t: VT_BOOL },\n\t/*::[*/0x11/*::]*/: { n: 'CharacterCount', t: VT_I4 },\n\t/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },\n\t/*::[*/0x16/*::]*/: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },\n\t/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },\n\t/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },\n\t/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },\n\t/*::[*/0x1D/*::]*/: { n: 'Version', t: VT_STRING },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Title', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'Subject', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'Author', t: VT_STRING },\n\t/*::[*/0x05/*::]*/: { n: 'Keywords', t: VT_STRING },\n\t/*::[*/0x06/*::]*/: { n: 'Comments', t: VT_STRING },\n\t/*::[*/0x07/*::]*/: { n: 'Template', t: VT_STRING },\n\t/*::[*/0x08/*::]*/: { n: 'LastAuthor', t: VT_STRING },\n\t/*::[*/0x09/*::]*/: { n: 'RevNumber', t: VT_STRING },\n\t/*::[*/0x0A/*::]*/: { n: 'EditTime', t: VT_FILETIME },\n\t/*::[*/0x0B/*::]*/: { n: 'LastPrinted', t: VT_FILETIME },\n\t/*::[*/0x0C/*::]*/: { n: 'CreatedDate', t: VT_FILETIME },\n\t/*::[*/0x0D/*::]*/: { n: 'ModifiedDate', t: VT_FILETIME },\n\t/*::[*/0x0E/*::]*/: { n: 'PageCount', t: VT_I4 },\n\t/*::[*/0x0F/*::]*/: { n: 'WordCount', t: VT_I4 },\n\t/*::[*/0x10/*::]*/: { n: 'CharCount', t: VT_I4 },\n\t/*::[*/0x11/*::]*/: { n: 'Thumbnail', t: VT_CF },\n\t/*::[*/0x12/*::]*/: { n: 'Application', t: VT_STRING },\n\t/*::[*/0x13/*::]*/: { n: 'DocSecurity', t: VT_I4 },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t/*::[*/0x0001/*::]*/: \"US\", // United States\n\t/*::[*/0x0002/*::]*/: \"CA\", // Canada\n\t/*::[*/0x0003/*::]*/: \"\", // Latin America (except Brazil)\n\t/*::[*/0x0007/*::]*/: \"RU\", // Russia\n\t/*::[*/0x0014/*::]*/: \"EG\", // Egypt\n\t/*::[*/0x001E/*::]*/: \"GR\", // Greece\n\t/*::[*/0x001F/*::]*/: \"NL\", // Netherlands\n\t/*::[*/0x0020/*::]*/: \"BE\", // Belgium\n\t/*::[*/0x0021/*::]*/: \"FR\", // France\n\t/*::[*/0x0022/*::]*/: \"ES\", // Spain\n\t/*::[*/0x0024/*::]*/: \"HU\", // Hungary\n\t/*::[*/0x0027/*::]*/: \"IT\", // Italy\n\t/*::[*/0x0029/*::]*/: \"CH\", // Switzerland\n\t/*::[*/0x002B/*::]*/: \"AT\", // Austria\n\t/*::[*/0x002C/*::]*/: \"GB\", // United Kingdom\n\t/*::[*/0x002D/*::]*/: \"DK\", // Denmark\n\t/*::[*/0x002E/*::]*/: \"SE\", // Sweden\n\t/*::[*/0x002F/*::]*/: \"NO\", // Norway\n\t/*::[*/0x0030/*::]*/: \"PL\", // Poland\n\t/*::[*/0x0031/*::]*/: \"DE\", // Germany\n\t/*::[*/0x0034/*::]*/: \"MX\", // Mexico\n\t/*::[*/0x0037/*::]*/: \"BR\", // Brazil\n\t/*::[*/0x003d/*::]*/: \"AU\", // Australia\n\t/*::[*/0x0040/*::]*/: \"NZ\", // New Zealand\n\t/*::[*/0x0042/*::]*/: \"TH\", // Thailand\n\t/*::[*/0x0051/*::]*/: \"JP\", // Japan\n\t/*::[*/0x0052/*::]*/: \"KR\", // Korea\n\t/*::[*/0x0054/*::]*/: \"VN\", // Viet Nam\n\t/*::[*/0x0056/*::]*/: \"CN\", // China\n\t/*::[*/0x005A/*::]*/: \"TR\", // Turkey\n\t/*::[*/0x0069/*::]*/: \"JS\", // Ramastan\n\t/*::[*/0x00D5/*::]*/: \"DZ\", // Algeria\n\t/*::[*/0x00D8/*::]*/: \"MA\", // Morocco\n\t/*::[*/0x00DA/*::]*/: \"LY\", // Libya\n\t/*::[*/0x015F/*::]*/: \"PT\", // Portugal\n\t/*::[*/0x0162/*::]*/: \"IS\", // Iceland\n\t/*::[*/0x0166/*::]*/: \"FI\", // Finland\n\t/*::[*/0x01A4/*::]*/: \"CZ\", // Czech Republic\n\t/*::[*/0x0376/*::]*/: \"TW\", // Taiwan\n\t/*::[*/0x03C1/*::]*/: \"LB\", // Lebanon\n\t/*::[*/0x03C2/*::]*/: \"JO\", // Jordan\n\t/*::[*/0x03C3/*::]*/: \"SY\", // Syria\n\t/*::[*/0x03C4/*::]*/: \"IQ\", // Iraq\n\t/*::[*/0x03C5/*::]*/: \"KW\", // Kuwait\n\t/*::[*/0x03C6/*::]*/: \"SA\", // Saudi Arabia\n\t/*::[*/0x03CB/*::]*/: \"AE\", // United Arab Emirates\n\t/*::[*/0x03CC/*::]*/: \"IL\", // Israel\n\t/*::[*/0x03CE/*::]*/: \"QA\", // Qatar\n\t/*::[*/0x03D5/*::]*/: \"IR\", // Iran\n\t/*::[*/0xFFFF/*::]*/: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t/*::[*/0x00/*::]*/: \"#NULL!\",\n\t/*::[*/0x07/*::]*/: \"#DIV/0!\",\n\t/*::[*/0x0F/*::]*/: \"#VALUE!\",\n\t/*::[*/0x17/*::]*/: \"#REF!\",\n\t/*::[*/0x1D/*::]*/: \"#NAME?\",\n\t/*::[*/0x24/*::]*/: \"#NUM!\",\n\t/*::[*/0x2A/*::]*/: \"#N/A\",\n\t/*::[*/0x2B/*::]*/: \"#GETTING_DATA\",\n\t/*::[*/0xFF/*::]*/: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\": 0x00,\n\t\"#DIV/0!\": 0x07,\n\t\"#VALUE!\": 0x0F,\n\t\"#REF!\": 0x17,\n\t\"#NAME?\": 0x1D,\n\t\"#NUM!\": 0x24,\n\t\"#N/A\": 0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\": 0xFF\n};\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts)/*:string*/ {\n\tvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array*/ = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = writextag('Types', null, {\n\t\t'xmlns': XMLNS.CT,\n\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t});\n\n\to = o.concat([\n\t\t['xml', 'application/xml'],\n\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t/* from test files */\n\t\t['bmp', 'image/bmp'],\n\t\t['png', 'image/png'],\n\t\t['gif', 'image/gif'],\n\t\t['emf', 'image/x-emf'],\n\t\t['wmf', 'image/x-wmf'],\n\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t['pdf', 'application/pdf'],\n\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t].map(function(x) {\n\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t}));\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest/*:Array >*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base/*:string*/, file/*:string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nfunction write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ {\n\treturn 'Sheet' + 'JS ' + XLSX.version + '';\n}\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nvar CORE_PROPS_REGEX/*:Array*/ = /*#__PURE__*/(function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ]; //.concat(PseudoPropsPairs);\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob/*::, length*/)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe}/*:any*/);\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t/*::[*/0x00/*::]*/: parse_FtSkip, /* FtEnd */\n\t/*::[*/0x04/*::]*/: parse_FtSkip, /* FtMacro */\n\t/*::[*/0x05/*::]*/: parse_FtSkip, /* FtButton */\n\t/*::[*/0x06/*::]*/: parse_FtSkip, /* FtGmo */\n\t/*::[*/0x07/*::]*/: parse_FtCf, /* FtCf */\n\t/*::[*/0x08/*::]*/: parse_FtSkip, /* FtPioGrbit */\n\t/*::[*/0x09/*::]*/: parse_FtSkip, /* FtPictFmla */\n\t/*::[*/0x0A/*::]*/: parse_FtSkip, /* FtCbls */\n\t/*::[*/0x0B/*::]*/: parse_FtSkip, /* FtRbo */\n\t/*::[*/0x0C/*::]*/: parse_FtSkip, /* FtSbs */\n\t/*::[*/0x0D/*::]*/: parse_FtNts, /* FtNts */\n\t/*::[*/0x0E/*::]*/: parse_FtSkip, /* FtSbsFmla */\n\t/*::[*/0x0F/*::]*/: parse_FtSkip, /* FtGboData */\n\t/*::[*/0x10/*::]*/: parse_FtSkip, /* FtEdoData */\n\t/*::[*/0x11/*::]*/: parse_FtSkip, /* FtRboData */\n\t/*::[*/0x12/*::]*/: parse_FtSkip, /* FtCblsData */\n\t/*::[*/0x13/*::]*/: parse_FtSkip, /* FtLbsData */\n\t/*::[*/0x14/*::]*/: parse_FtSkip, /* FtCblsFmla */\n\t/*::[*/0x15/*::]*/: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2 || length == 9) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob/*::, length*/) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\n\t/* shapefile DBF extension */\n\t/*::[*/0x00/*::]*/: 20127, /*::[*/0x08/*::]*/: 865,\n\t/*::[*/0x09/*::]*/: 437, /*::[*/0x0A/*::]*/: 850,\n\t/*::[*/0x0B/*::]*/: 437, /*::[*/0x0D/*::]*/: 437,\n\t/*::[*/0x0E/*::]*/: 850, /*::[*/0x0F/*::]*/: 437,\n\t/*::[*/0x10/*::]*/: 850, /*::[*/0x11/*::]*/: 437,\n\t/*::[*/0x12/*::]*/: 850, /*::[*/0x13/*::]*/: 932,\n\t/*::[*/0x14/*::]*/: 850, /*::[*/0x15/*::]*/: 437,\n\t/*::[*/0x16/*::]*/: 850, /*::[*/0x17/*::]*/: 865,\n\t/*::[*/0x18/*::]*/: 437, /*::[*/0x19/*::]*/: 437,\n\t/*::[*/0x1A/*::]*/: 850, /*::[*/0x1B/*::]*/: 437,\n\t/*::[*/0x1C/*::]*/: 863, /*::[*/0x1D/*::]*/: 850,\n\t/*::[*/0x1F/*::]*/: 852, /*::[*/0x22/*::]*/: 852,\n\t/*::[*/0x23/*::]*/: 852, /*::[*/0x24/*::]*/: 860,\n\t/*::[*/0x25/*::]*/: 850, /*::[*/0x26/*::]*/: 866,\n\t/*::[*/0x37/*::]*/: 850, /*::[*/0x40/*::]*/: 852,\n\t/*::[*/0x4D/*::]*/: 936, /*::[*/0x4E/*::]*/: 949,\n\t/*::[*/0x4F/*::]*/: 950, /*::[*/0x50/*::]*/: 874,\n\t/*::[*/0x57/*::]*/: 1252, /*::[*/0x58/*::]*/: 1252,\n\t/*::[*/0x59/*::]*/: 1252, /*::[*/0x6C/*::]*/: 863,\n\t/*::[*/0x86/*::]*/: 737, /*::[*/0x87/*::]*/: 852,\n\t/*::[*/0x88/*::]*/: 857, /*::[*/0xCC/*::]*/: 1257,\n\n\t/*::[*/0xFF/*::]*/: 16969\n};\nvar dbf_reverse_map = evert({\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\t/*::[*/0x00/*::]*/: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = $cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/\\s+$/,\"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tvar colwidths/*:Array*/ = [];\n\tvar coldecimals/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tmaxlen = Math.max(maxlen, String(col[j]).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[/*::String(*/current_ansi/*::)*/] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'W': break; /* window? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;\n\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tarr[R][C][1] = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F':\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*//*::, opts*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/)/*:string*/ {\n\t\tvar preamble/*:Array*/ = [\"ID;PWXL;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = /*#__PURE__*/(function() {\n\t\tvar push_field = function pf(o/*:Array*/, topic/*:string*/, v/*:number*/, n/*:number*/, s/*:string*/) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o/*:Array*/, type/*:number*/, v/*:any*/, s/*:string*/) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\t\tvar o/*:Array*/ = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t/*::[*/0x2C/*::]*/: ',',\n\t\t/*::[*/0x09/*::]*/: \"\\t\",\n\t\t/*::[*/0x3B/*::]*/: ';',\n\t\t/*::[*/0x7C/*::]*/: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t/*::[*/0x2C/*::]*/: 3,\n\t\t/*::[*/0x09/*::]*/: 2,\n\t\t/*::[*/0x3B/*::]*/: 1,\n\t\t/*::[*/0x7C/*::]*/: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ((o.dense ? [] : {})/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (s[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = Array.isArray(ws);\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n\t\t\t\t} else {\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, v) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, v) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t0x6F: [\"T\", 1]\n\t};\n\tvar BinOpTab = [\n\t\t \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"CALCMODE\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCORDER\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"SPLIT\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SYNC\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"RANGE\", f:parse_RANGE },\n\t\t/*::[*/0x0007/*::]*/: { n:\"WINDOW1\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"COLW1\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"WINTWO\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"COLW2\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"NAME\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"BLANK\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t/*::[*/0x000E/*::]*/: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t/*::[*/0x000F/*::]*/: { n:\"LABEL\", f:parse_LABEL },\n\t\t/*::[*/0x0010/*::]*/: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t/*::[*/0x0018/*::]*/: { n:\"TABLE\" },\n\t\t/*::[*/0x0019/*::]*/: { n:\"ORANGE\" },\n\t\t/*::[*/0x001A/*::]*/: { n:\"PRANGE\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"SRANGE\" },\n\t\t/*::[*/0x001C/*::]*/: { n:\"FRANGE\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"KRANGE1\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"HRANGE\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"KRANGE2\" },\n\t\t/*::[*/0x0024/*::]*/: { n:\"PROTEC\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"FOOTER\" },\n\t\t/*::[*/0x0026/*::]*/: { n:\"HEADER\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"SETUP\" },\n\t\t/*::[*/0x0028/*::]*/: { n:\"MARGINS\" },\n\t\t/*::[*/0x0029/*::]*/: { n:\"LABELFMT\" },\n\t\t/*::[*/0x002A/*::]*/: { n:\"TITLES\" },\n\t\t/*::[*/0x002B/*::]*/: { n:\"SHEETJS\" },\n\t\t/*::[*/0x002D/*::]*/: { n:\"GRAPH\" },\n\t\t/*::[*/0x002E/*::]*/: { n:\"NGRAPH\" },\n\t\t/*::[*/0x002F/*::]*/: { n:\"CALCCOUNT\" },\n\t\t/*::[*/0x0030/*::]*/: { n:\"UNFORMATTED\" },\n\t\t/*::[*/0x0031/*::]*/: { n:\"CURSORW12\" },\n\t\t/*::[*/0x0032/*::]*/: { n:\"WINDOW\" },\n\t\t/*::[*/0x0033/*::]*/: { n:\"STRING\", f:parse_LABEL },\n\t\t/*::[*/0x0037/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0038/*::]*/: { n:\"LOCKED\" },\n\t\t/*::[*/0x003C/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x003D/*::]*/: { n:\"QUERYNAME\" },\n\t\t/*::[*/0x003E/*::]*/: { n:\"PRINT\" },\n\t\t/*::[*/0x003F/*::]*/: { n:\"PRINTNAME\" },\n\t\t/*::[*/0x0040/*::]*/: { n:\"GRAPH2\" },\n\t\t/*::[*/0x0041/*::]*/: { n:\"GRAPHNAME\" },\n\t\t/*::[*/0x0042/*::]*/: { n:\"ZOOM\" },\n\t\t/*::[*/0x0043/*::]*/: { n:\"SYMSPLIT\" },\n\t\t/*::[*/0x0044/*::]*/: { n:\"NSROWS\" },\n\t\t/*::[*/0x0045/*::]*/: { n:\"NSCOLS\" },\n\t\t/*::[*/0x0046/*::]*/: { n:\"RULER\" },\n\t\t/*::[*/0x0047/*::]*/: { n:\"NNAME\" },\n\t\t/*::[*/0x0048/*::]*/: { n:\"ACOMM\" },\n\t\t/*::[*/0x0049/*::]*/: { n:\"AMACRO\" },\n\t\t/*::[*/0x004A/*::]*/: { n:\"PARSE\" },\n\t\t/*::[*/0x0066/*::]*/: { n:\"PRANGES??\" },\n\t\t/*::[*/0x0067/*::]*/: { n:\"RRANGES??\" },\n\t\t/*::[*/0x0068/*::]*/: { n:\"FNAME??\" },\n\t\t/*::[*/0x0069/*::]*/: { n:\"MRANGES??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00DE/*::]*/: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\" },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCSET\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"WINDOWSET\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SHEETCELLPTR\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"SHEETLAYOUT\" },\n\t\t/*::[*/0x0007/*::]*/: { n:\"COLUMNWIDTH\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"HIDDENCOLUMN\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"USERRANGE\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"SYSTEMRANGE\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"ZEROFORCE\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"SORTKEYDIR\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"FILESEAL\" },\n\t\t/*::[*/0x000E/*::]*/: { n:\"DATAFILLNUMS\" },\n\t\t/*::[*/0x000F/*::]*/: { n:\"PRINTMAIN\" },\n\t\t/*::[*/0x0010/*::]*/: { n:\"PRINTSTRING\" },\n\t\t/*::[*/0x0011/*::]*/: { n:\"GRAPHMAIN\" },\n\t\t/*::[*/0x0012/*::]*/: { n:\"GRAPHSTRING\" },\n\t\t/*::[*/0x0013/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0014/*::]*/: { n:\"ERRCELL\" },\n\t\t/*::[*/0x0015/*::]*/: { n:\"NACELL\" },\n\t\t/*::[*/0x0016/*::]*/: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t/*::[*/0x0017/*::]*/: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t/*::[*/0x0018/*::]*/: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t/*::[*/0x0019/*::]*/: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t/*::[*/0x001A/*::]*/: { n:\"FORMULA1A\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t/*::[*/0x001C/*::]*/: { n:\"DTLABELMISC\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"DTLABELCELL\" },\n\t\t/*::[*/0x001E/*::]*/: { n:\"GRAPHWINDOW\" },\n\t\t/*::[*/0x001F/*::]*/: { n:\"CPA\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"LPLAUTO\" },\n\t\t/*::[*/0x0021/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x0022/*::]*/: { n:\"HIDDENSHEET\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t/*::[*/0x0026/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t/*::[*/0x0028/*::]*/: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t/*::[*/0x008E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0093/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0096/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0097/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0098/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0099/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00A3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B1/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B8/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BA/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BB/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BC/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00CD/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00D0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0100/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0103/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0104/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0105/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0106/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0107/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0109/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010F/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0180/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0185/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0186/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0189/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x018C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0200/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0202/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0201/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0204/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0205/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0280/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0281/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0282/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0283/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0284/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0285/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0286/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0287/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0288/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0292/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0293/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0294/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0295/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0296/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0299/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x029A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0300/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0304/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0601/*::]*/: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t/*::[*/0x0640/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0642/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0701/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0702/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0703/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0704/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0780/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0800/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0801/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0804/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0A80/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x2AF6/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x3231/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6E49/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6F44/*::]*/: { n:\"??\" },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
    ') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = /*#__PURE__*/(function() {\n\tfunction rtf_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\t/* TODO: this is a stub */\n\tfunction rtf_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\n\t\tvar rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n\t\tif(!rows.length) throw new Error(\"RTF missing table\");\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:rows.length - 1}}/*:any*/);\n\t\trows.forEach(function(rowtf, R) {\n\t\t\tif(Array.isArray(ws)) ws[R] = [];\n\t\t\tvar rtfre = /\\\\\\w+\\b/g;\n\t\t\tvar last_index = 0;\n\t\t\tvar res;\n\t\t\tvar C = -1;\n\t\t\twhile((res = rtfre.exec(rowtf))) {\n\t\t\t\tswitch(res[0]) {\n\t\t\t\t\tcase \"\\\\cell\":\n\t\t\t\t\t\tvar data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n\t\t\t\t\t\tif(data[0] == \" \") data = data.slice(1);\n\t\t\t\t\t\t++C;\n\t\t\t\t\t\tif(data.length) {\n\t\t\t\t\t\t\t// TODO: value parsing, including codepage adjustments\n\t\t\t\t\t\t\tvar cell = {v: data, t:\"s\"};\n\t\t\t\t\t\t\tif(Array.isArray(ws)) ws[R][C] = cell;\n\t\t\t\t\t\t\telse ws[encode_cell({r:R, c:C})] = cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlast_index = rtfre.lastIndex;\n\t\t\t}\n\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t});\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws/*:Worksheet*//*::, opts*/)/*:string*/ {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF_load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF_load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n while (cnt-- > 0)\n out.push([data.read_shift(4), data.read_shift(4)]);\n return out;\n}\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = { Types: [], Cell: [], Value: [] };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function(val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({ name: val.name });\n break;\n case 51:\n val.forEach(function(r) {\n if (metatype == 1)\n out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n else if (metatype == 0)\n out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n });\n break;\n case 337:\n metatype = val ? 1 : 0;\n break;\n case 338:\n metatype = 2;\n break;\n case 35:\n state.push(RT);\n pass = true;\n break;\n case 36:\n state.pop();\n pass = false;\n break;\n default:\n if (R.T) {\n } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return out;\n}\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = { Types: [], Cell: [], Value: [] };\n if (!data)\n return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function(x) {\n var y = parsexmltag(x);\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n case \"\":\n case \"\":\n break;\n case \"\":\n pass = false;\n break;\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ']*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId/*:number*/, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
    ',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nfunction sheet_insert_comments(sheet, comments/*:Array*/, threaded/*:boolean*/, people/*:?Array*/) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"\" + a + \"\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"\" + \"tc=\" + w.ID + \"\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"SheetJ5\"); }\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [];\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\telse d[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tts.push(c.t||\"\");\n\t\t});\n\t\to.push('');\n\t\tif(ts.length <= 1) o.push(writetag(\"t\", escapexml(ts[0]||\"\")));\n\t\telse {\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\tvar t = \"Comment:\\n \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t}\n\t\to.push('');\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '': case '': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '
    ': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n cfb.FullPaths.forEach(function(p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function(p, i) {\n if (i == 0)\n return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\")\n CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t/*::[*/0x01/*::]*/: { n:'PtgExp', f:parse_PtgExp },\n\t/*::[*/0x02/*::]*/: { n:'PtgTbl', f:parse_PtgTbl },\n\t/*::[*/0x03/*::]*/: { n:'PtgAdd', f:parseread1 },\n\t/*::[*/0x04/*::]*/: { n:'PtgSub', f:parseread1 },\n\t/*::[*/0x05/*::]*/: { n:'PtgMul', f:parseread1 },\n\t/*::[*/0x06/*::]*/: { n:'PtgDiv', f:parseread1 },\n\t/*::[*/0x07/*::]*/: { n:'PtgPower', f:parseread1 },\n\t/*::[*/0x08/*::]*/: { n:'PtgConcat', f:parseread1 },\n\t/*::[*/0x09/*::]*/: { n:'PtgLt', f:parseread1 },\n\t/*::[*/0x0A/*::]*/: { n:'PtgLe', f:parseread1 },\n\t/*::[*/0x0B/*::]*/: { n:'PtgEq', f:parseread1 },\n\t/*::[*/0x0C/*::]*/: { n:'PtgGe', f:parseread1 },\n\t/*::[*/0x0D/*::]*/: { n:'PtgGt', f:parseread1 },\n\t/*::[*/0x0E/*::]*/: { n:'PtgNe', f:parseread1 },\n\t/*::[*/0x0F/*::]*/: { n:'PtgIsect', f:parseread1 },\n\t/*::[*/0x10/*::]*/: { n:'PtgUnion', f:parseread1 },\n\t/*::[*/0x11/*::]*/: { n:'PtgRange', f:parseread1 },\n\t/*::[*/0x12/*::]*/: { n:'PtgUplus', f:parseread1 },\n\t/*::[*/0x13/*::]*/: { n:'PtgUminus', f:parseread1 },\n\t/*::[*/0x14/*::]*/: { n:'PtgPercent', f:parseread1 },\n\t/*::[*/0x15/*::]*/: { n:'PtgParen', f:parseread1 },\n\t/*::[*/0x16/*::]*/: { n:'PtgMissArg', f:parseread1 },\n\t/*::[*/0x17/*::]*/: { n:'PtgStr', f:parse_PtgStr },\n\t/*::[*/0x1A/*::]*/: { n:'PtgSheet', f:parse_PtgSheet },\n\t/*::[*/0x1B/*::]*/: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t/*::[*/0x1C/*::]*/: { n:'PtgErr', f:parse_PtgErr },\n\t/*::[*/0x1D/*::]*/: { n:'PtgBool', f:parse_PtgBool },\n\t/*::[*/0x1E/*::]*/: { n:'PtgInt', f:parse_PtgInt },\n\t/*::[*/0x1F/*::]*/: { n:'PtgNum', f:parse_PtgNum },\n\t/*::[*/0x20/*::]*/: { n:'PtgArray', f:parse_PtgArray },\n\t/*::[*/0x21/*::]*/: { n:'PtgFunc', f:parse_PtgFunc },\n\t/*::[*/0x22/*::]*/: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t/*::[*/0x23/*::]*/: { n:'PtgName', f:parse_PtgName },\n\t/*::[*/0x24/*::]*/: { n:'PtgRef', f:parse_PtgRef },\n\t/*::[*/0x25/*::]*/: { n:'PtgArea', f:parse_PtgArea },\n\t/*::[*/0x26/*::]*/: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t/*::[*/0x27/*::]*/: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t/*::[*/0x28/*::]*/: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t/*::[*/0x29/*::]*/: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t/*::[*/0x2A/*::]*/: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t/*::[*/0x2B/*::]*/: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t/*::[*/0x2C/*::]*/: { n:'PtgRefN', f:parse_PtgRefN },\n\t/*::[*/0x2D/*::]*/: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t/*::[*/0x2E/*::]*/: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t/*::[*/0x2F/*::]*/: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t/*::[*/0x39/*::]*/: { n:'PtgNameX', f:parse_PtgNameX },\n\t/*::[*/0x3A/*::]*/: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t/*::[*/0x3B/*::]*/: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t/*::[*/0x3C/*::]*/: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t/*::[*/0x3D/*::]*/: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t/*::[*/0xFF/*::]*/: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t/*::[*/0x40/*::]*/: 0x20, /*::[*/0x60/*::]*/: 0x20,\n\t/*::[*/0x41/*::]*/: 0x21, /*::[*/0x61/*::]*/: 0x21,\n\t/*::[*/0x42/*::]*/: 0x22, /*::[*/0x62/*::]*/: 0x22,\n\t/*::[*/0x43/*::]*/: 0x23, /*::[*/0x63/*::]*/: 0x23,\n\t/*::[*/0x44/*::]*/: 0x24, /*::[*/0x64/*::]*/: 0x24,\n\t/*::[*/0x45/*::]*/: 0x25, /*::[*/0x65/*::]*/: 0x25,\n\t/*::[*/0x46/*::]*/: 0x26, /*::[*/0x66/*::]*/: 0x26,\n\t/*::[*/0x47/*::]*/: 0x27, /*::[*/0x67/*::]*/: 0x27,\n\t/*::[*/0x48/*::]*/: 0x28, /*::[*/0x68/*::]*/: 0x28,\n\t/*::[*/0x49/*::]*/: 0x29, /*::[*/0x69/*::]*/: 0x29,\n\t/*::[*/0x4A/*::]*/: 0x2A, /*::[*/0x6A/*::]*/: 0x2A,\n\t/*::[*/0x4B/*::]*/: 0x2B, /*::[*/0x6B/*::]*/: 0x2B,\n\t/*::[*/0x4C/*::]*/: 0x2C, /*::[*/0x6C/*::]*/: 0x2C,\n\t/*::[*/0x4D/*::]*/: 0x2D, /*::[*/0x6D/*::]*/: 0x2D,\n\t/*::[*/0x4E/*::]*/: 0x2E, /*::[*/0x6E/*::]*/: 0x2E,\n\t/*::[*/0x4F/*::]*/: 0x2F, /*::[*/0x6F/*::]*/: 0x2F,\n\t/*::[*/0x58/*::]*/: 0x22, /*::[*/0x78/*::]*/: 0x22,\n\t/*::[*/0x59/*::]*/: 0x39, /*::[*/0x79/*::]*/: 0x39,\n\t/*::[*/0x5A/*::]*/: 0x3A, /*::[*/0x7A/*::]*/: 0x3A,\n\t/*::[*/0x5B/*::]*/: 0x3B, /*::[*/0x7B/*::]*/: 0x3B,\n\t/*::[*/0x5C/*::]*/: 0x3C, /*::[*/0x7C/*::]*/: 0x3C,\n\t/*::[*/0x5D/*::]*/: 0x3D, /*::[*/0x7D/*::]*/: 0x3D\n};\n\nvar Ptg18 = {\n\t/*::[*/0x01/*::]*/: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t/*::[*/0x02/*::]*/: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t/*::[*/0x03/*::]*/: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t/*::[*/0x06/*::]*/: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t/*::[*/0x07/*::]*/: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t/*::[*/0x0A/*::]*/: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t/*::[*/0x0B/*::]*/: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t/*::[*/0x0D/*::]*/: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t/*::[*/0x0F/*::]*/: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t/*::[*/0x10/*::]*/: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t/*::[*/0x19/*::]*/: { n:'PtgList', f:parse_PtgList },\n\t/*::[*/0x1D/*::]*/: { n:'PtgSxName', f:parse_PtgSxName },\n\t/*::[*/0xFF/*::]*/: {}\n};\nvar Ptg19 = {\n\t/*::[*/0x00/*::]*/: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t/*::[*/0x01/*::]*/: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t/*::[*/0x02/*::]*/: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t/*::[*/0x04/*::]*/: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t/*::[*/0x08/*::]*/: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t/*::[*/0x10/*::]*/: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t/*::[*/0x20/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x21/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x40/*::]*/: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t/*::[*/0x41/*::]*/: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t/*::[*/0x80/*::]*/: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF_load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2= /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z' && !cell.f) return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=d.match(match_v))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && /*::cref != null && */cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(8 + 4 * cell.v.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/)/*:boolean*/ {\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_theme(data/*:string*/, name/*:string*/, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\n\nfunction write_wb(wb, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data/*:SST*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data/*:Array*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\n\nfunction write_xlmeta(name/*:string*/) {\n\treturn (name.slice(-4)===\".bin\" ? write_xlmeta_bin : write_xlmeta_xml)();\n}\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\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\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF_load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(/*::wb, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"
    \" + t + \"
    \");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002f /* FilePass */: case 0x0195 /* FileLock */: case 0x00e1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ((options.dense ? [] : {})/*:any*/);\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* 'BOF' */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t/*::[*/0x0009/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0209/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0409/*::]*/:4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t/*::[*/0x0200/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0300/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0400/*::]*/:4,\n\t\t\t\t\t\t/*::[*/0x0500/*::]*/:5,\n\t\t\t\t\t\t/*::[*/0x0600/*::]*/:8,\n\t\t\t\t\t\t/*::[*/0x0002/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0007/*::]*/:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\n\t\t\t\t\tif(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF_load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t/*::[*/0x0000/*::]*/: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t/*::[*/0x0006/*::]*/: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t/*::[*/0x0007/*::]*/: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t/*::[*/0x000A/*::]*/: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t/*::[*/0x000B/*::]*/: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t/*::[*/0x000C/*::]*/: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t/*::[*/0x000D/*::]*/: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t/*::[*/0x000E/*::]*/: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t/*::[*/0x000F/*::]*/: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t/*::[*/0x0010/*::]*/: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t/*::[*/0x0011/*::]*/: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t/*::[*/0x0012/*::]*/: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t/*::[*/0x0013/*::]*/: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t/*::[*/0x0014/*::]*/: { /* n:\"BrtPCDIMissing\" */ },\n\t/*::[*/0x0015/*::]*/: { /* n:\"BrtPCDINumber\" */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"BrtPCDIBoolean\" */ },\n\t/*::[*/0x0017/*::]*/: { /* n:\"BrtPCDIError\" */ },\n\t/*::[*/0x0018/*::]*/: { /* n:\"BrtPCDIString\" */ },\n\t/*::[*/0x0019/*::]*/: { /* n:\"BrtPCDIDatetime\" */ },\n\t/*::[*/0x001A/*::]*/: { /* n:\"BrtPCDIIndex\" */ },\n\t/*::[*/0x001B/*::]*/: { /* n:\"BrtPCDIAMissing\" */ },\n\t/*::[*/0x001C/*::]*/: { /* n:\"BrtPCDIANumber\" */ },\n\t/*::[*/0x001D/*::]*/: { /* n:\"BrtPCDIABoolean\" */ },\n\t/*::[*/0x001E/*::]*/: { /* n:\"BrtPCDIAError\" */ },\n\t/*::[*/0x001F/*::]*/: { /* n:\"BrtPCDIAString\" */ },\n\t/*::[*/0x0020/*::]*/: { /* n:\"BrtPCDIADatetime\" */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"BrtPCRRecord\" */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"BrtPCRRecordDt\" */ },\n\t/*::[*/0x0023/*::]*/: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t/*::[*/0x0024/*::]*/: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t/*::[*/0x0025/*::]*/: { /* n:\"BrtACBegin\", */ T:1 },\n\t/*::[*/0x0026/*::]*/: { /* n:\"BrtACEnd\", */ T:-1 },\n\t/*::[*/0x0027/*::]*/: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t/*::[*/0x0028/*::]*/: { /* n:\"BrtIndexRowBlock\" */ },\n\t/*::[*/0x002A/*::]*/: { /* n:\"BrtIndexBlock\" */ },\n\t/*::[*/0x002B/*::]*/: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t/*::[*/0x002C/*::]*/: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t/*::[*/0x002D/*::]*/: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t/*::[*/0x002E/*::]*/: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t/*::[*/0x002F/*::]*/: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t/*::[*/0x0030/*::]*/: { /* n:\"BrtStyle\" */ },\n\t/*::[*/0x0031/*::]*/: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t/*::[*/0x0032/*::]*/: { /* n:\"BrtValueMeta\" */ },\n\t/*::[*/0x0033/*::]*/: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t/*::[*/0x0034/*::]*/: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t/*::[*/0x0035/*::]*/: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t/*::[*/0x0036/*::]*/: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t/*::[*/0x0037/*::]*/: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t/*::[*/0x0038/*::]*/: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t/*::[*/0x0039/*::]*/: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t/*::[*/0x003A/*::]*/: { /* n:\"BrtMdxMbrIstr\" */ },\n\t/*::[*/0x003B/*::]*/: { /* n:\"BrtStr\" */ },\n\t/*::[*/0x003C/*::]*/: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x003E/*::]*/: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t/*::[*/0x003F/*::]*/: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t/*::[*/0x0040/*::]*/: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t/*::[*/0x0041/*::]*/: { /* n:\"BrtSxvcellNum\" */ },\n\t/*::[*/0x0042/*::]*/: { /* n:\"BrtSxvcellStr\" */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BrtSxvcellBool\" */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BrtSxvcellErr\" */ },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BrtSxvcellDate\" */ },\n\t/*::[*/0x0046/*::]*/: { /* n:\"BrtSxvcellNil\" */ },\n\t/*::[*/0x0080/*::]*/: { /* n:\"BrtFileVersion\" */ },\n\t/*::[*/0x0081/*::]*/: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t/*::[*/0x0082/*::]*/: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t/*::[*/0x0084/*::]*/: { /* n:\"BrtEndBook\", */ T:-1 },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t/*::[*/0x0087/*::]*/: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t/*::[*/0x0088/*::]*/: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t/*::[*/0x0089/*::]*/: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t/*::[*/0x008A/*::]*/: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t/*::[*/0x008B/*::]*/: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t/*::[*/0x008C/*::]*/: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t/*::[*/0x008D/*::]*/: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t/*::[*/0x008E/*::]*/: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t/*::[*/0x008F/*::]*/: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t/*::[*/0x0091/*::]*/: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t/*::[*/0x0092/*::]*/: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t/*::[*/0x0093/*::]*/: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t/*::[*/0x0094/*::]*/: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t/*::[*/0x0097/*::]*/: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t/*::[*/0x0098/*::]*/: { /* n:\"BrtSel\" */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t/*::[*/0x009A/*::]*/: { /* n:\"BrtWbFactoid\" */ },\n\t/*::[*/0x009B/*::]*/: { /* n:\"BrtFileRecover\" */ },\n\t/*::[*/0x009C/*::]*/: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t/*::[*/0x009D/*::]*/: { /* n:\"BrtCalcProp\" */ },\n\t/*::[*/0x009E/*::]*/: { /* n:\"BrtBookView\" */ },\n\t/*::[*/0x009F/*::]*/: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t/*::[*/0x00A0/*::]*/: { /* n:\"BrtEndSst\", */ T:-1 },\n\t/*::[*/0x00A1/*::]*/: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t/*::[*/0x00A2/*::]*/: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t/*::[*/0x00A3/*::]*/: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t/*::[*/0x00A4/*::]*/: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t/*::[*/0x00A5/*::]*/: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t/*::[*/0x00A6/*::]*/: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t/*::[*/0x00A7/*::]*/: { /* n:\"BrtFilter\" */ },\n\t/*::[*/0x00A8/*::]*/: { /* n:\"BrtColorFilter\" */ },\n\t/*::[*/0x00A9/*::]*/: { /* n:\"BrtIconFilter\" */ },\n\t/*::[*/0x00AA/*::]*/: { /* n:\"BrtTop10Filter\" */ },\n\t/*::[*/0x00AB/*::]*/: { /* n:\"BrtDynamicFilter\" */ },\n\t/*::[*/0x00AC/*::]*/: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t/*::[*/0x00AD/*::]*/: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t/*::[*/0x00AE/*::]*/: { /* n:\"BrtCustomFilter\" */ },\n\t/*::[*/0x00AF/*::]*/: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t/*::[*/0x00B0/*::]*/: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t/*::[*/0x00B1/*::]*/: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t/*::[*/0x00B2/*::]*/: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t/*::[*/0x00B3/*::]*/: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t/*::[*/0x00B4/*::]*/: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t/*::[*/0x00B5/*::]*/: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t/*::[*/0x00B6/*::]*/: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t/*::[*/0x00B7/*::]*/: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t/*::[*/0x00B8/*::]*/: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t/*::[*/0x00B9/*::]*/: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t/*::[*/0x00BA/*::]*/: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t/*::[*/0x00BB/*::]*/: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t/*::[*/0x00BC/*::]*/: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t/*::[*/0x00BD/*::]*/: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t/*::[*/0x00BE/*::]*/: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t/*::[*/0x00BF/*::]*/: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t/*::[*/0x00C0/*::]*/: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t/*::[*/0x00C1/*::]*/: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t/*::[*/0x00C2/*::]*/: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t/*::[*/0x00C3/*::]*/: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t/*::[*/0x00C4/*::]*/: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t/*::[*/0x00C5/*::]*/: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t/*::[*/0x00C6/*::]*/: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t/*::[*/0x00C7/*::]*/: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t/*::[*/0x00C8/*::]*/: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t/*::[*/0x00C9/*::]*/: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t/*::[*/0x00CA/*::]*/: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t/*::[*/0x00CB/*::]*/: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t/*::[*/0x00CC/*::]*/: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t/*::[*/0x00CD/*::]*/: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t/*::[*/0x00CE/*::]*/: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t/*::[*/0x00CF/*::]*/: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t/*::[*/0x00D0/*::]*/: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t/*::[*/0x00D1/*::]*/: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t/*::[*/0x00D2/*::]*/: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t/*::[*/0x00D3/*::]*/: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t/*::[*/0x00D4/*::]*/: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t/*::[*/0x00D5/*::]*/: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t/*::[*/0x00D6/*::]*/: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t/*::[*/0x00D7/*::]*/: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t/*::[*/0x00D8/*::]*/: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t/*::[*/0x00D9/*::]*/: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t/*::[*/0x00DA/*::]*/: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t/*::[*/0x00DB/*::]*/: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t/*::[*/0x00DC/*::]*/: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t/*::[*/0x00DD/*::]*/: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t/*::[*/0x00DE/*::]*/: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t/*::[*/0x00DF/*::]*/: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t/*::[*/0x00E0/*::]*/: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t/*::[*/0x00E1/*::]*/: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t/*::[*/0x00E2/*::]*/: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t/*::[*/0x00E3/*::]*/: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t/*::[*/0x00E4/*::]*/: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t/*::[*/0x00E5/*::]*/: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t/*::[*/0x00E6/*::]*/: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t/*::[*/0x00E7/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t/*::[*/0x00E8/*::]*/: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t/*::[*/0x00E9/*::]*/: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t/*::[*/0x00EA/*::]*/: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t/*::[*/0x00EB/*::]*/: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t/*::[*/0x00EC/*::]*/: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t/*::[*/0x00ED/*::]*/: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t/*::[*/0x00EE/*::]*/: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t/*::[*/0x00EF/*::]*/: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t/*::[*/0x00F0/*::]*/: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t/*::[*/0x00F1/*::]*/: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t/*::[*/0x00F2/*::]*/: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t/*::[*/0x00F3/*::]*/: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t/*::[*/0x00F4/*::]*/: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t/*::[*/0x00F5/*::]*/: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t/*::[*/0x00F6/*::]*/: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t/*::[*/0x00F7/*::]*/: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t/*::[*/0x00F8/*::]*/: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t/*::[*/0x00F9/*::]*/: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t/*::[*/0x00FA/*::]*/: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t/*::[*/0x00FB/*::]*/: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t/*::[*/0x00FC/*::]*/: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t/*::[*/0x00FD/*::]*/: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t/*::[*/0x00FE/*::]*/: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t/*::[*/0x00FF/*::]*/: { /* n:\"BrtBeginPName\", */ T:1 },\n\t/*::[*/0x0100/*::]*/: { /* n:\"BrtEndPName\", */ T:-1 },\n\t/*::[*/0x0101/*::]*/: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t/*::[*/0x0102/*::]*/: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t/*::[*/0x0103/*::]*/: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t/*::[*/0x0104/*::]*/: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t/*::[*/0x0105/*::]*/: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t/*::[*/0x0106/*::]*/: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t/*::[*/0x0107/*::]*/: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t/*::[*/0x0108/*::]*/: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t/*::[*/0x0109/*::]*/: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t/*::[*/0x010A/*::]*/: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t/*::[*/0x010B/*::]*/: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t/*::[*/0x010C/*::]*/: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t/*::[*/0x010D/*::]*/: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t/*::[*/0x010E/*::]*/: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t/*::[*/0x010F/*::]*/: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t/*::[*/0x0110/*::]*/: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t/*::[*/0x0111/*::]*/: { /* n:\"BrtBeginDims\", */ T:1 },\n\t/*::[*/0x0112/*::]*/: { /* n:\"BrtEndDims\", */ T:-1 },\n\t/*::[*/0x0113/*::]*/: { /* n:\"BrtBeginDim\", */ T:1 },\n\t/*::[*/0x0114/*::]*/: { /* n:\"BrtEndDim\", */ T:-1 },\n\t/*::[*/0x0115/*::]*/: { /* n:\"BrtIndexPartEnd\" */ },\n\t/*::[*/0x0116/*::]*/: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t/*::[*/0x0117/*::]*/: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t/*::[*/0x0118/*::]*/: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t/*::[*/0x0119/*::]*/: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t/*::[*/0x011A/*::]*/: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t/*::[*/0x011B/*::]*/: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t/*::[*/0x011C/*::]*/: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t/*::[*/0x011D/*::]*/: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t/*::[*/0x011E/*::]*/: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t/*::[*/0x011F/*::]*/: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t/*::[*/0x0120/*::]*/: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t/*::[*/0x0121/*::]*/: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t/*::[*/0x0122/*::]*/: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t/*::[*/0x0123/*::]*/: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t/*::[*/0x0124/*::]*/: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t/*::[*/0x0125/*::]*/: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t/*::[*/0x0126/*::]*/: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t/*::[*/0x0127/*::]*/: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t/*::[*/0x0128/*::]*/: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t/*::[*/0x0129/*::]*/: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t/*::[*/0x012A/*::]*/: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t/*::[*/0x012B/*::]*/: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t/*::[*/0x012C/*::]*/: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t/*::[*/0x012D/*::]*/: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t/*::[*/0x012E/*::]*/: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t/*::[*/0x012F/*::]*/: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t/*::[*/0x0130/*::]*/: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t/*::[*/0x0131/*::]*/: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t/*::[*/0x0132/*::]*/: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t/*::[*/0x0133/*::]*/: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t/*::[*/0x0134/*::]*/: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t/*::[*/0x0135/*::]*/: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t/*::[*/0x0136/*::]*/: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t/*::[*/0x0137/*::]*/: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t/*::[*/0x0138/*::]*/: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t/*::[*/0x0139/*::]*/: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t/*::[*/0x013A/*::]*/: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t/*::[*/0x013B/*::]*/: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t/*::[*/0x013C/*::]*/: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t/*::[*/0x013D/*::]*/: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t/*::[*/0x013E/*::]*/: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t/*::[*/0x013F/*::]*/: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t/*::[*/0x0140/*::]*/: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t/*::[*/0x0141/*::]*/: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t/*::[*/0x0142/*::]*/: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t/*::[*/0x0143/*::]*/: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t/*::[*/0x0144/*::]*/: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t/*::[*/0x0145/*::]*/: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t/*::[*/0x0146/*::]*/: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t/*::[*/0x0147/*::]*/: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t/*::[*/0x0148/*::]*/: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t/*::[*/0x0149/*::]*/: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t/*::[*/0x014A/*::]*/: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t/*::[*/0x014B/*::]*/: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t/*::[*/0x014C/*::]*/: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t/*::[*/0x014D/*::]*/: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t/*::[*/0x014E/*::]*/: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t/*::[*/0x014F/*::]*/: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t/*::[*/0x0150/*::]*/: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t/*::[*/0x0151/*::]*/: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t/*::[*/0x0152/*::]*/: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t/*::[*/0x0153/*::]*/: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t/*::[*/0x0154/*::]*/: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t/*::[*/0x0155/*::]*/: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t/*::[*/0x0156/*::]*/: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t/*::[*/0x0157/*::]*/: { /* n:\"BrtBeginList\", */ T:1 },\n\t/*::[*/0x0158/*::]*/: { /* n:\"BrtEndList\", */ T:-1 },\n\t/*::[*/0x0159/*::]*/: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t/*::[*/0x015A/*::]*/: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t/*::[*/0x015B/*::]*/: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t/*::[*/0x015C/*::]*/: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t/*::[*/0x015D/*::]*/: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t/*::[*/0x015E/*::]*/: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t/*::[*/0x015F/*::]*/: { /* n:\"BrtListCCFmla\" */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"BrtListTrFmla\" */ },\n\t/*::[*/0x0161/*::]*/: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t/*::[*/0x0162/*::]*/: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t/*::[*/0x0163/*::]*/: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t/*::[*/0x0165/*::]*/: { /* n:\"BrtSupSelf\" */ },\n\t/*::[*/0x0166/*::]*/: { /* n:\"BrtSupSame\" */ },\n\t/*::[*/0x0167/*::]*/: { /* n:\"BrtSupTabs\" */ },\n\t/*::[*/0x0168/*::]*/: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t/*::[*/0x0169/*::]*/: { /* n:\"BrtPlaceholderName\" */ },\n\t/*::[*/0x016A/*::]*/: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x016B/*::]*/: { /* n:\"BrtExternTableStart\" */ },\n\t/*::[*/0x016C/*::]*/: { /* n:\"BrtExternTableEnd\" */ },\n\t/*::[*/0x016E/*::]*/: { /* n:\"BrtExternRowHdr\" */ },\n\t/*::[*/0x016F/*::]*/: { /* n:\"BrtExternCellBlank\" */ },\n\t/*::[*/0x0170/*::]*/: { /* n:\"BrtExternCellReal\" */ },\n\t/*::[*/0x0171/*::]*/: { /* n:\"BrtExternCellBool\" */ },\n\t/*::[*/0x0172/*::]*/: { /* n:\"BrtExternCellError\" */ },\n\t/*::[*/0x0173/*::]*/: { /* n:\"BrtExternCellString\" */ },\n\t/*::[*/0x0174/*::]*/: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t/*::[*/0x0175/*::]*/: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t/*::[*/0x0176/*::]*/: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t/*::[*/0x0177/*::]*/: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t/*::[*/0x0178/*::]*/: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t/*::[*/0x0179/*::]*/: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t/*::[*/0x017A/*::]*/: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t/*::[*/0x017B/*::]*/: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t/*::[*/0x017C/*::]*/: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t/*::[*/0x017D/*::]*/: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t/*::[*/0x017E/*::]*/: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t/*::[*/0x017F/*::]*/: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t/*::[*/0x0180/*::]*/: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0181/*::]*/: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0182/*::]*/: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t/*::[*/0x0183/*::]*/: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t/*::[*/0x0184/*::]*/: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t/*::[*/0x0185/*::]*/: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t/*::[*/0x0186/*::]*/: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t/*::[*/0x0187/*::]*/: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t/*::[*/0x0188/*::]*/: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t/*::[*/0x0189/*::]*/: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t/*::[*/0x018A/*::]*/: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t/*::[*/0x018B/*::]*/: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t/*::[*/0x018C/*::]*/: { /* n:\"BrtBrk\" */ },\n\t/*::[*/0x018D/*::]*/: { /* n:\"BrtUserBookView\" */ },\n\t/*::[*/0x018E/*::]*/: { /* n:\"BrtInfo\" */ },\n\t/*::[*/0x018F/*::]*/: { /* n:\"BrtCUsr\" */ },\n\t/*::[*/0x0190/*::]*/: { /* n:\"BrtUsr\" */ },\n\t/*::[*/0x0191/*::]*/: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t/*::[*/0x0193/*::]*/: { /* n:\"BrtEOF\" */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"BrtUCR\" */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"BrtRRInsDel\" */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"BrtRREndInsDel\" */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BrtRRMove\" */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"BrtRREndMove\" */ },\n\t/*::[*/0x0199/*::]*/: { /* n:\"BrtRRChgCell\" */ },\n\t/*::[*/0x019A/*::]*/: { /* n:\"BrtRREndChgCell\" */ },\n\t/*::[*/0x019B/*::]*/: { /* n:\"BrtRRHeader\" */ },\n\t/*::[*/0x019C/*::]*/: { /* n:\"BrtRRUserView\" */ },\n\t/*::[*/0x019D/*::]*/: { /* n:\"BrtRRRenSheet\" */ },\n\t/*::[*/0x019E/*::]*/: { /* n:\"BrtRRInsertSh\" */ },\n\t/*::[*/0x019F/*::]*/: { /* n:\"BrtRRDefName\" */ },\n\t/*::[*/0x01A0/*::]*/: { /* n:\"BrtRRNote\" */ },\n\t/*::[*/0x01A1/*::]*/: { /* n:\"BrtRRConflict\" */ },\n\t/*::[*/0x01A2/*::]*/: { /* n:\"BrtRRTQSIF\" */ },\n\t/*::[*/0x01A3/*::]*/: { /* n:\"BrtRRFormat\" */ },\n\t/*::[*/0x01A4/*::]*/: { /* n:\"BrtRREndFormat\" */ },\n\t/*::[*/0x01A5/*::]*/: { /* n:\"BrtRRAutoFmt\" */ },\n\t/*::[*/0x01A6/*::]*/: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t/*::[*/0x01A7/*::]*/: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t/*::[*/0x01A8/*::]*/: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t/*::[*/0x01A9/*::]*/: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t/*::[*/0x01AA/*::]*/: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t/*::[*/0x01AB/*::]*/: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t/*::[*/0x01AC/*::]*/: { /* n:\"BrtTable\" */ },\n\t/*::[*/0x01AD/*::]*/: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t/*::[*/0x01AE/*::]*/: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t/*::[*/0x01AF/*::]*/: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t/*::[*/0x01B0/*::]*/: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t/*::[*/0x01B1/*::]*/: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t/*::[*/0x01B2/*::]*/: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t/*::[*/0x01B3/*::]*/: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t/*::[*/0x01B4/*::]*/: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t/*::[*/0x01B5/*::]*/: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t/*::[*/0x01B6/*::]*/: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t/*::[*/0x01B7/*::]*/: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t/*::[*/0x01B8/*::]*/: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t/*::[*/0x01B9/*::]*/: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t/*::[*/0x01BA/*::]*/: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t/*::[*/0x01BB/*::]*/: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t/*::[*/0x01BC/*::]*/: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t/*::[*/0x01BD/*::]*/: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t/*::[*/0x01BE/*::]*/: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t/*::[*/0x01BF/*::]*/: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t/*::[*/0x01C0/*::]*/: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t/*::[*/0x01C1/*::]*/: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t/*::[*/0x01C2/*::]*/: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t/*::[*/0x01C3/*::]*/: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t/*::[*/0x01C4/*::]*/: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t/*::[*/0x01C5/*::]*/: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t/*::[*/0x01C6/*::]*/: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t/*::[*/0x01C7/*::]*/: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t/*::[*/0x01C8/*::]*/: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t/*::[*/0x01C9/*::]*/: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t/*::[*/0x01CA/*::]*/: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t/*::[*/0x01CB/*::]*/: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t/*::[*/0x01CC/*::]*/: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t/*::[*/0x01CD/*::]*/: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t/*::[*/0x01CE/*::]*/: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t/*::[*/0x01CF/*::]*/: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t/*::[*/0x01D0/*::]*/: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t/*::[*/0x01D1/*::]*/: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t/*::[*/0x01D2/*::]*/: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t/*::[*/0x01D3/*::]*/: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t/*::[*/0x01D4/*::]*/: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t/*::[*/0x01D5/*::]*/: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t/*::[*/0x01D6/*::]*/: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t/*::[*/0x01D7/*::]*/: { /* n:\"BrtCFVO\" */ },\n\t/*::[*/0x01D8/*::]*/: { /* n:\"BrtExternValueMeta\" */ },\n\t/*::[*/0x01D9/*::]*/: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t/*::[*/0x01DA/*::]*/: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t/*::[*/0x01DB/*::]*/: { /* n:\"BrtIndexedColor\" */ },\n\t/*::[*/0x01DC/*::]*/: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t/*::[*/0x01DD/*::]*/: { /* n:\"BrtPrintOptions\" */ },\n\t/*::[*/0x01DE/*::]*/: { /* n:\"BrtPageSetup\" */ },\n\t/*::[*/0x01DF/*::]*/: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t/*::[*/0x01E0/*::]*/: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t/*::[*/0x01E1/*::]*/: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t/*::[*/0x01E2/*::]*/: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t/*::[*/0x01E3/*::]*/: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t/*::[*/0x01E4/*::]*/: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t/*::[*/0x01E5/*::]*/: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t/*::[*/0x01E6/*::]*/: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t/*::[*/0x01E7/*::]*/: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t/*::[*/0x01E8/*::]*/: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t/*::[*/0x01E9/*::]*/: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t/*::[*/0x01EA/*::]*/: { /* n:\"BrtBeginMG\", */ T:1 },\n\t/*::[*/0x01EB/*::]*/: { /* n:\"BrtEndMG\", */ T:-1 },\n\t/*::[*/0x01EC/*::]*/: { /* n:\"BrtBeginMap\", */ T:1 },\n\t/*::[*/0x01ED/*::]*/: { /* n:\"BrtEndMap\", */ T:-1 },\n\t/*::[*/0x01EE/*::]*/: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t/*::[*/0x01EF/*::]*/: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t/*::[*/0x01F0/*::]*/: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t/*::[*/0x01F1/*::]*/: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t/*::[*/0x01F2/*::]*/: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t/*::[*/0x01F3/*::]*/: { /* n:\"BrtDRef\" */ },\n\t/*::[*/0x01F4/*::]*/: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t/*::[*/0x01F5/*::]*/: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t/*::[*/0x01F6/*::]*/: { /* n:\"BrtBeginSct\", */ T:1 },\n\t/*::[*/0x01F7/*::]*/: { /* n:\"BrtEndSct\", */ T:-1 },\n\t/*::[*/0x01F8/*::]*/: { /* n:\"BrtSlc\" */ },\n\t/*::[*/0x01F9/*::]*/: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t/*::[*/0x01FA/*::]*/: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t/*::[*/0x01FB/*::]*/: { /* n:\"BrtDXF\" */ },\n\t/*::[*/0x01FC/*::]*/: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t/*::[*/0x01FD/*::]*/: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t/*::[*/0x01FE/*::]*/: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t/*::[*/0x01FF/*::]*/: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"BrtTableStyleElement\" */ },\n\t/*::[*/0x0201/*::]*/: { /* n:\"BrtTableStyleClient\" */ },\n\t/*::[*/0x0202/*::]*/: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t/*::[*/0x0203/*::]*/: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t/*::[*/0x0204/*::]*/: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t/*::[*/0x0206/*::]*/: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t/*::[*/0x0207/*::]*/: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t/*::[*/0x0208/*::]*/: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t/*::[*/0x020A/*::]*/: { /* n:\"BrtVolSubtopic\" */ },\n\t/*::[*/0x020B/*::]*/: { /* n:\"BrtVolRef\" */ },\n\t/*::[*/0x020C/*::]*/: { /* n:\"BrtVolNum\" */ },\n\t/*::[*/0x020D/*::]*/: { /* n:\"BrtVolErr\" */ },\n\t/*::[*/0x020E/*::]*/: { /* n:\"BrtVolStr\" */ },\n\t/*::[*/0x020F/*::]*/: { /* n:\"BrtVolBool\" */ },\n\t/*::[*/0x0210/*::]*/: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t/*::[*/0x0211/*::]*/: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t/*::[*/0x0212/*::]*/: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t/*::[*/0x0213/*::]*/: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t/*::[*/0x0214/*::]*/: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t/*::[*/0x0215/*::]*/: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t/*::[*/0x0216/*::]*/: { /* n:\"BrtBookProtection\" */ },\n\t/*::[*/0x0217/*::]*/: { /* n:\"BrtSheetProtection\" */ },\n\t/*::[*/0x0218/*::]*/: { /* n:\"BrtRangeProtection\" */ },\n\t/*::[*/0x0219/*::]*/: { /* n:\"BrtPhoneticInfo\" */ },\n\t/*::[*/0x021A/*::]*/: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t/*::[*/0x021B/*::]*/: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t/*::[*/0x021C/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t/*::[*/0x021D/*::]*/: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t/*::[*/0x021E/*::]*/: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t/*::[*/0x0224/*::]*/: { /* n:\"BrtFileSharing\" */ },\n\t/*::[*/0x0225/*::]*/: { /* n:\"BrtOleSize\" */ },\n\t/*::[*/0x0226/*::]*/: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t/*::[*/0x0227/*::]*/: { /* n:\"BrtLegacyDrawing\" */ },\n\t/*::[*/0x0228/*::]*/: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t/*::[*/0x0229/*::]*/: { /* n:\"BrtWebOpt\" */ },\n\t/*::[*/0x022A/*::]*/: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t/*::[*/0x022B/*::]*/: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t/*::[*/0x022C/*::]*/: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t/*::[*/0x022D/*::]*/: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t/*::[*/0x022E/*::]*/: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t/*::[*/0x022F/*::]*/: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t/*::[*/0x0230/*::]*/: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t/*::[*/0x0231/*::]*/: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t/*::[*/0x0232/*::]*/: { /* n:\"BrtBkHim\" */ },\n\t/*::[*/0x0234/*::]*/: { /* n:\"BrtColor\" */ },\n\t/*::[*/0x0235/*::]*/: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t/*::[*/0x0236/*::]*/: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t/*::[*/0x0239/*::]*/: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t/*::[*/0x023A/*::]*/: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t/*::[*/0x023C/*::]*/: { /* n:\"BrtMRUColor\" */ },\n\t/*::[*/0x023D/*::]*/: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t/*::[*/0x023E/*::]*/: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t/*::[*/0x0241/*::]*/: { /* n:\"BrtSupNameStart\" */ },\n\t/*::[*/0x0242/*::]*/: { /* n:\"BrtSupNameValueStart\" */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BrtSupNameValueEnd\" */ },\n\t/*::[*/0x0244/*::]*/: { /* n:\"BrtSupNameNum\" */ },\n\t/*::[*/0x0245/*::]*/: { /* n:\"BrtSupNameErr\" */ },\n\t/*::[*/0x0246/*::]*/: { /* n:\"BrtSupNameSt\" */ },\n\t/*::[*/0x0247/*::]*/: { /* n:\"BrtSupNameNil\" */ },\n\t/*::[*/0x0248/*::]*/: { /* n:\"BrtSupNameBool\" */ },\n\t/*::[*/0x0249/*::]*/: { /* n:\"BrtSupNameFmla\" */ },\n\t/*::[*/0x024A/*::]*/: { /* n:\"BrtSupNameBits\" */ },\n\t/*::[*/0x024B/*::]*/: { /* n:\"BrtSupNameEnd\" */ },\n\t/*::[*/0x024C/*::]*/: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t/*::[*/0x024D/*::]*/: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t/*::[*/0x024E/*::]*/: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t/*::[*/0x024F/*::]*/: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t/*::[*/0x0250/*::]*/: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t/*::[*/0x0251/*::]*/: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t/*::[*/0x0252/*::]*/: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t/*::[*/0x0253/*::]*/: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t/*::[*/0x0254/*::]*/: { /* n:\"BrtSmartTagType\" */ },\n\t/*::[*/0x0255/*::]*/: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t/*::[*/0x0256/*::]*/: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t/*::[*/0x0257/*::]*/: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t/*::[*/0x0258/*::]*/: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t/*::[*/0x0259/*::]*/: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t/*::[*/0x025A/*::]*/: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t/*::[*/0x025B/*::]*/: { /* n:\"BrtBeginFills\", */ T:1 },\n\t/*::[*/0x025C/*::]*/: { /* n:\"BrtEndFills\", */ T:-1 },\n\t/*::[*/0x025D/*::]*/: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t/*::[*/0x025E/*::]*/: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t/*::[*/0x025F/*::]*/: { /* n:\"BrtCellWatch\" */ },\n\t/*::[*/0x0260/*::]*/: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t/*::[*/0x0261/*::]*/: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t/*::[*/0x0262/*::]*/: { /* n:\"BrtCrashRecErr\" */ },\n\t/*::[*/0x0263/*::]*/: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t/*::[*/0x0264/*::]*/: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t/*::[*/0x0265/*::]*/: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t/*::[*/0x0266/*::]*/: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t/*::[*/0x0267/*::]*/: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t/*::[*/0x0268/*::]*/: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t/*::[*/0x0269/*::]*/: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t/*::[*/0x026A/*::]*/: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t/*::[*/0x026B/*::]*/: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t/*::[*/0x026C/*::]*/: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t/*::[*/0x0271/*::]*/: { /* n:\"BrtBigName\" */ },\n\t/*::[*/0x0272/*::]*/: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t/*::[*/0x0273/*::]*/: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t/*::[*/0x0274/*::]*/: { /* n:\"BrtBeginComments\", */ T:1 },\n\t/*::[*/0x0275/*::]*/: { /* n:\"BrtEndComments\", */ T:-1 },\n\t/*::[*/0x0276/*::]*/: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t/*::[*/0x0277/*::]*/: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t/*::[*/0x0278/*::]*/: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t/*::[*/0x0279/*::]*/: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t/*::[*/0x027A/*::]*/: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t/*::[*/0x027B/*::]*/: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t/*::[*/0x027C/*::]*/: { /* n:\"BrtEndComment\", */ T:-1 },\n\t/*::[*/0x027D/*::]*/: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t/*::[*/0x027E/*::]*/: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t/*::[*/0x027F/*::]*/: { /* n:\"BrtOleObject\" */ },\n\t/*::[*/0x0280/*::]*/: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t/*::[*/0x0281/*::]*/: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t/*::[*/0x0282/*::]*/: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t/*::[*/0x0283/*::]*/: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t/*::[*/0x0284/*::]*/: { /* n:\"BrtActiveX\" */ },\n\t/*::[*/0x0285/*::]*/: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t/*::[*/0x0286/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t/*::[*/0x0288/*::]*/: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t/*::[*/0x0289/*::]*/: { /* n:\"BrtCellIgnoreEC\" */ },\n\t/*::[*/0x028A/*::]*/: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t/*::[*/0x028B/*::]*/: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t/*::[*/0x028C/*::]*/: { /* n:\"BrtCsPageSetup\" */ },\n\t/*::[*/0x028D/*::]*/: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t/*::[*/0x028E/*::]*/: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t/*::[*/0x028F/*::]*/: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t/*::[*/0x0290/*::]*/: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t/*::[*/0x0291/*::]*/: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t/*::[*/0x0292/*::]*/: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t/*::[*/0x0293/*::]*/: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t/*::[*/0x0294/*::]*/: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t/*::[*/0x0295/*::]*/: { /* n:\"BrtListPart\" */ },\n\t/*::[*/0x0296/*::]*/: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t/*::[*/0x0297/*::]*/: { /* n:\"BrtSheetCalcProp\" */ },\n\t/*::[*/0x0298/*::]*/: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t/*::[*/0x0299/*::]*/: { /* n:\"BrtFnGroup\" */ },\n\t/*::[*/0x029A/*::]*/: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t/*::[*/0x029B/*::]*/: { /* n:\"BrtSupAddin\" */ },\n\t/*::[*/0x029C/*::]*/: { /* n:\"BrtSXTDMPOrder\" */ },\n\t/*::[*/0x029D/*::]*/: { /* n:\"BrtCsProtection\" */ },\n\t/*::[*/0x029F/*::]*/: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t/*::[*/0x02A0/*::]*/: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t/*::[*/0x02A1/*::]*/: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t/*::[*/0x02A2/*::]*/: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t/*::[*/0x02A3/*::]*/: { /* n:\"BrtRRSortItem\" */ },\n\t/*::[*/0x02A4/*::]*/: { /* n:\"BrtFileSharingIso\" */ },\n\t/*::[*/0x02A5/*::]*/: { /* n:\"BrtBookProtectionIso\" */ },\n\t/*::[*/0x02A6/*::]*/: { /* n:\"BrtSheetProtectionIso\" */ },\n\t/*::[*/0x02A7/*::]*/: { /* n:\"BrtCsProtectionIso\" */ },\n\t/*::[*/0x02A8/*::]*/: { /* n:\"BrtRangeProtectionIso\" */ },\n\t/*::[*/0x02A9/*::]*/: { /* n:\"BrtDValList\" */ },\n\t/*::[*/0x0400/*::]*/: { /* n:\"BrtRwDescent\" */ },\n\t/*::[*/0x0401/*::]*/: { /* n:\"BrtKnownFonts\" */ },\n\t/*::[*/0x0402/*::]*/: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t/*::[*/0x0403/*::]*/: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t/*::[*/0x0404/*::]*/: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t/*::[*/0x0405/*::]*/: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t/*::[*/0x0406/*::]*/: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t/*::[*/0x0407/*::]*/: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t/*::[*/0x0408/*::]*/: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t/*::[*/0x040A/*::]*/: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t/*::[*/0x040B/*::]*/: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t/*::[*/0x040C/*::]*/: { /* n:\"BrtNameExt\" */ },\n\t/*::[*/0x040D/*::]*/: { /* n:\"BrtPCDH14\" */ },\n\t/*::[*/0x040E/*::]*/: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t/*::[*/0x040F/*::]*/: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t/*::[*/0x0410/*::]*/: { /* n:\"BrtSXTH14\" */ },\n\t/*::[*/0x0411/*::]*/: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t/*::[*/0x0412/*::]*/: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t/*::[*/0x0413/*::]*/: { /* n:\"BrtSparkline\" */ },\n\t/*::[*/0x0414/*::]*/: { /* n:\"BrtSXDI14\" */ },\n\t/*::[*/0x0415/*::]*/: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t/*::[*/0x0416/*::]*/: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t/*::[*/0x0417/*::]*/: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t/*::[*/0x0419/*::]*/: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t/*::[*/0x041A/*::]*/: { /* n:\"BrtCFVO14\" */ },\n\t/*::[*/0x041B/*::]*/: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t/*::[*/0x041C/*::]*/: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t/*::[*/0x041D/*::]*/: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t/*::[*/0x041E/*::]*/: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t/*::[*/0x041F/*::]*/: { /* n:\"BrtColor14\" */ },\n\t/*::[*/0x0420/*::]*/: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t/*::[*/0x0421/*::]*/: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t/*::[*/0x0422/*::]*/: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t/*::[*/0x0423/*::]*/: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t/*::[*/0x0425/*::]*/: { /* n:\"BrtSXVD14\" */ },\n\t/*::[*/0x0426/*::]*/: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t/*::[*/0x0427/*::]*/: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t/*::[*/0x0428/*::]*/: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t/*::[*/0x0429/*::]*/: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t/*::[*/0x042A/*::]*/: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t/*::[*/0x042B/*::]*/: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t/*::[*/0x042C/*::]*/: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t/*::[*/0x042D/*::]*/: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t/*::[*/0x042E/*::]*/: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t/*::[*/0x042F/*::]*/: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t/*::[*/0x0430/*::]*/: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t/*::[*/0x0431/*::]*/: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t/*::[*/0x0433/*::]*/: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t/*::[*/0x0434/*::]*/: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t/*::[*/0x0435/*::]*/: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t/*::[*/0x0436/*::]*/: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t/*::[*/0x0437/*::]*/: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t/*::[*/0x0438/*::]*/: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t/*::[*/0x0439/*::]*/: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t/*::[*/0x043A/*::]*/: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t/*::[*/0x043B/*::]*/: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t/*::[*/0x043C/*::]*/: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t/*::[*/0x043D/*::]*/: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t/*::[*/0x043E/*::]*/: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t/*::[*/0x043F/*::]*/: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t/*::[*/0x0440/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t/*::[*/0x0441/*::]*/: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t/*::[*/0x0442/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t/*::[*/0x0444/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t/*::[*/0x0445/*::]*/: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t/*::[*/0x0446/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t/*::[*/0x0447/*::]*/: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t/*::[*/0x0448/*::]*/: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t/*::[*/0x0449/*::]*/: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t/*::[*/0x044A/*::]*/: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t/*::[*/0x044B/*::]*/: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t/*::[*/0x044C/*::]*/: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t/*::[*/0x044D/*::]*/: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t/*::[*/0x044E/*::]*/: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t/*::[*/0x044F/*::]*/: { /* n:\"BrtRangeProtection14\" */ },\n\t/*::[*/0x0450/*::]*/: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t/*::[*/0x0451/*::]*/: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t/*::[*/0x0457/*::]*/: { /* n:\"BrtList14\" */ },\n\t/*::[*/0x0458/*::]*/: { /* n:\"BrtCFIcon\" */ },\n\t/*::[*/0x0459/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x045A/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x045B/*::]*/: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t/*::[*/0x045C/*::]*/: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t/*::[*/0x045D/*::]*/: { /* n:\"BrtWbProp14\" */ },\n\t/*::[*/0x045E/*::]*/: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t/*::[*/0x045F/*::]*/: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t/*::[*/0x0460/*::]*/: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t/*::[*/0x0461/*::]*/: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t/*::[*/0x0462/*::]*/: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t/*::[*/0x0463/*::]*/: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t/*::[*/0x0464/*::]*/: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t/*::[*/0x0465/*::]*/: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t/*::[*/0x0466/*::]*/: { /* n:\"BrtSXTupleItems\" */ },\n\t/*::[*/0x0468/*::]*/: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t/*::[*/0x0469/*::]*/: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t/*::[*/0x046A/*::]*/: { /* n:\"BrtSlicerStyleElement\" */ },\n\t/*::[*/0x046B/*::]*/: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t/*::[*/0x046C/*::]*/: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t/*::[*/0x046D/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t/*::[*/0x046E/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t/*::[*/0x046F/*::]*/: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t/*::[*/0x0470/*::]*/: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t/*::[*/0x0471/*::]*/: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t/*::[*/0x0472/*::]*/: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t/*::[*/0x0473/*::]*/: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t/*::[*/0x0474/*::]*/: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t/*::[*/0x0475/*::]*/: { /* n:\"BrtPCDField14\" */ },\n\t/*::[*/0x0476/*::]*/: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t/*::[*/0x0477/*::]*/: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t/*::[*/0x0478/*::]*/: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t/*::[*/0x0479/*::]*/: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t/*::[*/0x047A/*::]*/: { /* n:\"BrtCFRuleExt\" */ },\n\t/*::[*/0x047B/*::]*/: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t/*::[*/0x047C/*::]*/: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t/*::[*/0x047D/*::]*/: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t/*::[*/0x047E/*::]*/: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t/*::[*/0x0480/*::]*/: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t/*::[*/0x0481/*::]*/: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t/*::[*/0x0482/*::]*/: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t/*::[*/0x0483/*::]*/: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t/*::[*/0x0484/*::]*/: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t/*::[*/0x0485/*::]*/: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t/*::[*/0x0486/*::]*/: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t/*::[*/0x0487/*::]*/: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t/*::[*/0x0488/*::]*/: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t/*::[*/0x0489/*::]*/: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t/*::[*/0x048A/*::]*/: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t/*::[*/0x048B/*::]*/: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t/*::[*/0x048C/*::]*/: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t/*::[*/0x048D/*::]*/: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t/*::[*/0x048E/*::]*/: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t/*::[*/0x048F/*::]*/: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t/*::[*/0x0490/*::]*/: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t/*::[*/0x0491/*::]*/: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t/*::[*/0x0492/*::]*/: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t/*::[*/0x0493/*::]*/: { /* n:\"BrtDxf14\" */ },\n\t/*::[*/0x0494/*::]*/: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t/*::[*/0x0495/*::]*/: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t/*::[*/0x0499/*::]*/: { /* n:\"BrtFilter14\" */ },\n\t/*::[*/0x049A/*::]*/: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t/*::[*/0x049C/*::]*/: { /* n:\"BrtCustomFilter14\" */ },\n\t/*::[*/0x049D/*::]*/: { /* n:\"BrtIconFilter14\" */ },\n\t/*::[*/0x049E/*::]*/: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t/*::[*/0x0800/*::]*/: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0801/*::]*/: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0802/*::]*/: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t/*::[*/0x0804/*::]*/: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t/*::[*/0x0805/*::]*/: { /* n:\"BrtPivotTableRef\" */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t/*::[*/0x0808/*::]*/: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t/*::[*/0x080A/*::]*/: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t/*::[*/0x080C/*::]*/: { /* n:\"BrtPcdCalcMem15\" */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"BrtQsi15\" */ },\n\t/*::[*/0x0814/*::]*/: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t/*::[*/0x0815/*::]*/: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t/*::[*/0x0816/*::]*/: { /* n:\"BrtWebExtension\" */ },\n\t/*::[*/0x0817/*::]*/: { /* n:\"BrtAbsPath15\" */ },\n\t/*::[*/0x0818/*::]*/: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t/*::[*/0x0819/*::]*/: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t/*::[*/0x081B/*::]*/: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t/*::[*/0x081C/*::]*/: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t/*::[*/0x081D/*::]*/: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t/*::[*/0x081E/*::]*/: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t/*::[*/0x081F/*::]*/: { /* n:\"BrtSxFilter15\" */ },\n\t/*::[*/0x0820/*::]*/: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0821/*::]*/: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0822/*::]*/: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t/*::[*/0x0823/*::]*/: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t/*::[*/0x0824/*::]*/: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t/*::[*/0x0825/*::]*/: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t/*::[*/0x0826/*::]*/: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t/*::[*/0x0827/*::]*/: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t/*::[*/0x0828/*::]*/: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t/*::[*/0x0829/*::]*/: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t/*::[*/0x082A/*::]*/: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t/*::[*/0x082B/*::]*/: { /* n:\"BrtWorkBookPr15\" */ },\n\t/*::[*/0x082C/*::]*/: { /* n:\"BrtPCDH15\" */ },\n\t/*::[*/0x082D/*::]*/: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t/*::[*/0x082E/*::]*/: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t/*::[*/0x082F/*::]*/: { /* n:\"BrtTimelineStyleElement\" */ },\n\t/*::[*/0x0830/*::]*/: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t/*::[*/0x0831/*::]*/: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t/*::[*/0x0832/*::]*/: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t/*::[*/0x0833/*::]*/: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t/*::[*/0x0834/*::]*/: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t/*::[*/0x0835/*::]*/: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t/*::[*/0x0836/*::]*/: { /* n:\"BrtDxf15\" */ },\n\t/*::[*/0x0837/*::]*/: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t/*::[*/0x0838/*::]*/: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t/*::[*/0x0839/*::]*/: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t/*::[*/0x083A/*::]*/: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t/*::[*/0x083B/*::]*/: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t/*::[*/0x083C/*::]*/: { /* n:\"BrtItemUniqueName\" */ },\n\t/*::[*/0x083D/*::]*/: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t/*::[*/0x083E/*::]*/: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t/*::[*/0x083F/*::]*/: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t/*::[*/0x0840/*::]*/: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t/*::[*/0x0841/*::]*/: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t/*::[*/0x0842/*::]*/: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t/*::[*/0x0843/*::]*/: { /* n:\"BrtTextPr15\" */ },\n\t/*::[*/0x0844/*::]*/: { /* n:\"BrtRangePr15\" */ },\n\t/*::[*/0x0845/*::]*/: { /* n:\"BrtDbCommand15\" */ },\n\t/*::[*/0x0846/*::]*/: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t/*::[*/0x0847/*::]*/: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t/*::[*/0x0848/*::]*/: { /* n:\"BrtDbTable15\" */ },\n\t/*::[*/0x0849/*::]*/: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t/*::[*/0x084A/*::]*/: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t/*::[*/0x084B/*::]*/: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t/*::[*/0x084C/*::]*/: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t/*::[*/0x084D/*::]*/: { /* n:\"BrtModelTable\" */ },\n\t/*::[*/0x084E/*::]*/: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t/*::[*/0x084F/*::]*/: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t/*::[*/0x0850/*::]*/: { /* n:\"BrtModelRelationship\" */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t/*::[*/0x0852/*::]*/: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t/*::[*/0x0853/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t/*::[*/0x0854/*::]*/: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t/*::[*/0x0855/*::]*/: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t/*::[*/0x0856/*::]*/: { /* n:\"BrtFieldListActiveItem\" */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"BrtSXDI15\" */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t/*::[*/0x085A/*::]*/: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t/*::[*/0x085B/*::]*/: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t/*::[*/0x085C/*::]*/: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t/*::[*/0x085D/*::]*/: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t/*::[*/0x0C00/*::]*/: { /* n:\"BrtUid\" */ },\n\t/*::[*/0x0C01/*::]*/: { /* n:\"BrtRevisionPtr\" */ },\n\t/*::[*/0x1000/*::]*/: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t/*::[*/0x1001/*::]*/: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t/*::[*/0x138A/*::]*/: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t/*::[*/0x138B/*::]*/: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t/*::[*/0x13D9/*::]*/: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t/*::[*/0x13DA/*::]*/: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t/*::[*/0x13DB/*::]*/: { /* n:\"BrtRichFilter\" */ },\n\t/*::[*/0x13DC/*::]*/: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t/*::[*/0x13DD/*::]*/: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t/*::[*/0x13DE/*::]*/: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t/*::[*/0x13DF/*::]*/: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t/*::[*/0x13E0/*::]*/: { /* n:\"BrtCustomRichFilter\" */ },\n\t/*::[*/0x13E1/*::]*/: { /* n:\"BrtTop10RichFilter\" */ },\n\t/*::[*/0x13E2/*::]*/: { /* n:\"BrtDynamicRichFilter\" */ },\n\t/*::[*/0x13E4/*::]*/: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t/*::[*/0x13E5/*::]*/: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t/*::[*/0x13E6/*::]*/: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t/*::[*/0x13E7/*::]*/: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t/*::[*/0x13E8/*::]*/: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t/*::[*/0x13E9/*::]*/: { /* n:\"BrtCalcFeature\" */ },\n\t/*::[*/0x13EB/*::]*/: { /* n:\"BrtExternalLinksPr\" */ },\n\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t/*::[*/0x0006/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x000a/*::]*/: { /* n:\"EOF\", */ f:parsenoop2 },\n\t/*::[*/0x000c/*::]*/: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t/*::[*/0x000d/*::]*/: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t/*::[*/0x000e/*::]*/: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t/*::[*/0x000f/*::]*/: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t/*::[*/0x0010/*::]*/: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t/*::[*/0x0011/*::]*/: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t/*::[*/0x0012/*::]*/: { /* n:\"Protect\", */ f:parsebool },\n\t/*::[*/0x0013/*::]*/: { /* n:\"Password\", */ f:parseuint16 },\n\t/*::[*/0x0014/*::]*/: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0015/*::]*/: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0017/*::]*/: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x0018/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0019/*::]*/: { /* n:\"WinProtect\", */ f:parsebool },\n\t/*::[*/0x001a/*::]*/: { /* n:\"VerticalPageBreaks\", */ },\n\t/*::[*/0x001b/*::]*/: { /* n:\"HorizontalPageBreaks\", */ },\n\t/*::[*/0x001c/*::]*/: { /* n:\"Note\", */ f:parse_Note },\n\t/*::[*/0x001d/*::]*/: { /* n:\"Selection\", */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"Date1904\", */ f:parsebool },\n\t/*::[*/0x0023/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0026/*::]*/: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0027/*::]*/: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0028/*::]*/: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0029/*::]*/: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x002a/*::]*/: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t/*::[*/0x002b/*::]*/: { /* n:\"PrintGrid\", */ f:parsebool },\n\t/*::[*/0x002f/*::]*/: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t/*::[*/0x0031/*::]*/: { /* n:\"Font\", */ f:parse_Font },\n\t/*::[*/0x0033/*::]*/: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t/*::[*/0x003c/*::]*/: { /* n:\"Continue\", */ },\n\t/*::[*/0x003d/*::]*/: { /* n:\"Window1\", */ f:parse_Window1 },\n\t/*::[*/0x0040/*::]*/: { /* n:\"Backup\", */ f:parsebool },\n\t/*::[*/0x0041/*::]*/: { /* n:\"Pane\", */ f:parse_Pane },\n\t/*::[*/0x0042/*::]*/: { /* n:\"CodePage\", */ f:parseuint16 },\n\t/*::[*/0x004d/*::]*/: { /* n:\"Pls\", */ },\n\t/*::[*/0x0050/*::]*/: { /* n:\"DCon\", */ },\n\t/*::[*/0x0051/*::]*/: { /* n:\"DConRef\", */ },\n\t/*::[*/0x0052/*::]*/: { /* n:\"DConName\", */ },\n\t/*::[*/0x0055/*::]*/: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t/*::[*/0x0059/*::]*/: { /* n:\"XCT\", */ },\n\t/*::[*/0x005a/*::]*/: { /* n:\"CRN\", */ },\n\t/*::[*/0x005b/*::]*/: { /* n:\"FileSharing\", */ },\n\t/*::[*/0x005c/*::]*/: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t/*::[*/0x005d/*::]*/: { /* n:\"Obj\", */ f:parse_Obj },\n\t/*::[*/0x005e/*::]*/: { /* n:\"Uncalced\", */ },\n\t/*::[*/0x005f/*::]*/: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t/*::[*/0x0060/*::]*/: { /* n:\"Template\", */ },\n\t/*::[*/0x0061/*::]*/: { /* n:\"Intl\", */ },\n\t/*::[*/0x0063/*::]*/: { /* n:\"ObjProtect\", */ f:parsebool },\n\t/*::[*/0x007d/*::]*/: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x0080/*::]*/: { /* n:\"Guts\", */ f:parse_Guts },\n\t/*::[*/0x0081/*::]*/: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t/*::[*/0x0082/*::]*/: { /* n:\"GridSet\", */ f:parseuint16 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"HCenter\", */ f:parsebool },\n\t/*::[*/0x0084/*::]*/: { /* n:\"VCenter\", */ f:parsebool },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"WriteProtect\", */ },\n\t/*::[*/0x008c/*::]*/: { /* n:\"Country\", */ f:parse_Country },\n\t/*::[*/0x008d/*::]*/: { /* n:\"HideObj\", */ f:parseuint16 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"Sort\", */ },\n\t/*::[*/0x0092/*::]*/: { /* n:\"Palette\", */ f:parse_Palette },\n\t/*::[*/0x0097/*::]*/: { /* n:\"Sync\", */ },\n\t/*::[*/0x0098/*::]*/: { /* n:\"LPr\", */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"DxGCol\", */ },\n\t/*::[*/0x009a/*::]*/: { /* n:\"FnGroupName\", */ },\n\t/*::[*/0x009b/*::]*/: { /* n:\"FilterMode\", */ },\n\t/*::[*/0x009c/*::]*/: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t/*::[*/0x009d/*::]*/: { /* n:\"AutoFilterInfo\", */ },\n\t/*::[*/0x009e/*::]*/: { /* n:\"AutoFilter\", */ },\n\t/*::[*/0x00a0/*::]*/: { /* n:\"Scl\", */ f:parse_Scl },\n\t/*::[*/0x00a1/*::]*/: { /* n:\"Setup\", */ f:parse_Setup },\n\t/*::[*/0x00ae/*::]*/: { /* n:\"ScenMan\", */ },\n\t/*::[*/0x00af/*::]*/: { /* n:\"SCENARIO\", */ },\n\t/*::[*/0x00b0/*::]*/: { /* n:\"SxView\", */ },\n\t/*::[*/0x00b1/*::]*/: { /* n:\"Sxvd\", */ },\n\t/*::[*/0x00b2/*::]*/: { /* n:\"SXVI\", */ },\n\t/*::[*/0x00b4/*::]*/: { /* n:\"SxIvd\", */ },\n\t/*::[*/0x00b5/*::]*/: { /* n:\"SXLI\", */ },\n\t/*::[*/0x00b6/*::]*/: { /* n:\"SXPI\", */ },\n\t/*::[*/0x00b8/*::]*/: { /* n:\"DocRoute\", */ },\n\t/*::[*/0x00b9/*::]*/: { /* n:\"RecipName\", */ },\n\t/*::[*/0x00bd/*::]*/: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t/*::[*/0x00be/*::]*/: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t/*::[*/0x00c1/*::]*/: { /* n:\"Mms\", */ f:parsenoop2 },\n\t/*::[*/0x00c5/*::]*/: { /* n:\"SXDI\", */ },\n\t/*::[*/0x00c6/*::]*/: { /* n:\"SXDB\", */ },\n\t/*::[*/0x00c7/*::]*/: { /* n:\"SXFDB\", */ },\n\t/*::[*/0x00c8/*::]*/: { /* n:\"SXDBB\", */ },\n\t/*::[*/0x00c9/*::]*/: { /* n:\"SXNum\", */ },\n\t/*::[*/0x00ca/*::]*/: { /* n:\"SxBool\", */ f:parsebool },\n\t/*::[*/0x00cb/*::]*/: { /* n:\"SxErr\", */ },\n\t/*::[*/0x00cc/*::]*/: { /* n:\"SXInt\", */ },\n\t/*::[*/0x00cd/*::]*/: { /* n:\"SXString\", */ },\n\t/*::[*/0x00ce/*::]*/: { /* n:\"SXDtr\", */ },\n\t/*::[*/0x00cf/*::]*/: { /* n:\"SxNil\", */ },\n\t/*::[*/0x00d0/*::]*/: { /* n:\"SXTbl\", */ },\n\t/*::[*/0x00d1/*::]*/: { /* n:\"SXTBRGIITM\", */ },\n\t/*::[*/0x00d2/*::]*/: { /* n:\"SxTbpg\", */ },\n\t/*::[*/0x00d3/*::]*/: { /* n:\"ObProj\", */ },\n\t/*::[*/0x00d5/*::]*/: { /* n:\"SXStreamID\", */ },\n\t/*::[*/0x00d7/*::]*/: { /* n:\"DBCell\", */ },\n\t/*::[*/0x00d8/*::]*/: { /* n:\"SXRng\", */ },\n\t/*::[*/0x00d9/*::]*/: { /* n:\"SxIsxoper\", */ },\n\t/*::[*/0x00da/*::]*/: { /* n:\"BookBool\", */ f:parseuint16 },\n\t/*::[*/0x00dc/*::]*/: { /* n:\"DbOrParamQry\", */ },\n\t/*::[*/0x00dd/*::]*/: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t/*::[*/0x00de/*::]*/: { /* n:\"OleObjectSize\", */ },\n\t/*::[*/0x00e0/*::]*/: { /* n:\"XF\", */ f:parse_XF },\n\t/*::[*/0x00e1/*::]*/: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t/*::[*/0x00e2/*::]*/: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t/*::[*/0x00e3/*::]*/: { /* n:\"SXVS\", */ },\n\t/*::[*/0x00e5/*::]*/: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t/*::[*/0x00e9/*::]*/: { /* n:\"BkHim\", */ },\n\t/*::[*/0x00eb/*::]*/: { /* n:\"MsoDrawingGroup\", */ },\n\t/*::[*/0x00ec/*::]*/: { /* n:\"MsoDrawing\", */ },\n\t/*::[*/0x00ed/*::]*/: { /* n:\"MsoDrawingSelection\", */ },\n\t/*::[*/0x00ef/*::]*/: { /* n:\"PhoneticInfo\", */ },\n\t/*::[*/0x00f0/*::]*/: { /* n:\"SxRule\", */ },\n\t/*::[*/0x00f1/*::]*/: { /* n:\"SXEx\", */ },\n\t/*::[*/0x00f2/*::]*/: { /* n:\"SxFilt\", */ },\n\t/*::[*/0x00f4/*::]*/: { /* n:\"SxDXF\", */ },\n\t/*::[*/0x00f5/*::]*/: { /* n:\"SxItm\", */ },\n\t/*::[*/0x00f6/*::]*/: { /* n:\"SxName\", */ },\n\t/*::[*/0x00f7/*::]*/: { /* n:\"SxSelect\", */ },\n\t/*::[*/0x00f8/*::]*/: { /* n:\"SXPair\", */ },\n\t/*::[*/0x00f9/*::]*/: { /* n:\"SxFmla\", */ },\n\t/*::[*/0x00fb/*::]*/: { /* n:\"SxFormat\", */ },\n\t/*::[*/0x00fc/*::]*/: { /* n:\"SST\", */ f:parse_SST },\n\t/*::[*/0x00fd/*::]*/: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t/*::[*/0x00ff/*::]*/: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t/*::[*/0x0100/*::]*/: { /* n:\"SXVDEx\", */ },\n\t/*::[*/0x0103/*::]*/: { /* n:\"SXFormula\", */ },\n\t/*::[*/0x0122/*::]*/: { /* n:\"SXDBEx\", */ },\n\t/*::[*/0x0137/*::]*/: { /* n:\"RRDInsDel\", */ },\n\t/*::[*/0x0138/*::]*/: { /* n:\"RRDHead\", */ },\n\t/*::[*/0x013b/*::]*/: { /* n:\"RRDChgCell\", */ },\n\t/*::[*/0x013d/*::]*/: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t/*::[*/0x013e/*::]*/: { /* n:\"RRDRenSheet\", */ },\n\t/*::[*/0x013f/*::]*/: { /* n:\"RRSort\", */ },\n\t/*::[*/0x0140/*::]*/: { /* n:\"RRDMove\", */ },\n\t/*::[*/0x014a/*::]*/: { /* n:\"RRFormat\", */ },\n\t/*::[*/0x014b/*::]*/: { /* n:\"RRAutoFmt\", */ },\n\t/*::[*/0x014d/*::]*/: { /* n:\"RRInsertSh\", */ },\n\t/*::[*/0x014e/*::]*/: { /* n:\"RRDMoveBegin\", */ },\n\t/*::[*/0x014f/*::]*/: { /* n:\"RRDMoveEnd\", */ },\n\t/*::[*/0x0150/*::]*/: { /* n:\"RRDInsDelBegin\", */ },\n\t/*::[*/0x0151/*::]*/: { /* n:\"RRDInsDelEnd\", */ },\n\t/*::[*/0x0152/*::]*/: { /* n:\"RRDConflict\", */ },\n\t/*::[*/0x0153/*::]*/: { /* n:\"RRDDefName\", */ },\n\t/*::[*/0x0154/*::]*/: { /* n:\"RRDRstEtxp\", */ },\n\t/*::[*/0x015f/*::]*/: { /* n:\"LRng\", */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"UsesELFs\", */ f:parsebool },\n\t/*::[*/0x0161/*::]*/: { /* n:\"DSF\", */ f:parsenoop2 },\n\t/*::[*/0x0191/*::]*/: { /* n:\"CUsr\", */ },\n\t/*::[*/0x0192/*::]*/: { /* n:\"CbUsr\", */ },\n\t/*::[*/0x0193/*::]*/: { /* n:\"UsrInfo\", */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"UsrExcl\", */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"FileLock\", */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"RRDInfo\", */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BCUsrs\", */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"UsrChk\", */ },\n\t/*::[*/0x01a9/*::]*/: { /* n:\"UserBView\", */ },\n\t/*::[*/0x01aa/*::]*/: { /* n:\"UserSViewBegin\", */ },\n\t/*::[*/0x01ab/*::]*/: { /* n:\"UserSViewEnd\", */ },\n\t/*::[*/0x01ac/*::]*/: { /* n:\"RRDUserView\", */ },\n\t/*::[*/0x01ad/*::]*/: { /* n:\"Qsi\", */ },\n\t/*::[*/0x01ae/*::]*/: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t/*::[*/0x01af/*::]*/: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t/*::[*/0x01b0/*::]*/: { /* n:\"CondFmt\", */ },\n\t/*::[*/0x01b1/*::]*/: { /* n:\"CF\", */ },\n\t/*::[*/0x01b2/*::]*/: { /* n:\"DVal\", */ },\n\t/*::[*/0x01b5/*::]*/: { /* n:\"DConBin\", */ },\n\t/*::[*/0x01b6/*::]*/: { /* n:\"TxO\", */ f:parse_TxO },\n\t/*::[*/0x01b7/*::]*/: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t/*::[*/0x01b8/*::]*/: { /* n:\"HLink\", */ f:parse_HLink },\n\t/*::[*/0x01b9/*::]*/: { /* n:\"Lel\", */ },\n\t/*::[*/0x01ba/*::]*/: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t/*::[*/0x01bb/*::]*/: { /* n:\"SXFDBType\", */ },\n\t/*::[*/0x01bc/*::]*/: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t/*::[*/0x01bd/*::]*/: { /* n:\"ObNoMacros\", */ },\n\t/*::[*/0x01be/*::]*/: { /* n:\"Dv\", */ },\n\t/*::[*/0x01c0/*::]*/: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t/*::[*/0x01c1/*::]*/: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t/*::[*/0x01c2/*::]*/: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0201/*::]*/: { /* n:\"Blank\", */ f:parse_Blank },\n\t/*::[*/0x0203/*::]*/: { /* n:\"Number\", */ f:parse_Number },\n\t/*::[*/0x0204/*::]*/: { /* n:\"Label\", */ f:parse_Label },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0207/*::]*/: { /* n:\"String\", */ f:parse_String },\n\t/*::[*/0x0208/*::]*/: { /* n:\"Row\", */ f:parse_Row },\n\t/*::[*/0x020b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0221/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0225/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t/*::[*/0x0236/*::]*/: { /* n:\"Table\", */ },\n\t/*::[*/0x023e/*::]*/: { /* n:\"Window2\", */ f:parse_Window2 },\n\t/*::[*/0x027e/*::]*/: { /* n:\"RK\", */ f:parse_RK },\n\t/*::[*/0x0293/*::]*/: { /* n:\"Style\", */ },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BigName\", */ },\n\t/*::[*/0x041e/*::]*/: { /* n:\"Format\", */ f:parse_Format },\n\t/*::[*/0x043c/*::]*/: { /* n:\"ContinueBigName\", */ },\n\t/*::[*/0x04bc/*::]*/: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t/*::[*/0x0800/*::]*/: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t/*::[*/0x0801/*::]*/: { /* n:\"WebPub\", */ },\n\t/*::[*/0x0802/*::]*/: { /* n:\"QsiSXTag\", */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"DBQueryExt\", */ },\n\t/*::[*/0x0804/*::]*/: { /* n:\"ExtString\", */ },\n\t/*::[*/0x0805/*::]*/: { /* n:\"TxtQry\", */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"Qsir\", */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"Qsif\", */ },\n\t/*::[*/0x0808/*::]*/: { /* n:\"RRDTQSIF\", */ },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x080a/*::]*/: { /* n:\"OleDbConn\", */ },\n\t/*::[*/0x080b/*::]*/: { /* n:\"WOpt\", */ },\n\t/*::[*/0x080c/*::]*/: { /* n:\"SXViewEx\", */ },\n\t/*::[*/0x080d/*::]*/: { /* n:\"SXTH\", */ },\n\t/*::[*/0x080e/*::]*/: { /* n:\"SXPIEx\", */ },\n\t/*::[*/0x080f/*::]*/: { /* n:\"SXVDTEx\", */ },\n\t/*::[*/0x0810/*::]*/: { /* n:\"SXViewEx9\", */ },\n\t/*::[*/0x0812/*::]*/: { /* n:\"ContinueFrt\", */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"RealTimeData\", */ },\n\t/*::[*/0x0850/*::]*/: { /* n:\"ChartFrtInfo\", */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"FrtWrapper\", */ },\n\t/*::[*/0x0852/*::]*/: { /* n:\"StartBlock\", */ },\n\t/*::[*/0x0853/*::]*/: { /* n:\"EndBlock\", */ },\n\t/*::[*/0x0854/*::]*/: { /* n:\"StartObject\", */ },\n\t/*::[*/0x0855/*::]*/: { /* n:\"EndObject\", */ },\n\t/*::[*/0x0856/*::]*/: { /* n:\"CatLab\", */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"YMult\", */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"SXViewLink\", */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"PivotChartBits\", */ },\n\t/*::[*/0x085a/*::]*/: { /* n:\"FrtFontList\", */ },\n\t/*::[*/0x0862/*::]*/: { /* n:\"SheetExt\", */ },\n\t/*::[*/0x0863/*::]*/: { /* n:\"BookExt\", */ r:12},\n\t/*::[*/0x0864/*::]*/: { /* n:\"SXAddl\", */ },\n\t/*::[*/0x0865/*::]*/: { /* n:\"CrErr\", */ },\n\t/*::[*/0x0866/*::]*/: { /* n:\"HFPicture\", */ },\n\t/*::[*/0x0867/*::]*/: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t/*::[*/0x0868/*::]*/: { /* n:\"Feat\", */ },\n\t/*::[*/0x086a/*::]*/: { /* n:\"DataLabExt\", */ },\n\t/*::[*/0x086b/*::]*/: { /* n:\"DataLabExtContents\", */ },\n\t/*::[*/0x086c/*::]*/: { /* n:\"CellWatch\", */ },\n\t/*::[*/0x0871/*::]*/: { /* n:\"FeatHdr11\", */ },\n\t/*::[*/0x0872/*::]*/: { /* n:\"Feature11\", */ },\n\t/*::[*/0x0874/*::]*/: { /* n:\"DropDownObjIds\", */ },\n\t/*::[*/0x0875/*::]*/: { /* n:\"ContinueFrt11\", */ },\n\t/*::[*/0x0876/*::]*/: { /* n:\"DConn\", */ },\n\t/*::[*/0x0877/*::]*/: { /* n:\"List12\", */ },\n\t/*::[*/0x0878/*::]*/: { /* n:\"Feature12\", */ },\n\t/*::[*/0x0879/*::]*/: { /* n:\"CondFmt12\", */ },\n\t/*::[*/0x087a/*::]*/: { /* n:\"CF12\", */ },\n\t/*::[*/0x087b/*::]*/: { /* n:\"CFEx\", */ },\n\t/*::[*/0x087c/*::]*/: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t/*::[*/0x087d/*::]*/: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t/*::[*/0x087e/*::]*/: { /* n:\"AutoFilter12\", */ },\n\t/*::[*/0x087f/*::]*/: { /* n:\"ContinueFrt12\", */ },\n\t/*::[*/0x0884/*::]*/: { /* n:\"MDTInfo\", */ },\n\t/*::[*/0x0885/*::]*/: { /* n:\"MDXStr\", */ },\n\t/*::[*/0x0886/*::]*/: { /* n:\"MDXTuple\", */ },\n\t/*::[*/0x0887/*::]*/: { /* n:\"MDXSet\", */ },\n\t/*::[*/0x0888/*::]*/: { /* n:\"MDXProp\", */ },\n\t/*::[*/0x0889/*::]*/: { /* n:\"MDXKPI\", */ },\n\t/*::[*/0x088a/*::]*/: { /* n:\"MDB\", */ },\n\t/*::[*/0x088b/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x088c/*::]*/: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t/*::[*/0x088d/*::]*/: { /* n:\"DXF\", */ },\n\t/*::[*/0x088e/*::]*/: { /* n:\"TableStyles\", */ r:12 },\n\t/*::[*/0x088f/*::]*/: { /* n:\"TableStyle\", */ },\n\t/*::[*/0x0890/*::]*/: { /* n:\"TableStyleElement\", */ },\n\t/*::[*/0x0892/*::]*/: { /* n:\"StyleExt\", */ },\n\t/*::[*/0x0893/*::]*/: { /* n:\"NamePublish\", */ },\n\t/*::[*/0x0894/*::]*/: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t/*::[*/0x0895/*::]*/: { /* n:\"SortData\", */ },\n\t/*::[*/0x0896/*::]*/: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t/*::[*/0x0897/*::]*/: { /* n:\"GUIDTypeLib\", */ },\n\t/*::[*/0x0898/*::]*/: { /* n:\"FnGrp12\", */ },\n\t/*::[*/0x0899/*::]*/: { /* n:\"NameFnGrp12\", */ },\n\t/*::[*/0x089a/*::]*/: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t/*::[*/0x089b/*::]*/: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t/*::[*/0x089c/*::]*/: { /* n:\"HeaderFooter\", */ },\n\t/*::[*/0x089d/*::]*/: { /* n:\"CrtLayout12\", */ },\n\t/*::[*/0x089e/*::]*/: { /* n:\"CrtMlFrt\", */ },\n\t/*::[*/0x089f/*::]*/: { /* n:\"CrtMlFrtContinue\", */ },\n\t/*::[*/0x08a3/*::]*/: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t/*::[*/0x08a4/*::]*/: { /* n:\"ShapePropsStream\", */ },\n\t/*::[*/0x08a5/*::]*/: { /* n:\"TextPropsStream\", */ },\n\t/*::[*/0x08a6/*::]*/: { /* n:\"RichTextStream\", */ },\n\t/*::[*/0x08a7/*::]*/: { /* n:\"CrtLayout12A\", */ },\n\t/*::[*/0x1001/*::]*/: { /* n:\"Units\", */ },\n\t/*::[*/0x1002/*::]*/: { /* n:\"Chart\", */ },\n\t/*::[*/0x1003/*::]*/: { /* n:\"Series\", */ },\n\t/*::[*/0x1006/*::]*/: { /* n:\"DataFormat\", */ },\n\t/*::[*/0x1007/*::]*/: { /* n:\"LineFormat\", */ },\n\t/*::[*/0x1009/*::]*/: { /* n:\"MarkerFormat\", */ },\n\t/*::[*/0x100a/*::]*/: { /* n:\"AreaFormat\", */ },\n\t/*::[*/0x100b/*::]*/: { /* n:\"PieFormat\", */ },\n\t/*::[*/0x100c/*::]*/: { /* n:\"AttachedLabel\", */ },\n\t/*::[*/0x100d/*::]*/: { /* n:\"SeriesText\", */ },\n\t/*::[*/0x1014/*::]*/: { /* n:\"ChartFormat\", */ },\n\t/*::[*/0x1015/*::]*/: { /* n:\"Legend\", */ },\n\t/*::[*/0x1016/*::]*/: { /* n:\"SeriesList\", */ },\n\t/*::[*/0x1017/*::]*/: { /* n:\"Bar\", */ },\n\t/*::[*/0x1018/*::]*/: { /* n:\"Line\", */ },\n\t/*::[*/0x1019/*::]*/: { /* n:\"Pie\", */ },\n\t/*::[*/0x101a/*::]*/: { /* n:\"Area\", */ },\n\t/*::[*/0x101b/*::]*/: { /* n:\"Scatter\", */ },\n\t/*::[*/0x101c/*::]*/: { /* n:\"CrtLine\", */ },\n\t/*::[*/0x101d/*::]*/: { /* n:\"Axis\", */ },\n\t/*::[*/0x101e/*::]*/: { /* n:\"Tick\", */ },\n\t/*::[*/0x101f/*::]*/: { /* n:\"ValueRange\", */ },\n\t/*::[*/0x1020/*::]*/: { /* n:\"CatSerRange\", */ },\n\t/*::[*/0x1021/*::]*/: { /* n:\"AxisLine\", */ },\n\t/*::[*/0x1022/*::]*/: { /* n:\"CrtLink\", */ },\n\t/*::[*/0x1024/*::]*/: { /* n:\"DefaultText\", */ },\n\t/*::[*/0x1025/*::]*/: { /* n:\"Text\", */ },\n\t/*::[*/0x1026/*::]*/: { /* n:\"FontX\", */ f:parseuint16 },\n\t/*::[*/0x1027/*::]*/: { /* n:\"ObjectLink\", */ },\n\t/*::[*/0x1032/*::]*/: { /* n:\"Frame\", */ },\n\t/*::[*/0x1033/*::]*/: { /* n:\"Begin\", */ },\n\t/*::[*/0x1034/*::]*/: { /* n:\"End\", */ },\n\t/*::[*/0x1035/*::]*/: { /* n:\"PlotArea\", */ },\n\t/*::[*/0x103a/*::]*/: { /* n:\"Chart3d\", */ },\n\t/*::[*/0x103c/*::]*/: { /* n:\"PicF\", */ },\n\t/*::[*/0x103d/*::]*/: { /* n:\"DropBar\", */ },\n\t/*::[*/0x103e/*::]*/: { /* n:\"Radar\", */ },\n\t/*::[*/0x103f/*::]*/: { /* n:\"Surf\", */ },\n\t/*::[*/0x1040/*::]*/: { /* n:\"RadarArea\", */ },\n\t/*::[*/0x1041/*::]*/: { /* n:\"AxisParent\", */ },\n\t/*::[*/0x1043/*::]*/: { /* n:\"LegendException\", */ },\n\t/*::[*/0x1044/*::]*/: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t/*::[*/0x1045/*::]*/: { /* n:\"SerToCrt\", */ },\n\t/*::[*/0x1046/*::]*/: { /* n:\"AxesUsed\", */ },\n\t/*::[*/0x1048/*::]*/: { /* n:\"SBaseRef\", */ },\n\t/*::[*/0x104a/*::]*/: { /* n:\"SerParent\", */ },\n\t/*::[*/0x104b/*::]*/: { /* n:\"SerAuxTrend\", */ },\n\t/*::[*/0x104e/*::]*/: { /* n:\"IFmtRecord\", */ },\n\t/*::[*/0x104f/*::]*/: { /* n:\"Pos\", */ },\n\t/*::[*/0x1050/*::]*/: { /* n:\"AlRuns\", */ },\n\t/*::[*/0x1051/*::]*/: { /* n:\"BRAI\", */ },\n\t/*::[*/0x105b/*::]*/: { /* n:\"SerAuxErrBar\", */ },\n\t/*::[*/0x105c/*::]*/: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t/*::[*/0x105d/*::]*/: { /* n:\"SerFmt\", */ },\n\t/*::[*/0x105f/*::]*/: { /* n:\"Chart3DBarShape\", */ },\n\t/*::[*/0x1060/*::]*/: { /* n:\"Fbi\", */ },\n\t/*::[*/0x1061/*::]*/: { /* n:\"BopPop\", */ },\n\t/*::[*/0x1062/*::]*/: { /* n:\"AxcExt\", */ },\n\t/*::[*/0x1063/*::]*/: { /* n:\"Dat\", */ },\n\t/*::[*/0x1064/*::]*/: { /* n:\"PlotGrowth\", */ },\n\t/*::[*/0x1065/*::]*/: { /* n:\"SIIndex\", */ },\n\t/*::[*/0x1066/*::]*/: { /* n:\"GelFrame\", */ },\n\t/*::[*/0x1067/*::]*/: { /* n:\"BopPopCustom\", */ },\n\t/*::[*/0x1068/*::]*/: { /* n:\"Fbi2\", */ },\n\n\t/*::[*/0x0000/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BIFF2BLANK\", */ },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0007/*::]*/: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BIFF2ROW\", */ },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x000b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t/*::[*/0x001e/*::]*/: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t/*::[*/0x001f/*::]*/: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t/*::[*/0x0020/*::]*/: { /* n:\"BIFF2COLINFO\", */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0024/*::]*/: { /* n:\"COLWIDTH\", */ },\n\t/*::[*/0x0025/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x2c ??\n\t// 0x2d ??\n\t// 0x2e ??\n\t// 0x30 FONTCOUNT: number of fonts\n\t/*::[*/0x0032/*::]*/: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x35: INFOOPTS\n\t// 0x36: TABLE (BIFF2 only)\n\t// 0x37: TABLE2 (BIFF2 only)\n\t// 0x38: WNDESK\n\t// 0x39 ??\n\t// 0x3a: BEGINPREF\n\t// 0x3b: ENDPREF\n\t/*::[*/0x003e/*::]*/: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x3f ??\n\t// 0x46: SHOWSCROLL\n\t// 0x47: SHOWFORMULA\n\t// 0x48: STATUSBAR\n\t// 0x49: SHORTMENUS\n\t// 0x4A:\n\t// 0x4B:\n\t// 0x4C:\n\t// 0x4E:\n\t// 0x4F:\n\t// 0x58: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t/*::[*/0x0034/*::]*/: { /* n:\"DDEObjName\", */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BIFF2XF\", */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BIFF2FONTCLR\", */ },\n\t/*::[*/0x0056/*::]*/: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t/*::[*/0x007e/*::]*/: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t/*::[*/0x007f/*::]*/: { /* n:\"ImData\", */ f:parse_ImData },\n\t/*::[*/0x0087/*::]*/: { /* n:\"Addin\", */ },\n\t/*::[*/0x0088/*::]*/: { /* n:\"Edg\", */ },\n\t/*::[*/0x0089/*::]*/: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t// 0x8F\n\t/*::[*/0x0091/*::]*/: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t/*::[*/0x0094/*::]*/: { /* n:\"LHRecord\", */ },\n\t/*::[*/0x0095/*::]*/: { /* n:\"LHNGraph\", */ },\n\t/*::[*/0x0096/*::]*/: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t/*::[*/0x00a9/*::]*/: { /* n:\"CoordList\", */ },\n\t/*::[*/0x00ab/*::]*/: { /* n:\"GCW\", */ },\n\t/*::[*/0x00bc/*::]*/: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t/*::[*/0x00bf/*::]*/: { /* n:\"ToolbarHdr\", */ },\n\t/*::[*/0x00c0/*::]*/: { /* n:\"ToolbarEnd\", */ },\n\t/*::[*/0x00c2/*::]*/: { /* n:\"AddMenu\", */ },\n\t/*::[*/0x00c3/*::]*/: { /* n:\"DelMenu\", */ },\n\t/*::[*/0x00d6/*::]*/: { /* n:\"RString\", */ f:parse_RString },\n\t/*::[*/0x00df/*::]*/: { /* n:\"UDDesc\", */ },\n\t/*::[*/0x00ea/*::]*/: { /* n:\"TabIdConf\", */ },\n\t/*::[*/0x0162/*::]*/: { /* n:\"XL5Modify\", */ },\n\t/*::[*/0x01a5/*::]*/: { /* n:\"FileSharing2\", */ },\n\t/*::[*/0x0206/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0218/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0223/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0231/*::]*/: { /* n:\"Font\", */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BIFF3XF\", */ },\n\t/*::[*/0x0406/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BIFF4XF\", */ },\n\t/*::[*/0x086d/*::]*/: { /* n:\"FeatInfo\", */ },\n\t/*::[*/0x0873/*::]*/: { /* n:\"FeatInfo11\", */ },\n\t/*::[*/0x0881/*::]*/: { /* n:\"SXAddl12\", */ },\n\t/*::[*/0x08c0/*::]*/: { /* n:\"AutoWebPub\", */ },\n\t/*::[*/0x08c1/*::]*/: { /* n:\"ListObj\", */ },\n\t/*::[*/0x08c2/*::]*/: { /* n:\"ListField\", */ },\n\t/*::[*/0x08c3/*::]*/: { /* n:\"ListDV\", */ },\n\t/*::[*/0x08c4/*::]*/: { /* n:\"ListCondFmt\", */ },\n\t/*::[*/0x08c5/*::]*/: { /* n:\"ListCF\", */ },\n\t/*::[*/0x08c6/*::]*/: { /* n:\"FMQry\", */ },\n\t/*::[*/0x08c7/*::]*/: { /* n:\"FMSQry\", */ },\n\t/*::[*/0x08c8/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x08c9/*::]*/: { /* n:\"LnExt\", */ },\n\t/*::[*/0x08ca/*::]*/: { /* n:\"MkrExt\", */ },\n\t/*::[*/0x08cb/*::]*/: { /* n:\"CrtCoopt\", */ },\n\t/*::[*/0x08d6/*::]*/: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/*::[*/0x7262/*::]*/: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*//*::, opts*/) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v||\"\").slice(0,255)));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref/*:string*/, rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tstr = str.replace(//g, \"\");\n\tvar mtch/*:any*/ = str.match(/\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array*/ = [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_cell({r:R,c:C});\n\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tvar sp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '' + w + '';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\tif(cell.v != null) sp[\"data-v\"] = cell.v;\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"\";\n\treturn preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str.match(/[\\s\\S]*?<\\/table>/gi);\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
    \");\n\tif(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\treturn out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array*/ = [header];\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tout.push(make_html_preamble(ws, r, o));\n\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"
    \" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar rows/*:HTMLCollection*/ = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.children/*:any*/);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\") o.l = ({ Target: l });\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(//g,\" \")\n\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t.replace(//g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\treturn [v];\n}\n\nvar number_formats_ods = {\n\t/* ods name: [short ssf fmt, long ssf fmt] */\n\tday: [\"d\", \"dd\"],\n\tmonth: [\"m\", \"mm\"],\n\tyear: [\"y\", \"yy\"],\n\thours: [\"h\", \"hh\"],\n\tminutes: [\"m\", \"mm\"],\n\tseconds: [\"s\", \"ss\"],\n\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\tera: [\"e\", \"ee\"],\n\t/* there is no native representation of LO \"Q\" format */\n\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n};\n\n\nfunction parse_content_xml(d/*:string*/, _opts)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]/*:any*/) : ({}/*:any*/); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); }\n\t\t\t\t\t\t\tq.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\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\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ',\n\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t'',\n\t\t''\n\t].join(\"\");\n\n\tvar payload = '' + master_styles + '';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*//*::, opts*/)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array*/ = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push(' \\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&\")});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array*/, wb) {\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table cells, text */\n\t\to.push(' \\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('\\n');\n\t\t\to.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\"));\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('\\n');\n\t\t// o.push(' \\n');\n\t\twrite_automatic_styles_ods(o, wb);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8contains(body, search) {\n outer:\n for (var L = 0; L <= body.length - search.length; ++L) {\n for (var j = 0; j < search.length; ++j)\n if (body[L + j] != search[j])\n continue outer;\n return true;\n }\n return false;\n}\nfunction u8concat(u8a) {\n var len = u8a.reduce(function(acc, x) {\n return acc + x.length;\n }, 0);\n var out = new Uint8Array(len);\n var off = 0;\n u8a.forEach(function(u8) {\n out.set(u8, off);\n off += u8.length;\n });\n return out;\n}\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n for (var j = offset + 13; j >= offset; --j)\n mantissa = mantissa * 256 + buf[j];\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n buf[offset + i] = mantissa & 255;\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n var l = ptr ? ptr[0] : 0;\n var usz = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128)\n break varint;\n }\n if (ptr)\n ptr[0] = l;\n return usz;\n}\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n sz:\n if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n return usz.slice(0, L);\n}\nfunction varint_to_i32(buf) {\n var l = 0, i32 = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 28;\n }\n return i32;\n}\nfunction parse_shallow(buf) {\n var out = [], ptr = [0];\n while (ptr[0] < buf.length) {\n var off = ptr[0];\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = Math.floor(num / 8);\n var len = 0;\n var res;\n if (num == 0)\n break;\n switch (type) {\n case 0:\n {\n var l = ptr[0];\n while (buf[ptr[0]++] >= 128)\n ;\n res = buf.slice(l, ptr[0]);\n }\n break;\n case 5:\n len = 4;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 1:\n len = 8;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 2:\n len = parse_varint49(buf, ptr);\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 3:\n case 4:\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n var v = { data: res, type: type };\n if (out[num] == null)\n out[num] = [v];\n else\n out[num].push(v);\n }\n return out;\n}\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function(field, idx) {\n field.forEach(function(item) {\n if (!item.data)\n return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2)\n out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function(d) {\n return cb(d.data);\n })) || [];\n}\nfunction parse_iwa_file(buf) {\n var _a;\n var out = [], ptr = [0];\n while (ptr[0] < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function(b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf.slice(ptr[0], ptr[0] + fl)\n });\n ptr[0] += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0])\n res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n return out;\n}\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function(ia) {\n var ai = [];\n ai[1] = [{ data: write_varint49(ia.id), type: 0 }];\n ai[2] = [];\n if (ia.merge != null)\n ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n var midata = [];\n ia.messages.forEach(function(mi) {\n midata.push(mi.data);\n mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function(mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0)\n throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = [0];\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n while (ptr[0] < buf.length) {\n var tag = buf[ptr[0]] & 3;\n if (tag == 0) {\n var len = buf[ptr[0]++] >> 2;\n if (len < 60)\n ++len;\n else {\n var c = len - 59;\n len = buf[ptr[0]];\n if (c > 1)\n len |= buf[ptr[0] + 1] << 8;\n if (c > 2)\n len |= buf[ptr[0] + 2] << 16;\n if (c > 3)\n len |= buf[ptr[0] + 3] << 24;\n len >>>= 0;\n len++;\n ptr[0] += c;\n }\n chunks.push(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n continue;\n } else {\n var offset = 0, length = 0;\n if (tag == 1) {\n length = (buf[ptr[0]] >> 2 & 7) + 4;\n offset = (buf[ptr[0]++] & 224) << 3;\n offset |= buf[ptr[0]++];\n } else {\n length = (buf[ptr[0]++] >> 2) + 1;\n if (tag == 2) {\n offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;\n ptr[0] += 2;\n } else {\n offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;\n ptr[0] += 4;\n }\n }\n chunks = [u8concat(chunks)];\n if (offset == 0)\n throw new Error(\"Invalid offset 0\");\n if (offset > chunks[0].length)\n throw new Error(\"Invalid offset beyond length\");\n if (length >= offset) {\n chunks.push(chunks[0].slice(-offset));\n length -= offset;\n while (length >= chunks[chunks.length - 1].length) {\n chunks.push(chunks[chunks.length - 1]);\n length -= chunks[chunks.length - 1].length;\n }\n }\n chunks.push(chunks[0].slice(-offset, -offset + length));\n }\n }\n var o = u8concat(chunks);\n if (o.length != usz)\n throw new Error(\"Unexpected length: \".concat(o.length, \" != \").concat(usz));\n return o;\n}\nfunction decompress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));\n l += len;\n }\n if (l !== buf.length)\n throw new Error(\"data is not a valid framed stream!\");\n return u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n out.push(buf.slice(l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n return u8concat(out);\n}\nfunction parse_old_storage(buf, sst, rsst, v) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;\n var ridx = -1, sidx = -1, ieee = NaN, dt = new Date(2001, 0, 1);\n if (flags & 512) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n if (flags & 16) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n if (flags & 32) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n if (flags & 64) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n var ret;\n switch (buf[2]) {\n case 0:\n break;\n case 2:\n ret = { t: \"n\", v: ieee };\n break;\n case 3:\n ret = { t: \"s\", v: sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee / 86400 };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1)\n ret = { t: \"s\", v: rsst[ridx] };\n else if (sidx > -1)\n ret = { t: \"s\", v: sst[sidx] };\n else if (!isNaN(ieee))\n ret = { t: \"n\", v: ieee };\n else\n throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n return ret;\n}\nfunction parse_new_storage(buf, sst, rsst) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(8, true);\n var data_offset = 12;\n var ridx = -1, sidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);\n if (flags & 1) {\n d128 = readDecimal128LE(buf, data_offset);\n data_offset += 16;\n }\n if (flags & 2) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n if (flags & 4) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n if (flags & 8) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n if (flags & 16) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n var ret;\n switch (buf[1]) {\n case 0:\n break;\n case 2:\n ret = { t: \"n\", v: d128 };\n break;\n case 3:\n ret = { t: \"s\", v: sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee / 86400 };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1)\n ret = { t: \"s\", v: rsst[ridx] };\n else\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n break;\n case 10:\n ret = { t: \"n\", v: d128 };\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n return ret;\n}\nfunction write_new_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 5;\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n flags |= 1;\n l += 16;\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 2;\n l += 8;\n break;\n case \"s\":\n if (sst.indexOf(cell.v) == -1)\n throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[1] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 8;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, flags, true);\n return out.slice(0, l);\n}\nfunction write_old_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 3;\n switch (cell.t) {\n case \"n\":\n out[2] = 2;\n dv.setFloat64(l, cell.v, true);\n flags |= 32;\n l += 8;\n break;\n case \"b\":\n out[2] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 32;\n l += 8;\n break;\n case \"s\":\n if (sst.indexOf(cell.v) == -1)\n throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[2] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 16;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(4, flags, true);\n return out.slice(0, l);\n}\nfunction parse_cell_storage(buf, sst, rsst) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n return parse_old_storage(buf, sst, rsst, buf[0]);\n case 5:\n return parse_new_storage(buf, sst, rsst);\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return parse_varint49(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n var out = [];\n out[1] = [{ type: 0, data: write_varint49(idx) }];\n return write_shallow(out);\n}\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function(entry) {\n var le = parse_shallow(entry.data);\n var key = varint_to_i32(le[1][0].data) >>> 0;\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001)\n throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n data[key] = tswpsa[3].map(function(x) {\n return u8str(x.data);\n }).join(\"\");\n }\n break;\n }\n });\n return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else\n throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535)\n offsets.push([C, off]);\n }\n if (offsets.length != cnt)\n throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n for (C = 0; C < offsets.length - 1; ++C)\n cells[offsets[C][0]] = used_storage.subarray(offsets[C][1] * width, offsets[C + 1][1] * width);\n if (offsets.length >= 1)\n cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);\n return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;\n var ri = mappa(pb[5], function(u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function(acc, x) {\n if (!acc[x.R])\n acc[x.R] = [];\n x.cells.forEach(function(cell, C) {\n if (acc[x.R][C])\n throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\nfunction parse_TST_TableModelArchive(M, root, ws) {\n var _a;\n var pb = parse_shallow(root.data);\n var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0)\n throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0)\n throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var store = parse_shallow(pb[4][0].data);\n var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n tile[1].forEach(function(t) {\n var tl = parse_shallow(t.data);\n var ref = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6002)\n throw new Error(\"6001 unexpected reference to \".concat(mtype));\n var _tile = parse_TST_Tile(M, ref);\n _tile.data.forEach(function(row, R) {\n row.forEach(function(buf, C) {\n var addr = encode_cell({ r: _R + R, c: C });\n var res = parse_cell_storage(buf, sst, rsst);\n if (res)\n ws[addr] = res;\n });\n });\n _R += _tile.nrows;\n });\n}\nfunction parse_TST_TableInfoArchive(M, root) {\n var pb = parse_shallow(root.data);\n var out = { \"!ref\": \"A1\" };\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001)\n throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out);\n return out;\n}\nfunction parse_TN_SheetArchive(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3)\n out.sheets.push(parse_TST_TableInfoArchive(M, m));\n });\n });\n return out;\n}\nfunction parse_TN_DocumentArchive(M, root) {\n var out = book_new();\n var pb = parse_shallow(root.data);\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m);\n root2.sheets.forEach(function(sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0)\n throw new Error(\"Empty NUMBERS file\");\n return out;\n}\nfunction parse_numbers_iwa(cfb) {\n var _a, _b, _c, _d;\n var M = {}, indices = [];\n cfb.FullPaths.forEach(function(p) {\n if (p.match(/\\.iwpv2/))\n throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function(s) {\n if (!s.name.match(/\\.iwa$/))\n return;\n var o;\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n var packets;\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n packets.forEach(function(packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length)\n throw new Error(\"File has no messages\");\n var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot)\n indices.forEach(function(idx) {\n M[idx].forEach(function(iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n if (mtype == 1) {\n if (!docroot)\n docroot = iwam;\n else\n throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot)\n throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot);\n}\nfunction write_tile_row(tri, data, SST) {\n var _a, _b, _c, _d;\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n throw \"Mutation only works on post-BNC storages!\";\n var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;\n if (wide_offsets)\n throw \"Math only works with normal offsets\";\n var cnt = 0;\n var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535);\n continue;\n }\n dv.setUint16(C * 2, last_offset, true);\n _dv.setUint16(C * 2, _last_offset, true);\n var celload, _celload;\n switch (typeof data[C]) {\n case \"string\":\n celload = write_new_storage({ t: \"s\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"s\", v: data[C] }, SST);\n break;\n case \"number\":\n celload = write_new_storage({ t: \"n\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"n\", v: data[C] }, SST);\n break;\n case \"boolean\":\n celload = write_new_storage({ t: \"b\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"b\", v: data[C] }, SST);\n break;\n default:\n throw new Error(\"Unsupported value \" + data[C]);\n }\n cell_storage.push(celload);\n last_offset += celload.length;\n _cell_storage.push(_celload);\n _last_offset += _celload.length;\n ++cnt;\n }\n tri[2][0].data = write_varint49(cnt);\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535, true);\n }\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n return cnt;\n}\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers)\n throw new Error(\"Must pass a `numbers` option -- check the README\");\n var ws = wb.Sheets[wb.SheetNames[0]];\n if (wb.SheetNames.length > 1)\n console.error(\"The Numbers writer currently writes only the first table\");\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n if (range.e.c > 9) {\n trunc = true;\n range.e.c = 9;\n }\n if (range.e.r > 49) {\n trunc = true;\n range.e.r = 49;\n }\n if (trunc)\n console.error(\"The Numbers writer is currently limited to \".concat(encode_range(range)));\n var data = sheet_to_json(ws, { range: range, header: 1 });\n var SST = [\"~Sh33tJ5~\"];\n data.forEach(function(row) {\n return row.forEach(function(cell) {\n if (typeof cell == \"string\")\n SST.push(cell);\n });\n });\n var dependents = {};\n var indices = [];\n var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (fi.type != 2)\n return;\n if (!fi.name.match(/\\.iwa/))\n return;\n var old_content = fi.content;\n var raw1 = decompress_iwa_file(old_content);\n var x2 = parse_iwa_file(raw1);\n x2.forEach(function(packet2) {\n indices.push(packet2.id);\n dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };\n });\n });\n indices.sort(function(x2, y2) {\n return x2 - y2;\n });\n var indices_varint = indices.filter(function(x2) {\n return x2 > 1;\n }).map(function(x2) {\n return [x2, write_varint49(x2)];\n });\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (!fi.name.match(/\\.iwa/))\n return;\n var x2 = parse_iwa_file(decompress_iwa_file(fi.content));\n x2.forEach(function(ia) {\n ia.messages.forEach(function(m) {\n indices_varint.forEach(function(ivi) {\n if (ia.messages.some(function(mess) {\n return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);\n })) {\n dependents[ivi[0]].deps.push(ia.id);\n }\n });\n });\n });\n });\n function get_unique_msgid() {\n for (var i = 927262; i < 2e6; ++i)\n if (!dependents[i])\n return i;\n throw new Error(\"Too many messages\");\n }\n var entry = CFB.find(cfb, dependents[1].location);\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var docroot;\n for (var xi = 0; xi < x.length; ++xi) {\n var packet = x[xi];\n if (packet.id == 1)\n docroot = packet;\n }\n var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n var pb = parse_shallow(docroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n var cruidsref = parse_TSP_Reference(pb[46][0].data);\n var oldbucket = CFB.find(cfb, dependents[cruidsref].location);\n var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n for (var j = 0; j < _x.length; ++j) {\n if (_x[j].id == cruidsref)\n break;\n }\n if (_x[j].id != cruidsref)\n throw \"Bad ColumnRowUIDMapArchive\";\n var cruids = parse_shallow(_x[j].messages[0].data);\n cruids[1] = [];\n cruids[2] = [], cruids[3] = [];\n for (var C = 0; C <= range.e.c; ++C) {\n var uuid = [];\n uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(C + 420690) }];\n cruids[1].push({ type: 2, data: write_shallow(uuid) });\n cruids[2].push({ type: 0, data: write_varint49(C) });\n cruids[3].push({ type: 0, data: write_varint49(C) });\n }\n cruids[4] = [];\n cruids[5] = [], cruids[6] = [];\n for (var R = 0; R <= range.e.r; ++R) {\n uuid = [];\n uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(R + 726270) }];\n cruids[4].push({ type: 2, data: write_shallow(uuid) });\n cruids[5].push({ type: 0, data: write_varint49(R) });\n cruids[6].push({ type: 0, data: write_varint49(R) });\n }\n _x[j].messages[0].data = write_shallow(cruids);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n store[7][0].data = write_varint49(range.e.r + 1);\n var row_headers = parse_shallow(store[1][0].data);\n var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);\n oldbucket = CFB.find(cfb, dependents[row_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != row_header_ref)\n throw \"Bad HeaderStorageBucket\";\n var base_bucket = parse_shallow(_x[0].messages[0].data);\n for (R = 0; R < data.length; ++R) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(R);\n _bucket[4][0].data = write_varint49(data[R].length);\n base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n oldbucket = CFB.find(cfb, dependents[col_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != col_header_ref)\n throw \"Bad HeaderStorageBucket\";\n base_bucket = parse_shallow(_x[0].messages[0].data);\n for (C = 0; C <= range.e.c; ++C) {\n _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var sstref = parse_TSP_Reference(store[4][0].data);\n (function() {\n var sentry = CFB.find(cfb, dependents[sstref].location);\n var sx = parse_iwa_file(decompress_iwa_file(sentry.content));\n var sstroot;\n for (var sxi = 0; sxi < sx.length; ++sxi) {\n var packet2 = sx[sxi];\n if (packet2.id == sstref)\n sstroot = packet2;\n }\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n var newsst = [];\n SST.forEach(function(str, i) {\n newsst[1] = [{ type: 0, data: write_varint49(i) }];\n newsst[2] = [{ type: 0, data: write_varint49(1) }];\n newsst[3] = [{ type: 2, data: stru8(str) }];\n sstdata[3].push({ type: 2, data: write_shallow(newsst) });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n var sy = write_iwa_file(sx);\n var raw32 = compress_iwa_file(sy);\n sentry.content = raw32;\n sentry.size = sentry.content.length;\n })();\n var tile = parse_shallow(store[3][0].data);\n {\n var t = tile[1][0];\n delete tile[2];\n var tl = parse_shallow(t.data);\n {\n var tileref = parse_TSP_Reference(tl[2][0].data);\n (function() {\n var tentry = CFB.find(cfb, dependents[tileref].location);\n var tx = parse_iwa_file(decompress_iwa_file(tentry.content));\n var tileroot;\n for (var sxi = 0; sxi < tx.length; ++sxi) {\n var packet2 = tx[sxi];\n if (packet2.id == tileref)\n tileroot = packet2;\n }\n var tiledata = parse_shallow(tileroot.messages[0].data);\n {\n delete tiledata[6];\n delete tile[7];\n var rowload = new Uint8Array(tiledata[5][0].data);\n tiledata[5] = [];\n var cnt = 0;\n for (var R2 = 0; R2 <= range.e.r; ++R2) {\n var tilerow = parse_shallow(rowload);\n cnt += write_tile_row(tilerow, data[R2], SST);\n tilerow[1][0].data = write_varint49(R2);\n tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n }\n tiledata[1] = [{ type: 0, data: write_varint49(range.e.c + 1) }];\n tiledata[2] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n tiledata[3] = [{ type: 0, data: write_varint49(cnt) }];\n tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n }\n tileroot.messages[0].data = write_shallow(tiledata);\n var ty = write_iwa_file(tx);\n var raw32 = compress_iwa_file(ty);\n tentry.content = raw32;\n tentry.size = tentry.content.length;\n })();\n }\n t.data = write_shallow(tl);\n }\n store[3][0].data = write_shallow(tile);\n }\n pb[4][0].data = write_shallow(store);\n }\n docroot.messages[0].data = write_shallow(pb);\n var y = write_iwa_file(x);\n var raw3 = compress_iwa_file(y);\n entry.content = raw3;\n entry.size = entry.content.length;\n return cfb;\n}\nfunction fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tvar comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(opts.bookType == \"numbers\") return write_numbers_iwa(wb, opts);\n\tif(opts.bookType == \"xlsb\") return write_zip_xlsxb(wb, opts);\n\treturn write_zip_xlsx(wb, opts);\n}\n\n/* XLSX and XLSB writing are very similar. Originally they were unified in one\n export function. This is horrible for tree shaking in the common case (most\n applications need to export files in one format) so this function supports\n both formats while write_zip_xlsx only handles XLSX */\nfunction write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta(f));\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".\" + wbext;\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".\" + wbext, RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\td = $cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, header/*:number*/, hdr/*:Array*/, dense/*:boolean*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw && (val.t !== \"n\" || (val.t === \"n\" && o.rawNumbers !== false)) ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar out/*:Array*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array*/ = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols/*:Array*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array*/ = [], C;\n\tvar cmds/*:Array*/ = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell/*:Cell*/;\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array*/ = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = ws_get_cell_stub(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nfunction book_new()/*:Workbook*/ {\n\treturn { SheetNames: [], Sheets: {} };\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0) {\n\t\tvar m = name.match(/(^.*?)(\\d+)$/);\n\t\ti = m && +m[2] || 0;\n\t\tvar root = m && m[1] || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row/*:?string*/ = \"\", cols/*:Array*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n set_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\n","/**\n * XLSX Preview Component\n *\n * Renders Excel spreadsheets as HTML tables using SheetJS.\n */\n\nimport { useEffect, useState, useMemo } from 'react';\nimport { Table, AlertCircle, Loader2, ChevronLeft, ChevronRight } from 'lucide-react';\nimport * as XLSX from 'xlsx';\n\ninterface XlsxPreviewProps {\n content: string; // Base64 encoded XLSX data\n fileName: string;\n}\n\ninterface SheetData {\n name: string;\n data: string[][]; // 2D array of cell values\n}\n\nexport function XlsxPreview({ content, fileName }: XlsxPreviewProps) {\n const [sheets, setSheets] = useState([]);\n const [activeSheet, setActiveSheet] = useState(0);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n async function parseXlsx() {\n setIsLoading(true);\n setError(null);\n\n try {\n // Convert base64 to binary string\n const binaryString = atob(content);\n\n // Parse the workbook\n const workbook = XLSX.read(binaryString, { type: 'binary' });\n\n // Extract data from each sheet\n const parsedSheets: SheetData[] = workbook.SheetNames.map((name) => {\n const sheet = workbook.Sheets[name];\n const data = XLSX.utils.sheet_to_json(sheet, { header: 1 });\n return { name, data: data as string[][] };\n });\n\n setSheets(parsedSheets);\n setActiveSheet(0);\n } catch (err) {\n console.error('XLSX parsing error:', err);\n setError(err instanceof Error ? err.message : 'Failed to parse spreadsheet');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content) {\n parseXlsx();\n }\n }, [content]);\n\n // Generate HTML table for current sheet\n const tableHtml = useMemo(() => {\n if (sheets.length === 0 || !sheets[activeSheet]) return '';\n\n const { data } = sheets[activeSheet];\n if (data.length === 0) return '

    Empty sheet

    ';\n\n let html = '';\n\n // First row as headers\n const headers = data[0] || [];\n headers.forEach((cell) => {\n html += ``;\n });\n html += '';\n\n // Remaining rows as data\n for (let i = 1; i < data.length; i++) {\n html += '';\n const row = data[i] || [];\n // Ensure we have same number of cells as headers\n for (let j = 0; j < headers.length; j++) {\n html += ``;\n }\n html += '';\n }\n\n html += '
    ${cell ?? ''}
    ${row[j] ?? ''}
    ';\n return html;\n }, [sheets, activeSheet]);\n\n const fullHtml = useMemo(() => {\n return `\n\n\n\n \n \n\n\n${tableHtml}\n\n`;\n }, [tableHtml]);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Excel Spreadsheet\n - {fileName}\n \n\n {/* Sheet navigation */}\n {sheets.length > 1 && (\n
    \n setActiveSheet((prev) => Math.max(0, prev - 1))}\n disabled={activeSheet === 0}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n \n {sheets[activeSheet]?.name} ({activeSheet + 1}/{sheets.length})\n \n setActiveSheet((prev) => Math.min(sheets.length - 1, prev + 1))}\n disabled={activeSheet === sheets.length - 1}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n
    \n )}\n \n\n {/* Content */}\n
    \n {isLoading && (\n
    \n \n Parsing spreadsheet...\n
    \n )}\n\n {error && (\n
    \n \n Failed to parse spreadsheet\n {error}\n
    \n )}\n\n {!isLoading && !error && sheets.length > 0 && (\n \n )}\n
    \n \n );\n}\n\nexport default XlsxPreview;\n","/**\n * PPTX Preview Component\n *\n * Renders PowerPoint presentations by:\n * 1. Attempting Docker-based PDF conversion for full fidelity (if available)\n * 2. Falling back to text extraction from slides\n */\n\nimport { useEffect, useState, useMemo, useRef } from 'react';\nimport { Presentation, AlertCircle, Loader2, ChevronLeft, ChevronRight, FileImage, FileText } from 'lucide-react';\nimport JSZip from 'jszip';\nimport PdfPreview from './PdfPreview';\n\ninterface PptxPreviewProps {\n content: string; // Base64 encoded PPTX data\n fileName: string;\n // Optional: workspace context for Docker conversion\n workspacePath?: string;\n filePath?: string;\n}\n\ninterface SlideContent {\n index: number;\n text: string[];\n notes?: string;\n}\n\ntype PreviewMode = 'auto' | 'pdf' | 'text';\n\nexport function PptxPreview({ content, fileName, workspacePath, filePath }: PptxPreviewProps) {\n const [slides, setSlides] = useState([]);\n const [activeSlide, setActiveSlide] = useState(0);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [previewMode, setPreviewMode] = useState('auto');\n\n // PDF conversion state\n const [pdfContent, setPdfContent] = useState(null);\n const [isConverting, setIsConverting] = useState(false);\n const [dockerAvailable, setDockerAvailable] = useState(null);\n\n // AbortController for canceling in-flight requests\n const abortControllerRef = useRef(null);\n\n // Try Docker PDF conversion\n useEffect(() => {\n async function tryDockerConversion() {\n if (!workspacePath || !filePath) {\n setDockerAvailable(false);\n return;\n }\n\n // Cancel any previous conversion request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsConverting(true);\n\n try {\n const response = await fetch('/api/convert/document', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n path: filePath,\n workspace: workspacePath,\n }),\n signal: controller.signal,\n });\n\n // Check if request was aborted\n if (controller.signal.aborted) return;\n\n const data = await response.json();\n\n // Double-check abort status after parsing\n if (controller.signal.aborted) return;\n\n if (import.meta.env.DEV) {\n console.log('PPTX Docker conversion response:', {\n success: data.success,\n hasContent: !!data.content,\n contentLength: data.content?.length,\n contentPreview: data.content?.substring(0, 100),\n error: data.error,\n docker_required: data.docker_required,\n });\n }\n\n if (data.success && data.content) {\n setPdfContent(data.content);\n setDockerAvailable(true);\n if (import.meta.env.DEV) {\n console.log('PPTX PDF content set, length:', data.content.length);\n }\n } else {\n if (import.meta.env.DEV) {\n console.warn('PPTX conversion failed:', data.error);\n }\n setDockerAvailable(data.docker_required === true ? false : null);\n }\n } catch (err) {\n // Ignore abort errors - they're expected when switching files\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Docker conversion failed:', err);\n setDockerAvailable(false);\n } finally {\n // Only update loading state if this request wasn't aborted\n if (!controller.signal.aborted) {\n setIsConverting(false);\n }\n }\n }\n\n if (previewMode === 'auto' || previewMode === 'pdf') {\n tryDockerConversion();\n }\n\n // Cleanup: abort on unmount or when dependencies change\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, [workspacePath, filePath, previewMode]);\n\n // Parse PPTX for text extraction (fallback)\n useEffect(() => {\n async function parsePptx() {\n setIsLoading(true);\n setError(null);\n\n try {\n if (!content || content.length === 0) {\n throw new Error('No content provided');\n }\n\n // Try to decode base64\n let bytes: Uint8Array;\n try {\n const binaryString = atob(content);\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } catch (decodeErr) {\n console.error('Base64 decode failed:', decodeErr);\n throw new Error('File content is not valid base64 encoded data');\n }\n\n // Load PPTX as ZIP\n let zip;\n try {\n zip = await JSZip.loadAsync(bytes);\n } catch (zipErr) {\n console.error('ZIP load failed:', zipErr);\n throw new Error('Failed to parse PPTX file structure');\n }\n\n // Find all slide XML files\n const slideFiles: string[] = [];\n zip.forEach((path) => {\n if (path.match(/ppt\\/slides\\/slide\\d+\\.xml$/)) {\n slideFiles.push(path);\n }\n });\n\n if (slideFiles.length === 0) {\n throw new Error('No slides found in presentation');\n }\n\n // Sort slides by number\n slideFiles.sort((a, b) => {\n const numA = parseInt(a.match(/slide(\\d+)/)?.[1] || '0');\n const numB = parseInt(b.match(/slide(\\d+)/)?.[1] || '0');\n return numA - numB;\n });\n\n // Extract text from each slide\n const parsedSlides: SlideContent[] = await Promise.all(\n slideFiles.map(async (path, index) => {\n const xmlContent = await zip.file(path)?.async('text');\n const text: string[] = [];\n\n if (xmlContent) {\n // Extract text from elements\n const textMatches = xmlContent.matchAll(/([^<]*)<\\/a:t>/g);\n for (const match of textMatches) {\n if (match[1].trim()) {\n text.push(match[1].trim());\n }\n }\n }\n\n return {\n index: index + 1,\n text,\n };\n })\n );\n\n setSlides(parsedSlides);\n setActiveSlide(0);\n } catch (err) {\n console.error('PPTX parsing error:', err);\n setError(err instanceof Error ? err.message : 'Failed to parse presentation');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content && (previewMode === 'auto' || previewMode === 'text')) {\n parsePptx();\n }\n }, [content, previewMode]);\n\n // Generate HTML for current slide (text mode)\n const slideHtml = useMemo(() => {\n if (slides.length === 0 || !slides[activeSlide]) return '';\n\n const slide = slides[activeSlide];\n\n return `\n\n\n\n \n \n\n\n
    \n
    Slide ${slide.index} of ${slides.length}
    \n
    \n ${slide.text.map((t) => `

    ${t}

    `).join('')}\n ${slide.text.length === 0 ? '

    No text content on this slide

    ' : ''}\n
    \n
    \n\n`;\n }, [slides, activeSlide]);\n\n // Determine what to show\n const showPdf = pdfContent && (previewMode === 'pdf' || (previewMode === 'auto' && dockerAvailable));\n const showText = !showPdf && slides.length > 0;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n PowerPoint Presentation\n - {fileName}\n
    \n\n
    \n {/* Mode toggle */}\n {(pdfContent || slides.length > 0) && (\n
    \n setPreviewMode('pdf')}\n disabled={!pdfContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showPdf ? 'bg-orange-600 text-white' : 'text-gray-400 hover:text-gray-300'\n } ${!pdfContent ? 'opacity-50 cursor-not-allowed' : ''}`}\n title={pdfContent ? 'Full fidelity preview' : 'Docker container required for PDF preview'}\n >\n \n PDF\n \n setPreviewMode('text')}\n disabled={slides.length === 0}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showText ? 'bg-orange-600 text-white' : 'text-gray-400 hover:text-gray-300'\n }`}\n title=\"Text extraction mode\"\n >\n \n Text\n \n
    \n )}\n\n {/* Slide navigation (text mode only) */}\n {showText && slides.length > 0 && (\n
    \n setActiveSlide((prev) => Math.max(0, prev - 1))}\n disabled={activeSlide === 0}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n \n Slide {activeSlide + 1} of {slides.length}\n \n setActiveSlide((prev) => Math.min(slides.length - 1, prev + 1))}\n disabled={activeSlide === slides.length - 1}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n
    \n )}\n
    \n
    \n\n {/* Content */}\n
    \n {/* Loading state */}\n {(isLoading || isConverting) && (\n
    \n \n {isConverting ? 'Converting to PDF...' : 'Parsing presentation...'}\n
    \n )}\n\n {/* Error state */}\n {error && !pdfContent && (\n
    \n \n Failed to parse presentation\n {error}\n
    \n )}\n\n {/* PDF preview mode */}\n {!isLoading && !isConverting && showPdf && pdfContent && (\n
    \n \n
    \n )}\n\n {/* Text preview mode */}\n {!isLoading && !isConverting && showText && (\n <>\n {/* Docker not available notice - show when not using PDF mode */}\n {!pdfContent && (\n
    \n
    \n \n \n {!workspacePath\n ? \"Full slide preview available when viewing from workspace (requires Docker).\"\n : \"Full preview requires Docker with MassGen container.\"\n } Showing text extraction.\n \n
    \n
    \n )}\n \n \n )}\n\n {/* Empty state */}\n {!isLoading && !isConverting && !error && slides.length === 0 && !pdfContent && (\n
    \n \n No slides found in presentation\n
    \n )}\n
    \n
    \n );\n}\n\nexport default PptxPreview;\n","/**\n * Video Preview Component\n *\n * Displays video files (e.g., MP4/WebM/MOV) using a HTML5 video player.\n */\n\nimport { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport { Clapperboard, RotateCw, Volume2, VolumeX } from 'lucide-react';\n\ninterface VideoPreviewProps {\n content: string; // Base64-encoded video data or data URL\n fileName: string;\n mimeType?: string;\n}\n\nexport function VideoPreview({ content, fileName, mimeType }: VideoPreviewProps) {\n const [loadError, setLoadError] = useState(null);\n const [muted, setMuted] = useState(true);\n const videoRef = useRef(null);\n\n const videoSrc = useMemo(() => {\n if (!content) return '';\n if (content.startsWith('data:')) return content;\n const type = mimeType || 'video/mp4';\n return `data:${type};base64,${content}`;\n }, [content, mimeType]);\n\n useEffect(() => {\n setLoadError(null);\n if (videoRef.current) {\n videoRef.current.currentTime = 0;\n videoRef.current.load();\n }\n }, [videoSrc]);\n\n const handleReload = useCallback(() => {\n if (!videoRef.current) return;\n videoRef.current.currentTime = 0;\n videoRef.current.play().catch(() => {\n // ignore autoplay errors (e.g., user interaction required)\n });\n }, []);\n\n const toggleMute = useCallback(() => {\n setMuted((prev) => !prev);\n }, []);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Video Preview\n - {fileName}\n
    \n\n
    \n \n {muted ? : }\n \n \n \n \n
    \n
    \n\n {/* Video area */}\n
    \n {loadError ? (\n
    \n \n

    Failed to load video

    \n

    {loadError}

    \n
    \n ) : videoSrc ? (\n setLoadError('Unsupported video format or corrupted data')}\n />\n ) : (\n
    \n \n

    No video content

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default VideoPreview;\n","var e,t=\"colors\",n=\"sizes\",r=\"space\",i={gap:r,gridGap:r,columnGap:r,gridColumnGap:r,rowGap:r,gridRowGap:r,inset:r,insetBlock:r,insetBlockEnd:r,insetBlockStart:r,insetInline:r,insetInlineEnd:r,insetInlineStart:r,margin:r,marginTop:r,marginRight:r,marginBottom:r,marginLeft:r,marginBlock:r,marginBlockEnd:r,marginBlockStart:r,marginInline:r,marginInlineEnd:r,marginInlineStart:r,padding:r,paddingTop:r,paddingRight:r,paddingBottom:r,paddingLeft:r,paddingBlock:r,paddingBlockEnd:r,paddingBlockStart:r,paddingInline:r,paddingInlineEnd:r,paddingInlineStart:r,top:r,right:r,bottom:r,left:r,scrollMargin:r,scrollMarginTop:r,scrollMarginRight:r,scrollMarginBottom:r,scrollMarginLeft:r,scrollMarginX:r,scrollMarginY:r,scrollMarginBlock:r,scrollMarginBlockEnd:r,scrollMarginBlockStart:r,scrollMarginInline:r,scrollMarginInlineEnd:r,scrollMarginInlineStart:r,scrollPadding:r,scrollPaddingTop:r,scrollPaddingRight:r,scrollPaddingBottom:r,scrollPaddingLeft:r,scrollPaddingX:r,scrollPaddingY:r,scrollPaddingBlock:r,scrollPaddingBlockEnd:r,scrollPaddingBlockStart:r,scrollPaddingInline:r,scrollPaddingInlineEnd:r,scrollPaddingInlineStart:r,fontSize:\"fontSizes\",background:t,backgroundColor:t,backgroundImage:t,borderImage:t,border:t,borderBlock:t,borderBlockEnd:t,borderBlockStart:t,borderBottom:t,borderBottomColor:t,borderColor:t,borderInline:t,borderInlineEnd:t,borderInlineStart:t,borderLeft:t,borderLeftColor:t,borderRight:t,borderRightColor:t,borderTop:t,borderTopColor:t,caretColor:t,color:t,columnRuleColor:t,fill:t,outline:t,outlineColor:t,stroke:t,textDecorationColor:t,fontFamily:\"fonts\",fontWeight:\"fontWeights\",lineHeight:\"lineHeights\",letterSpacing:\"letterSpacings\",blockSize:n,minBlockSize:n,maxBlockSize:n,inlineSize:n,minInlineSize:n,maxInlineSize:n,width:n,minWidth:n,maxWidth:n,height:n,minHeight:n,maxHeight:n,flexBasis:n,gridTemplateColumns:n,gridTemplateRows:n,borderWidth:\"borderWidths\",borderTopWidth:\"borderWidths\",borderRightWidth:\"borderWidths\",borderBottomWidth:\"borderWidths\",borderLeftWidth:\"borderWidths\",borderStyle:\"borderStyles\",borderTopStyle:\"borderStyles\",borderRightStyle:\"borderStyles\",borderBottomStyle:\"borderStyles\",borderLeftStyle:\"borderStyles\",borderRadius:\"radii\",borderTopLeftRadius:\"radii\",borderTopRightRadius:\"radii\",borderBottomRightRadius:\"radii\",borderBottomLeftRadius:\"radii\",boxShadow:\"shadows\",textShadow:\"shadows\",transition:\"transitions\",zIndex:\"zIndices\"},o=(e,t)=>\"function\"==typeof t?{\"()\":Function.prototype.toString.call(t)}:t,l=()=>{const e=Object.create(null);return(t,n,...r)=>{const i=(e=>JSON.stringify(e,o))(t);return i in e?e[i]:e[i]=n(t,...r)}},s=Symbol.for(\"sxs.internal\"),a=(e,t)=>Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)),c=e=>{for(const t in e)return!0;return!1},{hasOwnProperty:d}=Object.prototype,g=e=>e.includes(\"-\")?e:e.replace(/[A-Z]/g,(e=>\"-\"+e.toLowerCase())),p=/\\s+(?![^()]*\\))/,u=e=>t=>e(...\"string\"==typeof t?String(t).split(p):[t]),h={appearance:e=>({WebkitAppearance:e,appearance:e}),backfaceVisibility:e=>({WebkitBackfaceVisibility:e,backfaceVisibility:e}),backdropFilter:e=>({WebkitBackdropFilter:e,backdropFilter:e}),backgroundClip:e=>({WebkitBackgroundClip:e,backgroundClip:e}),boxDecorationBreak:e=>({WebkitBoxDecorationBreak:e,boxDecorationBreak:e}),clipPath:e=>({WebkitClipPath:e,clipPath:e}),content:e=>({content:e.includes('\"')||e.includes(\"'\")||/^([A-Za-z]+\\([^]*|[^]*-quote|inherit|initial|none|normal|revert|unset)$/.test(e)?e:`\"${e}\"`}),hyphens:e=>({WebkitHyphens:e,hyphens:e}),maskImage:e=>({WebkitMaskImage:e,maskImage:e}),maskSize:e=>({WebkitMaskSize:e,maskSize:e}),tabSize:e=>({MozTabSize:e,tabSize:e}),textSizeAdjust:e=>({WebkitTextSizeAdjust:e,textSizeAdjust:e}),userSelect:e=>({WebkitUserSelect:e,userSelect:e}),marginBlock:u(((e,t)=>({marginBlockStart:e,marginBlockEnd:t||e}))),marginInline:u(((e,t)=>({marginInlineStart:e,marginInlineEnd:t||e}))),maxSize:u(((e,t)=>({maxBlockSize:e,maxInlineSize:t||e}))),minSize:u(((e,t)=>({minBlockSize:e,minInlineSize:t||e}))),paddingBlock:u(((e,t)=>({paddingBlockStart:e,paddingBlockEnd:t||e}))),paddingInline:u(((e,t)=>({paddingInlineStart:e,paddingInlineEnd:t||e})))},f=/([\\d.]+)([^]*)/,m=(e,t)=>e.length?e.reduce(((e,n)=>(e.push(...t.map((e=>e.includes(\"&\")?e.replace(/&/g,/[ +>|~]/.test(n)&&/&.*&/.test(e)?`:is(${n})`:n):n+\" \"+e))),e)),[]):t,b=(e,t)=>e in S&&\"string\"==typeof t?t.replace(/^((?:[^]*[^\\w-])?)(fit-content|stretch)((?:[^\\w-][^]*)?)$/,((t,n,r,i)=>n+(\"stretch\"===r?`-moz-available${i};${g(e)}:${n}-webkit-fill-available`:`-moz-fit-content${i};${g(e)}:${n}fit-content`)+i)):String(t),S={blockSize:1,height:1,inlineSize:1,maxBlockSize:1,maxHeight:1,maxInlineSize:1,maxWidth:1,minBlockSize:1,minHeight:1,minInlineSize:1,minWidth:1,width:1},k=e=>e?e+\"-\":\"\",y=(e,t,n)=>e.replace(/([+-])?((?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)?(\\$|--)([$\\w-]+)/g,((e,r,i,o,l)=>\"$\"==o==!!i?e:(r||\"--\"==o?\"calc(\":\"\")+\"var(--\"+(\"$\"===o?k(t)+(l.includes(\"$\")?\"\":k(n))+l.replace(/\\$/g,\"-\"):l)+\")\"+(r||\"--\"==o?\"*\"+(r||\"\")+(i||\"1\")+\")\":\"\"))),B=/\\s*,\\s*(?![^()]*\\))/,$=Object.prototype.toString,x=(e,t,n,r,i)=>{let o,l,s;const a=(e,t,n)=>{let c,d;const p=e=>{for(c in e){const x=64===c.charCodeAt(0),z=x&&Array.isArray(e[c])?e[c]:[e[c]];for(d of z){const e=/[A-Z]/.test(S=c)?S:S.replace(/-[^]/g,(e=>e[1].toUpperCase())),z=\"object\"==typeof d&&d&&d.toString===$&&(!r.utils[e]||!t.length);if(e in r.utils&&!z){const t=r.utils[e];if(t!==l){l=t,p(t(d)),l=null;continue}}else if(e in h){const t=h[e];if(t!==s){s=t,p(t(d)),s=null;continue}}if(x&&(u=c.slice(1)in r.media?\"@media \"+r.media[c.slice(1)]:c,c=u.replace(/\\(\\s*([\\w-]+)\\s*(=|<|<=|>|>=)\\s*([\\w-]+)\\s*(?:(<|<=|>|>=)\\s*([\\w-]+)\\s*)?\\)/g,((e,t,n,r,i,o)=>{const l=f.test(t),s=.0625*(l?-1:1),[a,c]=l?[r,t]:[t,r];return\"(\"+(\"=\"===n[0]?\"\":\">\"===n[0]===l?\"max-\":\"min-\")+a+\":\"+(\"=\"!==n[0]&&1===n.length?c.replace(f,((e,t,r)=>Number(t)+s*(\">\"===n?1:-1)+r)):c)+(i?\") and (\"+(\">\"===i[0]?\"min-\":\"max-\")+a+\":\"+(1===i.length?o.replace(f,((e,t,n)=>Number(t)+s*(\">\"===i?-1:1)+n)):o):\"\")+\")\"}))),z){const e=x?n.concat(c):[...n],r=x?[...t]:m(t,c.split(B));void 0!==o&&i(I(...o)),o=void 0,a(d,r,e)}else void 0===o&&(o=[[],t,n]),c=x||36!==c.charCodeAt(0)?c:`--${k(r.prefix)}${c.slice(1).replace(/\\$/g,\"-\")}`,d=z?d:\"number\"==typeof d?d&&e in R?String(d)+\"px\":String(d):y(b(e,null==d?\"\":d),r.prefix,r.themeMap[e]),o[0].push(`${x?`${c} `:`${g(c)}:`}${d}`)}}var u,S};p(e),void 0!==o&&i(I(...o)),o=void 0};a(e,t,n)},I=(e,t,n)=>`${n.map((e=>`${e}{`)).join(\"\")}${t.length?`${t.join(\",\")}{`:\"\"}${e.join(\";\")}${t.length?\"}\":\"\"}${Array(n.length?n.length+1:0).join(\"}\")}`,R={animationDelay:1,animationDuration:1,backgroundSize:1,blockSize:1,border:1,borderBlock:1,borderBlockEnd:1,borderBlockEndWidth:1,borderBlockStart:1,borderBlockStartWidth:1,borderBlockWidth:1,borderBottom:1,borderBottomLeftRadius:1,borderBottomRightRadius:1,borderBottomWidth:1,borderEndEndRadius:1,borderEndStartRadius:1,borderInlineEnd:1,borderInlineEndWidth:1,borderInlineStart:1,borderInlineStartWidth:1,borderInlineWidth:1,borderLeft:1,borderLeftWidth:1,borderRadius:1,borderRight:1,borderRightWidth:1,borderSpacing:1,borderStartEndRadius:1,borderStartStartRadius:1,borderTop:1,borderTopLeftRadius:1,borderTopRightRadius:1,borderTopWidth:1,borderWidth:1,bottom:1,columnGap:1,columnRule:1,columnRuleWidth:1,columnWidth:1,containIntrinsicSize:1,flexBasis:1,fontSize:1,gap:1,gridAutoColumns:1,gridAutoRows:1,gridTemplateColumns:1,gridTemplateRows:1,height:1,inlineSize:1,inset:1,insetBlock:1,insetBlockEnd:1,insetBlockStart:1,insetInline:1,insetInlineEnd:1,insetInlineStart:1,left:1,letterSpacing:1,margin:1,marginBlock:1,marginBlockEnd:1,marginBlockStart:1,marginBottom:1,marginInline:1,marginInlineEnd:1,marginInlineStart:1,marginLeft:1,marginRight:1,marginTop:1,maxBlockSize:1,maxHeight:1,maxInlineSize:1,maxWidth:1,minBlockSize:1,minHeight:1,minInlineSize:1,minWidth:1,offsetDistance:1,offsetRotate:1,outline:1,outlineOffset:1,outlineWidth:1,overflowClipMargin:1,padding:1,paddingBlock:1,paddingBlockEnd:1,paddingBlockStart:1,paddingBottom:1,paddingInline:1,paddingInlineEnd:1,paddingInlineStart:1,paddingLeft:1,paddingRight:1,paddingTop:1,perspective:1,right:1,rowGap:1,scrollMargin:1,scrollMarginBlock:1,scrollMarginBlockEnd:1,scrollMarginBlockStart:1,scrollMarginBottom:1,scrollMarginInline:1,scrollMarginInlineEnd:1,scrollMarginInlineStart:1,scrollMarginLeft:1,scrollMarginRight:1,scrollMarginTop:1,scrollPadding:1,scrollPaddingBlock:1,scrollPaddingBlockEnd:1,scrollPaddingBlockStart:1,scrollPaddingBottom:1,scrollPaddingInline:1,scrollPaddingInlineEnd:1,scrollPaddingInlineStart:1,scrollPaddingLeft:1,scrollPaddingRight:1,scrollPaddingTop:1,shapeMargin:1,textDecoration:1,textDecorationThickness:1,textIndent:1,textUnderlineOffset:1,top:1,transitionDelay:1,transitionDuration:1,verticalAlign:1,width:1,wordSpacing:1},z=e=>String.fromCharCode(e+(e>25?39:97)),W=e=>(e=>{let t,n=\"\";for(t=Math.abs(e);t>52;t=t/52|0)n=z(t%52)+n;return z(t%52)+n})(((e,t)=>{let n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e})(5381,JSON.stringify(e))>>>0),j=[\"themed\",\"global\",\"styled\",\"onevar\",\"resonevar\",\"allvar\",\"inline\"],E=e=>{if(e.href&&!e.href.startsWith(location.origin))return!1;try{return!!e.cssRules}catch(e){return!1}},T=e=>{let t;const n=()=>{const{cssRules:e}=t.sheet;return[].map.call(e,((n,r)=>{const{cssText:i}=n;let o=\"\";if(i.startsWith(\"--sxs\"))return\"\";if(e[r-1]&&(o=e[r-1].cssText).startsWith(\"--sxs\")){if(!n.cssRules.length)return\"\";for(const e in t.rules)if(t.rules[e].group===n)return`--sxs{--sxs:${[...t.rules[e].cache].join(\" \")}}${i}`;return n.cssRules.length?`${o}${i}`:\"\"}return i})).join(\"\")},r=()=>{if(t){const{rules:e,sheet:n}=t;if(!n.deleteRule){for(;3===Object(Object(n.cssRules)[0]).type;)n.cssRules.splice(0,1);n.cssRules=[]}for(const t in e)delete e[t]}const i=Object(e).styleSheets||[];for(const e of i)if(E(e)){for(let i=0,o=e.cssRules;o[i];++i){const l=Object(o[i]);if(1!==l.type)continue;const s=Object(o[i+1]);if(4!==s.type)continue;++i;const{cssText:a}=l;if(!a.startsWith(\"--sxs\"))continue;const c=a.slice(14,-3).trim().split(/\\s+/),d=j[c[0]];d&&(t||(t={sheet:e,reset:r,rules:{},toString:n}),t.rules[d]={group:s,index:i,cache:new Set(c)})}if(t)break}if(!t){const i=(e,t)=>({type:t,cssRules:[],insertRule(e,t){this.cssRules.splice(t,0,i(e,{import:3,undefined:1}[(e.toLowerCase().match(/^@([a-z]+)/)||[])[1]]||4))},get cssText(){return\"@media{}\"===e?`@media{${[].map.call(this.cssRules,(e=>e.cssText)).join(\"\")}}`:e}});t={sheet:e?(e.head||e).appendChild(document.createElement(\"style\")).sheet:i(\"\",\"text/css\"),rules:{},reset:r,toString:n}}const{sheet:o,rules:l}=t;for(let e=j.length-1;e>=0;--e){const t=j[e];if(!l[t]){const n=j[e+1],r=l[n]?l[n].index:o.cssRules.length;o.insertRule(\"@media{}\",r),o.insertRule(`--sxs{--sxs:${e}}`,r),l[t]={group:o.cssRules[r+1],index:r,cache:new Set([e])}}v(l[t])}};return r(),t},v=e=>{const t=e.group;let n=t.cssRules.length;e.apply=e=>{try{t.insertRule(e,n),++n}catch(e){}}},M=Symbol(),w=l(),C=(e,t)=>w(e,(()=>(...n)=>{let r={type:null,composers:new Set};for(const t of n)if(null!=t)if(t[s]){null==r.type&&(r.type=t[s].type);for(const e of t[s].composers)r.composers.add(e)}else t.constructor!==Object||t.$$typeof?null==r.type&&(r.type=t):r.composers.add(P(t,e));return null==r.type&&(r.type=\"span\"),r.composers.size||r.composers.add([\"PJLV\",{},[],[],{},[]]),L(e,r,t)})),P=({variants:e,compoundVariants:t,defaultVariants:n,...r},i)=>{const o=`${k(i.prefix)}c-${W(r)}`,l=[],s=[],a=Object.create(null),g=[];for(const e in n)a[e]=String(n[e]);if(\"object\"==typeof e&&e)for(const t in e){p=a,u=t,d.call(p,u)||(a[t]=\"undefined\");const n=e[t];for(const e in n){const r={[t]:String(e)};\"undefined\"===String(e)&&g.push(t);const i=n[e],o=[r,i,!c(i)];l.push(o)}}var p,u;if(\"object\"==typeof t&&t)for(const e of t){let{css:t,...n}=e;t=\"object\"==typeof t&&t||{};for(const e in n)n[e]=String(n[e]);const r=[n,t,!c(t)];s.push(r)}return[o,r,l,s,a,g]},L=(e,t,n)=>{const[r,i,o,l]=O(t.composers),c=\"function\"==typeof t.type||t.type.$$typeof?(e=>{function t(){for(let n=0;nt.rules[e]={apply:n=>t[M].push([e,n])})),t})(n):null,d=(c||n).rules,g=`.${r}${i.length>1?`:where(.${i.slice(1).join(\".\")})`:\"\"}`,p=s=>{s=\"object\"==typeof s&&s||D;const{css:a,...p}=s,u={};for(const e in o)if(delete p[e],e in s){let t=s[e];\"object\"==typeof t&&t?u[e]={\"@initial\":o[e],...t}:(t=String(t),u[e]=\"undefined\"!==t||l.has(e)?t:o[e])}else u[e]=o[e];const h=new Set([...i]);for(const[r,i,o,l]of t.composers){n.rules.styled.cache.has(r)||(n.rules.styled.cache.add(r),x(i,[`.${r}`],[],e,(e=>{d.styled.apply(e)})));const t=A(o,u,e.media),s=A(l,u,e.media,!0);for(const i of t)if(void 0!==i)for(const[t,o,l]of i){const i=`${r}-${W(o)}-${t}`;h.add(i);const s=(l?n.rules.resonevar:n.rules.onevar).cache,a=l?d.resonevar:d.onevar;s.has(i)||(s.add(i),x(o,[`.${i}`],[],e,(e=>{a.apply(e)})))}for(const t of s)if(void 0!==t)for(const[i,o]of t){const t=`${r}-${W(o)}-${i}`;h.add(t),n.rules.allvar.cache.has(t)||(n.rules.allvar.cache.add(t),x(o,[`.${t}`],[],e,(e=>{d.allvar.apply(e)})))}}if(\"object\"==typeof a&&a){const t=`${r}-i${W(a)}-css`;h.add(t),n.rules.inline.cache.has(t)||(n.rules.inline.cache.add(t),x(a,[`.${t}`],[],e,(e=>{d.inline.apply(e)})))}for(const e of String(s.className||\"\").trim().split(/\\s+/))e&&h.add(e);const f=p.className=[...h].join(\" \");return{type:t.type,className:f,selector:g,props:p,toString:()=>f,deferredInjector:c}};return a(p,{className:r,selector:g,[s]:t,toString:()=>(n.rules.styled.cache.has(r)||p(),r)})},O=e=>{let t=\"\";const n=[],r={},i=[];for(const[o,,,,l,s]of e){\"\"===t&&(t=o),n.push(o),i.push(...s);for(const e in l){const t=l[e];(void 0===r[e]||\"undefined\"!==t||s.includes(t))&&(r[e]=t)}}return[t,n,r,new Set(i)]},A=(e,t,n,r)=>{const i=[];e:for(let[o,l,s]of e){if(s)continue;let e,a=0,c=!1;for(e in o){const r=o[e];let i=t[e];if(i!==r){if(\"object\"!=typeof i||!i)continue e;{let e,t,o=0;for(const l in i){if(r===String(i[l])){if(\"@initial\"!==l){const e=l.slice(1);(t=t||[]).push(e in n?n[e]:l.replace(/^@media ?/,\"\")),c=!0}a+=o,e=!0}++o}if(t&&t.length&&(l={[\"@media \"+t.join(\", \")]:l}),!e)continue e}}}(i[a]=i[a]||[]).push([r?\"cv\":`${e}-${o[e]}`,l,c])}return i},D={},H=l(),N=(e,t)=>H(e,(()=>(...n)=>{const r=()=>{for(let r of n){r=\"object\"==typeof r&&r||{};let n=W(r);if(!t.rules.global.cache.has(n)){if(t.rules.global.cache.add(n),\"@import\"in r){let e=[].indexOf.call(t.sheet.cssRules,t.rules.themed.group)-1;for(let n of[].concat(r[\"@import\"]))n=n.includes('\"')||n.includes(\"'\")?n:`\"${n}\"`,t.sheet.insertRule(`@import ${n};`,e++);delete r[\"@import\"]}x(r,[],[],e,(e=>{t.rules.global.apply(e)}))}}return\"\"};return a(r,{toString:r})})),V=l(),G=(e,t)=>V(e,(()=>n=>{const r=`${k(e.prefix)}k-${W(n)}`,i=()=>{if(!t.rules.global.cache.has(r)){t.rules.global.cache.add(r);const i=[];x(n,[],[],e,(e=>i.push(e)));const o=`@keyframes ${r}{${i.join(\"\")}}`;t.rules.global.apply(o)}return r};return a(i,{get name(){return i()},toString:i})})),F=class{constructor(e,t,n,r){this.token=null==e?\"\":String(e),this.value=null==t?\"\":String(t),this.scale=null==n?\"\":String(n),this.prefix=null==r?\"\":String(r)}get computedValue(){return\"var(\"+this.variable+\")\"}get variable(){return\"--\"+k(this.prefix)+k(this.scale)+this.token}toString(){return this.computedValue}},J=l(),U=(e,t)=>J(e,(()=>(n,r)=>{r=\"object\"==typeof n&&n||Object(r);const i=`.${n=(n=\"string\"==typeof n?n:\"\")||`${k(e.prefix)}t-${W(r)}`}`,o={},l=[];for(const t in r){o[t]={};for(const n in r[t]){const i=`--${k(e.prefix)}${t}-${n}`,s=y(String(r[t][n]),e.prefix,t);o[t][n]=new F(n,s,t,e.prefix),l.push(`${i}:${s}`)}}const s=()=>{if(l.length&&!t.rules.themed.cache.has(n)){t.rules.themed.cache.add(n);const i=`${r===e.theme?\":root,\":\"\"}.${n}{${l.join(\";\")}}`;t.rules.themed.apply(i)}return n};return{...o,get className(){return s()},selector:i,toString:s}})),Z=l(),X=e=>{let t=!1;const n=Z(e,(e=>{t=!0;const n=\"prefix\"in(e=\"object\"==typeof e&&e||{})?String(e.prefix):\"\",r=\"object\"==typeof e.media&&e.media||{},o=\"object\"==typeof e.root?e.root||null:globalThis.document||null,l=\"object\"==typeof e.theme&&e.theme||{},s={prefix:n,media:r,theme:l,themeMap:\"object\"==typeof e.themeMap&&e.themeMap||{...i},utils:\"object\"==typeof e.utils&&e.utils||{}},a=T(o),c={css:C(s,a),globalCss:N(s,a),keyframes:G(s,a),createTheme:U(s,a),reset(){a.reset(),c.theme.toString()},theme:{},sheet:a,config:s,prefix:n,getCssText:a.toString,toString:a.toString};return String(c.theme=c.createTheme(l)),c}));return t||n.reset(),n},Y=()=>e||(e=X()),q=(...e)=>Y().createTheme(...e),K=(...e)=>Y().globalCss(...e),Q=(...e)=>Y().keyframes(...e),_=(...e)=>Y().css(...e);export{X as createStitches,q as createTheme,_ as css,i as defaultThemeMap,K as globalCss,Q as keyframes};\n//# sourceMappingUrl=index.map","var has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nexport function dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\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\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","// src/format.ts\nvar POSITIONALS_EXP = /(%?)(%([sdjo]))/g;\nfunction serializePositional(positional, flag) {\n switch (flag) {\n case \"s\":\n return positional;\n case \"d\":\n case \"i\":\n return Number(positional);\n case \"j\":\n return JSON.stringify(positional);\n case \"o\": {\n if (typeof positional === \"string\") {\n return positional;\n }\n const json = JSON.stringify(positional);\n if (json === \"{}\" || json === \"[]\" || /^\\[object .+?\\]$/.test(json)) {\n return positional;\n }\n return json;\n }\n }\n}\nfunction format(message, ...positionals) {\n if (positionals.length === 0) {\n return message;\n }\n let positionalIndex = 0;\n let formattedMessage = message.replace(\n POSITIONALS_EXP,\n (match, isEscaped, _, flag) => {\n const positional = positionals[positionalIndex];\n const value = serializePositional(positional, flag);\n if (!isEscaped) {\n positionalIndex++;\n return value;\n }\n return match;\n }\n );\n if (positionalIndex < positionals.length) {\n formattedMessage += ` ${positionals.slice(positionalIndex).join(\" \")}`;\n }\n formattedMessage = formattedMessage.replace(/%{2,2}/g, \"%\");\n return formattedMessage;\n}\n\n// src/invariant.ts\nvar STACK_FRAMES_TO_IGNORE = 2;\nfunction cleanErrorStack(error) {\n if (!error.stack) {\n return;\n }\n const nextStack = error.stack.split(\"\\n\");\n nextStack.splice(1, STACK_FRAMES_TO_IGNORE);\n error.stack = nextStack.join(\"\\n\");\n}\nvar InvariantError = class extends Error {\n constructor(message, ...positionals) {\n super(message);\n this.message = message;\n this.name = \"Invariant Violation\";\n this.message = format(message, ...positionals);\n cleanErrorStack(this);\n }\n};\nvar invariant = (predicate, message, ...positionals) => {\n if (!predicate) {\n throw new InvariantError(message, ...positionals);\n }\n};\ninvariant.as = (ErrorConstructor, predicate, message, ...positionals) => {\n if (!predicate) {\n const isConstructor = ErrorConstructor.prototype.name != null;\n const error = isConstructor ? new ErrorConstructor(format(message, positionals)) : ErrorConstructor(format(message, positionals));\n throw error;\n }\n};\nexport {\n InvariantError,\n format,\n invariant\n};\n//# sourceMappingURL=index.mjs.map","import { invariant } from 'outvariant';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* globalThis Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nvar SandpackLogLevel;\n(function (SandpackLogLevel) {\n SandpackLogLevel[SandpackLogLevel[\"None\"] = 0] = \"None\";\n SandpackLogLevel[SandpackLogLevel[\"Error\"] = 10] = \"Error\";\n SandpackLogLevel[SandpackLogLevel[\"Warning\"] = 20] = \"Warning\";\n SandpackLogLevel[SandpackLogLevel[\"Info\"] = 30] = \"Info\";\n SandpackLogLevel[SandpackLogLevel[\"Debug\"] = 40] = \"Debug\";\n})(SandpackLogLevel || (SandpackLogLevel = {}));\n\nvar createError = function (message) {\n return \"[sandpack-client]: \".concat(message);\n};\nfunction nullthrows(value, err) {\n if (err === void 0) { err = \"Value is nullish\"; }\n invariant(value != null, createError(err));\n return value;\n}\nvar DEPENDENCY_ERROR_MESSAGE = \"\\\"dependencies\\\" was not specified - provide either a package.json or a \\\"dependencies\\\" value\";\nvar ENTRY_ERROR_MESSAGE = \"\\\"entry\\\" was not specified - provide either a package.json with the \\\"main\\\" field or an \\\"entry\\\" value\";\nfunction createPackageJSON(dependencies, devDependencies, entry) {\n if (dependencies === void 0) { dependencies = {}; }\n if (devDependencies === void 0) { devDependencies = {}; }\n if (entry === void 0) { entry = \"/index.js\"; }\n return JSON.stringify({\n name: \"sandpack-project\",\n main: entry,\n dependencies: dependencies,\n devDependencies: devDependencies,\n }, null, 2);\n}\nfunction addPackageJSONIfNeeded(files, dependencies, devDependencies, entry) {\n var _a, _b;\n var normalizedFilesPath = normalizePath(files);\n var packageJsonFile = normalizedFilesPath[\"/package.json\"];\n /**\n * Create a new package json\n */\n if (!packageJsonFile) {\n nullthrows(dependencies, DEPENDENCY_ERROR_MESSAGE);\n nullthrows(entry, ENTRY_ERROR_MESSAGE);\n normalizedFilesPath[\"/package.json\"] = {\n code: createPackageJSON(dependencies, devDependencies, entry),\n };\n return normalizedFilesPath;\n }\n /**\n * Merge package json with custom setup\n */\n if (packageJsonFile) {\n var packageJsonContent = JSON.parse(packageJsonFile.code);\n nullthrows(!(!dependencies && !packageJsonContent.dependencies), ENTRY_ERROR_MESSAGE);\n if (dependencies) {\n packageJsonContent.dependencies = __assign(__assign({}, ((_a = packageJsonContent.dependencies) !== null && _a !== void 0 ? _a : {})), (dependencies !== null && dependencies !== void 0 ? dependencies : {}));\n }\n if (devDependencies) {\n packageJsonContent.devDependencies = __assign(__assign({}, ((_b = packageJsonContent.devDependencies) !== null && _b !== void 0 ? _b : {})), (devDependencies !== null && devDependencies !== void 0 ? devDependencies : {}));\n }\n if (entry) {\n packageJsonContent.main = entry;\n }\n normalizedFilesPath[\"/package.json\"] = {\n code: JSON.stringify(packageJsonContent, null, 2),\n };\n }\n return normalizedFilesPath;\n}\nfunction extractErrorDetails(msg) {\n var _a;\n if (msg.title === \"SyntaxError\") {\n var title = msg.title, path = msg.path, message = msg.message, line = msg.line, column = msg.column;\n return { title: title, path: path, message: message, line: line, column: column };\n }\n var relevantStackFrame = getRelevantStackFrame((_a = msg.payload) === null || _a === void 0 ? void 0 : _a.frames);\n if (!relevantStackFrame) {\n return { message: msg.message };\n }\n var errorInCode = getErrorInOriginalCode(relevantStackFrame);\n var errorLocation = getErrorLocation(relevantStackFrame);\n var errorMessage = formatErrorMessage(relevantStackFrame._originalFileName, msg.message, errorLocation, errorInCode);\n return {\n message: errorMessage,\n title: msg.title,\n path: relevantStackFrame._originalFileName,\n line: relevantStackFrame._originalLineNumber,\n column: relevantStackFrame._originalColumnNumber,\n };\n}\nfunction getRelevantStackFrame(frames) {\n if (!frames) {\n return;\n }\n return frames.find(function (frame) { return !!frame._originalFileName; });\n}\nfunction getErrorLocation(errorFrame) {\n return errorFrame\n ? \" (\".concat(errorFrame._originalLineNumber, \":\").concat(errorFrame._originalColumnNumber, \")\")\n : \"\";\n}\nfunction getErrorInOriginalCode(errorFrame) {\n var lastScriptLine = errorFrame._originalScriptCode[errorFrame._originalScriptCode.length - 1];\n var numberOfLineNumberCharacters = lastScriptLine.lineNumber.toString().length;\n var leadingCharacterOffset = 2;\n var barSeparatorCharacterOffset = 3;\n var extraLineLeadingSpaces = leadingCharacterOffset +\n numberOfLineNumberCharacters +\n barSeparatorCharacterOffset +\n errorFrame._originalColumnNumber;\n return errorFrame._originalScriptCode.reduce(function (result, scriptLine) {\n var leadingChar = scriptLine.highlight ? \">\" : \" \";\n var lineNumber = scriptLine.lineNumber.toString().length === numberOfLineNumberCharacters\n ? \"\".concat(scriptLine.lineNumber)\n : \" \".concat(scriptLine.lineNumber);\n var extraLine = scriptLine.highlight\n ? \"\\n\" + \" \".repeat(extraLineLeadingSpaces) + \"^\"\n : \"\";\n return (result + // accumulator\n \"\\n\" +\n leadingChar + // > or \" \"\n \" \" +\n lineNumber + // line number on equal number of characters\n \" | \" +\n scriptLine.content + // code\n extraLine // line under the highlighed line to show the column index\n );\n }, \"\");\n}\nfunction formatErrorMessage(filePath, message, location, errorInCode) {\n return \"\".concat(filePath, \": \").concat(message).concat(location, \"\\n\").concat(errorInCode);\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar normalizePath = function (path) {\n if (typeof path === \"string\") {\n return (path.startsWith(\"/\") ? path : \"/\".concat(path));\n }\n if (Array.isArray(path)) {\n return path.map(function (p) { return (p.startsWith(\"/\") ? p : \"/\".concat(p)); });\n }\n if (typeof path === \"object\" && path !== null) {\n return Object.entries(path).reduce(function (acc, _a) {\n var key = _a[0], content = _a[1];\n var fileName = key.startsWith(\"/\") ? key : \"/\".concat(key);\n acc[fileName] = content;\n return acc;\n }, {});\n }\n return null;\n};\n\nexport { SandpackLogLevel as S, __awaiter as _, __generator as a, createPackageJSON as b, createError as c, addPackageJSONIfNeeded as d, extractErrorDetails as e, normalizePath as f, __extends as g, __assign as h, __spreadArray as i, nullthrows as n };\n","import { _ as __awaiter, a as __generator } from './utils-52664384.mjs';\nexport { S as SandpackLogLevel, d as addPackageJSONIfNeeded, c as createError, b as createPackageJSON, e as extractErrorDetails, f as normalizePath, n as nullthrows } from './utils-52664384.mjs';\nimport 'outvariant';\n\nfunction loadSandpackClient(iframeSelector, sandboxSetup, options) {\n var _a;\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var template, Client, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n template = (_a = sandboxSetup.template) !== null && _a !== void 0 ? _a : \"parcel\";\n _b = template;\n switch (_b) {\n case \"node\": return [3 /*break*/, 1];\n case \"static\": return [3 /*break*/, 3];\n }\n return [3 /*break*/, 5];\n case 1: return [4 /*yield*/, import('./clients/node/index.mjs').then(function (m) { return m.SandpackNode; })];\n case 2:\n Client = _c.sent();\n return [3 /*break*/, 7];\n case 3: return [4 /*yield*/, import('./index-599aeaf7.mjs').then(function (m) { return m.SandpackStatic; })];\n case 4:\n Client = _c.sent();\n return [3 /*break*/, 7];\n case 5: return [4 /*yield*/, import('./clients/runtime/index.mjs').then(function (m) { return m.SandpackRuntime; })];\n case 6:\n Client = _c.sent();\n _c.label = 7;\n case 7: return [2 /*return*/, new Client(iframeSelector, sandboxSetup, options)];\n }\n });\n });\n}\n\nexport { loadSandpackClient };\n","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n // Compressed representation of the Grapheme_Cluster_Break=Extend\n // information from\n // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n // Each pair of elements represents a range, as an offet from the\n // previous range and a length. Numbers are in base-36, with the empty\n // string being a shorthand for 1.\n let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n for (let i = 0, n = 0; i < numbers.length; i++)\n (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n if (code < 768) return false\n for (let from = 0, to = rangeFrom.length;;) {\n let mid = (from + to) >> 1\n if (code < rangeFrom[mid]) to = mid\n else if (code >= rangeTo[mid]) from = mid + 1\n else return true\n if (from == to) return false\n }\n}\n\nfunction isRegionalIndicator(code) {\n return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n for (let i = 0; i < rangeFrom.length; i++) {\n if (rangeTo[i] > code) return rangeFrom[i] <= code\n }\n return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n if (pos == str.length) return pos\n // If pos is in the middle of a surrogate pair, move to its start\n if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n let prev = codePointAt(str, pos)\n pos += codePointSize(prev)\n while (pos < str.length) {\n let next = codePointAt(str, pos)\n if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n pos += codePointSize(next)\n prev = next\n } else if (isRegionalIndicator(next)) {\n let countBefore = 0, i = pos - 2\n while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n if (countBefore % 2 == 0) break\n else pos += 2\n } else {\n break\n }\n }\n return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n while (pos > 0) {\n let found = nextClusterBreak(str, pos - 2, includeExtending)\n if (found < pos) return found\n pos--\n }\n return 0\n}\n\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos)\n if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n let code1 = str.charCodeAt(pos + 1)\n if (!surrogateLow(code1)) return code0\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n","import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n /**\n Get the line description around the given position.\n */\n lineAt(pos) {\n if (pos < 0 || pos > this.length)\n throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n return this.lineInner(pos, false, 1, 0);\n }\n /**\n Get the description for the given (1-based) line number.\n */\n line(n) {\n if (n < 1 || n > this.lines)\n throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n return this.lineInner(n, true, 1, 0);\n }\n /**\n Replace a range of the text with the given content.\n */\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(0, from, parts, 2 /* Open.To */);\n if (text.length)\n text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n this.decompose(to, this.length, parts, 1 /* Open.From */);\n return TextNode.from(parts, this.length - (to - from) + text.length);\n }\n /**\n Append another document to this one.\n */\n append(other) {\n return this.replace(this.length, this.length, other);\n }\n /**\n Retrieve the text between the given points.\n */\n slice(from, to = this.length) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(from, to, parts, 0);\n return TextNode.from(parts, to - from);\n }\n /**\n Test whether this text is equal to another instance.\n */\n eq(other) {\n if (other == this)\n return true;\n if (other.length != this.length || other.lines != this.lines)\n return false;\n let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n let a = new RawTextCursor(this), b = new RawTextCursor(other);\n for (let skip = start, pos = start;;) {\n a.next(skip);\n b.next(skip);\n skip = 0;\n if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n return false;\n pos += a.value.length;\n if (a.done || pos >= end)\n return true;\n }\n }\n /**\n Iterate over the text. When `dir` is `-1`, iteration happens\n from end to start. This will return lines and the breaks between\n them as separate strings.\n */\n iter(dir = 1) { return new RawTextCursor(this, dir); }\n /**\n Iterate over a range of the text. When `from` > `to`, the\n iterator will run in reverse.\n */\n iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n /**\n Return a cursor that iterates over the given range of lines,\n _without_ returning the line breaks between, and yielding empty\n strings for empty lines.\n \n When `from` and `to` are given, they should be 1-based line numbers.\n */\n iterLines(from, to) {\n let inner;\n if (from == null) {\n inner = this.iter();\n }\n else {\n if (to == null)\n to = this.lines + 1;\n let start = this.line(from).from;\n inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n }\n return new LineCursor(inner);\n }\n /**\n Return the document as a string, using newline characters to\n separate lines.\n */\n toString() { return this.sliceString(0); }\n /**\n Convert the document to an array of lines (which can be\n deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n */\n toJSON() {\n let lines = [];\n this.flatten(lines);\n return lines;\n }\n /**\n @internal\n */\n constructor() { }\n /**\n Create a `Text` instance for the given array of lines.\n */\n static of(text) {\n if (text.length == 0)\n throw new RangeError(\"A document must have at least one line\");\n if (text.length == 1 && !text[0])\n return Text.empty;\n return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n constructor(text, length = textLength(text)) {\n super();\n this.text = text;\n this.length = length;\n }\n get lines() { return this.text.length; }\n get children() { return null; }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let string = this.text[i], end = offset + string.length;\n if ((isLine ? line : end) >= target)\n return new Line(offset, end, line, string);\n offset = end + 1;\n line++;\n }\n }\n decompose(from, to, target, open) {\n let text = from <= 0 && to >= this.length ? this\n : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n if (open & 1 /* Open.From */) {\n let prev = target.pop();\n let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n if (joined.length <= 32 /* Tree.Branch */) {\n target.push(new TextLeaf(joined, prev.length + text.length));\n }\n else {\n let mid = joined.length >> 1;\n target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n }\n }\n else {\n target.push(text);\n }\n }\n replace(from, to, text) {\n if (!(text instanceof TextLeaf))\n return super.replace(from, to, text);\n [from, to] = clip(this, from, to);\n let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n let newLen = this.length + text.length - (to - from);\n if (lines.length <= 32 /* Tree.Branch */)\n return new TextLeaf(lines, newLen);\n return TextNode.from(TextLeaf.split(lines, []), newLen);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n let line = this.text[i], end = pos + line.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += line.slice(Math.max(0, from - pos), to - pos);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let line of this.text)\n target.push(line);\n }\n scanIdentical() { return 0; }\n static split(text, target) {\n let part = [], len = -1;\n for (let line of text) {\n part.push(line);\n len += line.length + 1;\n if (part.length == 32 /* Tree.Branch */) {\n target.push(new TextLeaf(part, len));\n part = [];\n len = -1;\n }\n }\n if (len > -1)\n target.push(new TextLeaf(part, len));\n return target;\n }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n constructor(children, length) {\n super();\n this.children = children;\n this.length = length;\n this.lines = 0;\n for (let child of children)\n this.lines += child.lines;\n }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n if ((isLine ? endLine : end) >= target)\n return child.lineInner(target, isLine, line, offset);\n offset = end + 1;\n line = endLine + 1;\n }\n }\n decompose(from, to, target, open) {\n for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n if (from <= end && to >= pos) {\n let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n if (pos >= from && end <= to && !childOpen)\n target.push(child);\n else\n child.decompose(from - pos, to - pos, target, childOpen);\n }\n pos = end + 1;\n }\n }\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n if (text.lines < this.lines)\n for (let i = 0, pos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n // Fast path: if the change only affects one child and the\n // child's size remains in the acceptable range, only update\n // that child\n if (from >= pos && to <= end) {\n let updated = child.replace(from - pos, to - pos, text);\n let totalLines = this.lines - child.lines + updated.lines;\n if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n let copy = this.children.slice();\n copy[i] = updated;\n return new TextNode(copy, this.length - (to - from) + text.length);\n }\n return super.replace(pos, end, updated);\n }\n pos = end + 1;\n }\n return super.replace(from, to, text);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n let child = this.children[i], end = pos + child.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += child.sliceString(from - pos, to - pos, lineSep);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let child of this.children)\n child.flatten(target);\n }\n scanIdentical(other, dir) {\n if (!(other instanceof TextNode))\n return 0;\n let length = 0;\n let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n : [this.children.length - 1, other.children.length - 1, -1, -1];\n for (;; iA += dir, iB += dir) {\n if (iA == eA || iB == eB)\n return length;\n let chA = this.children[iA], chB = other.children[iB];\n if (chA != chB)\n return length + chA.scanIdentical(chB, dir);\n length += chA.length + 1;\n }\n }\n static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n let lines = 0;\n for (let ch of children)\n lines += ch.lines;\n if (lines < 32 /* Tree.Branch */) {\n let flat = [];\n for (let ch of children)\n ch.flatten(flat);\n return new TextLeaf(flat, length);\n }\n let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n function add(child) {\n let last;\n if (child.lines > maxChunk && child instanceof TextNode) {\n for (let node of child.children)\n add(node);\n }\n else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n flush();\n chunked.push(child);\n }\n else if (child instanceof TextLeaf && currentLines &&\n (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n child.lines + last.lines <= 32 /* Tree.Branch */) {\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n }\n else {\n if (currentLines + child.lines > chunk)\n flush();\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk.push(child);\n }\n }\n function flush() {\n if (currentLines == 0)\n return;\n chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n currentLen = -1;\n currentLines = currentChunk.length = 0;\n }\n for (let child of children)\n add(child);\n flush();\n return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n let length = -1;\n for (let line of text)\n length += line.length + 1;\n return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n let line = text[i], end = pos + line.length;\n if (end >= from) {\n if (end > to)\n line = line.slice(0, to - pos);\n if (pos < from)\n line = line.slice(from - pos);\n if (first) {\n target[target.length - 1] += line;\n first = false;\n }\n else\n target.push(line);\n }\n pos = end + 1;\n }\n return target;\n}\nfunction sliceText(text, from, to) {\n return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n constructor(text, dir = 1) {\n this.dir = dir;\n this.done = false;\n this.lineBreak = false;\n this.value = \"\";\n this.nodes = [text];\n this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n }\n nextInner(skip, dir) {\n this.done = this.lineBreak = false;\n for (;;) {\n let last = this.nodes.length - 1;\n let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n if (offset == (dir > 0 ? size : 0)) {\n if (last == 0) {\n this.done = true;\n this.value = \"\";\n return this;\n }\n if (dir > 0)\n this.offsets[last - 1]++;\n this.nodes.pop();\n this.offsets.pop();\n }\n else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n this.offsets[last] += dir;\n if (skip == 0) {\n this.lineBreak = true;\n this.value = \"\\n\";\n return this;\n }\n skip--;\n }\n else if (top instanceof TextLeaf) {\n // Move to the next string\n let next = top.text[offset + (dir < 0 ? -1 : 0)];\n this.offsets[last] += dir;\n if (next.length > Math.max(0, skip)) {\n this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n return this;\n }\n skip -= next.length;\n }\n else {\n let next = top.children[offset + (dir < 0 ? -1 : 0)];\n if (skip > next.length) {\n skip -= next.length;\n this.offsets[last] += dir;\n }\n else {\n if (dir < 0)\n this.offsets[last]--;\n this.nodes.push(next);\n this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n }\n }\n }\n }\n next(skip = 0) {\n if (skip < 0) {\n this.nextInner(-skip, (-this.dir));\n skip = this.value.length;\n }\n return this.nextInner(skip, this.dir);\n }\n}\nclass PartialTextCursor {\n constructor(text, start, end) {\n this.value = \"\";\n this.done = false;\n this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n this.pos = start > end ? text.length : 0;\n this.from = Math.min(start, end);\n this.to = Math.max(start, end);\n }\n nextInner(skip, dir) {\n if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n this.value = \"\";\n this.done = true;\n return this;\n }\n skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n if (skip > limit)\n skip = limit;\n limit -= skip;\n let { value } = this.cursor.next(skip);\n this.pos += (value.length + skip) * dir;\n this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n this.done = !this.value;\n return this;\n }\n next(skip = 0) {\n if (skip < 0)\n skip = Math.max(skip, this.from - this.pos);\n else if (skip > 0)\n skip = Math.min(skip, this.to - this.pos);\n return this.nextInner(skip, this.cursor.dir);\n }\n get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n constructor(inner) {\n this.inner = inner;\n this.afterBreak = true;\n this.value = \"\";\n this.done = false;\n }\n next(skip = 0) {\n let { done, lineBreak, value } = this.inner.next(skip);\n if (done && this.afterBreak) {\n this.value = \"\";\n this.afterBreak = false;\n }\n else if (done) {\n this.done = true;\n this.value = \"\";\n }\n else if (lineBreak) {\n if (this.afterBreak) {\n this.value = \"\";\n }\n else {\n this.afterBreak = true;\n this.next();\n }\n }\n else {\n this.value = value;\n this.afterBreak = false;\n }\n return this;\n }\n get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n /**\n @internal\n */\n constructor(\n /**\n The position of the start of the line.\n */\n from, \n /**\n The position at the end of the line (_before_ the line break,\n or at the end of document for the last line).\n */\n to, \n /**\n This line's line number (1-based).\n */\n number, \n /**\n The line's content.\n */\n text) {\n this.from = from;\n this.to = to;\n this.number = number;\n this.text = text;\n }\n /**\n The length of the line (not including any line break after it).\n */\n get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n from = Math.max(0, Math.min(text.length, from));\n return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos);\n if (!surrogateHigh(code0) || pos + 1 == str.length)\n return code0;\n let code1 = str.charCodeAt(pos + 1);\n if (!surrogateLow(code1))\n return code0;\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n if (code <= 0xffff)\n return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n /**\n Map a position to a valid new position, even when its context\n was deleted.\n */\n MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n /**\n Return null if deletion happens across the position.\n */\n MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n /**\n Return null if the character _before_ the position is deleted.\n */\n MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n /**\n Return null if the character _after_ the position is deleted.\n */\n MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n // Sections are encoded as pairs of integers. The first is the\n // length in the current document, and the second is -1 for\n // unaffected sections, and the length of the replacement content\n // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n // 0), and a replacement two positive numbers.\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n sections) {\n this.sections = sections;\n }\n /**\n The length of the document before the change.\n */\n get length() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2)\n result += this.sections[i];\n return result;\n }\n /**\n The length of the document after the change.\n */\n get newLength() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2) {\n let ins = this.sections[i + 1];\n result += ins < 0 ? this.sections[i] : ins;\n }\n return result;\n }\n /**\n False when there are actual changes in this set.\n */\n get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n /**\n Iterate over the unchanged parts left by these changes. `posA`\n provides the position of the range in the old document, `posB`\n the new position in the changed document.\n */\n iterGaps(f) {\n for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0) {\n f(posA, posB, len);\n posB += len;\n }\n else {\n posB += ins;\n }\n posA += len;\n }\n }\n /**\n Iterate over the ranges changed by these changes. (See\n [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n variant that also provides you with the inserted text.)\n `fromA`/`toA` provides the extent of the change in the starting\n document, `fromB`/`toB` the extent of the replacement in the\n changed document.\n \n When `individual` is true, adjacent changes (which are kept\n separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n reported separately.\n */\n iterChangedRanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a description of the inverted form of these changes.\n */\n get invertedDesc() {\n let sections = [];\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0)\n sections.push(len, ins);\n else\n sections.push(ins, len);\n }\n return new ChangeDesc(sections);\n }\n /**\n Compute the combined effect of applying another set of changes\n after this one. The length of the document after this set should\n match the length before `other`.\n */\n composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n /**\n Map this description, which should start with the same document\n as `other`, over another set of changes, so that it can be\n applied after it. When `before` is true, map as if the changes\n in `this` happened before the ones in `other`.\n */\n mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n let posA = 0, posB = 0;\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n if (ins < 0) {\n if (endA > pos)\n return posB + (pos - posA);\n posB += len;\n }\n else {\n if (mode != MapMode.Simple && endA >= pos &&\n (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n mode == MapMode.TrackBefore && posA < pos ||\n mode == MapMode.TrackAfter && endA > pos))\n return null;\n if (endA > pos || endA == pos && assoc < 0 && !len)\n return pos == posA || assoc < 0 ? posB : posB + ins;\n posB += ins;\n }\n posA = endA;\n }\n if (pos > posA)\n throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n return posB;\n }\n /**\n Check whether these changes touch a given range. When one of the\n changes entirely covers the range, the string `\"cover\"` is\n returned.\n */\n touchesRange(from, to = from) {\n for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n if (ins >= 0 && pos <= to && end >= from)\n return pos < from && end > to ? \"cover\" : true;\n pos = end;\n }\n return false;\n }\n /**\n @internal\n */\n toString() {\n let result = \"\";\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n }\n return result;\n }\n /**\n Serialize this change desc to a JSON-representable value.\n */\n toJSON() { return this.sections; }\n /**\n Create a change desc from its JSON representation (as produced\n by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n return new ChangeDesc(json);\n }\n /**\n @internal\n */\n static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n constructor(sections, \n /**\n @internal\n */\n inserted) {\n super(sections);\n this.inserted = inserted;\n }\n /**\n Apply the changes to a document, returning the modified\n document.\n */\n apply(doc) {\n if (this.length != doc.length)\n throw new RangeError(\"Applying change set to a document with the wrong length\");\n iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n return doc;\n }\n mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n /**\n Given the document as it existed _before_ the changes, return a\n change set that represents the inverse of this set, which could\n be used to go from the document created by the changes back to\n the document as it existed before the changes.\n */\n invert(doc) {\n let sections = this.sections.slice(), inserted = [];\n for (let i = 0, pos = 0; i < sections.length; i += 2) {\n let len = sections[i], ins = sections[i + 1];\n if (ins >= 0) {\n sections[i] = ins;\n sections[i + 1] = len;\n let index = i >> 1;\n while (inserted.length < index)\n inserted.push(Text.empty);\n inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n }\n pos += len;\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n Combine two subsequent change sets into a single set. `other`\n must start in the document produced by `this`. If `this` goes\n `docA` → `docB` and `other` represents `docB` → `docC`, the\n returned value will represent the change `docA` → `docC`.\n */\n compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n /**\n Given another change set starting in the same document, maps this\n change set over the other, producing a new change set that can be\n applied to the document produced by applying `other`. When\n `before` is `true`, order changes as if `this` comes before\n `other`, otherwise (the default) treat `other` as coming first.\n \n Given two changes `A` and `B`, `A.compose(B.map(A))` and\n `B.compose(A.map(B, true))` will produce the same document. This\n provides a basic form of [operational\n transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n and can be used for collaborative editing.\n */\n map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n /**\n Iterate over the changed ranges in the document, calling `f` for\n each, with the range in the original document (`fromA`-`toA`)\n and the range that replaces it in the new document\n (`fromB`-`toB`).\n \n When `individual` is true, adjacent changes are reported\n separately.\n */\n iterChanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n set.\n */\n get desc() { return ChangeDesc.create(this.sections); }\n /**\n @internal\n */\n filter(ranges) {\n let resultSections = [], resultInserted = [], filteredSections = [];\n let iter = new SectionIter(this);\n done: for (let i = 0, pos = 0;;) {\n let next = i == ranges.length ? 1e9 : ranges[i++];\n while (pos < next || pos == next && iter.len == 0) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, next - pos);\n addSection(filteredSections, len, -1);\n let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n addSection(resultSections, len, ins);\n if (ins > 0)\n addInsert(resultInserted, resultSections, iter.text);\n iter.forward(len);\n pos += len;\n }\n let end = ranges[i++];\n while (pos < end) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, end - pos);\n addSection(resultSections, len, -1);\n addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n iter.forward(len);\n pos += len;\n }\n }\n return { changes: new ChangeSet(resultSections, resultInserted),\n filtered: ChangeDesc.create(filteredSections) };\n }\n /**\n Serialize this change set to a JSON-representable value.\n */\n toJSON() {\n let parts = [];\n for (let i = 0; i < this.sections.length; i += 2) {\n let len = this.sections[i], ins = this.sections[i + 1];\n if (ins < 0)\n parts.push(len);\n else if (ins == 0)\n parts.push([len]);\n else\n parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n }\n return parts;\n }\n /**\n Create a change set for the given changes, for a document of the\n given length, using `lineSep` as line separator.\n */\n static of(changes, length, lineSep) {\n let sections = [], inserted = [], pos = 0;\n let total = null;\n function flush(force = false) {\n if (!force && !sections.length)\n return;\n if (pos < length)\n addSection(sections, length - pos, -1);\n let set = new ChangeSet(sections, inserted);\n total = total ? total.compose(set.map(total)) : set;\n sections = [];\n inserted = [];\n pos = 0;\n }\n function process(spec) {\n if (Array.isArray(spec)) {\n for (let sub of spec)\n process(sub);\n }\n else if (spec instanceof ChangeSet) {\n if (spec.length != length)\n throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n flush();\n total = total ? total.compose(spec.map(total)) : spec;\n }\n else {\n let { from, to = from, insert } = spec;\n if (from > to || from < 0 || to > length)\n throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n let insLen = insText.length;\n if (from == to && insLen == 0)\n return;\n if (from < pos)\n flush();\n if (from > pos)\n addSection(sections, from - pos, -1);\n addSection(sections, to - from, insLen);\n addInsert(inserted, sections, insText);\n pos = to;\n }\n }\n process(changes);\n flush(!total);\n return total;\n }\n /**\n Create an empty changeset of the given length.\n */\n static empty(length) {\n return new ChangeSet(length ? [length, -1] : [], []);\n }\n /**\n Create a changeset from its JSON representation (as produced by\n [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json))\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n let sections = [], inserted = [];\n for (let i = 0; i < json.length; i++) {\n let part = json[i];\n if (typeof part == \"number\") {\n sections.push(part, -1);\n }\n else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n }\n else if (part.length == 1) {\n sections.push(part[0], 0);\n }\n else {\n while (inserted.length < i)\n inserted.push(Text.empty);\n inserted[i] = Text.of(part.slice(1));\n sections.push(part[0], inserted[i].length);\n }\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n @internal\n */\n static createSet(sections, inserted) {\n return new ChangeSet(sections, inserted);\n }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n if (len == 0 && ins <= 0)\n return;\n let last = sections.length - 2;\n if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n sections[last] += len;\n else if (last >= 0 && len == 0 && sections[last] == 0)\n sections[last + 1] += ins;\n else if (forceJoin) {\n sections[last] += len;\n sections[last + 1] += ins;\n }\n else\n sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n if (value.length == 0)\n return;\n let index = (sections.length - 2) >> 1;\n if (index < values.length) {\n values[values.length - 1] = values[values.length - 1].append(value);\n }\n else {\n while (values.length < index)\n values.push(Text.empty);\n values.push(value);\n }\n}\nfunction iterChanges(desc, f, individual) {\n let inserted = desc.inserted;\n for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n let len = desc.sections[i++], ins = desc.sections[i++];\n if (ins < 0) {\n posA += len;\n posB += len;\n }\n else {\n let endA = posA, endB = posB, text = Text.empty;\n for (;;) {\n endA += len;\n endB += ins;\n if (ins && inserted)\n text = text.append(inserted[(i - 2) >> 1]);\n if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n break;\n len = desc.sections[i++];\n ins = desc.sections[i++];\n }\n f(posA, endA, posB, endB, text);\n posA = endA;\n posB = endB;\n }\n }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n // Produce a copy of setA that applies to the document after setB\n // has been applied (assuming both start at the same document).\n let sections = [], insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n // Iterate over both sets in parallel. inserted tracks, for changes\n // in A that have to be processed piece-by-piece, whether their\n // content has been inserted already, and refers to the section\n // index.\n for (let inserted = -1;;) {\n if (a.done && b.len || b.done && a.len) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else if (a.ins == -1 && b.ins == -1) {\n // Move across ranges skipped by both sets.\n let len = Math.min(a.len, b.len);\n addSection(sections, len, -1);\n a.forward(len);\n b.forward(len);\n }\n else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n // If there's a change in B that comes before the next change in\n // A (ordered by start pos, then len, then before flag), skip\n // that (and process any changes in A it covers).\n let len = b.len;\n addSection(sections, b.ins, -1);\n while (len) {\n let piece = Math.min(a.len, len);\n if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n addSection(sections, 0, a.ins);\n if (insert)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n }\n a.forward(piece);\n len -= piece;\n }\n b.next();\n }\n else if (a.ins >= 0) {\n // Process the part of a change in A up to the start of the next\n // non-deletion change in B (if overlapping).\n let len = 0, left = a.len;\n while (left) {\n if (b.ins == -1) {\n let piece = Math.min(left, b.len);\n len += piece;\n left -= piece;\n b.forward(piece);\n }\n else if (b.ins == 0 && b.len < left) {\n left -= b.len;\n b.next();\n }\n else {\n break;\n }\n }\n addSection(sections, len, inserted < a.i ? a.ins : 0);\n if (insert && inserted < a.i)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n a.forward(a.len - left);\n }\n else if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else {\n throw new Error(\"Mismatched change set lengths\");\n }\n }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n let sections = [];\n let insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n for (let open = false;;) {\n if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else if (a.ins == 0) { // Deletion in A\n addSection(sections, a.len, 0, open);\n a.next();\n }\n else if (b.len == 0 && !b.done) { // Insertion in B\n addSection(sections, 0, b.ins, open);\n if (insert)\n addInsert(insert, sections, b.text);\n b.next();\n }\n else if (a.done || b.done) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else {\n let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n if (a.ins == -1) {\n let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n addSection(sections, len, insB, open);\n if (insert && insB)\n addInsert(insert, sections, b.text);\n }\n else if (b.ins == -1) {\n addSection(sections, a.off ? 0 : a.len, len, open);\n if (insert)\n addInsert(insert, sections, a.textBit(len));\n }\n else {\n addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n if (insert && !b.off)\n addInsert(insert, sections, b.text);\n }\n open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n a.forward2(len);\n b.forward(len);\n }\n }\n}\nclass SectionIter {\n constructor(set) {\n this.set = set;\n this.i = 0;\n this.next();\n }\n next() {\n let { sections } = this.set;\n if (this.i < sections.length) {\n this.len = sections[this.i++];\n this.ins = sections[this.i++];\n }\n else {\n this.len = 0;\n this.ins = -2;\n }\n this.off = 0;\n }\n get done() { return this.ins == -2; }\n get len2() { return this.ins < 0 ? this.len : this.ins; }\n get text() {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length ? Text.empty : inserted[index];\n }\n textBit(len) {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length && !len ? Text.empty\n : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n }\n forward(len) {\n if (len == this.len)\n this.next();\n else {\n this.len -= len;\n this.off += len;\n }\n }\n forward2(len) {\n if (this.ins == -1)\n this.forward(len);\n else if (len == this.ins)\n this.next();\n else {\n this.ins -= len;\n this.off += len;\n }\n }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n constructor(\n /**\n The lower boundary of the range.\n */\n from, \n /**\n The upper boundary of the range.\n */\n to, flags) {\n this.from = from;\n this.to = to;\n this.flags = flags;\n }\n /**\n The anchor of the range—the side that doesn't move when you\n extend it.\n */\n get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n /**\n The head of the range, which is moved when the range is\n [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n */\n get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n /**\n True when `anchor` and `head` are at the same position.\n */\n get empty() { return this.from == this.to; }\n /**\n If this is a cursor that is explicitly associated with the\n character on one of its sides, this returns the side. -1 means\n the character before its position, 1 the character after, and 0\n means no association.\n */\n get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n /**\n The bidirectional text level associated with this cursor, if\n any.\n */\n get bidiLevel() {\n let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n return level == 7 ? null : level;\n }\n /**\n The goal column (stored vertical offset) associated with a\n cursor. This is used to preserve the vertical position when\n [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n lines of different length.\n */\n get goalColumn() {\n let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n }\n /**\n Map this range through a change, producing a valid range in the\n updated document.\n */\n map(change, assoc = -1) {\n let from, to;\n if (this.empty) {\n from = to = change.mapPos(this.from, assoc);\n }\n else {\n from = change.mapPos(this.from, 1);\n to = change.mapPos(this.to, -1);\n }\n return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n }\n /**\n Extend this range to cover at least `from` to `to`.\n */\n extend(from, to = from) {\n if (from <= this.anchor && to >= this.anchor)\n return EditorSelection.range(from, to);\n let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n return EditorSelection.range(this.anchor, head);\n }\n /**\n Compare this range to another range.\n */\n eq(other, includeAssoc = false) {\n return this.anchor == other.anchor && this.head == other.head &&\n (!includeAssoc || !this.empty || this.assoc == other.assoc);\n }\n /**\n Return a JSON-serializable object representing the range.\n */\n toJSON() { return { anchor: this.anchor, head: this.head }; }\n /**\n Convert a JSON representation of a range to a `SelectionRange`\n instance.\n */\n static fromJSON(json) {\n if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n return EditorSelection.range(json.anchor, json.head);\n }\n /**\n @internal\n */\n static create(from, to, flags) {\n return new SelectionRange(from, to, flags);\n }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n constructor(\n /**\n The ranges in the selection, sorted by position. Ranges cannot\n overlap (but they may touch, if they aren't empty).\n */\n ranges, \n /**\n The index of the _main_ range in the selection (which is\n usually the range that was added last).\n */\n mainIndex) {\n this.ranges = ranges;\n this.mainIndex = mainIndex;\n }\n /**\n Map a selection through a change. Used to adjust the selection\n position for changes.\n */\n map(change, assoc = -1) {\n if (change.empty)\n return this;\n return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n }\n /**\n Compare this selection to another selection. By default, ranges\n are compared only by position. When `includeAssoc` is true,\n cursor ranges must also have the same\n [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n */\n eq(other, includeAssoc = false) {\n if (this.ranges.length != other.ranges.length ||\n this.mainIndex != other.mainIndex)\n return false;\n for (let i = 0; i < this.ranges.length; i++)\n if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n return false;\n return true;\n }\n /**\n Get the primary selection range. Usually, you should make sure\n your code applies to _all_ ranges, by using methods like\n [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n */\n get main() { return this.ranges[this.mainIndex]; }\n /**\n Make sure the selection only has one range. Returns a selection\n holding only the main range from this selection.\n */\n asSingle() {\n return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n }\n /**\n Extend this selection with an extra range.\n */\n addRange(range, main = true) {\n return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n }\n /**\n Replace a given range with another range, and then normalize the\n selection to merge and sort ranges if necessary.\n */\n replaceRange(range, which = this.mainIndex) {\n let ranges = this.ranges.slice();\n ranges[which] = range;\n return EditorSelection.create(ranges, this.mainIndex);\n }\n /**\n Convert this selection to an object that can be serialized to\n JSON.\n */\n toJSON() {\n return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n }\n /**\n Create a selection from a JSON representation.\n */\n static fromJSON(json) {\n if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n }\n /**\n Create a selection holding a single range.\n */\n static single(anchor, head = anchor) {\n return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n }\n /**\n Sort and merge the given set of ranges, creating a valid\n selection.\n */\n static create(ranges, mainIndex = 0) {\n if (ranges.length == 0)\n throw new RangeError(\"A selection needs at least one range\");\n for (let pos = 0, i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n if (range.empty ? range.from <= pos : range.from < pos)\n return EditorSelection.normalized(ranges.slice(), mainIndex);\n pos = range.to;\n }\n return new EditorSelection(ranges, mainIndex);\n }\n /**\n Create a cursor selection range at the given position. You can\n safely ignore the optional arguments in most situations.\n */\n static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n }\n /**\n Create a selection range.\n */\n static range(anchor, head, goalColumn, bidiLevel) {\n let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n }\n /**\n @internal\n */\n static normalized(ranges, mainIndex = 0) {\n let main = ranges[mainIndex];\n ranges.sort((a, b) => a.from - b.from);\n mainIndex = ranges.indexOf(main);\n for (let i = 1; i < ranges.length; i++) {\n let range = ranges[i], prev = ranges[i - 1];\n if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n let from = prev.from, to = Math.max(range.to, prev.to);\n if (i <= mainIndex)\n mainIndex--;\n ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n }\n }\n return new EditorSelection(ranges, mainIndex);\n }\n}\nfunction checkSelection(selection, docLength) {\n for (let range of selection.ranges)\n if (range.to > docLength)\n throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n constructor(\n /**\n @internal\n */\n combine, \n /**\n @internal\n */\n compareInput, \n /**\n @internal\n */\n compare, isStatic, enables) {\n this.combine = combine;\n this.compareInput = compareInput;\n this.compare = compare;\n this.isStatic = isStatic;\n /**\n @internal\n */\n this.id = nextID++;\n this.default = combine([]);\n this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n }\n /**\n Returns a facet reader for this facet, which can be used to\n [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n */\n get reader() { return this; }\n /**\n Define a new facet.\n */\n static define(config = {}) {\n return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n }\n /**\n Returns an extension that adds the given value to this facet.\n */\n of(value) {\n return new FacetProvider([], this, 0 /* Provider.Static */, value);\n }\n /**\n Create an extension that computes a value for the facet from a\n state. You must take care to declare the parts of the state that\n this value depends on, since your function is only called again\n for a new state when one of those parts changed.\n \n In cases where your value depends only on a single field, you'll\n want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n */\n compute(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n }\n /**\n Create an extension that computes zero or more values for this\n facet from a state.\n */\n computeN(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n }\n from(field, get) {\n if (!get)\n get = x => x;\n return this.compute([field], state => get(state.field(field)));\n }\n}\nfunction sameArray(a, b) {\n return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n constructor(dependencies, facet, type, value) {\n this.dependencies = dependencies;\n this.facet = facet;\n this.type = type;\n this.value = value;\n this.id = nextID++;\n }\n dynamicSlot(addresses) {\n var _a;\n let getter = this.value;\n let compare = this.facet.compareInput;\n let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n let depDoc = false, depSel = false, depAddrs = [];\n for (let dep of this.dependencies) {\n if (dep == \"doc\")\n depDoc = true;\n else if (dep == \"selection\")\n depSel = true;\n else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n depAddrs.push(addresses[dep.id]);\n }\n return {\n create(state) {\n state.values[idx] = getter(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n let newVal = getter(state);\n if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n }\n return 0;\n },\n reconfigure: (state, oldState) => {\n let newVal, oldAddr = oldState.config.address[id];\n if (oldAddr != null) {\n let oldVal = getAddr(oldState, oldAddr);\n if (this.dependencies.every(dep => {\n return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n state.values[idx] = oldVal;\n return 0;\n }\n }\n else {\n newVal = getter(state);\n }\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n}\nfunction compareArray(a, b, compare) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compare(a[i], b[i]))\n return false;\n return true;\n}\nfunction ensureAll(state, addrs) {\n let changed = false;\n for (let addr of addrs)\n if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n changed = true;\n return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n let providerAddrs = providers.map(p => addresses[p.id]);\n let providerTypes = providers.map(p => p.type);\n let dynamic = providerAddrs.filter(p => !(p & 1));\n let idx = addresses[facet.id] >> 1;\n function get(state) {\n let values = [];\n for (let i = 0; i < providerAddrs.length; i++) {\n let value = getAddr(state, providerAddrs[i]);\n if (providerTypes[i] == 2 /* Provider.Multi */)\n for (let val of value)\n values.push(val);\n else\n values.push(value);\n }\n return facet.combine(values);\n }\n return {\n create(state) {\n for (let addr of providerAddrs)\n ensureAddr(state, addr);\n state.values[idx] = get(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if (!ensureAll(state, dynamic))\n return 0;\n let value = get(state);\n if (facet.compare(value, state.values[idx]))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure(state, oldState) {\n let depChanged = ensureAll(state, providerAddrs);\n let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n state.values[idx] = oldValue;\n return 0;\n }\n let value = get(state);\n if (facet.compare(value, oldValue)) {\n state.values[idx] = oldValue;\n return 0;\n }\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n }\n };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n constructor(\n /**\n @internal\n */\n id, createF, updateF, compareF, \n /**\n @internal\n */\n spec) {\n this.id = id;\n this.createF = createF;\n this.updateF = updateF;\n this.compareF = compareF;\n this.spec = spec;\n /**\n @internal\n */\n this.provides = undefined;\n }\n /**\n Define a state field.\n */\n static define(config) {\n let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n if (config.provide)\n field.provides = config.provide(field);\n return field;\n }\n create(state) {\n let init = state.facet(initField).find(i => i.field == this);\n return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n }\n /**\n @internal\n */\n slot(addresses) {\n let idx = addresses[this.id] >> 1;\n return {\n create: (state) => {\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n },\n update: (state, tr) => {\n let oldVal = state.values[idx];\n let value = this.updateF(oldVal, tr);\n if (this.compareF(oldVal, value))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure: (state, oldState) => {\n let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n state.values[idx] = reInit.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n if (oldState.config.address[this.id] != null) {\n state.values[idx] = oldState.field(this);\n return 0;\n }\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n /**\n Returns an extension that enables this field and overrides the\n way it is initialized. Can be useful when you need to provide a\n non-default starting value for the field.\n */\n init(create) {\n return [this, initField.of({ field: this, create })];\n }\n /**\n State field instances can be used as\n [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n given state.\n */\n get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n /**\n The highest precedence level, for extensions that should end up\n near the start of the precedence ordering.\n */\n highest: /*@__PURE__*/prec(Prec_.highest),\n /**\n A higher-than-default precedence, for extensions that should\n come before those with default precedence.\n */\n high: /*@__PURE__*/prec(Prec_.high),\n /**\n The default precedence, which is also used for extensions\n without an explicit precedence.\n */\n default: /*@__PURE__*/prec(Prec_.default),\n /**\n A lower-than-default precedence.\n */\n low: /*@__PURE__*/prec(Prec_.low),\n /**\n The lowest precedence level. Meant for things that should end up\n near the end of the extension order.\n */\n lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n constructor(inner, prec) {\n this.inner = inner;\n this.prec = prec;\n }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n /**\n Create an instance of this compartment to add to your [state\n configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n */\n of(ext) { return new CompartmentInstance(this, ext); }\n /**\n Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n reconfigures this compartment.\n */\n reconfigure(content) {\n return Compartment.reconfigure.of({ compartment: this, extension: content });\n }\n /**\n Get the current content of the compartment in the state, or\n `undefined` if it isn't present.\n */\n get(state) {\n return state.config.compartments.get(this);\n }\n}\nclass CompartmentInstance {\n constructor(compartment, inner) {\n this.compartment = compartment;\n this.inner = inner;\n }\n}\nclass Configuration {\n constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n this.base = base;\n this.compartments = compartments;\n this.dynamicSlots = dynamicSlots;\n this.address = address;\n this.staticValues = staticValues;\n this.facets = facets;\n this.statusTemplate = [];\n while (this.statusTemplate.length < dynamicSlots.length)\n this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n }\n staticFacet(facet) {\n let addr = this.address[facet.id];\n return addr == null ? facet.default : this.staticValues[addr >> 1];\n }\n static resolve(base, compartments, oldState) {\n let fields = [];\n let facets = Object.create(null);\n let newCompartments = new Map();\n for (let ext of flatten(base, compartments, newCompartments)) {\n if (ext instanceof StateField)\n fields.push(ext);\n else\n (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n }\n let address = Object.create(null);\n let staticValues = [];\n let dynamicSlots = [];\n for (let field of fields) {\n address[field.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => field.slot(a));\n }\n let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n for (let id in facets) {\n let providers = facets[id], facet = providers[0].facet;\n let oldProviders = oldFacets && oldFacets[id] || [];\n if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n address[facet.id] = (staticValues.length << 1) | 1;\n if (sameArray(oldProviders, providers)) {\n staticValues.push(oldState.facet(facet));\n }\n else {\n let value = facet.combine(providers.map(p => p.value));\n staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n }\n }\n else {\n for (let p of providers) {\n if (p.type == 0 /* Provider.Static */) {\n address[p.id] = (staticValues.length << 1) | 1;\n staticValues.push(p.value);\n }\n else {\n address[p.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => p.dynamicSlot(a));\n }\n }\n address[facet.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n }\n }\n let dynamic = dynamicSlots.map(f => f(address));\n return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n }\n}\nfunction flatten(extension, compartments, newCompartments) {\n let result = [[], [], [], [], []];\n let seen = new Map();\n function inner(ext, prec) {\n let known = seen.get(ext);\n if (known != null) {\n if (known <= prec)\n return;\n let found = result[known].indexOf(ext);\n if (found > -1)\n result[known].splice(found, 1);\n if (ext instanceof CompartmentInstance)\n newCompartments.delete(ext.compartment);\n }\n seen.set(ext, prec);\n if (Array.isArray(ext)) {\n for (let e of ext)\n inner(e, prec);\n }\n else if (ext instanceof CompartmentInstance) {\n if (newCompartments.has(ext.compartment))\n throw new RangeError(`Duplicate use of compartment in extensions`);\n let content = compartments.get(ext.compartment) || ext.inner;\n newCompartments.set(ext.compartment, content);\n inner(content, prec);\n }\n else if (ext instanceof PrecExtension) {\n inner(ext.inner, ext.prec);\n }\n else if (ext instanceof StateField) {\n result[prec].push(ext);\n if (ext.provides)\n inner(ext.provides, prec);\n }\n else if (ext instanceof FacetProvider) {\n result[prec].push(ext);\n if (ext.facet.extensions)\n inner(ext.facet.extensions, Prec_.default);\n }\n else {\n let content = ext.extension;\n if (!content)\n throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n inner(content, prec);\n }\n }\n inner(extension, Prec_.default);\n return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n if (addr & 1)\n return 2 /* SlotStatus.Computed */;\n let idx = addr >> 1;\n let status = state.status[idx];\n if (status == 4 /* SlotStatus.Computing */)\n throw new Error(\"Cyclic dependency between fields and/or facets\");\n if (status & 2 /* SlotStatus.Computed */)\n return status;\n state.status[idx] = 4 /* SlotStatus.Computing */;\n let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n combine: values => values.some(v => v),\n static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : undefined,\n static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n /**\n @internal\n */\n constructor(\n /**\n The annotation type.\n */\n type, \n /**\n The value of this annotation.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Define a new type of annotation.\n */\n static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n /**\n Create an instance of this annotation.\n */\n of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n /**\n @internal\n */\n constructor(\n // The `any` types in these function types are there to work\n // around TypeScript issue #37631, where the type guard on\n // `StateEffect.is` mysteriously stops working when these properly\n // have type `Value`.\n /**\n @internal\n */\n map) {\n this.map = map;\n }\n /**\n Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n type.\n */\n of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n type, \n /**\n The value of this effect.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Map this effect through a position mapping. Will return\n `undefined` when that ends up deleting the effect.\n */\n map(mapping) {\n let mapped = this.type.map(this.value, mapping);\n return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n }\n /**\n Tells you whether this effect object is of a given\n [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n */\n is(type) { return this.type == type; }\n /**\n Define a new effect type. The type parameter indicates the type\n of values that his effect holds. It should be a type that\n doesn't include `undefined`, since that is used in\n [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n removed.\n */\n static define(spec = {}) {\n return new StateEffectType(spec.map || (v => v));\n }\n /**\n Map an array of effects through a change set.\n */\n static mapEffects(effects, mapping) {\n if (!effects.length)\n return effects;\n let result = [];\n for (let effect of effects) {\n let mapped = effect.map(mapping);\n if (mapped)\n result.push(mapped);\n }\n return result;\n }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n constructor(\n /**\n The state from which the transaction starts.\n */\n startState, \n /**\n The document changes made by this transaction.\n */\n changes, \n /**\n The selection set by this transaction, or undefined if it\n doesn't explicitly set a selection.\n */\n selection, \n /**\n The effects added to the transaction.\n */\n effects, \n /**\n @internal\n */\n annotations, \n /**\n Whether the selection should be scrolled into view after this\n transaction is dispatched.\n */\n scrollIntoView) {\n this.startState = startState;\n this.changes = changes;\n this.selection = selection;\n this.effects = effects;\n this.annotations = annotations;\n this.scrollIntoView = scrollIntoView;\n /**\n @internal\n */\n this._doc = null;\n /**\n @internal\n */\n this._state = null;\n if (selection)\n checkSelection(selection, changes.newLength);\n if (!annotations.some((a) => a.type == Transaction.time))\n this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n }\n /**\n @internal\n */\n static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n }\n /**\n The new document produced by the transaction. Contrary to\n [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n force the entire new state to be computed right away, so it is\n recommended that [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n when they need to look at the new document.\n */\n get newDoc() {\n return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n }\n /**\n The new selection produced by the transaction. If\n [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n current selection through the changes made by the transaction.\n */\n get newSelection() {\n return this.selection || this.startState.selection.map(this.changes);\n }\n /**\n The new state created by the transaction. Computed on demand\n (but retained for subsequent access), so it is recommended not to\n access it in [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n */\n get state() {\n if (!this._state)\n this.startState.applyTransaction(this);\n return this._state;\n }\n /**\n Get the value of the given annotation type, if any.\n */\n annotation(type) {\n for (let ann of this.annotations)\n if (ann.type == type)\n return ann.value;\n return undefined;\n }\n /**\n Indicates whether the transaction changed the document.\n */\n get docChanged() { return !this.changes.empty; }\n /**\n Indicates whether this transaction reconfigures the state\n (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n with a top-level configuration\n [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n */\n get reconfigured() { return this.startState.config != this.state.config; }\n /**\n Returns true if the transaction has a [user\n event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n or more specific than `event`. For example, if the transaction\n has `\"select.pointer\"` as user event, `\"select\"` and\n `\"select.pointer\"` will match it.\n */\n isUserEvent(event) {\n let e = this.annotation(Transaction.userEvent);\n return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n - `\"input.type\"` for typed input\n - `\"input.type.compose\"` for composition\n - `\"input.paste\"` for pasted input\n - `\"input.drop\"` when adding content with drag-and-drop\n - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n - `\"delete.selection\"` when deleting the selection\n - `\"delete.forward\"` when deleting forward from the selection\n - `\"delete.backward\"` when deleting backward from the selection\n - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n let result = [];\n for (let iA = 0, iB = 0;;) {\n let from, to;\n if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n from = a[iA++];\n to = a[iA++];\n }\n else if (iB < b.length) {\n from = b[iB++];\n to = b[iB++];\n }\n else\n return result;\n if (!result.length || result[result.length - 1] < from)\n result.push(from, to);\n else if (result[result.length - 1] < to)\n result[result.length - 1] = to;\n }\n}\nfunction mergeTransaction(a, b, sequential) {\n var _a;\n let mapForA, mapForB, changes;\n if (sequential) {\n mapForA = b.changes;\n mapForB = ChangeSet.empty(b.changes.length);\n changes = a.changes.compose(b.changes);\n }\n else {\n mapForA = b.changes.map(a.changes);\n mapForB = a.changes.mapDesc(b.changes, true);\n changes = a.changes.compose(mapForA);\n }\n return {\n changes,\n selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n scrollIntoView: a.scrollIntoView || b.scrollIntoView\n };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n let sel = spec.selection, annotations = asArray(spec.annotations);\n if (spec.userEvent)\n annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n return {\n changes: spec.changes instanceof ChangeSet ? spec.changes\n : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n effects: asArray(spec.effects),\n annotations,\n scrollIntoView: !!spec.scrollIntoView\n };\n}\nfunction resolveTransaction(state, specs, filter) {\n let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n if (specs.length && specs[0].filter === false)\n filter = false;\n for (let i = 1; i < specs.length; i++) {\n if (specs[i].filter === false)\n filter = false;\n let seq = !!specs[i].sequential;\n s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n }\n let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n let state = tr.startState;\n // Change filters\n let result = true;\n for (let filter of state.facet(changeFilter)) {\n let value = filter(tr);\n if (value === false) {\n result = false;\n break;\n }\n if (Array.isArray(value))\n result = result === true ? value : joinRanges(result, value);\n }\n if (result !== true) {\n let changes, back;\n if (result === false) {\n back = tr.changes.invertedDesc;\n changes = ChangeSet.empty(state.doc.length);\n }\n else {\n let filtered = tr.changes.filter(result);\n changes = filtered.changes;\n back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n }\n tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n }\n // Transaction filters\n let filters = state.facet(transactionFilter);\n for (let i = filters.length - 1; i >= 0; i--) {\n let filtered = filters[i](tr);\n if (filtered instanceof Transaction)\n tr = filtered;\n else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n tr = filtered[0];\n else\n tr = resolveTransaction(state, asArray(filtered), false);\n }\n return tr;\n}\nfunction extendTransaction(tr) {\n let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n for (let i = extenders.length - 1; i >= 0; i--) {\n let extension = extenders[i](tr);\n if (extension && Object.keys(extension).length)\n spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n }\n return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n /**\n Word characters.\n */\n CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n /**\n Whitespace.\n */\n CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n /**\n Anything else.\n */\n CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n if (wordChar)\n return wordChar.test(str);\n for (let i = 0; i < str.length; i++) {\n let ch = str[i];\n if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n return true;\n }\n return false;\n}\nfunction makeCategorizer(wordChars) {\n return (char) => {\n if (!/\\S/.test(char))\n return CharCategory.Space;\n if (hasWordChar(char))\n return CharCategory.Word;\n for (let i = 0; i < wordChars.length; i++)\n if (char.indexOf(wordChars[i]) > -1)\n return CharCategory.Word;\n return CharCategory.Other;\n };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n constructor(\n /**\n @internal\n */\n config, \n /**\n The current document.\n */\n doc, \n /**\n The current selection.\n */\n selection, \n /**\n @internal\n */\n values, computeSlot, tr) {\n this.config = config;\n this.doc = doc;\n this.selection = selection;\n this.values = values;\n this.status = config.statusTemplate.slice();\n this.computeSlot = computeSlot;\n // Fill in the computed state immediately, so that further queries\n // for it made during the update return this state\n if (tr)\n tr._state = this;\n for (let i = 0; i < this.config.dynamicSlots.length; i++)\n ensureAddr(this, i << 1);\n this.computeSlot = null;\n }\n field(field, require = true) {\n let addr = this.config.address[field.id];\n if (addr == null) {\n if (require)\n throw new RangeError(\"Field is not present in this state\");\n return undefined;\n }\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n can be passed. Unless\n [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n are assumed to start in the _current_ document (not the document\n produced by previous specs), and its\n [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n to the document created by its _own_ changes. The resulting\n transaction contains the combined effect of all the different\n specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n specs take precedence over earlier ones.\n */\n update(...specs) {\n return resolveTransaction(this, specs, true);\n }\n /**\n @internal\n */\n applyTransaction(tr) {\n let conf = this.config, { base, compartments } = conf;\n for (let effect of tr.effects) {\n if (effect.is(Compartment.reconfigure)) {\n if (conf) {\n compartments = new Map;\n conf.compartments.forEach((val, key) => compartments.set(key, val));\n conf = null;\n }\n compartments.set(effect.value.compartment, effect.value.extension);\n }\n else if (effect.is(StateEffect.reconfigure)) {\n conf = null;\n base = effect.value;\n }\n else if (effect.is(StateEffect.appendConfig)) {\n conf = null;\n base = asArray(base).concat(effect.value);\n }\n }\n let startValues;\n if (!conf) {\n conf = Configuration.resolve(base, compartments, this);\n let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n startValues = intermediateState.values;\n }\n else {\n startValues = tr.startState.values.slice();\n }\n let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n }\n /**\n Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n replaces every selection range with the given content.\n */\n replaceSelection(text) {\n if (typeof text == \"string\")\n text = this.toText(text);\n return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n range: EditorSelection.cursor(range.from + text.length) }));\n }\n /**\n Create a set of changes and a new selection by running the given\n function for each range in the active selection. The function\n can return an optional set of changes (in the coordinate space\n of the start document), plus an updated range (in the coordinate\n space of the document produced by the call's own changes). This\n method will merge all the changes and ranges into a single\n changeset and selection, and return it as a [transaction\n spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n */\n changeByRange(f) {\n let sel = this.selection;\n let result1 = f(sel.ranges[0]);\n let changes = this.changes(result1.changes), ranges = [result1.range];\n let effects = asArray(result1.effects);\n for (let i = 1; i < sel.ranges.length; i++) {\n let result = f(sel.ranges[i]);\n let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n for (let j = 0; j < i; j++)\n ranges[j] = ranges[j].map(newMapped);\n let mapBy = changes.mapDesc(newChanges, true);\n ranges.push(result.range.map(mapBy));\n changes = changes.compose(newMapped);\n effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n }\n return {\n changes,\n selection: EditorSelection.create(ranges, sel.mainIndex),\n effects\n };\n }\n /**\n Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n description, taking the state's document length and line\n separator into account.\n */\n changes(spec = []) {\n if (spec instanceof ChangeSet)\n return spec;\n return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n }\n /**\n Using the state's [line\n separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n */\n toText(string) {\n return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n }\n /**\n Return the given range of the document as a string.\n */\n sliceDoc(from = 0, to = this.doc.length) {\n return this.doc.sliceString(from, to, this.lineBreak);\n }\n /**\n Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n */\n facet(facet) {\n let addr = this.config.address[facet.id];\n if (addr == null)\n return facet.default;\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Convert this state to a JSON-serializable object. When custom\n fields should be serialized, you can pass them in as an object\n mapping property names (in the resulting object, which should\n not use `doc` or `selection`) to fields.\n */\n toJSON(fields) {\n let result = {\n doc: this.sliceDoc(),\n selection: this.selection.toJSON()\n };\n if (fields)\n for (let prop in fields) {\n let value = fields[prop];\n if (value instanceof StateField && this.config.address[value.id] != null)\n result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n }\n return result;\n }\n /**\n Deserialize a state from its JSON representation. When custom\n fields should be deserialized, pass the same object you passed\n to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n third argument.\n */\n static fromJSON(json, config = {}, fields) {\n if (!json || typeof json.doc != \"string\")\n throw new RangeError(\"Invalid JSON representation for EditorState\");\n let fieldInit = [];\n if (fields)\n for (let prop in fields) {\n if (Object.prototype.hasOwnProperty.call(json, prop)) {\n let field = fields[prop], value = json[prop];\n fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n }\n }\n return EditorState.create({\n doc: json.doc,\n selection: EditorSelection.fromJSON(json.selection),\n extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n });\n }\n /**\n Create a new state. You'll usually only need this when\n initializing an editor—updated states are created by applying\n transactions.\n */\n static create(config = {}) {\n let configuration = Configuration.resolve(config.extensions || [], new Map);\n let doc = config.doc instanceof Text ? config.doc\n : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n let selection = !config.selection ? EditorSelection.single(0)\n : config.selection instanceof EditorSelection ? config.selection\n : EditorSelection.single(config.selection.anchor, config.selection.head);\n checkSelection(selection, doc.length);\n if (!configuration.staticFacet(allowMultipleSelections))\n selection = selection.asSingle();\n return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n }\n /**\n The size (in columns) of a tab in the document, determined by\n the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n */\n get tabSize() { return this.facet(EditorState.tabSize); }\n /**\n Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n string for this state.\n */\n get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n /**\n Returns true when the editor is\n [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n */\n get readOnly() { return this.facet(readOnly); }\n /**\n Look up a translation for the given phrase (via the\n [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n original string if no translation is found.\n \n If additional arguments are passed, they will be inserted in\n place of markers like `$1` (for the first value) and `$2`, etc.\n A single `$` is equivalent to `$1`, and `$$` will produce a\n literal dollar sign.\n */\n phrase(phrase, ...insert) {\n for (let map of this.facet(EditorState.phrases))\n if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n phrase = map[phrase];\n break;\n }\n if (insert.length)\n phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n if (i == \"$\")\n return \"$\";\n let n = +(i || 1);\n return !n || n > insert.length ? m : insert[n - 1];\n });\n return phrase;\n }\n /**\n Find the values for a given language data field, provided by the\n the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n \n Examples of language data fields are...\n \n - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n comment syntax.\n - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n for providing language-specific completion sources.\n - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n characters that should be considered part of words in this\n language.\n - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n bracket closing behavior.\n */\n languageDataAt(name, pos, side = -1) {\n let values = [];\n for (let provider of this.facet(languageData)) {\n for (let result of provider(this, pos, side)) {\n if (Object.prototype.hasOwnProperty.call(result, name))\n values.push(result[name]);\n }\n }\n return values;\n }\n /**\n Return a function that can categorize strings (expected to\n represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n into one of:\n \n - Word (contains an alphanumeric character or a character\n explicitly listed in the local language's `\"wordChars\"`\n language data, which should be a string)\n - Space (contains only whitespace)\n - Other (anything else)\n */\n charCategorizer(at) {\n return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n }\n /**\n Find the word at the given position, meaning the range\n containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n around it. If no word characters are adjacent to the position,\n this returns null.\n */\n wordAt(pos) {\n let { text, from, length } = this.doc.lineAt(pos);\n let cat = this.charCategorizer(pos);\n let start = pos - from, end = pos - from;\n while (start > 0) {\n let prev = findClusterBreak(text, start, false);\n if (cat(text.slice(prev, start)) != CharCategory.Word)\n break;\n start = prev;\n }\n while (end < length) {\n let next = findClusterBreak(text, end);\n if (cat(text.slice(end, next)) != CharCategory.Word)\n break;\n end = next;\n }\n return start == end ? null : EditorSelection.range(start + from, end + from);\n }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n compare(a, b) {\n let kA = Object.keys(a), kB = Object.keys(b);\n return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n let result = {};\n for (let config of configs)\n for (let key of Object.keys(config)) {\n let value = config[key], current = result[key];\n if (current === undefined)\n result[key] = value;\n else if (current === value || value === undefined) ; // No conflict\n else if (Object.hasOwnProperty.call(combine, key))\n result[key] = combine[key](current, value);\n else\n throw new Error(\"Config merge conflict for field \" + key);\n }\n for (let key in defaults)\n if (result[key] === undefined)\n result[key] = defaults[key];\n return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n /**\n Compare this value with another value. Used when comparing\n rangesets. The default implementation compares by identity.\n Unless you are only creating a fixed number of unique instances\n of your value type, it is a good idea to implement this\n properly.\n */\n eq(other) { return this == other; }\n /**\n Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n */\n range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n constructor(\n /**\n The range's start position.\n */\n from, \n /**\n Its end position.\n */\n to, \n /**\n The value associated with this range.\n */\n value) {\n this.from = from;\n this.to = to;\n this.value = value;\n }\n /**\n @internal\n */\n static create(from, to, value) {\n return new Range(from, to, value);\n }\n}\nfunction cmpRange(a, b) {\n return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n constructor(from, to, value, \n // Chunks are marked with the largest point that occurs\n // in them (or -1 for no points), so that scans that are\n // only interested in points (such as the\n // heightmap-related logic) can skip range-only chunks.\n maxPoint) {\n this.from = from;\n this.to = to;\n this.value = value;\n this.maxPoint = maxPoint;\n }\n get length() { return this.to[this.to.length - 1]; }\n // Find the index of the given position and side. Use the ranges'\n // `from` pos when `end == false`, `to` when `end == true`.\n findIndex(pos, side, end, startAt = 0) {\n let arr = end ? this.to : this.from;\n for (let lo = startAt, hi = arr.length;;) {\n if (lo == hi)\n return lo;\n let mid = (lo + hi) >> 1;\n let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n if (mid == lo)\n return diff >= 0 ? lo : hi;\n if (diff >= 0)\n hi = mid;\n else\n lo = mid + 1;\n }\n }\n between(offset, from, to, f) {\n for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n return false;\n }\n map(offset, changes) {\n let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n for (let i = 0; i < this.value.length; i++) {\n let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n if (curFrom == curTo) {\n let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n if (mapped == null)\n continue;\n newFrom = newTo = mapped;\n if (val.startSide != val.endSide) {\n newTo = changes.mapPos(curFrom, val.endSide);\n if (newTo < newFrom)\n continue;\n }\n }\n else {\n newFrom = changes.mapPos(curFrom, val.startSide);\n newTo = changes.mapPos(curTo, val.endSide);\n if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n continue;\n }\n if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n continue;\n if (newPos < 0)\n newPos = newFrom;\n if (val.point)\n maxPoint = Math.max(maxPoint, newTo - newFrom);\n value.push(val);\n from.push(newFrom - newPos);\n to.push(newTo - newPos);\n }\n return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n constructor(\n /**\n @internal\n */\n chunkPos, \n /**\n @internal\n */\n chunk, \n /**\n @internal\n */\n nextLayer, \n /**\n @internal\n */\n maxPoint) {\n this.chunkPos = chunkPos;\n this.chunk = chunk;\n this.nextLayer = nextLayer;\n this.maxPoint = maxPoint;\n }\n /**\n @internal\n */\n static create(chunkPos, chunk, nextLayer, maxPoint) {\n return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n }\n /**\n @internal\n */\n get length() {\n let last = this.chunk.length - 1;\n return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n }\n /**\n The number of ranges in the set.\n */\n get size() {\n if (this.isEmpty)\n return 0;\n let size = this.nextLayer.size;\n for (let chunk of this.chunk)\n size += chunk.value.length;\n return size;\n }\n /**\n @internal\n */\n chunkEnd(index) {\n return this.chunkPos[index] + this.chunk[index].length;\n }\n /**\n Update the range set, optionally adding new ranges or filtering\n out existing ones.\n \n (Note: The type parameter is just there as a kludge to work\n around TypeScript variance issues that prevented `RangeSet`\n from being a subtype of `RangeSet` when `X` is a subtype of\n `Y`.)\n */\n update(updateSpec) {\n let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n let filter = updateSpec.filter;\n if (add.length == 0 && !filter)\n return this;\n if (sort)\n add = add.slice().sort(cmpRange);\n if (this.isEmpty)\n return add.length ? RangeSet.of(add) : this;\n let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n let builder = new RangeSetBuilder();\n while (cur.value || i < add.length) {\n if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n let range = add[i++];\n if (!builder.addInner(range.from, range.to, range.value))\n spill.push(range);\n }\n else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n cur.nextChunk();\n }\n else {\n if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n if (!builder.addInner(cur.from, cur.to, cur.value))\n spill.push(Range.create(cur.from, cur.to, cur.value));\n }\n cur.next();\n }\n }\n return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n }\n /**\n Map this range set through a set of changes, return the new set.\n */\n map(changes) {\n if (changes.empty || this.isEmpty)\n return this;\n let chunks = [], chunkPos = [], maxPoint = -1;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n let touch = changes.touchesRange(start, start + chunk.length);\n if (touch === false) {\n maxPoint = Math.max(maxPoint, chunk.maxPoint);\n chunks.push(chunk);\n chunkPos.push(changes.mapPos(start));\n }\n else if (touch === true) {\n let { mapped, pos } = chunk.map(start, changes);\n if (mapped) {\n maxPoint = Math.max(maxPoint, mapped.maxPoint);\n chunks.push(mapped);\n chunkPos.push(pos);\n }\n }\n }\n let next = this.nextLayer.map(changes);\n return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n }\n /**\n Iterate over the ranges that touch the region `from` to `to`,\n calling `f` for each. There is no guarantee that the ranges will\n be reported in any specific order. When the callback returns\n `false`, iteration stops.\n */\n between(from, to, f) {\n if (this.isEmpty)\n return;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n if (to >= start && from <= start + chunk.length &&\n chunk.between(start, from - start, to - start, f) === false)\n return;\n }\n this.nextLayer.between(from, to, f);\n }\n /**\n Iterate over the ranges in this set, in order, including all\n ranges that end at or after `from`.\n */\n iter(from = 0) {\n return HeapCursor.from([this]).goto(from);\n }\n /**\n @internal\n */\n get isEmpty() { return this.nextLayer == this; }\n /**\n Iterate over the ranges in a collection of sets, in order,\n starting from `from`.\n */\n static iter(sets, from = 0) {\n return HeapCursor.from(sets).goto(from);\n }\n /**\n Iterate over two groups of sets, calling methods on `comparator`\n to notify it of possible differences.\n */\n static compare(oldSets, newSets, \n /**\n This indicates how the underlying data changed between these\n ranges, and is needed to synchronize the iteration.\n */\n textDiff, comparator, \n /**\n Can be used to ignore all non-point ranges, and points below\n the given size. When -1, all ranges are compared.\n */\n minPointSize = -1) {\n let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let sharedChunks = findSharedChunks(a, b, textDiff);\n let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n if (textDiff.empty && textDiff.length == 0)\n compare(sideA, 0, sideB, 0, 0, comparator);\n }\n /**\n Compare the contents of two groups of range sets, returning true\n if they are equivalent in the given range.\n */\n static eq(oldSets, newSets, from = 0, to) {\n if (to == null)\n to = 1000000000 /* C.Far */ - 1;\n let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n if (a.length != b.length)\n return false;\n if (!a.length)\n return true;\n let sharedChunks = findSharedChunks(a, b);\n let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n for (;;) {\n if (sideA.to != sideB.to ||\n !sameValues(sideA.active, sideB.active) ||\n sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n return false;\n if (sideA.to > to)\n return true;\n sideA.next();\n sideB.next();\n }\n }\n /**\n Iterate over a group of range sets at the same time, notifying\n the iterator about the ranges covering every given piece of\n content. Returns the open count (see\n [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n of the iteration.\n */\n static spans(sets, from, to, iterator, \n /**\n When given and greater than -1, only points of at least this\n size are taken into account.\n */\n minPointSize = -1) {\n let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n let openRanges = cursor.openStart;\n for (;;) {\n let curTo = Math.min(cursor.to, to);\n if (cursor.point) {\n let active = cursor.activeForPoint(cursor.to);\n let openCount = cursor.pointFrom < from ? active.length + 1\n : cursor.point.startSide < 0 ? active.length\n : Math.min(active.length, openRanges);\n iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n openRanges = Math.min(cursor.openEnd(curTo), active.length);\n }\n else if (curTo > pos) {\n iterator.span(pos, curTo, cursor.active, openRanges);\n openRanges = cursor.openEnd(curTo);\n }\n if (cursor.to > to)\n return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n pos = cursor.to;\n cursor.next();\n }\n }\n /**\n Create a range set for the given range or array of ranges. By\n default, this expects the ranges to be _sorted_ (by start\n position and, if two start at the same position,\n `value.startSide`). You can pass `true` as second argument to\n cause the method to sort them.\n */\n static of(ranges, sort = false) {\n let build = new RangeSetBuilder();\n for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n build.add(range.from, range.to, range.value);\n return build.finish();\n }\n /**\n Join an array of range sets into a single set.\n */\n static join(sets) {\n if (!sets.length)\n return RangeSet.empty;\n let result = sets[sets.length - 1];\n for (let i = sets.length - 2; i >= 0; i--) {\n for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n }\n return result;\n }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n if (ranges.length > 1)\n for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n let cur = ranges[i];\n if (cmpRange(prev, cur) > 0)\n return ranges.slice().sort(cmpRange);\n prev = cur;\n }\n return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n finishChunk(newArrays) {\n this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n this.chunkPos.push(this.chunkStart);\n this.chunkStart = -1;\n this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n this.maxPoint = -1;\n if (newArrays) {\n this.from = [];\n this.to = [];\n this.value = [];\n }\n }\n /**\n Create an empty builder.\n */\n constructor() {\n this.chunks = [];\n this.chunkPos = [];\n this.chunkStart = -1;\n this.last = null;\n this.lastFrom = -1000000000 /* C.Far */;\n this.lastTo = -1000000000 /* C.Far */;\n this.from = [];\n this.to = [];\n this.value = [];\n this.maxPoint = -1;\n this.setMaxPoint = -1;\n this.nextLayer = null;\n }\n /**\n Add a range. Ranges should be added in sorted (by `from` and\n `value.startSide`) order.\n */\n add(from, to, value) {\n if (!this.addInner(from, to, value))\n (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n }\n /**\n @internal\n */\n addInner(from, to, value) {\n let diff = from - this.lastTo || value.startSide - this.last.endSide;\n if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n if (diff < 0)\n return false;\n if (this.from.length == 250 /* C.ChunkSize */)\n this.finishChunk(true);\n if (this.chunkStart < 0)\n this.chunkStart = from;\n this.from.push(from - this.chunkStart);\n this.to.push(to - this.chunkStart);\n this.last = value;\n this.lastFrom = from;\n this.lastTo = to;\n this.value.push(value);\n if (value.point)\n this.maxPoint = Math.max(this.maxPoint, to - from);\n return true;\n }\n /**\n @internal\n */\n addChunk(from, chunk) {\n if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n return false;\n if (this.from.length)\n this.finishChunk(true);\n this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n this.chunks.push(chunk);\n this.chunkPos.push(from);\n let last = chunk.value.length - 1;\n this.last = chunk.value[last];\n this.lastFrom = chunk.from[last] + from;\n this.lastTo = chunk.to[last] + from;\n return true;\n }\n /**\n Finish the range set. Returns the new set. The builder can't be\n used anymore after this has been called.\n */\n finish() { return this.finishInner(RangeSet.empty); }\n /**\n @internal\n */\n finishInner(next) {\n if (this.from.length)\n this.finishChunk(false);\n if (this.chunks.length == 0)\n return next;\n let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n this.from = null; // Make sure further `add` calls produce errors\n return result;\n }\n}\nfunction findSharedChunks(a, b, textDiff) {\n let inA = new Map();\n for (let set of a)\n for (let i = 0; i < set.chunk.length; i++)\n if (set.chunk[i].maxPoint <= 0)\n inA.set(set.chunk[i], set.chunkPos[i]);\n let shared = new Set();\n for (let set of b)\n for (let i = 0; i < set.chunk.length; i++) {\n let known = inA.get(set.chunk[i]);\n if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n shared.add(set.chunk[i]);\n }\n return shared;\n}\nclass LayerCursor {\n constructor(layer, skip, minPoint, rank = 0) {\n this.layer = layer;\n this.skip = skip;\n this.minPoint = minPoint;\n this.rank = rank;\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n get endSide() { return this.value ? this.value.endSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.chunkIndex = this.rangeIndex = 0;\n this.gotoInner(pos, side, false);\n return this;\n }\n gotoInner(pos, side, forward) {\n while (this.chunkIndex < this.layer.chunk.length) {\n let next = this.layer.chunk[this.chunkIndex];\n if (!(this.skip && this.skip.has(next) ||\n this.layer.chunkEnd(this.chunkIndex) < pos ||\n next.maxPoint < this.minPoint))\n break;\n this.chunkIndex++;\n forward = false;\n }\n if (this.chunkIndex < this.layer.chunk.length) {\n let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n if (!forward || this.rangeIndex < rangeIndex)\n this.setRangeIndex(rangeIndex);\n }\n this.next();\n }\n forward(pos, side) {\n if ((this.to - pos || this.endSide - side) < 0)\n this.gotoInner(pos, side, true);\n }\n next() {\n for (;;) {\n if (this.chunkIndex == this.layer.chunk.length) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n break;\n }\n else {\n let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n let from = chunkPos + chunk.from[this.rangeIndex];\n this.from = from;\n this.to = chunkPos + chunk.to[this.rangeIndex];\n this.value = chunk.value[this.rangeIndex];\n this.setRangeIndex(this.rangeIndex + 1);\n if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n break;\n }\n }\n }\n setRangeIndex(index) {\n if (index == this.layer.chunk[this.chunkIndex].value.length) {\n this.chunkIndex++;\n if (this.skip) {\n while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n this.chunkIndex++;\n }\n this.rangeIndex = 0;\n }\n else {\n this.rangeIndex = index;\n }\n }\n nextChunk() {\n this.chunkIndex++;\n this.rangeIndex = 0;\n this.next();\n }\n compare(other) {\n return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n this.to - other.to || this.endSide - other.endSide;\n }\n}\nclass HeapCursor {\n constructor(heap) {\n this.heap = heap;\n }\n static from(sets, skip = null, minPoint = -1) {\n let heap = [];\n for (let i = 0; i < sets.length; i++) {\n for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n if (cur.maxPoint >= minPoint)\n heap.push(new LayerCursor(cur, skip, minPoint, i));\n }\n }\n return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n for (let cur of this.heap)\n cur.goto(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n this.next();\n return this;\n }\n forward(pos, side) {\n for (let cur of this.heap)\n cur.forward(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n if ((this.to - pos || this.value.endSide - side) < 0)\n this.next();\n }\n next() {\n if (this.heap.length == 0) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n this.rank = -1;\n }\n else {\n let top = this.heap[0];\n this.from = top.from;\n this.to = top.to;\n this.value = top.value;\n this.rank = top.rank;\n if (top.value)\n top.next();\n heapBubble(this.heap, 0);\n }\n }\n}\nfunction heapBubble(heap, index) {\n for (let cur = heap[index];;) {\n let childIndex = (index << 1) + 1;\n if (childIndex >= heap.length)\n break;\n let child = heap[childIndex];\n if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n child = heap[childIndex + 1];\n childIndex++;\n }\n if (cur.compare(child) < 0)\n break;\n heap[childIndex] = cur;\n heap[index] = child;\n index = childIndex;\n }\n}\nclass SpanCursor {\n constructor(sets, skip, minPoint) {\n this.minPoint = minPoint;\n this.active = [];\n this.activeTo = [];\n this.activeRank = [];\n this.minActive = -1;\n // A currently active point range, if any\n this.point = null;\n this.pointFrom = 0;\n this.pointRank = 0;\n this.to = -1000000000 /* C.Far */;\n this.endSide = 0;\n // The amount of open active ranges at the start of the iterator.\n // Not including points.\n this.openStart = -1;\n this.cursor = HeapCursor.from(sets, skip, minPoint);\n }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.cursor.goto(pos, side);\n this.active.length = this.activeTo.length = this.activeRank.length = 0;\n this.minActive = -1;\n this.to = pos;\n this.endSide = side;\n this.openStart = -1;\n this.next();\n return this;\n }\n forward(pos, side) {\n while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n this.removeActive(this.minActive);\n this.cursor.forward(pos, side);\n }\n removeActive(index) {\n remove(this.active, index);\n remove(this.activeTo, index);\n remove(this.activeRank, index);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n addActive(trackOpen) {\n let i = 0, { value, to, rank } = this.cursor;\n // Organize active marks by rank first, then by size\n while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n i++;\n insert(this.active, i, value);\n insert(this.activeTo, i, to);\n insert(this.activeRank, i, rank);\n if (trackOpen)\n insert(trackOpen, i, this.cursor.from);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n // After calling this, if `this.point` != null, the next range is a\n // point. Otherwise, it's a regular range, covered by `this.active`.\n next() {\n let from = this.to, wasPoint = this.point;\n this.point = null;\n let trackOpen = this.openStart < 0 ? [] : null;\n for (;;) {\n let a = this.minActive;\n if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n if (this.activeTo[a] > from) {\n this.to = this.activeTo[a];\n this.endSide = this.active[a].endSide;\n break;\n }\n this.removeActive(a);\n if (trackOpen)\n remove(trackOpen, a);\n }\n else if (!this.cursor.value) {\n this.to = this.endSide = 1000000000 /* C.Far */;\n break;\n }\n else if (this.cursor.from > from) {\n this.to = this.cursor.from;\n this.endSide = this.cursor.startSide;\n break;\n }\n else {\n let nextVal = this.cursor.value;\n if (!nextVal.point) { // Opening a range\n this.addActive(trackOpen);\n this.cursor.next();\n }\n else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n // Ignore any non-empty points that end precisely at the end of the prev point\n this.cursor.next();\n }\n else { // New point\n this.point = nextVal;\n this.pointFrom = this.cursor.from;\n this.pointRank = this.cursor.rank;\n this.to = this.cursor.to;\n this.endSide = nextVal.endSide;\n this.cursor.next();\n this.forward(this.to, this.endSide);\n break;\n }\n }\n }\n if (trackOpen) {\n this.openStart = 0;\n for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n this.openStart++;\n }\n }\n activeForPoint(to) {\n if (!this.active.length)\n return this.active;\n let active = [];\n for (let i = this.active.length - 1; i >= 0; i--) {\n if (this.activeRank[i] < this.pointRank)\n break;\n if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n active.push(this.active[i]);\n }\n return active.reverse();\n }\n openEnd(to) {\n let open = 0;\n for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n open++;\n return open;\n }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n a.goto(startA);\n b.goto(startB);\n let endB = startB + length;\n let pos = startB, dPos = startB - startA;\n for (;;) {\n let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n if (a.point || b.point) {\n if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n comparator.comparePoint(pos, clipEnd, a.point, b.point);\n }\n else {\n if (clipEnd > pos && !sameValues(a.active, b.active))\n comparator.compareRange(pos, clipEnd, a.active, b.active);\n }\n if (end > endB)\n break;\n if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)\n comparator.boundChange(end);\n pos = end;\n if (diff <= 0)\n a.next();\n if (diff >= 0)\n b.next();\n }\n}\nfunction sameValues(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] != b[i] && !a[i].eq(b[i]))\n return false;\n return true;\n}\nfunction remove(array, index) {\n for (let i = index, e = array.length - 1; i < e; i++)\n array[i] = array[i + 1];\n array.pop();\n}\nfunction insert(array, index, value) {\n for (let i = array.length - 1; i >= index; i--)\n array[i + 1] = array[i];\n array[index] = value;\n}\nfunction findMinIndex(value, array) {\n let found = -1, foundPos = 1000000000 /* C.Far */;\n for (let i = 0; i < array.length; i++)\n if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n found = i;\n foundPos = array[i];\n }\n return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n let n = 0;\n for (let i = 0; i < to && i < string.length;) {\n if (string.charCodeAt(i) == 9) {\n n += tabSize - (n % tabSize);\n i++;\n }\n else {\n n++;\n i = findClusterBreak(string, i);\n }\n }\n return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n for (let i = 0, n = 0;;) {\n if (n >= col)\n return i;\n if (i == string.length)\n break;\n n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n i = findClusterBreak(string, i);\n }\n return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n","const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n // :: (Object\",\n },\n \".env\": {\n code: \"ASTRO_TELEMETRY_DISABLED=\\\"1\\\"\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n astro: \"^1.6.12\",\n \"esbuild-wasm\": \"^0.15.16\",\n },\n scripts: {\n dev: \"astro dev\",\n start: \"astro dev\",\n build: \"astro build\",\n preview: \"astro preview\",\n astro: \"astro\",\n },\n }),\n },\n },\n main: \"/src/pages/index.astro\",\n environment: \"node\",\n};\n\nvar NEXTJS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/pages/_app.js\": {\n code: \"import '../styles.css'\\n\\nexport default function MyApp({ Component, pageProps }) {\\n return \\n}\",\n }, \"/pages/index.js\": {\n code: \"export default function Home({ data }) {\\n return (\\n
    \\n

    Hello {data}

    \\n
    \\n );\\n}\\n \\nexport function getServerSideProps() {\\n return {\\n props: { data: \\\"world\\\" },\\n }\\n}\\n\",\n }, \"/next.config.js\": {\n code: \"/** @type {import('next').NextConfig} */\\nconst nextConfig = {\\n reactStrictMode: true,\\n swcMinify: true,\\n}\\n\\nmodule.exports = nextConfig\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n name: \"my-app\",\n version: \"0.1.0\",\n private: true,\n scripts: {\n dev: \"NEXT_TELEMETRY_DISABLED=1 next dev\",\n build: \"next build\",\n start: \"next start\",\n lint: \"next lint\",\n },\n dependencies: {\n next: \"12.1.6\",\n react: \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"@next/swc-wasm-nodejs\": \"12.1.6\",\n },\n }),\n } }),\n main: \"/pages/index.js\",\n environment: \"node\",\n};\n\nvar NODE_TEMPLATE = {\n files: {\n \"/index.js\": {\n code: \"const http = require('http');\\n\\nconst hostname = '127.0.0.1';\\nconst port = 3000;\\n\\nconst server = http.createServer((req, res) => {\\n res.statusCode = 200;\\n res.setHeader('Content-Type', 'text/html');\\n res.end('Hello world');\\n});\\n\\nserver.listen(port, hostname, () => {\\n console.log(`Server running at http://${hostname}:${port}/`);\\n});\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n scripts: { start: \"node index.js\" },\n main: \"index.js\",\n }),\n },\n },\n main: \"/index.js\",\n environment: \"node\",\n};\n\nvar VITE_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.js\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n devDependencies: {\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n } }),\n main: \"/index.js\",\n environment: \"node\",\n};\n\nvar VITE_PREACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.jsx\": {\n code: \"export default function App() {\\n const data = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.jsx\": {\n code: \"import { render } from \\\"preact\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = document.getElementById(\\\"root\\\");\\nrender(, root);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n preact: \"^10.16.0\",\n },\n devDependencies: {\n \"@preact/preset-vite\": \"^2.5.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n }, \"/vite.config.js\": {\n code: \"import { defineConfig } from \\\"vite\\\";\\nimport preact from '@preact/preset-vite'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [preact()],\\n});\\n\",\n } }),\n main: \"/App.jsx\",\n environment: \"node\",\n};\n\nvar VITE_PREACT_TS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"export default function App() {\\n const data: string = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import { render } from \\\"preact\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = document.getElementById(\\\"root\\\") as HTMLElement;\\nrender(, root);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n lib: [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n allowJs: false,\n skipLibCheck: true,\n esModuleInterop: false,\n allowSyntheticDefaultImports: true,\n strict: true,\n forceConsistentCasingInFileNames: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n jsx: \"react-jsx\",\n jsxImportSource: \"preact\",\n },\n include: [\"src\"],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n }, \"/tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n preact: \"^10.16.0\",\n },\n devDependencies: {\n \"@preact/preset-vite\": \"^2.5.0\",\n typescript: \"^4.9.5\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n }, \"/vite-env.d.ts\": {\n code: '/// ',\n }, \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport preact from '@preact/preset-vite'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [preact()],\\n})\\n\",\n } }),\n main: \"/App.tsx\",\n environment: \"node\",\n};\n\nvar VITE_REACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.jsx\": {\n code: \"export default function App() {\\n const data = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.jsx\": {\n code: \"import { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n react: \"^18.2.0\",\n \"react-dom\": \"^18.2.0\",\n },\n devDependencies: {\n \"@vitejs/plugin-react\": \"3.1.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n }, \"/vite.config.js\": {\n code: \"import { defineConfig } from \\\"vite\\\";\\nimport react from \\\"@vitejs/plugin-react\\\";\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [react()],\\n});\\n\",\n } }),\n main: \"/App.jsx\",\n environment: \"node\",\n};\n\nvar VITE_REACT_TS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"export default function App() {\\n const data: string = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\nimport React from \\\"react\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\") as HTMLElement);\\nroot.render(\\n \\n \\n \\n);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n lib: [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n allowJs: false,\n skipLibCheck: true,\n esModuleInterop: false,\n allowSyntheticDefaultImports: true,\n strict: true,\n forceConsistentCasingInFileNames: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n jsx: \"react-jsx\",\n },\n include: [\"src\"],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n }, \"/tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.8\",\n \"@types/react-dom\": \"^19.0.3\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n typescript: \"^4.9.5\",\n vite: \"4.2.0\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n }, \"/vite-env.d.ts\": {\n code: '/// ',\n }, \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport react from '@vitejs/plugin-react'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [react()],\\n})\\n\",\n } }),\n main: \"/App.tsx\",\n environment: \"node\",\n};\n\nvar VITE_SVELTE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.svelte\": {\n code: \"\\n\\n

    Hello {data}

    \\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import App from './App.svelte'\\nimport \\\"./styles.css\\\"\\n\\nconst app = new App({\\n target: document.getElementById('app'),\\n})\\n\\nexport default app\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite.config.js\": {\n code: \"import { defineConfig } from 'vite'\\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [svelte()],\\n})\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n type: \"module\",\n scripts: {\n dev: \"vite\",\n },\n devDependencies: {\n \"@sveltejs/vite-plugin-svelte\": \"^2.0.2\",\n svelte: \"^3.55.1\",\n vite: \"4.0.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }),\n },\n },\n main: \"/src/App.svelte\",\n environment: \"node\",\n};\n\nvar VITE_SVELTE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.svelte\": {\n code: \"\\n\\n

    Hello {data}

    \\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import App from './App.svelte'\\nimport \\\"./styles.css\\\"\\n\\nconst app = new App({\\n target: document.getElementById('app'),\\n})\\n\\nexport default app\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite-env.d.ts\": {\n code: \"/// \\n/// \",\n },\n \"svelte.config.js\": {\n code: \"import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\\n\\nexport default {\\n // Consult https://svelte.dev/docs#compile-time-svelte-preprocess\\n // for more information about preprocessors\\n preprocess: vitePreprocess(),\\n}\\n\",\n },\n \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [svelte()],\\n})\",\n },\n \"tsconfig.json\": {\n code: JSON.stringify({\n extends: \"@tsconfig/svelte/tsconfig.json\",\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n module: \"ESNext\",\n resolveJsonModule: true,\n allowJs: true,\n checkJs: true,\n isolatedModules: true,\n },\n include: [\n \"src/**/*.d.ts\",\n \"src/**/*.ts\",\n \"src/**/*.js\",\n \"src/**/*.svelte\",\n ],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n },\n \"tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n },\n \"/package.json\": {\n code: JSON.stringify({\n type: \"module\",\n scripts: {\n dev: \"vite\",\n },\n devDependencies: {\n \"@sveltejs/vite-plugin-svelte\": \"^2.0.2\",\n \"@tsconfig/svelte\": \"^3.0.0\",\n svelte: \"^3.55.1\",\n \"svelte-check\": \"^2.10.3\",\n tslib: \"^2.5.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n },\n },\n main: \"/src/App.svelte\",\n environment: \"node\",\n};\n\nvar VITE_VUE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\"\\n \\ncreateApp(App).mount('#app') \\n\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite.config.js\": {\n code: \"import { defineConfig } from 'vite'\\nimport vue from '@vitejs/plugin-vue'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [vue()]\\n})\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vitejs/plugin-vue\": \"3.2.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"node\",\n};\n\nvar VITE_VUE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\"\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite-env.d.ts\": {\n code: '/// ',\n },\n \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport vue from '@vitejs/plugin-vue'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [vue()]\\n})\\n\",\n },\n \"tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n strict: true,\n jsx: \"preserve\",\n resolveJsonModule: true,\n isolatedModules: true,\n esModuleInterop: true,\n lib: [\"ESNext\", \"DOM\"],\n skipLibCheck: true,\n noEmit: true,\n },\n include: [\n \"src/**/*.ts\",\n \"src/**/*.d.ts\",\n \"src/**/*.tsx\",\n \"src/**/*.vue\",\n ],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n },\n \"tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n },\n \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n vue: \"^3.2.47\",\n },\n devDependencies: {\n \"@vitejs/plugin-vue\": \"^4.0.0\",\n vite: \"4.1.4\",\n \"vue-tsc\": \"^1.2.0\",\n typescript: \"^4.9.5\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n },\n },\n main: \"/src/App.vue\",\n environment: \"node\",\n};\n\nvar ANGULAR_TEMPLATE = {\n files: {\n \"/src/app/app.component.css\": commonFiles[\"/styles.css\"],\n \"/src/app/app.component.html\": {\n code: \"
    \\n

    {{ helloWorld }}

    \\n
    \\n\",\n },\n \"/src/app/app.component.ts\": {\n code: \"import { Component } from \\\"@angular/core\\\";\\n\\n@Component({\\n selector: \\\"app-root\\\",\\n templateUrl: \\\"./app.component.html\\\",\\n styleUrls: [\\\"./app.component.css\\\"]\\n})\\nexport class AppComponent {\\n helloWorld = \\\"Hello world\\\";\\n} \\n\",\n },\n \"/src/app/app.module.ts\": {\n code: \"import { BrowserModule } from \\\"@angular/platform-browser\\\";\\nimport { NgModule } from \\\"@angular/core\\\";\\n \\nimport { AppComponent } from \\\"./app.component\\\";\\n \\n@NgModule({\\n declarations: [AppComponent],\\n imports: [BrowserModule],\\n providers: [],\\n bootstrap: [AppComponent]\\n})\\nexport class AppModule {} \\n\",\n },\n \"/src/index.html\": {\n code: \"\\n\\n \\n\\n \\n Angular\\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { enableProdMode } from \\\"@angular/core\\\";\\nimport { platformBrowserDynamic } from \\\"@angular/platform-browser-dynamic\\\";\\n \\nimport { AppModule } from \\\"./app/app.module\\\"; \\n\\nplatformBrowserDynamic()\\n .bootstrapModule(AppModule)\\n .catch(err => console.log(err));\\n \\n\",\n },\n \"/src/polyfills.ts\": {\n code: \"import \\\"core-js/proposals/reflect-metadata\\\"; \\n import \\\"zone.js/dist/zone\\\";\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n \"@angular/core\": \"^11.2.0\",\n \"@angular/platform-browser\": \"^11.2.0\",\n \"@angular/platform-browser-dynamic\": \"^11.2.0\",\n \"@angular/common\": \"^11.2.0\",\n \"@angular/compiler\": \"^11.2.0\",\n \"zone.js\": \"0.11.3\",\n \"core-js\": \"3.8.3\",\n rxjs: \"6.6.3\",\n },\n main: \"/src/main.ts\",\n }),\n },\n },\n main: \"/src/app/app.component.ts\",\n environment: \"angular-cli\",\n};\n\nvar REACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.js\": {\n code: \"export default function App() {\\n return

    Hello world

    \\n}\\n\",\n }, \"/index.js\": {\n code: \"import React, { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n Document\\n \\n \\n
    \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-scripts\": \"^5.0.0\",\n },\n main: \"/index.js\",\n }),\n } }),\n main: \"/App.js\",\n environment: \"create-react-app\",\n};\n\nvar REACT_TYPESCRIPT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"tsconfig.json\": {\n code: \"{\\n \\\"include\\\": [\\n \\\"./**/*\\\"\\n ],\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"esModuleInterop\\\": true,\\n \\\"lib\\\": [ \\\"dom\\\", \\\"es2015\\\" ],\\n \\\"jsx\\\": \\\"react-jsx\\\"\\n }\\n}\",\n }, \"/App.tsx\": {\n code: \"export default function App(): JSX.Element {\\n return

    Hello world

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import React, { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n Document\\n \\n \\n
    \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-scripts\": \"^4.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n typescript: \"^4.0.0\",\n },\n main: \"/index.tsx\",\n }),\n } }),\n main: \"/App.tsx\",\n environment: \"create-react-app\",\n};\n\nvar SOLID_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"import { Component } from \\\"solid-js\\\";\\n\\nconst App: Component = () => {\\n return

    Hello world

    \\n};\\n\\nexport default App;\",\n }, \"/index.tsx\": {\n code: \"import { render } from \\\"solid-js/web\\\";\\nimport App from \\\"./App\\\";\\n\\nimport \\\"./styles.css\\\";\\n\\nrender(() => , document.getElementById(\\\"app\\\"));\",\n }, \"/index.html\": {\n code: \"\\n\\n Parcel Sandbox\\n \\n\\n\\n
    \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n \"solid-js\": \"1.3.15\",\n },\n main: \"/index.tsx\",\n }),\n } }),\n main: \"/App.tsx\",\n environment: \"solid\",\n};\n\nvar SVELTE_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.svelte\": {\n code: \"\\n\\n\\n\\n
    \\n

    Hello {name}

    \\n
    \",\n }, \"/index.js\": {\n code: \"import App from \\\"./App.svelte\\\";\\nimport \\\"./styles.css\\\";\\n\\nconst app = new App({\\n target: document.body\\n});\\n\\nexport default app;\\n \",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n\\n Svelte app\\n\\n \\n \\n\\n \\n \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n svelte: \"^3.0.0\",\n },\n main: \"/index.js\",\n }),\n } }),\n main: \"/App.svelte\",\n environment: \"svelte\",\n};\n\nvar TEST_TYPESCRIPT_TEMPLATE = {\n files: {\n \"tsconfig.json\": {\n code: \"{\\n \\\"include\\\": [\\n \\\"./**/*\\\"\\n ],\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"esModuleInterop\\\": true,\\n \\\"lib\\\": [ \\\"dom\\\", \\\"es2015\\\" ],\\n \\\"jsx\\\": \\\"react-jsx\\\"\\n }\\n}\",\n },\n \"/add.ts\": {\n code: \"export const add = (a: number, b: number): number => a + b;\",\n },\n \"/add.test.ts\": {\n code: \"import { add } from './add';\\n\\ndescribe('add', () => {\\n test('Commutative Law of Addition', () => {\\n expect(add(1, 2)).toBe(add(2, 1));\\n });\\n});\",\n },\n \"package.json\": {\n code: JSON.stringify({\n dependencies: {},\n devDependencies: { typescript: \"^4.0.0\" },\n main: \"/add.ts\",\n }),\n },\n },\n main: \"/add.test.ts\",\n environment: \"parcel\",\n mode: \"tests\",\n};\n\nvar VANILLA_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.js\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n\\n\\n\\n
    \\n\\n \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n main: \"/index.js\",\n }),\n } }),\n main: \"/index.js\",\n environment: \"parcel\",\n};\n\nvar VANILLA_TYPESCRIPT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"tsconfig.json\": {\n code: \"{\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"module\\\": \\\"commonjs\\\",\\n \\\"jsx\\\": \\\"preserve\\\",\\n \\\"esModuleInterop\\\": true,\\n \\\"sourceMap\\\": true,\\n \\\"allowJs\\\": true,\\n \\\"lib\\\": [\\n \\\"es6\\\",\\n \\\"dom\\\"\\n ],\\n \\\"rootDir\\\": \\\"src\\\",\\n \\\"moduleResolution\\\": \\\"node\\\"\\n }\\n}\",\n }, \"/index.ts\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n\\n\\n\\n
    \\n\\n \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n devDependencies: {\n typescript: \"^4.0.0\",\n },\n main: \"/index.ts\",\n }),\n } }),\n main: \"/index.ts\",\n environment: \"parcel\",\n};\n\nvar VUE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\";\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n \\n codesandbox\\n \\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n name: \"vue3\",\n version: \"0.1.0\",\n private: true,\n main: \"/src/main.js\",\n scripts: {\n serve: \"vue-cli-service serve\",\n build: \"vue-cli-service build\",\n },\n dependencies: {\n \"core-js\": \"^3.26.1\",\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vue/cli-plugin-babel\": \"^5.0.8\",\n \"@vue/cli-service\": \"^5.0.8\",\n },\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"vue-cli\",\n};\n\nvar VUE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\";\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/src/shims-vue.d.ts\": \"/* eslint-disable */\\ndeclare module \\\"*.vue\\\" {\\n import type { DefineComponent } from \\\"vue\\\";\\n const component: DefineComponent<{}, {}, any>;\\n export default component;\\n}\",\n \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n \\n codesandbox\\n \\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n name: \"vue3-ts\",\n version: \"0.1.0\",\n private: true,\n main: \"/src/main.ts\",\n scripts: {\n serve: \"vue-cli-service serve\",\n build: \"vue-cli-service build\",\n },\n dependencies: {\n \"core-js\": \"^3.26.1\",\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vue/cli-plugin-babel\": \"^5.0.8\",\n \"@vue/cli-plugin-typescript\": \"^5.0.8\",\n \"@vue/cli-service\": \"^5.0.8\",\n typescript: \"^4.9.3\",\n },\n }),\n },\n \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"esnext\",\n module: \"esnext\",\n strict: true,\n jsx: \"preserve\",\n moduleResolution: \"node\",\n experimentalDecorators: true,\n skipLibCheck: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n forceConsistentCasingInFileNames: true,\n useDefineForClassFields: true,\n sourceMap: false,\n baseUrl: \".\",\n types: [\"webpack-env\"],\n paths: {\n \"@/*\": [\"src/*\"],\n },\n lib: [\"esnext\", \"dom\", \"dom.iterable\", \"scripthost\"],\n },\n include: [\n \"src/**/*.ts\",\n \"src/**/*.tsx\",\n \"src/**/*.vue\",\n \"tests/**/*.ts\",\n \"tests/**/*.tsx\",\n ],\n exclude: [\"node_modules\"],\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"vue-cli\",\n};\n\nvar STATIC_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n \\n\\n\\n\\n

    Hello world

    \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n main: \"/index.html\",\n }),\n } }),\n main: \"/index.html\",\n environment: \"static\",\n};\n\nvar SANDBOX_TEMPLATES = {\n static: STATIC_TEMPLATE,\n angular: ANGULAR_TEMPLATE,\n react: REACT_TEMPLATE,\n \"react-ts\": REACT_TYPESCRIPT_TEMPLATE,\n solid: SOLID_TEMPLATE,\n svelte: SVELTE_TEMPLATE,\n \"test-ts\": TEST_TYPESCRIPT_TEMPLATE,\n \"vanilla-ts\": VANILLA_TYPESCRIPT_TEMPLATE,\n vanilla: VANILLA_TEMPLATE,\n vue: VUE_TEMPLATE,\n \"vue-ts\": VUE_TS_TEMPLATE,\n node: NODE_TEMPLATE,\n nextjs: NEXTJS_TEMPLATE,\n vite: VITE_TEMPLATE,\n \"vite-react\": VITE_REACT_TEMPLATE,\n \"vite-react-ts\": VITE_REACT_TS_TEMPLATE,\n \"vite-preact\": VITE_PREACT_TEMPLATE,\n \"vite-preact-ts\": VITE_PREACT_TS_TEMPLATE,\n \"vite-vue\": VITE_VUE_TEMPLATE,\n \"vite-vue-ts\": VITE_VUE_TS_TEMPLATE,\n \"vite-svelte\": VITE_SVELTE_TEMPLATE,\n \"vite-svelte-ts\": VITE_SVELTE_TS_TEMPLATE,\n astro: ASTRO_TEMPLATE,\n};\n\n/**\n * Creates a standard sandpack state given the setup,\n * options, and files props. Using this function is\n * the reliable way to ensure a consistent and predictable\n * sandpack-content throughout application\n */\nvar getSandpackStateFromProps = function (props) {\n var _a, _b, _c, _d, _e, _f;\n var normalizedFilesPath = normalizePath(props.files);\n // Merge predefined template with custom setup\n var projectSetup = combineTemplateFilesToSetup({\n template: props.template,\n customSetup: props.customSetup,\n files: normalizedFilesPath,\n });\n // visibleFiles and activeFile override the setup flags\n var visibleFiles = normalizePath((_b = (_a = props.options) === null || _a === void 0 ? void 0 : _a.visibleFiles) !== null && _b !== void 0 ? _b : []);\n var activeFile = ((_c = props.options) === null || _c === void 0 ? void 0 : _c.activeFile)\n ? resolveFile((_d = props.options) === null || _d === void 0 ? void 0 : _d.activeFile, projectSetup.files)\n : undefined;\n if (visibleFiles.length === 0 && normalizedFilesPath) {\n // extract open and active files from the custom input files\n Object.keys(normalizedFilesPath).forEach(function (filePath) {\n var file = normalizedFilesPath[filePath];\n if (typeof file === \"string\") {\n visibleFiles.push(filePath);\n return;\n }\n if (!activeFile && file.active) {\n activeFile = filePath;\n if (file.hidden === true) {\n // active file needs to be available even if someone sets it as hidden by accident\n visibleFiles.push(filePath);\n }\n }\n if (!file.hidden) {\n visibleFiles.push(filePath);\n }\n });\n }\n if (visibleFiles.length === 0) {\n // If no files are received, use the project setup / template\n visibleFiles = [projectSetup.main];\n }\n // Make sure it resolves the entry file\n if (projectSetup.entry && !projectSetup.files[projectSetup.entry]) {\n /* eslint-disable */\n // @ts-ignore\n projectSetup.entry = resolveFile(projectSetup.entry, projectSetup.files);\n /* eslint-enable */\n }\n if (!activeFile && projectSetup.main) {\n activeFile = projectSetup.main;\n }\n // If no activeFile is specified, use the first open file\n if (!activeFile || !projectSetup.files[activeFile]) {\n activeFile = visibleFiles[0];\n }\n // If for whatever reason the active path was not set as open, set it\n if (!visibleFiles.includes(activeFile)) {\n visibleFiles.push(activeFile);\n }\n var files = addPackageJSONIfNeeded(projectSetup.files, (_e = projectSetup.dependencies) !== null && _e !== void 0 ? _e : {}, (_f = projectSetup.devDependencies) !== null && _f !== void 0 ? _f : {}, projectSetup.entry);\n var existOpenPath = visibleFiles.filter(function (path) { return files[path]; });\n return {\n visibleFiles: existOpenPath,\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n activeFile: activeFile,\n files: files,\n environment: projectSetup.environment,\n shouldUpdatePreview: true,\n };\n};\n/**\n * Given a file tree and a file, it uses a couple of rules\n * to tweak the filename to match with one of the inside of file tree\n *\n * - Adds the leading slash;\n * - Tries to find the same filename with different extensions (js only);\n * - Returns `null` if it doesn't satisfy any rule\n */\nvar resolveFile = function (path, files) {\n var normalizedFilesPath = normalizePath(files);\n var normalizedPath = normalizePath(path);\n if (normalizedPath in normalizedFilesPath) {\n return normalizedPath;\n }\n if (!path) {\n return null;\n }\n var resolvedPath = null;\n var index = 0;\n var strategies = [\".js\", \".jsx\", \".ts\", \".tsx\"];\n while (!resolvedPath && index < strategies.length) {\n var removeExtension = normalizedPath.split(\".\")[0];\n var attemptPath = \"\".concat(removeExtension).concat(strategies[index]);\n if (normalizedFilesPath[attemptPath] !== undefined) {\n resolvedPath = attemptPath;\n }\n index++;\n }\n return resolvedPath;\n};\n/**\n * The template is predefined (eg: react, vue, vanilla)\n * The setup can overwrite anything from the template\n * (eg: files, dependencies, environment, etc.)\n */\nvar combineTemplateFilesToSetup = function (_a) {\n var files = _a.files, template = _a.template, customSetup = _a.customSetup;\n if (!template) {\n // If not input, default to vanilla\n if (!customSetup) {\n var defaultTemplate = SANDBOX_TEMPLATES.vanilla;\n return __assign(__assign({}, defaultTemplate), { files: __assign(__assign({}, defaultTemplate.files), convertedFilesToBundlerFiles(files)) });\n }\n if (!files || Object.keys(files).length === 0) {\n throw new Error(\"[sandpack-react]: without a template, you must pass at least one file\");\n }\n // If not template specified, use the setup entirely\n return __assign(__assign({}, customSetup), { files: convertedFilesToBundlerFiles(files) });\n }\n var baseTemplate = SANDBOX_TEMPLATES[template];\n if (!baseTemplate) {\n throw new Error(\"[sandpack-react]: invalid template \\\"\".concat(template, \"\\\" provided\"));\n }\n // If no setup and not files, the template is used entirely\n if (!customSetup && !files) {\n return baseTemplate;\n }\n // Merge the setup on top of the template\n return {\n /**\n * The input setup might have files in the simple form Record\n * so we convert them to the sandbox template format\n */\n files: convertedFilesToBundlerFiles(__assign(__assign({}, baseTemplate.files), files)),\n /**\n * Merge template dependencies and user custom dependencies.\n * As a rule, the custom dependencies must overwrite the template ones.\n */\n dependencies: __assign(__assign({}, baseTemplate.dependencies), customSetup === null || customSetup === void 0 ? void 0 : customSetup.dependencies),\n devDependencies: __assign(__assign({}, baseTemplate.devDependencies), customSetup === null || customSetup === void 0 ? void 0 : customSetup.devDependencies),\n entry: normalizePath(customSetup === null || customSetup === void 0 ? void 0 : customSetup.entry),\n main: baseTemplate.main,\n environment: (customSetup === null || customSetup === void 0 ? void 0 : customSetup.environment) || baseTemplate.environment,\n };\n};\n/**\n * Transform an regular object, which contain files to\n * an object that sandpack-client can understand\n *\n * From: Record\n * To: Record\n */\nvar convertedFilesToBundlerFiles = function (files) {\n if (!files)\n return {};\n return Object.keys(files).reduce(function (acc, key) {\n if (typeof files[key] === \"string\") {\n acc[key] = { code: files[key] };\n }\n else {\n acc[key] = files[key];\n }\n return acc;\n }, {});\n};\n\nvar useAppState = function (props, files) {\n var _a = useState({\n editorState: \"pristine\",\n }), state = _a[0], setState = _a[1];\n var originalStateFromProps = getSandpackStateFromProps(props);\n var editorState = dequal(originalStateFromProps.files, files)\n ? \"pristine\"\n : \"dirty\";\n if (editorState !== state.editorState) {\n setState(function (prev) { return (__assign(__assign({}, prev), { editorState: editorState })); });\n }\n return state;\n};\n\nvar useSandpackId = function () {\n if (typeof useId === \"function\") {\n /* eslint-disable-next-line */\n return useId();\n }\n else {\n return generateRandomId();\n }\n};\n/**\n * This is a hard constraint to make URLs shorter.\n * For example, this id will be used to mount SW in the iframe\n * so, to keep the URL valid, this must be an 9 character long string\n */\nvar MAX_ID_LENGTH = 9;\nvar sandpackClientVersion = \"2.19.8\";\nvar useAsyncSandpackId = function (files) {\n if (typeof useId === \"function\") {\n /* eslint-disable-next-line react-hooks/rules-of-hooks */\n var reactDomId_1 = useId();\n return function () { return __awaiter(void 0, void 0, void 0, function () {\n var allCode, sha;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n allCode = Object.entries(files)\n .map(function (path, code) { return path + \"|\" + code; })\n .join(\"|||\");\n return [4 /*yield*/, generateShortId(allCode + reactDomId_1 + sandpackClientVersion)];\n case 1:\n sha = _a.sent();\n return [2 /*return*/, ensureLength(sha.replace(/:/g, \"sp\").replace(/[^a-zA-Z]/g, \"\"), MAX_ID_LENGTH)];\n }\n });\n }); };\n }\n else {\n return function () { return ensureLength(generateRandomId(), MAX_ID_LENGTH); };\n }\n};\nfunction ensureLength(str, length) {\n if (str.length > length) {\n return str.slice(0, length);\n }\n else {\n return str.padEnd(length, \"s\");\n }\n}\nfunction generateShortId(input) {\n return __awaiter(this, void 0, void 0, function () {\n var encoder, data, hashBuffer, hashArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n encoder = new TextEncoder();\n data = encoder.encode(input);\n return [4 /*yield*/, crypto.subtle.digest(\"SHA-256\", data)];\n case 1:\n hashBuffer = _a.sent();\n hashArray = Array.from(new Uint8Array(hashBuffer));\n return [2 /*return*/, btoa(String.fromCharCode.apply(String, hashArray))];\n }\n });\n });\n}\n\nvar BUNDLER_TIMEOUT = 40000;\nvar useClient = function (_a, filesState) {\n var _b, _c, _d;\n var options = _a.options, customSetup = _a.customSetup, teamId = _a.teamId, sandboxId = _a.sandboxId;\n options !== null && options !== void 0 ? options : (options = {});\n customSetup !== null && customSetup !== void 0 ? customSetup : (customSetup = {});\n var initModeFromProps = (options === null || options === void 0 ? void 0 : options.initMode) || \"lazy\";\n var _e = useState({\n startRoute: options === null || options === void 0 ? void 0 : options.startRoute,\n bundlerState: undefined,\n error: null,\n initMode: initModeFromProps,\n reactDevTools: undefined,\n status: ((_b = options === null || options === void 0 ? void 0 : options.autorun) !== null && _b !== void 0 ? _b : true) ? \"initial\" : \"idle\",\n }), state = _e[0], setState = _e[1];\n var intersectionObserverCallback = useRef();\n var intersectionObserver = useRef(null);\n var lazyAnchorRef = useRef(null);\n var registeredIframes = useRef({});\n var clients = useRef({});\n var timeoutHook = useRef(null);\n var unsubscribeClientListeners = useRef({});\n var unsubscribe = useRef();\n var queuedListeners = useRef({ global: {} });\n var debounceHook = useRef();\n var prevEnvironment = useRef(filesState.environment);\n var asyncSandpackId = useAsyncSandpackId(filesState.files);\n /**\n * Callbacks\n */\n var createClient = useCallback(function (iframe, clientId, clientPropsOverride) { return __awaiter(void 0, void 0, void 0, function () {\n var timeOut, shouldSetTimeout, getStableServiceWorkerId, client, _a, _b, globalListeners;\n var _c;\n var _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0:\n // Clean up any existing clients that\n // have been created with the given id\n if (clients.current[clientId]) {\n clients.current[clientId].destroy();\n }\n options !== null && options !== void 0 ? options : (options = {});\n customSetup !== null && customSetup !== void 0 ? customSetup : (customSetup = {});\n timeOut = (_d = options === null || options === void 0 ? void 0 : options.bundlerTimeOut) !== null && _d !== void 0 ? _d : BUNDLER_TIMEOUT;\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n shouldSetTimeout = typeof unsubscribe.current !== \"function\";\n if (shouldSetTimeout) {\n timeoutHook.current = setTimeout(function () {\n unregisterAllClients();\n setState(function (prev) { return (__assign(__assign({}, prev), { status: \"timeout\" })); });\n }, timeOut);\n }\n getStableServiceWorkerId = function () { return __awaiter(void 0, void 0, void 0, function () {\n var key, fixedId;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(options === null || options === void 0 ? void 0 : options.experimental_enableStableServiceWorkerId)) return [3 /*break*/, 3];\n key = \"SANDPACK_INTERNAL:URL-CONSISTENT-ID\";\n fixedId = localStorage.getItem(key);\n if (!!fixedId) return [3 /*break*/, 2];\n return [4 /*yield*/, asyncSandpackId()];\n case 1:\n fixedId = _a.sent();\n localStorage.setItem(key, fixedId);\n _a.label = 2;\n case 2: return [2 /*return*/, fixedId];\n case 3: return [4 /*yield*/, asyncSandpackId()];\n case 4: return [2 /*return*/, _a.sent()];\n }\n });\n }); };\n _a = loadSandpackClient;\n _b = [iframe,\n {\n files: filesState.files,\n template: filesState.environment,\n }];\n _c = {\n externalResources: options.externalResources,\n bundlerURL: options.bundlerURL,\n startRoute: (_e = clientPropsOverride === null || clientPropsOverride === void 0 ? void 0 : clientPropsOverride.startRoute) !== null && _e !== void 0 ? _e : options.startRoute,\n fileResolver: options.fileResolver,\n skipEval: (_f = options.skipEval) !== null && _f !== void 0 ? _f : false,\n logLevel: options.logLevel,\n showOpenInCodeSandbox: false,\n showErrorScreen: true,\n showLoadingScreen: false,\n reactDevTools: state.reactDevTools,\n customNpmRegistries: customSetup === null || customSetup === void 0 ? void 0 : customSetup.npmRegistries,\n teamId: teamId,\n experimental_enableServiceWorker: !!(options === null || options === void 0 ? void 0 : options.experimental_enableServiceWorker)\n };\n return [4 /*yield*/, getStableServiceWorkerId()];\n case 1: return [4 /*yield*/, _a.apply(void 0, _b.concat([(_c.experimental_stableServiceWorkerId = _g.sent(),\n _c.sandboxId = sandboxId,\n _c)]))];\n case 2:\n client = _g.sent();\n if (typeof unsubscribe.current !== \"function\") {\n unsubscribe.current = client.listen(handleMessage);\n }\n unsubscribeClientListeners.current[clientId] =\n unsubscribeClientListeners.current[clientId] || {};\n /**\n * Register any potential listeners that subscribed before sandpack ran\n */\n if (queuedListeners.current[clientId]) {\n Object.keys(queuedListeners.current[clientId]).forEach(function (listenerId) {\n var listener = queuedListeners.current[clientId][listenerId];\n var unsubscribe = client.listen(listener);\n unsubscribeClientListeners.current[clientId][listenerId] =\n unsubscribe;\n });\n // Clear the queued listeners after they were registered\n queuedListeners.current[clientId] = {};\n }\n globalListeners = Object.entries(queuedListeners.current.global);\n globalListeners.forEach(function (_a) {\n var listenerId = _a[0], listener = _a[1];\n var unsubscribe = client.listen(listener);\n unsubscribeClientListeners.current[clientId][listenerId] = unsubscribe;\n /**\n * Important: Do not clean the global queue\n * Instead of cleaning the queue, keep it there for the\n * following clients that might be created\n */\n });\n clients.current[clientId] = client;\n return [2 /*return*/];\n }\n });\n }); }, [filesState.environment, filesState.files, state.reactDevTools]);\n var unregisterAllClients = useCallback(function () {\n Object.keys(clients.current).map(unregisterBundler);\n if (typeof unsubscribe.current === \"function\") {\n unsubscribe.current();\n unsubscribe.current = undefined;\n }\n }, []);\n var runSandpack = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(Object.entries(registeredIframes.current).map(function (_a) {\n var clientId = _a[0], _b = _a[1], iframe = _b.iframe, _c = _b.clientPropsOverride, clientPropsOverride = _c === void 0 ? {} : _c;\n return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, createClient(iframe, clientId, clientPropsOverride)];\n case 1:\n _d.sent();\n return [2 /*return*/];\n }\n });\n });\n }))];\n case 1:\n _a.sent();\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null, status: \"running\" })); });\n return [2 /*return*/];\n }\n });\n }); }, [createClient]);\n intersectionObserverCallback.current = function (entries) {\n if (entries.some(function (entry) { return entry.isIntersecting; })) {\n runSandpack();\n }\n else {\n unregisterAllClients();\n }\n };\n var initializeSandpackIframe = useCallback(function () {\n var _a, _b, _c;\n var autorun = (_a = options === null || options === void 0 ? void 0 : options.autorun) !== null && _a !== void 0 ? _a : true;\n if (!autorun) {\n return;\n }\n var observerOptions = (_b = options === null || options === void 0 ? void 0 : options.initModeObserverOptions) !== null && _b !== void 0 ? _b : {\n rootMargin: \"1000px 0px\",\n };\n if (intersectionObserver.current && lazyAnchorRef.current) {\n (_c = intersectionObserver.current) === null || _c === void 0 ? void 0 : _c.unobserve(lazyAnchorRef.current);\n }\n if (lazyAnchorRef.current && state.initMode === \"lazy\") {\n // If any component registered a lazy anchor ref component, use that for the intersection observer\n intersectionObserver.current = new IntersectionObserver(function (entries) {\n var _a, _b;\n if (entries.some(function (entry) { return entry.isIntersecting; })) {\n // Trigger it once\n if (entries.some(function (entry) { return entry.isIntersecting; }) &&\n lazyAnchorRef.current) {\n (_a = intersectionObserverCallback.current) === null || _a === void 0 ? void 0 : _a.call(intersectionObserverCallback, entries);\n (_b = intersectionObserver.current) === null || _b === void 0 ? void 0 : _b.unobserve(lazyAnchorRef.current);\n }\n }\n }, observerOptions);\n intersectionObserver.current.observe(lazyAnchorRef.current);\n }\n else if (lazyAnchorRef.current && state.initMode === \"user-visible\") {\n intersectionObserver.current = new IntersectionObserver(function (entries) {\n var _a;\n (_a = intersectionObserverCallback.current) === null || _a === void 0 ? void 0 : _a.call(intersectionObserverCallback, entries);\n }, observerOptions);\n intersectionObserver.current.observe(lazyAnchorRef.current);\n }\n else {\n runSandpack();\n }\n }, [\n options === null || options === void 0 ? void 0 : options.autorun,\n options === null || options === void 0 ? void 0 : options.initModeObserverOptions,\n runSandpack,\n state.initMode,\n unregisterAllClients,\n ]);\n var registerBundler = useCallback(function (iframe, clientId, clientPropsOverride) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Store the iframe info so it can be\n // used later to manually run sandpack\n registeredIframes.current[clientId] = {\n iframe: iframe,\n clientPropsOverride: clientPropsOverride,\n };\n if (!(state.status === \"running\")) return [3 /*break*/, 2];\n return [4 /*yield*/, createClient(iframe, clientId, clientPropsOverride)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); }, [createClient, state.status]);\n var unregisterBundler = function (clientId) {\n var _a, _b;\n var client = clients.current[clientId];\n if (client) {\n client.destroy();\n (_a = client.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.location.replace(\"about:blank\");\n client.iframe.removeAttribute(\"src\");\n delete clients.current[clientId];\n }\n else {\n delete registeredIframes.current[clientId];\n }\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n var unsubscribeQueuedClients = Object.values((_b = unsubscribeClientListeners.current[clientId]) !== null && _b !== void 0 ? _b : {});\n // Unsubscribing all listener registered\n unsubscribeQueuedClients.forEach(function (listenerOfClient) {\n var listenerFunctions = Object.values(listenerOfClient);\n listenerFunctions.forEach(function (unsubscribe) { return unsubscribe(); });\n });\n // Keep running if it still have clients\n var status = Object.keys(clients.current).length > 0 ? \"running\" : \"idle\";\n setState(function (prev) { return (__assign(__assign({}, prev), { status: status })); });\n };\n var handleMessage = function (msg) {\n if (msg.type === \"start\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null })); });\n }\n else if (msg.type === \"state\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { bundlerState: msg.state })); });\n }\n else if ((msg.type === \"done\" && !msg.compilatonError) ||\n msg.type === \"connected\") {\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null })); });\n }\n else if (msg.type === \"action\" && msg.action === \"show-error\") {\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n setState(function (prev) { return (__assign(__assign({}, prev), { error: extractErrorDetails(msg) })); });\n }\n else if (msg.type === \"action\" &&\n msg.action === \"notification\" &&\n msg.notificationType === \"error\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { error: { message: msg.title } })); });\n }\n };\n var registerReactDevTools = function (value) {\n setState(function (prev) { return (__assign(__assign({}, prev), { reactDevTools: value })); });\n };\n var recompileMode = (_c = options === null || options === void 0 ? void 0 : options.recompileMode) !== null && _c !== void 0 ? _c : \"delayed\";\n var recompileDelay = (_d = options === null || options === void 0 ? void 0 : options.recompileDelay) !== null && _d !== void 0 ? _d : 200;\n var dispatchMessage = function (message, clientId) {\n if (state.status !== \"running\") {\n console.warn(\"[sandpack-react]: dispatch cannot be called while in idle mode\");\n return;\n }\n if (clientId) {\n clients.current[clientId].dispatch(message);\n }\n else {\n Object.values(clients.current).forEach(function (client) {\n client.dispatch(message);\n });\n }\n };\n var addListener = function (listener, clientId) {\n if (clientId) {\n if (clients.current[clientId]) {\n var unsubscribeListener = clients.current[clientId].listen(listener);\n return unsubscribeListener;\n }\n else {\n /**\n * When listeners are added before the client is instantiated, they are stored with an unique id\n * When the client is eventually instantiated, the listeners are registered on the spot\n * Their unsubscribe functions are stored in unsubscribeClientListeners for future cleanup\n */\n var listenerId_1 = generateRandomId();\n queuedListeners.current[clientId] =\n queuedListeners.current[clientId] || {};\n unsubscribeClientListeners.current[clientId] =\n unsubscribeClientListeners.current[clientId] || {};\n queuedListeners.current[clientId][listenerId_1] = listener;\n var unsubscribeListener = function () {\n if (queuedListeners.current[clientId][listenerId_1]) {\n /**\n * Unsubscribe was called before the client was instantiated\n * common example - a component with autorun=false that unmounted\n */\n delete queuedListeners.current[clientId][listenerId_1];\n }\n else if (unsubscribeClientListeners.current[clientId][listenerId_1]) {\n /**\n * unsubscribe was called for a listener that got added before the client was instantiated\n * call the unsubscribe function and remove it from memory\n */\n unsubscribeClientListeners.current[clientId][listenerId_1]();\n delete unsubscribeClientListeners.current[clientId][listenerId_1];\n }\n };\n return unsubscribeListener;\n }\n }\n else {\n // Push to the **global** queue\n var listenerId_2 = generateRandomId();\n queuedListeners.current.global[listenerId_2] = listener;\n // Add to the current clients\n var clientsList = Object.values(clients.current);\n var currentClientUnsubscribeListeners_1 = clientsList.map(function (client) {\n return client.listen(listener);\n });\n var unsubscribeListener = function () {\n // Unsubscribing from the clients already created\n currentClientUnsubscribeListeners_1.forEach(function (unsubscribe) {\n return unsubscribe();\n });\n delete queuedListeners.current.global[listenerId_2];\n // Unsubscribe in case it was added later from `global`\n Object.values(unsubscribeClientListeners.current).forEach(function (client) {\n var _a;\n (_a = client === null || client === void 0 ? void 0 : client[listenerId_2]) === null || _a === void 0 ? void 0 : _a.call(client);\n });\n };\n return unsubscribeListener;\n }\n };\n /**\n * Effects\n */\n useEffect(function watchFileChanges() {\n if (state.status !== \"running\" || !filesState.shouldUpdatePreview) {\n return;\n }\n /**\n * When the environment changes, Sandpack needs to make sure\n * to create a new client and the proper bundler\n */\n if (prevEnvironment.current !== filesState.environment) {\n prevEnvironment.current = filesState.environment;\n Object.entries(clients.current).forEach(function (_a) {\n var key = _a[0], client = _a[1];\n registerBundler(client.iframe, key);\n });\n }\n if (recompileMode === \"immediate\") {\n Object.values(clients.current).forEach(function (client) {\n /**\n * Avoid concurrency\n */\n if (client.status === \"done\") {\n client.updateSandbox({\n files: filesState.files,\n template: filesState.environment,\n });\n }\n });\n }\n if (recompileMode === \"delayed\") {\n if (typeof window === \"undefined\")\n return;\n window.clearTimeout(debounceHook.current);\n debounceHook.current = window.setTimeout(function () {\n Object.values(clients.current).forEach(function (client) {\n /**\n * Avoid concurrency\n */\n if (client.status === \"done\") {\n client.updateSandbox({\n files: filesState.files,\n template: filesState.environment,\n });\n }\n });\n }, recompileDelay);\n }\n return function () {\n window.clearTimeout(debounceHook.current);\n };\n }, [\n filesState.files,\n filesState.environment,\n filesState.shouldUpdatePreview,\n recompileDelay,\n recompileMode,\n registerBundler,\n state.status,\n ]);\n useEffect(function watchInitMode() {\n if (initModeFromProps !== state.initMode) {\n setState(function (prev) { return (__assign(__assign({}, prev), { initMode: initModeFromProps })); });\n initializeSandpackIframe();\n }\n }, [initModeFromProps, initializeSandpackIframe, state.initMode]);\n useEffect(function () {\n return function unmountClient() {\n if (typeof unsubscribe.current === \"function\") {\n unsubscribe.current();\n }\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n if (debounceHook.current) {\n clearTimeout(debounceHook.current);\n }\n if (intersectionObserver.current) {\n intersectionObserver.current.disconnect();\n }\n };\n }, []);\n return [\n state,\n {\n clients: clients.current,\n initializeSandpackIframe: initializeSandpackIframe,\n runSandpack: runSandpack,\n registerBundler: registerBundler,\n unregisterBundler: unregisterBundler,\n registerReactDevTools: registerReactDevTools,\n addListener: addListener,\n dispatchMessage: dispatchMessage,\n lazyAnchorRef: lazyAnchorRef,\n unsubscribeClientListenersRef: unsubscribeClientListeners,\n queuedListenersRef: queuedListeners,\n },\n ];\n};\n\nvar useFiles = function (props) {\n var originalStateFromProps = getSandpackStateFromProps(props);\n var _a = useState(originalStateFromProps), state = _a[0], setState = _a[1];\n var isMountedRef = useRef(false);\n useEffect(function () {\n if (isMountedRef.current) {\n setState(getSandpackStateFromProps(props));\n }\n else {\n isMountedRef.current = true;\n }\n }, [props.files, props.customSetup, props.template]);\n var updateFile = function (pathOrFiles, code, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n setState(function (prev) {\n var _a;\n var files = prev.files;\n if (typeof pathOrFiles === \"string\" && typeof code === \"string\") {\n files = __assign(__assign({}, files), (_a = {}, _a[pathOrFiles] = __assign(__assign({}, files[pathOrFiles]), { code: code }), _a));\n }\n else if (typeof pathOrFiles === \"object\") {\n files = __assign(__assign({}, files), convertedFilesToBundlerFiles(pathOrFiles));\n }\n return __assign(__assign({}, prev), { files: normalizePath(files), shouldUpdatePreview: shouldUpdatePreview });\n });\n };\n var operations = {\n openFile: function (path) {\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, rest = __rest(_a, [\"visibleFiles\"]);\n var newPaths = visibleFiles.includes(path)\n ? visibleFiles\n : __spreadArray(__spreadArray([], visibleFiles, true), [path], false);\n return __assign(__assign({}, rest), { activeFile: path, visibleFiles: newPaths });\n });\n },\n resetFile: function (path) {\n setState(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), { files: __assign(__assign({}, prevState.files), (_a = {}, _a[path] = originalStateFromProps.files[path], _a)) }));\n });\n },\n resetAllFiles: function () {\n setState(function (prev) { return (__assign(__assign({}, prev), { files: originalStateFromProps.files })); });\n },\n setActiveFile: function (activeFile) {\n if (state.files[activeFile]) {\n setState(function (prev) { return (__assign(__assign({}, prev), { activeFile: activeFile })); });\n }\n },\n updateCurrentFile: function (code, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n updateFile(state.activeFile, code, shouldUpdatePreview);\n },\n updateFile: updateFile,\n addFile: updateFile,\n closeFile: function (path) {\n if (state.visibleFiles.length === 1) {\n return;\n }\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, activeFile = _a.activeFile, prev = __rest(_a, [\"visibleFiles\", \"activeFile\"]);\n var indexOfRemovedPath = visibleFiles.indexOf(path);\n var newPaths = visibleFiles.filter(function (openPath) { return openPath !== path; });\n return __assign(__assign({}, prev), { activeFile: path === activeFile\n ? indexOfRemovedPath === 0\n ? visibleFiles[1]\n : visibleFiles[indexOfRemovedPath - 1]\n : activeFile, visibleFiles: newPaths });\n });\n },\n deleteFile: function (path, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, files = _a.files, activeFile = _a.activeFile, rest = __rest(_a, [\"visibleFiles\", \"files\", \"activeFile\"]);\n var newFiles = __assign({}, files);\n delete newFiles[path];\n var remainingVisibleFiles = visibleFiles.filter(function (openPath) { return openPath !== path; });\n var deletedLastVisibleFile = remainingVisibleFiles.length === 0;\n if (deletedLastVisibleFile) {\n var nextFile = Object.keys(files)[Object.keys(files).length - 1];\n return __assign(__assign({}, rest), { visibleFiles: [nextFile], activeFile: nextFile, files: newFiles, shouldUpdatePreview: shouldUpdatePreview });\n }\n return __assign(__assign({}, rest), { visibleFiles: remainingVisibleFiles, activeFile: path === activeFile\n ? remainingVisibleFiles[remainingVisibleFiles.length - 1]\n : activeFile, files: newFiles, shouldUpdatePreview: shouldUpdatePreview });\n });\n },\n };\n return [\n __assign(__assign({}, state), { visibleFilesFromProps: originalStateFromProps.visibleFiles }),\n operations,\n ];\n};\n\nvar Sandpack$1 = React.createContext(null);\nvar SandpackProvider = function (props) {\n var _a, _b, _c;\n var children = props.children, options = props.options, style = props.style, className = props.className, theme = props.theme;\n var _d = useFiles(props), fileState = _d[0], fileOperations = _d[1];\n var _e = useClient(props, fileState), clientState = _e[0], _f = _e[1], dispatchMessage = _f.dispatchMessage, addListener = _f.addListener, clientOperations = __rest(_f, [\"dispatchMessage\", \"addListener\"]);\n var appState = useAppState(props, fileState.files);\n React.useEffect(function () {\n clientOperations.initializeSandpackIframe();\n }, []);\n return (jsx(Sandpack$1.Provider, { value: __assign(__assign(__assign(__assign(__assign(__assign({}, fileState), clientState), appState), fileOperations), clientOperations), { autoReload: (_b = (_a = props.options) === null || _a === void 0 ? void 0 : _a.autoReload) !== null && _b !== void 0 ? _b : true, teamId: props === null || props === void 0 ? void 0 : props.teamId, exportOptions: (_c = props === null || props === void 0 ? void 0 : props.customSetup) === null || _c === void 0 ? void 0 : _c.exportOptions, listen: addListener, dispatch: dispatchMessage }), children: jsx(ClassNamesProvider, { classes: options === null || options === void 0 ? void 0 : options.classes, children: jsx(SandpackThemeProvider, { className: className, style: style, theme: theme, children: children }) }) }));\n};\n/**\n * @category Provider\n */\nvar SandpackConsumer = Sandpack$1.Consumer;\n\n/**\n * @category Hooks\n */\nfunction useSandpack() {\n var sandpack = React.useContext(Sandpack$1);\n if (sandpack === null) {\n throw new Error(\"[sandpack-react]: \\\"useSandpack\\\" must be wrapped by a \\\"SandpackProvider\\\"\");\n }\n var dispatch = sandpack.dispatch, listen = sandpack.listen, rest = __rest(sandpack, [\"dispatch\", \"listen\"]);\n return {\n sandpack: __assign({}, rest),\n dispatch: dispatch,\n listen: listen,\n };\n}\n\n/**\n * This returns the current state of the active file\n * and a method to update its content.\n *\n * @category Hooks\n */\nvar useActiveCode = function () {\n var _a, _b, _c;\n var sandpack = useSandpack().sandpack;\n return {\n code: (_a = sandpack.files[sandpack.activeFile]) === null || _a === void 0 ? void 0 : _a.code,\n readOnly: (_c = (_b = sandpack.files[sandpack.activeFile]) === null || _b === void 0 ? void 0 : _b.readOnly) !== null && _c !== void 0 ? _c : false,\n updateCode: sandpack.updateCurrentFile,\n };\n};\n\nvar _a$8, _b$2, _c;\nvar iconStandaloneClassName = css({\n svg: { margin: \"auto\" },\n});\nvar buttonClassName = css((_a$8 = {\n appearance: \"none\",\n outline: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n backgroundColor: \"transparent\",\n transition: \"color $default, background $default\",\n cursor: \"pointer\",\n color: \"$colors$clickable\",\n border: 0,\n textDecoration: \"none\",\n \"&:disabled\": { color: \"$colors$disabled\" },\n \"&:hover:not(:disabled,[data-active='true'])\": { color: \"$colors$hover\" },\n '&[data-active=\"true\"]': { color: \"$colors$accent\" },\n svg: {\n minWidth: \"$space$4\",\n width: \"$space$4\",\n height: \"$space$4\",\n }\n },\n _a$8[\"&.\".concat(iconStandaloneClassName)] = {\n padding: \"$space$1\",\n height: \"$space$7\",\n display: \"flex\",\n },\n // If there's a children besides the icon\n _a$8[\"&.\".concat(iconStandaloneClassName, \"&:not(:has(span))\")] = {\n width: \"$space$7\",\n },\n _a$8[\"&.\".concat(iconStandaloneClassName, \"&:has(svg + span)\")] = {\n paddingRight: \"$space$3\",\n paddingLeft: \"$space$2\",\n gap: \"$space$1\",\n },\n _a$8));\nvar roundedButtonClassName = css({\n backgroundColor: \"$colors$surface2\",\n borderRadius: \"99999px\",\n border: \"1px solid $colors$surface3\",\n '&[data-active=\"true\"]': {\n color: \"$colors$surface1\",\n background: \"$colors$accent\",\n },\n \"&:hover:not(:disabled,[data-active='true'])\": {\n backgroundColor: \"$colors$surface3\",\n },\n});\nvar iconClassName = css({ padding: 0 });\nvar fadeIn = keyframes({\n \"0%\": {\n opacity: 0,\n },\n \"100%\": {\n opacity: 1,\n },\n});\nvar absoluteClassName = css({\n position: \"absolute\",\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n top: \"0\",\n margin: \"0\",\n overflow: \"auto\",\n height: \"100%\",\n zIndex: \"$top\",\n});\nvar errorClassName = css((_b$2 = {\n whiteSpace: \"pre-wrap\",\n padding: \"$space$10\",\n backgroundColor: \"$colors$surface1\",\n display: \"flex\",\n gap: \"$space$2\",\n flexDirection: \"column\"\n },\n _b$2[\".\".concat(buttonClassName)] = {\n width: \"auto\",\n gap: \"$space$2\",\n padding: \"0 $space$3 0 $space$2\",\n marginTop: \"$space$1\",\n },\n _b$2.variants = {\n solidBg: {\n true: {\n backgroundColor: \"$colors$errorSurface\",\n },\n },\n },\n _b$2));\nvar errorBundlerClassName = css((_c = {\n padding: \"$space$10\",\n backgroundColor: \"$colors$surface1\"\n },\n _c[\".\".concat(buttonClassName)] = {\n marginTop: \"$space$6\",\n width: \"auto\",\n gap: \"$space$2\",\n padding: \"0 $space$3 0 $space$2\",\n },\n _c));\nvar errorMessageClassName = css({\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n color: \"$colors$error\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"$space$3\",\n variants: {\n errorCode: { true: { fontFamily: \"$font$mono\" } },\n },\n a: {\n color: \"inherit\",\n },\n p: {\n margin: 0,\n },\n});\n\nvar _a$7;\nvar tabsClassName = css({\n borderBottom: \"1px solid $colors$surface2\",\n background: \"$colors$surface1\",\n});\nvar tabsScrollableClassName = css({\n padding: \"0 $space$2\",\n overflow: \"auto\",\n display: \"flex\",\n flexWrap: \"nowrap\",\n alignItems: \"stretch\",\n minHeight: \"40px\",\n marginBottom: \"-1px\",\n});\nvar tabContainer = css({\n display: \"flex\",\n alignItems: \"center\",\n outline: \"none\",\n position: \"relative\",\n paddingRight: \"20px\",\n margin: \"1px 0\",\n \"&:has(button:focus)\": {\n outline: \"$colors$accent auto 1px\",\n },\n});\nvar closeButtonClassName = css({\n padding: \"0 $space$1 0 $space$1\",\n borderRadius: \"$border$radius\",\n marginLeft: \"$space$1\",\n width: \"$space$5\",\n visibility: \"hidden\",\n cursor: \"pointer\",\n position: \"absolute\",\n right: \"0px\",\n svg: {\n width: \"$space$3\",\n height: \"$space$3\",\n display: \"block\",\n position: \"relative\",\n top: 1,\n },\n});\nvar tabButton = css((_a$7 = {\n padding: \"0 $space$2\",\n height: \"$layout$headerHeight\",\n whiteSpace: \"nowrap\",\n \"&:focus\": {\n outline: \"none\",\n }\n },\n _a$7[\"&:hover ~ .\".concat(closeButtonClassName)] = { visibility: \"visible\" },\n _a$7));\n/**\n * FileTabs is a list of all open files, the active file, and its state.\n */\nvar FileTabs = function (_a) {\n var closableTabs = _a.closableTabs, className = _a.className, activeFileUniqueId = _a.activeFileUniqueId, props = __rest(_a, [\"closableTabs\", \"className\", \"activeFileUniqueId\"]);\n var sandpack = useSandpack().sandpack;\n var classNames = useClassNames();\n var activeFile = sandpack.activeFile, visibleFiles = sandpack.visibleFiles, setActiveFile = sandpack.setActiveFile;\n var _b = React.useState(null), hoveredIndex = _b[0], setIsHoveredIndex = _b[1];\n var getTriggerText = function (currentPath) {\n var documentFileName = getFileName(currentPath);\n var pathsWithDuplicateFileNames = visibleFiles.reduce(function (prev, curr) {\n if (curr === currentPath) {\n return prev;\n }\n var fileName = getFileName(curr);\n if (fileName === documentFileName) {\n prev.push(curr);\n return prev;\n }\n return prev;\n }, []);\n if (pathsWithDuplicateFileNames.length === 0) {\n return documentFileName;\n }\n else {\n return calculateNearestUniquePath(currentPath, pathsWithDuplicateFileNames);\n }\n };\n var onKeyDown = function (_a) {\n var _b, _c, _d, _e;\n var e = _a.e, index = _a.index;\n var target = e.currentTarget;\n switch (e.key) {\n case \"ArrowLeft\":\n {\n var leftSibling = target.previousElementSibling;\n if (leftSibling) {\n (_b = leftSibling.querySelector(\"button\")) === null || _b === void 0 ? void 0 : _b.focus();\n setActiveFile(visibleFiles[index - 1]);\n }\n }\n break;\n case \"ArrowRight\":\n {\n var rightSibling = target.nextElementSibling;\n if (rightSibling) {\n (_c = rightSibling.querySelector(\"button\")) === null || _c === void 0 ? void 0 : _c.focus();\n setActiveFile(visibleFiles[index + 1]);\n }\n }\n break;\n case \"Home\": {\n var parent_1 = target.parentElement;\n var firstChild = parent_1.firstElementChild;\n (_d = firstChild.querySelector(\"button\")) === null || _d === void 0 ? void 0 : _d.focus();\n setActiveFile(visibleFiles[0]);\n break;\n }\n case \"End\": {\n var parent_2 = target.parentElement;\n var lastChild = parent_2.lastElementChild;\n (_e = lastChild.querySelector(\"button\")) === null || _e === void 0 ? void 0 : _e.focus();\n setActiveFile(visibleFiles[-1]);\n break;\n }\n }\n };\n return (jsx(\"div\", __assign({ className: classNames(\"tabs\", [tabsClassName, className]), translate: \"no\" }, props, { children: jsx(\"div\", { \"aria-label\": \"Select active file\", className: classNames(\"tabs-scrollable-container\", [\n tabsScrollableClassName,\n ]), role: \"tablist\", children: visibleFiles.map(function (filePath, index) { return (jsxs(\"div\", { \"aria-controls\": \"\".concat(filePath, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), \"aria-selected\": filePath === activeFile, className: classNames(\"tab-container\", [tabContainer]), onKeyDown: function (e) { return onKeyDown({ e: e, index: index }); }, onMouseEnter: function () { return setIsHoveredIndex(index); }, onMouseLeave: function () { return setIsHoveredIndex(null); }, role: \"tab\", children: [jsx(\"button\", { className: classNames(\"tab-button\", [buttonClassName, tabButton]), \"data-active\": filePath === activeFile, id: \"\".concat(filePath, \"-\").concat(activeFileUniqueId, \"-tab\"), onClick: function () { return setActiveFile(filePath); }, tabIndex: filePath === activeFile ? 0 : -1, title: filePath, type: \"button\", children: getTriggerText(filePath) }), closableTabs && visibleFiles.length > 1 && (jsx(\"span\", { className: classNames(\"close-button\", [closeButtonClassName]), onClick: function (ev) {\n ev.stopPropagation();\n sandpack.closeFile(filePath);\n }, style: {\n visibility: filePath === activeFile || hoveredIndex === index\n ? \"visible\"\n : \"hidden\",\n }, tabIndex: filePath === activeFile ? 0 : -1, children: jsx(CloseIcon, {}) }))] }, filePath)); }) }) })));\n};\n\nvar RoundedButton = function (_a) {\n var onClick = _a.onClick, className = _a.className, children = _a.children;\n var classNames = useClassNames();\n return (jsx(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n className,\n ]), onClick: onClick, type: \"button\", children: children }));\n};\n\nvar runButtonClassName = css({\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n paddingRight: \"$space$3\",\n});\nvar RunButton$1 = function (_a) {\n _a.className; var onClick = _a.onClick, props = __rest(_a, [\"className\", \"onClick\"]);\n var sandpack = useSandpack().sandpack;\n return (jsxs(RoundedButton, __assign({ className: runButtonClassName.toString(), onClick: function (event) {\n sandpack.runSandpack();\n onClick === null || onClick === void 0 ? void 0 : onClick(event);\n } }, props, { children: [jsx(RunIcon, {}), jsx(\"span\", { children: \"Run\" })] })));\n};\n\nvar _a$6;\nvar stackClassName = css((_a$6 = {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n position: \"relative\",\n backgroundColor: \"$colors$surface1\",\n gap: 1\n },\n _a$6[\"&:has(.\".concat(THEME_PREFIX, \"-stack)\")] = {\n backgroundColor: \"$colors$surface2\",\n },\n _a$6));\nvar SandpackStack = function (_a) {\n var className = _a.className, props = __rest(_a, [\"className\"]);\n var classNames = useClassNames();\n return (jsx(\"div\", __assign({ className: classNames(\"stack\", [stackClassName, className]) }, props)));\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackTheme = function () {\n var _a = React.useContext(SandpackThemeContext), theme = _a.theme, id = _a.id, mode = _a.mode;\n return { theme: theme, themeId: id, themeMode: mode };\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar shallowEqual = function (a, b) {\n if (a.length !== b.length)\n return false;\n var result = true;\n for (var index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n result = false;\n break;\n }\n }\n return result;\n};\n\nvar getCodeMirrorPosition = function (doc, _a) {\n var line = _a.line, column = _a.column;\n return doc.line(line).from + (column !== null && column !== void 0 ? column : 0) - 1;\n};\nvar getEditorTheme = function () {\n return EditorView.theme({\n \"&\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface1)\"),\n color: \"var(--\".concat(THEME_PREFIX, \"-syntax-color-plain)\"),\n height: \"100%\",\n },\n \".cm-matchingBracket, .cm-nonmatchingBracket, &.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n color: \"inherit\",\n backgroundColor: \"rgba(128,128,128,.25)\",\n backgroundBlendMode: \"difference\",\n },\n \"&.cm-editor.cm-focused\": {\n outline: \"none\",\n },\n \"& .cm-activeLine\": {\n backgroundColor: \"transparent\",\n },\n \"&.cm-editor.cm-focused .cm-activeLine\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface3)\"),\n borderRadius: \"var(--\".concat(THEME_PREFIX, \"-border-radius)\"),\n },\n \".cm-errorLine\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-errorSurface)\"),\n borderRadius: \"var(--\".concat(THEME_PREFIX, \"-border-radius)\"),\n },\n \".cm-content\": {\n caretColor: \"var(--\".concat(THEME_PREFIX, \"-colors-accent)\"),\n padding: \"0 var(--\".concat(THEME_PREFIX, \"-space-4)\"),\n },\n \".cm-scroller\": {\n fontFamily: \"var(--\".concat(THEME_PREFIX, \"-font-mono)\"),\n lineHeight: \"var(--\".concat(THEME_PREFIX, \"-font-lineHeight)\"),\n },\n \".cm-gutters\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface1)\"),\n color: \"var(--\".concat(THEME_PREFIX, \"-colors-disabled)\"),\n border: \"none\",\n paddingLeft: \"var(--\".concat(THEME_PREFIX, \"-space-1)\"),\n },\n \".cm-gutter.cm-lineNumbers\": {\n fontSize: \".6em\",\n },\n \".cm-lineNumbers .cm-gutterElement\": {\n lineHeight: \"var(--\".concat(THEME_PREFIX, \"-font-lineHeight)\"),\n minWidth: \"var(--\".concat(THEME_PREFIX, \"-space-5)\"),\n },\n \".cm-content .cm-line\": { paddingLeft: \"var(--\".concat(THEME_PREFIX, \"-space-1)\") },\n \".cm-content.cm-readonly .cm-line\": { paddingLeft: 0 },\n });\n};\nvar classNameToken = function (name) {\n return \"\".concat(THEME_PREFIX, \"-syntax-\").concat(name);\n};\nvar styleTokens = function () {\n var syntaxHighLightTokens = [\n \"string\",\n \"plain\",\n \"comment\",\n \"keyword\",\n \"definition\",\n \"punctuation\",\n \"property\",\n \"tag\",\n \"static\",\n ];\n return syntaxHighLightTokens.reduce(function (acc, token) {\n var _a;\n return __assign(__assign({}, acc), (_a = {}, _a[\".\".concat(classNameToken(token))] = {\n color: \"$syntax$color$\".concat(token),\n fontStyle: \"$syntax$fontStyle$\".concat(token),\n }, _a));\n }, {});\n};\nvar getSyntaxHighlight = function (theme) {\n return HighlightStyle.define([\n { tag: tags.link, textDecoration: \"underline\" },\n { tag: tags.emphasis, fontStyle: \"italic\" },\n { tag: tags.strong, fontWeight: \"bold\" },\n {\n tag: tags.keyword,\n class: classNameToken(\"keyword\"),\n },\n {\n tag: [tags.atom, tags.number, tags.bool],\n class: classNameToken(\"static\"),\n },\n {\n tag: tags.variableName,\n class: classNameToken(\"plain\"),\n },\n {\n // Standard tags, e.g

    \n tag: tags.standard(tags.tagName),\n class: classNameToken(\"tag\"),\n },\n {\n tag: [\n // Highlight function call\n tags.function(tags.variableName),\n // Highlight function definition differently (eg: functional component def in React)\n tags.definition(tags.function(tags.variableName)),\n // \"Custom tags\", meaning React component\n tags.tagName,\n ],\n class: classNameToken(\"definition\"),\n },\n {\n tag: tags.propertyName,\n class: classNameToken(\"property\"),\n },\n {\n tag: [tags.literal, tags.inserted],\n class: classNameToken(theme.syntax.string ? \"string\" : \"static\"),\n },\n {\n tag: tags.punctuation,\n class: classNameToken(\"punctuation\"),\n },\n {\n tag: [tags.comment, tags.quote],\n class: classNameToken(\"comment\"),\n },\n ]);\n};\nvar getLanguageFromFile = function (filePath, fileType, additionalLanguages) {\n if (!filePath && !fileType)\n return \"javascript\";\n var extension = fileType;\n if (!extension && filePath) {\n var extensionDotIndex = filePath.lastIndexOf(\".\");\n extension = filePath.slice(extensionDotIndex + 1);\n }\n for (var _i = 0, additionalLanguages_1 = additionalLanguages; _i < additionalLanguages_1.length; _i++) {\n var additionalLanguage = additionalLanguages_1[_i];\n if (extension === additionalLanguage.name ||\n additionalLanguage.extensions.includes(extension || \"\")) {\n return additionalLanguage.name;\n }\n }\n switch (extension) {\n case \"ts\":\n case \"tsx\":\n return \"typescript\";\n case \"html\":\n case \"svelte\":\n case \"vue\":\n case \"astro\":\n return \"html\";\n case \"css\":\n case \"less\":\n case \"scss\":\n return \"css\";\n case \"js\":\n case \"jsx\":\n case \"json\":\n default:\n return \"javascript\";\n }\n};\nvar getCodeMirrorLanguage = function (extension, additionalLanguages) {\n var options = {\n javascript: javascript({ jsx: true, typescript: false }),\n typescript: javascript({ jsx: true, typescript: true }),\n html: html(),\n css: css$1(),\n };\n for (var _i = 0, additionalLanguages_2 = additionalLanguages; _i < additionalLanguages_2.length; _i++) {\n var additionalLanguage = additionalLanguages_2[_i];\n if (extension === additionalLanguage.name) {\n return additionalLanguage.language;\n }\n }\n return options[extension];\n};\nvar useCombinedRefs = function () {\n var refs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n refs[_i] = arguments[_i];\n }\n return React.useCallback(function (element) {\n return refs.forEach(function (ref) {\n if (!ref) {\n return;\n }\n // Ref can have two types - a function or an object. We treat each case.\n if (typeof ref === \"function\") {\n return ref(element);\n }\n // As per https://github.com/facebook/react/issues/13029\n // it should be fine to set current this way.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref.current = element;\n });\n }, \n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n};\n\nfunction highlightDecorators(positions) {\n return ViewPlugin.fromClass(/** @class */ (function () {\n function class_1(view) {\n this.decorations = this.getDecoration(view);\n }\n class_1.prototype.update = function (update) {\n return;\n };\n class_1.prototype.getDecoration = function (view) {\n if (!positions)\n return Decoration.none;\n var rangesDecorators = positions.map(function (item) {\n var _a, _b, _c;\n var lineDeco = Decoration.line({\n attributes: { class: (_a = item.className) !== null && _a !== void 0 ? _a : \"\" },\n });\n var markDeco = Decoration.mark({\n class: (_b = item.className) !== null && _b !== void 0 ? _b : \"\",\n attributes: (_c = item.elementAttributes) !== null && _c !== void 0 ? _c : undefined,\n });\n var positionLineStart = getCodeMirrorPosition(view.state.doc, {\n line: item.line,\n column: item.startColumn,\n }) + 1;\n if (item.startColumn && item.endColumn) {\n var positionLineEnd = getCodeMirrorPosition(view.state.doc, {\n line: item.line,\n column: item.endColumn,\n }) + 1;\n return markDeco.range(positionLineStart, positionLineEnd);\n }\n return lineDeco.range(positionLineStart);\n });\n return Decoration.set(rangesDecorators);\n };\n return class_1;\n }()), {\n decorations: function (v) { return v.decorations; },\n });\n}\n\nfunction highlightInlineError() {\n return activeLineHighlighter;\n}\nvar lineDeco = Decoration.line({ attributes: { class: \"cm-errorLine\" } });\nvar activeLineHighlighter = ViewPlugin.fromClass(/** @class */ (function () {\n function class_1() {\n this.decorations = Decoration.none;\n }\n class_1.prototype.update = function (update) {\n var _this = this;\n update.transactions.forEach(function (trans) {\n // @ts-ignore\n var errorValue = trans.annotation(\"show-error\");\n if (errorValue !== undefined) {\n var position = getCodeMirrorPosition(update.view.state.doc, {\n line: errorValue,\n }) + 1;\n _this.decorations = Decoration.set([lineDeco.range(position)]);\n // @ts-ignore\n }\n else if (trans.annotation(\"remove-errors\")) {\n _this.decorations = Decoration.none;\n }\n });\n };\n return class_1;\n}()), {\n decorations: function (v) { return v.decorations; },\n});\n\nvar _a$5, _b$1;\nvar placeholderClassName = css({\n margin: \"0\",\n display: \"block\",\n fontFamily: \"$font$mono\",\n fontSize: \"$font$size\",\n color: \"$syntax$color$plain\",\n lineHeight: \"$font$lineHeight\",\n});\nvar tokensClassName = css(styleTokens());\nvar editorClassName = css((_a$5 = {\n flex: 1,\n position: \"relative\",\n overflow: \"auto\",\n background: \"$colors$surface1\",\n \".cm-scroller\": {\n padding: \"$space$4 0\",\n }\n },\n _a$5[\".\".concat(placeholderClassName)] = {\n padding: \"$space$4 0\",\n },\n /**\n * For iOS: prevent browser zoom when clicking on sandbox.\n * Does NOT apply to code blocks.\n */\n _a$5[\"@media screen and (max-width: 768px)\"] = {\n \"@supports (-webkit-overflow-scrolling: touch)\": {\n \".cm-content\": { fontSize: \"16px\" },\n },\n },\n _a$5));\nvar cmClassName = css({\n margin: \"0\",\n outline: \"none\",\n height: \"100%\",\n});\nvar readOnlyClassName = css((_b$1 = {\n fontFamily: \"$font$mono\",\n fontSize: \"0.8em\",\n position: \"absolute\",\n right: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n backgroundColor: \"$colors$surface2\",\n borderRadius: \"99999px\",\n padding: \"calc($space$1 / 2) $space$2\"\n },\n _b$1[\"& + .\".concat(buttonClassName)] = {\n right: \"calc($space$11 * 2)\",\n },\n _b$1));\n\nvar useSyntaxHighlight = function (_a) {\n var langSupport = _a.langSupport, highlightTheme = _a.highlightTheme, _b = _a.code, code = _b === void 0 ? \"\" : _b;\n var tree = langSupport.language.parser.parse(code);\n var offSet = 0;\n var codeElementsRender = [];\n var addElement = function (to, className) {\n if (to > offSet) {\n var children = code.slice(offSet, to);\n codeElementsRender.push(className\n ? createElement(\"span\", {\n children: children,\n className: className,\n key: \"\".concat(to).concat(offSet),\n })\n : children);\n offSet = to;\n }\n };\n highlightTree(tree, highlightTheme, function (from, to, className) {\n addElement(from, \"\");\n addElement(to, className);\n });\n /**\n * The language parse doesn't look consistent.\n * The final syntax highlight used by CodeMirror\n * includes an end empty line, and the parse here doesn't,\n * so let's add it manually.\n */\n if (offSet < code.length && (code === null || code === void 0 ? void 0 : code.includes(\"\\n\"))) {\n codeElementsRender.push(\"\\n\\n\");\n }\n return codeElementsRender;\n};\n\nvar CodeMirror = React.forwardRef(function (_a, ref) {\n var _b = _a.code, code = _b === void 0 ? \"\" : _b, filePath = _a.filePath, fileType = _a.fileType, onCodeUpdate = _a.onCodeUpdate, _c = _a.showLineNumbers, showLineNumbers = _c === void 0 ? false : _c, _d = _a.showInlineErrors, showInlineErrors = _d === void 0 ? false : _d, _e = _a.wrapContent, wrapContent = _e === void 0 ? false : _e, _f = _a.editorState, editorState = _f === void 0 ? \"pristine\" : _f, _g = _a.readOnly, readOnly = _g === void 0 ? false : _g, _h = _a.showReadOnly, showReadOnly = _h === void 0 ? true : _h, decorators = _a.decorators, _j = _a.initMode, initMode = _j === void 0 ? \"lazy\" : _j, _k = _a.extensions, extensions = _k === void 0 ? [] : _k, _l = _a.extensionsKeymap, extensionsKeymap = _l === void 0 ? [] : _l, _m = _a.additionalLanguages, additionalLanguages = _m === void 0 ? [] : _m;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var wrapper = React.useRef(null);\n var combinedRef = useCombinedRefs(wrapper, ref);\n var cmView = React.useRef();\n var _o = useSandpackTheme(), theme = _o.theme, themeId = _o.themeId;\n var _p = React.useState(code), internalCode = _p[0], setInternalCode = _p[1];\n var _q = React.useState(initMode === \"immediate\"), shouldInitEditor = _q[0], setShouldInitEditor = _q[1];\n var classNames = useClassNames();\n var _r = useSandpack(), listen = _r.listen, autoReload = _r.sandpack.autoReload;\n var prevExtension = React.useRef([]);\n var prevExtensionKeymap = React.useRef([]);\n var isIntersecting = useIntersectionObserver(wrapper, {\n rootMargin: \"600px 0px\",\n threshold: 0.2,\n }).isIntersecting;\n React.useImperativeHandle(ref, function () { return ({\n getCodemirror: function () { return cmView.current; },\n }); });\n React.useEffect(function () {\n var mode = initMode === \"lazy\" || initMode === \"user-visible\";\n if (mode && isIntersecting) {\n setShouldInitEditor(true);\n }\n }, [initMode, isIntersecting]);\n var languageExtension = getLanguageFromFile(filePath, fileType, additionalLanguages);\n var langSupport = getCodeMirrorLanguage(languageExtension, additionalLanguages);\n var highlightTheme = getSyntaxHighlight(theme);\n var syntaxHighlightRender = useSyntaxHighlight({\n langSupport: langSupport,\n highlightTheme: highlightTheme,\n code: code,\n });\n // decorators need to be sorted by `line`, otherwise it will throw error\n // see https://github.com/codesandbox/sandpack/issues/383\n var sortedDecorators = React.useMemo(function () {\n return decorators\n ? decorators.sort(function (d1, d2) { return d1.line - d2.line; })\n : decorators;\n }, [decorators]);\n var useStaticReadOnly = readOnly && ((decorators === null || decorators === void 0 ? void 0 : decorators.length) === 0 || decorators === undefined);\n React.useEffect(function () {\n if (!wrapper.current || !shouldInitEditor || useStaticReadOnly) {\n return;\n }\n var parentDiv = wrapper.current;\n var existingPlaceholder = parentDiv.querySelector(\".sp-pre-placeholder\");\n if (existingPlaceholder) {\n parentDiv.removeChild(existingPlaceholder);\n }\n var view = new EditorView({\n doc: code,\n extensions: [],\n parent: parentDiv,\n });\n view.contentDOM.setAttribute(\"data-gramm\", \"false\");\n view.contentDOM.setAttribute(\"data-lt-active\", \"false\");\n view.contentDOM.setAttribute(\"aria-label\", filePath ? \"Code Editor for \".concat(getFileName(filePath)) : \"Code Editor\");\n view.contentDOM.setAttribute(\"tabIndex\", \"-1\");\n cmView.current = view;\n return function () {\n var _a;\n (_a = cmView.current) === null || _a === void 0 ? void 0 : _a.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldInitEditor, readOnly, useStaticReadOnly]);\n React.useEffect(function () {\n if (useStaticReadOnly) {\n return;\n }\n if (cmView.current) {\n var customCommandsKeymap = [\n {\n key: \"Tab\",\n run: function (view) {\n var _a, _b;\n indentMore(view);\n var customKey = extensionsKeymap.find(function (_a) {\n var key = _a.key;\n return key === \"Tab\";\n });\n return (_b = (_a = customKey === null || customKey === void 0 ? void 0 : customKey.run) === null || _a === void 0 ? void 0 : _a.call(customKey, view)) !== null && _b !== void 0 ? _b : true;\n },\n },\n {\n key: \"Shift-Tab\",\n run: function (view) {\n var _a, _b;\n indentLess({ state: view.state, dispatch: view.dispatch });\n var customKey = extensionsKeymap.find(function (_a) {\n var key = _a.key;\n return key === \"Shift-Tab\";\n });\n return (_b = (_a = customKey === null || customKey === void 0 ? void 0 : customKey.run) === null || _a === void 0 ? void 0 : _a.call(customKey, view)) !== null && _b !== void 0 ? _b : true;\n },\n },\n {\n key: \"Escape\",\n run: function () {\n if (readOnly)\n return true;\n if (wrapper.current) {\n wrapper.current.focus();\n }\n return true;\n },\n },\n {\n key: \"mod-Backspace\",\n run: deleteGroupBackward,\n },\n ];\n var extensionList = __spreadArray(__spreadArray([\n highlightSpecialChars(),\n history(),\n closeBrackets()\n ], extensions, true), [\n keymap.of(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], closeBracketsKeymap, true), defaultKeymap, true), historyKeymap, true), customCommandsKeymap, true), extensionsKeymap, true)),\n langSupport,\n getEditorTheme(),\n syntaxHighlighting(highlightTheme),\n EditorView.updateListener.of(function (update) {\n if (update.docChanged) {\n var newCode = update.state.doc.toString();\n setInternalCode(newCode);\n onCodeUpdate === null || onCodeUpdate === void 0 ? void 0 : onCodeUpdate(newCode);\n }\n }),\n ], false);\n if (readOnly) {\n extensionList.push(EditorState.readOnly.of(true));\n extensionList.push(EditorView.editable.of(false));\n }\n else {\n extensionList.push(bracketMatching());\n extensionList.push(highlightActiveLine());\n }\n if (sortedDecorators) {\n extensionList.push(highlightDecorators(sortedDecorators));\n }\n if (wrapContent) {\n extensionList.push(EditorView.lineWrapping);\n }\n if (showLineNumbers) {\n extensionList.push(lineNumbers());\n }\n if (showInlineErrors) {\n extensionList.push(highlightInlineError());\n }\n // Add new hightlight decorators\n cmView.current.dispatch({\n effects: StateEffect.reconfigure.of(extensionList),\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shouldInitEditor,\n sortedDecorators,\n showLineNumbers,\n wrapContent,\n themeId,\n readOnly,\n useStaticReadOnly,\n autoReload,\n ]);\n React.useEffect(function applyExtensions() {\n var view = cmView.current;\n var dependenciesAreDiff = !shallowEqual(extensions, prevExtension.current) ||\n !shallowEqual(extensionsKeymap, prevExtensionKeymap.current);\n if (view && dependenciesAreDiff) {\n view.dispatch({\n effects: StateEffect.appendConfig.of(extensions),\n });\n view.dispatch({\n effects: StateEffect.appendConfig.of(keymap.of(__spreadArray([], extensionsKeymap, true))),\n });\n prevExtension.current = extensions;\n prevExtensionKeymap.current = extensionsKeymap;\n }\n }, [extensions, extensionsKeymap]);\n React.useEffect(function () {\n // When the user clicks on a tab button on a larger screen\n // Avoid autofocus on mobile as it leads to a bad experience and an unexpected layout shift\n if (cmView.current &&\n editorState === \"dirty\" &&\n window.matchMedia(\"(min-width: 768px)\").matches) {\n cmView.current.contentDOM.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Update editor when code passed as prop from outside sandpack changes\n React.useEffect(function () {\n if (cmView.current && typeof code === \"string\" && code !== internalCode) {\n var view = cmView.current;\n var selection = view.state.selection.ranges.some(function (_a) {\n var to = _a.to, from = _a.from;\n return to > code.length || from > code.length;\n })\n ? EditorSelection.cursor(code.length)\n : view.state.selection;\n var changes = { from: 0, to: view.state.doc.length, insert: code };\n view.dispatch({ changes: changes, selection: selection });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code]);\n React.useEffect(function messageToInlineError() {\n if (!showInlineErrors)\n return;\n var unsubscribe = listen(function (message) {\n var view = cmView.current;\n if (message.type === \"success\") {\n view === null || view === void 0 ? void 0 : view.dispatch({\n // @ts-ignore\n annotations: [new Annotation(\"remove-errors\", true)],\n });\n }\n else if (message.type === \"action\" &&\n message.action === \"show-error\" &&\n message.path === filePath &&\n message.line) {\n view === null || view === void 0 ? void 0 : view.dispatch({\n // @ts-ignore\n annotations: [new Annotation(\"show-error\", message.line)],\n });\n }\n });\n return function () { return unsubscribe(); };\n }, [listen, showInlineErrors]);\n var handleContainerKeyDown = function (evt) {\n if (evt.key === \"Enter\" && cmView.current) {\n evt.preventDefault();\n cmView.current.contentDOM.focus();\n }\n };\n var gutterLineOffset = function () {\n // padding-left\n var offset = 4;\n if (showLineNumbers) {\n // line-number-gutter-width + gutter-padding\n offset += 6;\n }\n // line-padding\n if (!readOnly) {\n offset += 1;\n }\n return \"var(--\".concat(THEME_PREFIX, \"-space-\").concat(offset, \")\");\n };\n if (useStaticReadOnly) {\n return (jsxs(Fragment, { children: [jsx(\"pre\", { ref: combinedRef, className: classNames(\"cm\", [\n classNames(editorState),\n classNames(languageExtension),\n cmClassName,\n tokensClassName,\n ]), translate: \"no\", children: jsx(\"code\", { className: classNames(\"pre-placeholder\", [placeholderClassName]), style: { marginLeft: gutterLineOffset() }, children: syntaxHighlightRender }) }), readOnly && showReadOnly && (jsx(\"span\", __assign({ className: classNames(\"read-only\", [readOnlyClassName]) }, ({}), { children: \"Read-only\" })))] }));\n }\n return (jsx(\"div\", { ref: combinedRef, \"aria-autocomplete\": \"list\", \"aria-label\": filePath ? \"Code Editor for \".concat(getFileName(filePath)) : \"Code Editor\", \"aria-multiline\": \"true\", className: classNames(\"cm\", [\n classNames(editorState),\n classNames(languageExtension),\n cmClassName,\n tokensClassName,\n ]), onKeyDown: handleContainerKeyDown, role: \"textbox\", tabIndex: 0, translate: \"no\", suppressHydrationWarning: true, children: jsx(\"pre\", { className: classNames(\"pre-placeholder\", [placeholderClassName]), style: { marginLeft: gutterLineOffset() }, children: syntaxHighlightRender }) }));\n});\n\nvar SandpackCodeEditor = forwardRef(function (_a, ref) {\n var showTabs = _a.showTabs, _b = _a.showLineNumbers, showLineNumbers = _b === void 0 ? false : _b, _c = _a.showInlineErrors, showInlineErrors = _c === void 0 ? false : _c, _d = _a.showRunButton, showRunButton = _d === void 0 ? true : _d, _e = _a.wrapContent, wrapContent = _e === void 0 ? false : _e, _f = _a.closableTabs, closableTabs = _f === void 0 ? false : _f, initMode = _a.initMode, extensions = _a.extensions, extensionsKeymap = _a.extensionsKeymap, readOnly = _a.readOnly, showReadOnly = _a.showReadOnly, additionalLanguages = _a.additionalLanguages, className = _a.className, props = __rest(_a, [\"showTabs\", \"showLineNumbers\", \"showInlineErrors\", \"showRunButton\", \"wrapContent\", \"closableTabs\", \"initMode\", \"extensions\", \"extensionsKeymap\", \"readOnly\", \"showReadOnly\", \"additionalLanguages\", \"className\"]);\n var sandpack = useSandpack().sandpack;\n var _g = useActiveCode(), code = _g.code, updateCode = _g.updateCode, readOnlyFile = _g.readOnly;\n var activeFile = sandpack.activeFile, status = sandpack.status, editorState = sandpack.editorState;\n var shouldShowTabs = showTabs !== null && showTabs !== void 0 ? showTabs : sandpack.visibleFiles.length > 1;\n var classNames = useClassNames();\n var handleCodeUpdate = function (newCode, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n updateCode(newCode, shouldUpdatePreview);\n };\n var activeFileUniqueId = useSandpackId();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"editor\", [className]) }, props, { children: [shouldShowTabs && (jsx(FileTabs, { activeFileUniqueId: activeFileUniqueId, closableTabs: closableTabs })), jsxs(\"div\", { \"aria-labelledby\": \"\".concat(activeFile, \"-\").concat(activeFileUniqueId, \"-tab\"), className: classNames(\"code-editor\", [editorClassName]), id: \"\".concat(activeFile, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), role: \"tabpanel\", children: [jsx(CodeMirror, { ref: ref, additionalLanguages: additionalLanguages, code: code, editorState: editorState, extensions: extensions, extensionsKeymap: extensionsKeymap, filePath: activeFile, initMode: initMode || sandpack.initMode, onCodeUpdate: function (newCode) { var _a; return handleCodeUpdate(newCode, (_a = sandpack.autoReload) !== null && _a !== void 0 ? _a : true); }, readOnly: readOnly || readOnlyFile, showInlineErrors: showInlineErrors, showLineNumbers: showLineNumbers, showReadOnly: showReadOnly, wrapContent: wrapContent }, activeFile), showRunButton && (!sandpack.autoReload || status === \"idle\") ? (jsx(RunButton$1, {})) : null] })] })));\n});\n\nvar SandpackCodeViewer = React.forwardRef(function (_a, ref) {\n var showTabs = _a.showTabs, showLineNumbers = _a.showLineNumbers, decorators = _a.decorators, propCode = _a.code, initMode = _a.initMode, wrapContent = _a.wrapContent, additionalLanguages = _a.additionalLanguages, props = __rest(_a, [\"showTabs\", \"showLineNumbers\", \"decorators\", \"code\", \"initMode\", \"wrapContent\", \"additionalLanguages\"]);\n var sandpack = useSandpack().sandpack;\n var code = useActiveCode().code;\n var classNames = useClassNames();\n var shouldShowTabs = showTabs !== null && showTabs !== void 0 ? showTabs : sandpack.visibleFiles.length > 1;\n var activeFileUniqueId = useSandpackId();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"editor-viewer\") }, props, { children: [shouldShowTabs ? (jsx(FileTabs, { activeFileUniqueId: activeFileUniqueId })) : null, jsx(\"div\", { \"aria-labelledby\": \"\".concat(sandpack.activeFile, \"-\").concat(activeFileUniqueId, \"-tab\"), className: classNames(\"code-editor\", [editorClassName]), id: \"\".concat(sandpack.activeFile, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), role: \"tabpanel\", children: jsx(CodeMirror, { ref: ref, additionalLanguages: additionalLanguages, code: propCode !== null && propCode !== void 0 ? propCode : code, decorators: decorators, filePath: sandpack.activeFile, initMode: initMode || sandpack.initMode, showLineNumbers: showLineNumbers, showReadOnly: false, wrapContent: wrapContent, readOnly: true }) }), sandpack.status === \"idle\" ? jsx(RunButton$1, {}) : null] })));\n});\n\nvar _a$4, _b;\nvar layoutClassName = css((_a$4 = {\n border: \"1px solid $colors$surface2\",\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"stretch\",\n borderRadius: \"$border$radius\",\n overflow: \"hidden\",\n position: \"relative\",\n backgroundColor: \"$colors$surface2\",\n gap: 1\n },\n _a$4[\"> .\".concat(stackClassName)] = {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0\",\n height: \"$layout$height\",\n overflow: \"hidden\",\n \"@media print\": {\n height: \"auto\",\n display: \"block\",\n },\n \"@media screen and (max-width: 768px)\": (_b = {},\n _b[\"&:not(.\".concat(THEME_PREFIX, \"-preview, .\").concat(THEME_PREFIX, \"-editor, .\").concat(THEME_PREFIX, \"-preset-column)\")] = {\n height: \"calc($layout$height / 2)\",\n },\n /* triggers the layout break at the 768px breakpoint, not when the component is less then 700px */\n _b.minWidth = \"100%;\",\n _b),\n },\n _a$4[\"> .\".concat(THEME_PREFIX, \"-file-explorer\")] = {\n flex: 0.2,\n minWidth: 200,\n \"@media screen and (max-width: 768px)\": {\n flex: 1,\n },\n },\n _a$4));\nvar SandpackLayout = React.forwardRef(function (_a, ref) {\n var children = _a.children, className = _a.className, props = __rest(_a, [\"children\", \"className\"]);\n var sandpack = useSandpack().sandpack;\n var classNames = useClassNames();\n var combinedRef = useCombinedRefs(sandpack.lazyAnchorRef, ref);\n return (jsx(\"div\", __assign({ ref: combinedRef, className: classNames(\"layout\", [layoutClassName, className]) }, props, { children: children })));\n});\n\n/**\n * @category Hooks\n */\nvar useErrorMessage = function () {\n var _a;\n var sandpack = useSandpack().sandpack;\n var error = sandpack.error;\n return (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : null;\n};\n\nvar FADE_ANIMATION_DURATION = 200;\n/**\n * @category Hooks\n */\nvar useLoadingOverlayState = function (clientId, externalLoading) {\n var _a = useSandpack(), sandpack = _a.sandpack, listen = _a.listen;\n var _b = React.useState(\"LOADING\"), state = _b[0], setState = _b[1];\n /**\n * Sandpack listener\n */\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\" && message.firstLoad === true) {\n setState(\"LOADING\");\n }\n if (message.type === \"done\") {\n setState(function (prev) {\n return prev === \"LOADING\" ? \"PRE_FADING\" : \"HIDDEN\";\n });\n }\n }, clientId);\n return function () {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clientId, sandpack.status === \"idle\"]);\n /**\n * Fading transient state\n */\n React.useEffect(function () {\n var fadeTimeout;\n if (state === \"PRE_FADING\" && !externalLoading) {\n setState(\"FADING\");\n }\n else if (state === \"FADING\") {\n fadeTimeout = setTimeout(function () { return setState(\"HIDDEN\"); }, FADE_ANIMATION_DURATION);\n }\n return function () {\n clearTimeout(fadeTimeout);\n };\n }, [state, externalLoading]);\n if (sandpack.status === \"timeout\") {\n return \"TIMEOUT\";\n }\n if (sandpack.status !== \"running\") {\n return \"HIDDEN\";\n }\n return state;\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackNavigation = function (clientId) {\n var dispatch = useSandpack().dispatch;\n return {\n refresh: function () { return dispatch({ type: \"refresh\" }, clientId); },\n back: function () { return dispatch({ type: \"urlback\" }, clientId); },\n forward: function () { return dispatch({ type: \"urlforward\" }, clientId); },\n };\n};\n\nfunction getTranspiledCode(sandpack) {\n var _a, _b;\n var activeFile = sandpack.activeFile, bundlerState = sandpack.bundlerState;\n if (bundlerState == null) {\n return null;\n }\n var tModule = bundlerState.transpiledModules[activeFile + \":\"];\n return (_b = (_a = tModule === null || tModule === void 0 ? void 0 : tModule.source) === null || _a === void 0 ? void 0 : _a.compiledCode) !== null && _b !== void 0 ? _b : null;\n}\n/**\n * @category Hooks\n */\nvar useTranspiledCode = function () {\n var sandpack = useSandpack().sandpack;\n if (sandpack.status !== \"running\") {\n return null;\n }\n return getTranspiledCode(sandpack);\n};\n\n/**\n * It registers a new sandpack client and returns its instance,\n * listeners, and dispatch function. Using it when creating a custom\n * component to interact directly with the client is recommended.\n * For other cases, use `useSandpack` instead.\n *\n * @category Hooks\n */\nvar useSandpackClient = function (clientPropsOverride) {\n var _a = useSandpack(), sandpack = _a.sandpack, listen = _a.listen, dispatch = _a.dispatch;\n var iframeRef = React.useRef(null);\n var clientId = React.useRef(generateRandomId());\n React.useEffect(function () {\n var iframeElement = iframeRef.current;\n var clientIdValue = clientId.current;\n if (iframeElement !== null) {\n sandpack.registerBundler(iframeElement, clientIdValue, clientPropsOverride);\n }\n return function () { return sandpack.unregisterBundler(clientIdValue); };\n }, []);\n var getClient = function () {\n return sandpack.clients[clientId.current] || null;\n };\n return {\n sandpack: sandpack,\n getClient: getClient,\n clientId: clientId.current,\n iframe: iframeRef,\n listen: function (listener) {\n return listen(listener, clientId.current);\n },\n dispatch: function (message) { return dispatch(message, clientId.current); },\n };\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackShell = function (clientId) {\n var dispatch = useSandpack().dispatch;\n return {\n restart: function () { return dispatch({ type: \"shell/restart\" }, clientId); },\n openPreview: function () { return dispatch({ type: \"shell/openPreview\" }, clientId); },\n };\n};\n\nvar mapProgressMessage = function (originalMessage, firstTotalPending) {\n var _a;\n switch (originalMessage.state) {\n case \"downloading_manifest\":\n return \"[1/3] Downloading manifest\";\n case \"downloaded_module\":\n return \"[2/3] Downloaded \".concat(originalMessage.name, \" (\").concat(firstTotalPending - originalMessage.totalPending, \"/\").concat(firstTotalPending, \")\");\n case \"starting_command\":\n return \"[3/3] Starting command\";\n case \"command_running\":\n return \"[3/3] Running \\\"\".concat((_a = originalMessage.command) === null || _a === void 0 ? void 0 : _a.trim(), \"\\\"\");\n }\n};\nvar useSandpackPreviewProgress = function (props) {\n var _a = React.useState(false), isReady = _a[0], setIsReady = _a[1];\n var _b = React.useState(), totalDependencies = _b[0], setTotalDependencies = _b[1];\n var _c = React.useState(null), loadingMessage = _c[0], setLoadingMessage = _c[1];\n var timeout = props === null || props === void 0 ? void 0 : props.timeout;\n var clientId = props === null || props === void 0 ? void 0 : props.clientId;\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var timer;\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\" && message.firstLoad) {\n setIsReady(false);\n }\n if (timeout) {\n timer = setTimeout(function () {\n setLoadingMessage(null);\n }, timeout);\n }\n if (message.type === \"dependencies\") {\n setLoadingMessage(function () {\n switch (message.data.state) {\n case \"downloading_manifest\":\n return \"[1/3] Downloading manifest\";\n case \"downloaded_module\":\n return \"[2/3] Downloaded \".concat(message.data.name, \" (\").concat(message.data.progress, \"/\").concat(message.data.total, \")\");\n case \"starting\":\n return \"[3/3] Starting\";\n }\n return null;\n });\n }\n else if (message.type === \"shell/progress\" && !isReady) {\n if (!totalDependencies && message.data.state === \"downloaded_module\") {\n setTotalDependencies(message.data.totalPending);\n }\n if (totalDependencies !== undefined) {\n setLoadingMessage(mapProgressMessage(message.data, totalDependencies));\n }\n }\n if (message.type === \"done\" && message.compilatonError === false) {\n setLoadingMessage(null);\n setIsReady(true);\n clearTimeout(timer);\n }\n }, clientId);\n return function () {\n if (timer) {\n clearTimeout(timer);\n }\n unsubscribe();\n };\n }, [clientId, isReady, totalDependencies, timeout]);\n return loadingMessage;\n};\n\nvar MAX_MESSAGE_COUNT$1 = 400 * 2;\nvar useSandpackShellStdout = function (_a) {\n var clientId = _a.clientId, _b = _a.maxMessageCount, maxMessageCount = _b === void 0 ? MAX_MESSAGE_COUNT$1 : _b; _a.resetOnPreviewRestart;\n var _d = React.useState([]), logs = _d[0], setLogs = _d[1];\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\") {\n setLogs([]);\n }\n else if (message.type === \"stdout\" &&\n message.payload.data &&\n Boolean(message.payload.data.trim())) {\n setLogs(function (prev) {\n var messages = __spreadArray(__spreadArray([], prev, true), [\n { data: message.payload.data, id: generateRandomId() },\n ], false);\n while (messages.length > maxMessageCount) {\n messages.shift();\n }\n return messages;\n });\n }\n }, clientId);\n return unsubscribe;\n }, [maxMessageCount, clientId]);\n return { logs: logs, reset: function () { return setLogs([]); } };\n};\n\nvar mapBundlerErrors = function (originalMessage) {\n var errorMessage = originalMessage.replace(\"[sandpack-client]: \", \"\");\n if (/process.exit/.test(errorMessage)) {\n var exitCode = errorMessage.match(/process.exit\\((\\d+)\\)/);\n if (!exitCode)\n return errorMessage;\n // Crash\n if (Number(exitCode[1]) === 0) {\n return \"Server is not running, would you like to start it again?\";\n }\n return \"Server has crashed with status code \".concat(exitCode[1], \", would you like to restart the server?\");\n }\n return errorMessage;\n};\nvar ErrorOverlay = function (props) {\n var children = props.children, className = props.className, otherProps = __rest(props, [\"children\", \"className\"]);\n var errorMessage = useErrorMessage();\n var restart = useSandpackShell().restart;\n var classNames = useClassNames();\n var _a = useSandpack().sandpack, runSandpack = _a.runSandpack, teamId = _a.teamId;\n var dispatch = useSandpack().dispatch;\n if (!errorMessage && !children) {\n return null;\n }\n var isSandpackBundlerError = errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.startsWith(\"[sandpack-client]\");\n var privateDependencyError = errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.includes(\"NPM_REGISTRY_UNAUTHENTICATED_REQUEST\");\n var onSignIn = function () {\n if (teamId) {\n dispatch({ type: \"sign-in\", teamId: teamId });\n }\n };\n if (privateDependencyError) {\n return (jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorBundlerClassName,\n className,\n ]) }, props, { children: [jsx(\"p\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsx(\"strong\", { children: \"Unable to fetch required dependency.\" }) }), jsx(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsxs(\"p\", { children: [\"Authentication required. Please sign in to your account (make sure to allow pop-ups to this page) and try again. If the issue persists, contact\", \" \", jsx(\"a\", { href: \"mailto:hello@codesandbox.io?subject=Sandpack Timeout Error\", children: \"support\" }), \" \", \"for further assistance.\"] }) }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: onSignIn, children: [jsx(SignInIcon, {}), jsx(\"span\", { children: \"Sign in\" })] }) })] })));\n }\n if (isSandpackBundlerError && errorMessage) {\n return (jsx(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorBundlerClassName,\n className,\n ]) }, otherProps, { children: jsxs(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: [jsx(\"p\", { className: classNames(\"error-title\", [css({ fontWeight: \"bold\" })]), children: \"Couldn't connect to server\" }), jsx(\"p\", { children: mapBundlerErrors(errorMessage) }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: function () {\n restart();\n runSandpack();\n }, title: \"Restart script\", type: \"button\", children: [jsx(RestartIcon, {}), \" \", jsx(\"span\", { children: \"Restart\" })] }) })] }) })));\n }\n return (jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorClassName({ solidBg: true }),\n className,\n ]), translate: \"no\" }, otherProps, { children: [jsx(\"p\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsx(\"strong\", { children: \"Something went wrong\" }) }), jsx(\"p\", { className: classNames(\"error-message\", [\n errorMessageClassName({ errorCode: true }),\n ]), children: errorMessage || children })] })));\n};\n\n/**\n * Stole from https://github.com/nteract/ansi-to-react/blob/master/src/index.ts\n */\n/**\n * Converts ANSI strings into JSON output.\n * @name ansiToJSON\n * @function\n * @param {String} input The input string.\n * @param {boolean} use_classes If `true`, HTML classes will be appended\n * to the HTML output.\n * @return {Array} The parsed input.\n */\nfunction ansiToJSON(input, use_classes) {\n if (use_classes === void 0) { use_classes = false; }\n input = escapeCarriageReturn(fixBackspace(input));\n return Anser.ansiToJson(input, {\n json: true,\n remove_empty: true,\n use_classes: use_classes,\n });\n}\n/**\n * Create a class string.\n * @name createClass\n * @function\n * @param {AnserJsonEntry} bundle\n * @return {String} class name(s)\n */\nfunction createClass(bundle) {\n var classNames = \"\";\n if (bundle.bg) {\n classNames += \"\".concat(bundle.bg, \"-bg \");\n }\n if (bundle.fg) {\n classNames += \"\".concat(bundle.fg, \"-fg \");\n }\n if (bundle.decoration) {\n classNames += \"ansi-\".concat(bundle.decoration, \" \");\n }\n if (classNames === \"\") {\n return null;\n }\n classNames = classNames.substring(0, classNames.length - 1);\n return classNames;\n}\n/**\n * Create the style attribute.\n * @name createStyle\n * @function\n * @param {AnserJsonEntry} bundle\n * @return {Object} returns the style object\n */\nfunction createStyle(bundle) {\n var style = {};\n if (bundle.bg) {\n style.backgroundColor = \"rgb(\".concat(bundle.bg, \")\");\n }\n if (bundle.fg) {\n style.color = \"rgb(\".concat(bundle.fg, \")\");\n }\n switch (bundle.decoration) {\n case \"bold\":\n style.fontWeight = \"bold\";\n break;\n case \"dim\":\n style.opacity = \"0.5\";\n break;\n case \"italic\":\n style.fontStyle = \"italic\";\n break;\n case \"hidden\":\n style.visibility = \"hidden\";\n break;\n case \"strikethrough\":\n style.textDecoration = \"line-through\";\n break;\n case \"underline\":\n style.textDecoration = \"underline\";\n break;\n case \"blink\":\n style.textDecoration = \"blink\";\n break;\n }\n return style;\n}\n/**\n * Converts an Anser bundle into a React Node.\n * @param linkify whether links should be converting into clickable anchor tags.\n * @param useClasses should render the span with a class instead of style.\n * @param bundle Anser output.\n * @param key\n */\nfunction convertBundleIntoReact(linkify, useClasses, bundle, key) {\n var style = useClasses ? null : createStyle(bundle);\n var className = useClasses ? createClass(bundle) : null;\n if (!linkify) {\n return React.createElement(\"span\", { style: style, key: key, className: className }, bundle.content);\n }\n var content = [];\n var linkRegex = /(\\s|^)(https?:\\/\\/(?:www\\.|(?!www))[^\\s.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/g;\n var index = 0;\n var match;\n while ((match = linkRegex.exec(bundle.content)) !== null) {\n var pre = match[1], url = match[2];\n var startIndex = match.index + pre.length;\n if (startIndex > index) {\n content.push(bundle.content.substring(index, startIndex));\n }\n // Make sure the href we generate from the link is fully qualified. We assume http\n // if it starts with a www because many sites don't support https\n var href = url.startsWith(\"www.\") ? \"http://\".concat(url) : url;\n content.push(React.createElement(\"a\", {\n key: index,\n href: href,\n target: \"_blank\",\n }, \"\".concat(url)));\n index = linkRegex.lastIndex;\n }\n if (index < bundle.content.length) {\n content.push(bundle.content.substring(index));\n }\n return React.createElement(\"span\", { style: style, key: key, className: className }, content);\n}\nfunction Ansi(props) {\n var className = props.className, useClasses = props.useClasses, children = props.children, linkify = props.linkify;\n return React.createElement(\"code\", { className: className }, ansiToJSON(children !== null && children !== void 0 ? children : \"\", useClasses !== null && useClasses !== void 0 ? useClasses : false).map(convertBundleIntoReact.bind(null, linkify !== null && linkify !== void 0 ? linkify : false, useClasses !== null && useClasses !== void 0 ? useClasses : false)));\n}\n// This is copied from the Jupyter Classic source code\n// notebook/static/base/js/utils.js to handle \\b in a way\n// that is **compatible with Jupyter classic**. One can\n// argue that this behavior is questionable:\n// https://stackoverflow.com/questions/55440152/multiple-b-doesnt-work-as-expected-in-jupyter#\nfunction fixBackspace(txt) {\n var tmp = txt;\n do {\n txt = tmp;\n // Cancel out anything-but-newline followed by backspace\n // eslint-disable-next-line no-control-regex\n tmp = txt.replace(/[^\\n]\\x08/gm, \"\");\n } while (tmp.length < txt.length);\n return txt;\n}\n\nvar StdoutList = function (_a) {\n var data = _a.data;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: data.map(function (_a) {\n var data = _a.data, id = _a.id;\n return (jsx(\"div\", { className: classNames(\"console-item\", [consoleItemClassName$1]), children: jsx(Ansi, { children: data }) }, id));\n }) }));\n};\nvar consoleItemClassName$1 = css({\n width: \"100%\",\n padding: \"$space$3 $space$2\",\n fontSize: \".85em\",\n position: \"relative\",\n whiteSpace: \"pre\",\n \"&:not(:first-child):after\": {\n content: \"\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n height: 1,\n background: \"$colors$surface3\",\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar getParameters = function (parameters) {\n return LZString.compressToBase64(JSON.stringify(parameters))\n .replace(/\\+/g, \"-\") // Convert '+' to '-'\n .replace(/\\//g, \"_\") // Convert '/' to '_'\n .replace(/=+$/, \"\");\n}; /* Remove ending '='*/\nvar CSB_URL = \"https://codesandbox.io/api/v1/sandboxes/define\";\nvar getFileParameters = function (files, environment) {\n var normalizedFiles = Object.keys(files).reduce(function (prev, next) {\n var _a;\n var fileName = next.replace(\"/\", \"\");\n var value = {\n content: files[next].code,\n isBinary: false,\n };\n return __assign(__assign({}, prev), (_a = {}, _a[fileName] = value, _a));\n }, {});\n return getParameters(__assign({ files: normalizedFiles }, (environment ? { template: environment } : null)));\n};\nvar UnstyledOpenInCodeSandboxButton = function (props) {\n var sandpack = useSandpack().sandpack;\n if (sandpack.exportOptions) {\n return jsx(ExportToWorkspaceButton, __assign({ state: sandpack }, props));\n }\n return jsx(RegularExportButton, __assign({ state: sandpack }, props));\n};\nvar ExportToWorkspaceButton = function (_a) {\n var children = _a.children, state = _a.state, props = __rest(_a, [\"children\", \"state\"]);\n var submit = function () { return __awaiter(void 0, void 0, void 0, function () {\n var normalizedFiles, response, data;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!((_a = state.exportOptions) === null || _a === void 0 ? void 0 : _a.apiToken)) {\n throw new Error(\"Missing `apiToken` property\");\n }\n normalizedFiles = Object.keys(state.files).reduce(function (prev, next) {\n var _a;\n var fileName = next.replace(\"/\", \"\");\n return __assign(__assign({}, prev), (_a = {}, _a[fileName] = state.files[next], _a));\n }, {});\n return [4 /*yield*/, fetch(\"https://api.codesandbox.io/sandbox\", {\n method: \"POST\",\n body: JSON.stringify({\n template: state.environment,\n files: normalizedFiles,\n privacy: state.exportOptions.privacy === \"public\" ? 0 : 2,\n }),\n headers: {\n Authorization: \"Bearer \".concat(state.exportOptions.apiToken),\n \"Content-Type\": \"application/json\",\n \"X-CSB-API-Version\": \"2023-07-01\",\n },\n })];\n case 1:\n response = _b.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _b.sent();\n window.open(\"https://codesandbox.io/p/sandbox/\".concat(data.data.alias, \"?file=/\").concat(state.activeFile, \"&utm-source=storybook-addon\"), \"_blank\");\n return [2 /*return*/];\n }\n });\n }); };\n return (jsx(\"button\", __assign({ onClick: submit, title: \"Export to workspace in CodeSandbox\", type: \"button\" }, props, { children: children })));\n};\nvar RegularExportButton = function (_a) {\n var _b, _c, _d;\n var children = _a.children, state = _a.state, props = __rest(_a, [\"children\", \"state\"]);\n var formRef = React.useRef(null);\n var _e = React.useState(), paramsValues = _e[0], setParamsValues = _e[1];\n React.useEffect(function debounce() {\n var timer = setTimeout(function () {\n var params = getFileParameters(state.files, state.environment);\n var searchParams = new URLSearchParams({\n parameters: params,\n query: new URLSearchParams({\n file: state.activeFile,\n utm_medium: \"sandpack\",\n }).toString(),\n });\n setParamsValues(searchParams);\n }, 600);\n return function () {\n clearTimeout(timer);\n };\n }, [state.activeFile, state.environment, state.files]);\n /**\n * This is a safe limit to avoid too long requests (401),\n * as all parameters are attached in the URL\n */\n if (((_d = (_c = (_b = paramsValues === null || paramsValues === void 0 ? void 0 : paramsValues.get) === null || _b === void 0 ? void 0 : _b.call(paramsValues, \"parameters\")) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 1500) {\n return (jsxs(\"button\", __assign({ onClick: function () { var _a; return (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.submit(); }, title: \"Open in CodeSandbox\", type: \"button\" }, props, { children: [jsxs(\"form\", { ref: formRef, action: CSB_URL, method: \"POST\", style: { visibility: \"hidden\" }, target: \"_blank\", children: [jsx(\"input\", { name: \"environment\", type: \"hidden\", value: state.environment === \"node\" ? \"server\" : state.environment }), Array.from(paramsValues, function (_a) {\n var key = _a[0], value = _a[1];\n return (jsx(\"input\", { name: key, type: \"hidden\", value: value }, key));\n })] }), children] })));\n }\n return (jsx(\"a\", __assign({ href: \"\".concat(CSB_URL, \"?\").concat(paramsValues === null || paramsValues === void 0 ? void 0 : paramsValues.toString(), \"&environment=\").concat(state.environment === \"node\" ? \"server\" : state.environment), rel: \"noreferrer noopener\", target: \"_blank\", title: \"Open in CodeSandbox\" }, props, { children: children })));\n};\n\nvar OpenInCodeSandboxButton = function () {\n var classNames = useClassNames();\n return (jsxs(UnstyledOpenInCodeSandboxButton, { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), children: [jsx(ExportIcon, {}), jsx(\"span\", { children: \"Open Sandbox\" })] }));\n};\n\nvar _a$3;\nvar cubeClassName = css({\n transform: \"translate(-4px, 9px) scale(0.13, 0.13)\",\n \"*\": { position: \"absolute\", width: \"96px\", height: \"96px\" },\n});\nvar wrapperClassName$2 = css((_a$3 = {\n position: \"absolute\",\n right: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n width: \"32px\",\n height: \"32px\",\n borderRadius: \"$border$radius\"\n },\n _a$3[\".\".concat(cubeClassName)] = { display: \"flex\" },\n _a$3[\".sp-button.\".concat(buttonClassName)] = { display: \"none\" },\n _a$3[\"&:hover .sp-button.\".concat(buttonClassName)] = { display: \"flex\" },\n _a$3[\"&:hover .sp-button.\".concat(buttonClassName, \" > span\")] = { display: \"none\" },\n _a$3[\"&:hover .\".concat(cubeClassName)] = { display: \"none\" },\n _a$3));\nvar cubeRotate = keyframes({\n \"0%\": {\n transform: \"rotateX(-25.5deg) rotateY(45deg)\",\n },\n \"100%\": {\n transform: \"rotateX(-25.5deg) rotateY(405deg)\",\n },\n});\nvar sidesClassNames = css({\n animation: \"\".concat(cubeRotate, \" 1s linear infinite\"),\n animationFillMode: \"forwards\",\n transformStyle: \"preserve-3d\",\n transform: \"rotateX(-25.5deg) rotateY(45deg)\",\n \"*\": {\n border: \"10px solid $colors$clickable\",\n borderRadius: \"8px\",\n background: \"$colors$surface1\",\n },\n \".top\": {\n transform: \"rotateX(90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".bottom\": {\n transform: \"rotateX(-90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".front\": {\n transform: \"rotateY(0deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".back\": {\n transform: \"rotateY(-180deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".left\": {\n transform: \"rotateY(-90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".right\": {\n transform: \"rotateY(90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n});\nvar Loading = function (_a) {\n var className = _a.className, showOpenInCodeSandbox = _a.showOpenInCodeSandbox, props = __rest(_a, [\"className\", \"showOpenInCodeSandbox\"]);\n var classNames = useClassNames();\n return (jsxs(\"div\", __assign({ className: classNames(\"cube-wrapper\", [wrapperClassName$2, className]), title: \"Open in CodeSandbox\" }, props, { children: [showOpenInCodeSandbox && jsx(OpenInCodeSandboxButton, {}), jsx(\"div\", { className: classNames(\"cube\", [cubeClassName]), children: jsxs(\"div\", { className: classNames(\"sides\", [sidesClassNames]), children: [jsx(\"div\", { className: \"top\" }), jsx(\"div\", { className: \"right\" }), jsx(\"div\", { className: \"bottom\" }), jsx(\"div\", { className: \"left\" }), jsx(\"div\", { className: \"front\" }), jsx(\"div\", { className: \"back\" })] }) })] })));\n};\n\nvar loadingClassName = css({\n backgroundColor: \"$colors$surface1\",\n});\nvar LoadingOverlay = function (_a) {\n var clientId = _a.clientId, loading = _a.loading, className = _a.className, style = _a.style, showOpenInCodeSandbox = _a.showOpenInCodeSandbox, props = __rest(_a, [\"clientId\", \"loading\", \"className\", \"style\", \"showOpenInCodeSandbox\"]);\n var classNames = useClassNames();\n var _b = useSandpack().sandpack, runSandpack = _b.runSandpack, environment = _b.environment;\n var _c = React.useState(false), shouldShowStdout = _c[0], setShouldShowStdout = _c[1];\n var loadingOverlayState = useLoadingOverlayState(clientId, loading);\n var progressMessage = useSandpackPreviewProgress({ clientId: clientId });\n var stdoutData = useSandpackShellStdout({ clientId: clientId }).logs;\n React.useEffect(function () {\n var timer;\n if (progressMessage === null || progressMessage === void 0 ? void 0 : progressMessage.includes(\"Running\")) {\n timer = setTimeout(function () {\n setShouldShowStdout(true);\n }, 3000);\n }\n return function () {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [progressMessage]);\n if (loadingOverlayState === \"HIDDEN\") {\n return null;\n }\n if (loadingOverlayState === \"TIMEOUT\") {\n return (jsx(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorClassName,\n errorBundlerClassName,\n className,\n ]) }, props, { children: jsxs(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: [jsx(\"p\", { className: classNames(\"error-title\", [css({ fontWeight: \"bold\" })]), children: \"Couldn't connect to server\" }), jsx(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsxs(\"p\", { children: [\"This means sandpack cannot connect to the runtime or your network is having some issues. Please check the network tab in your browser and try again. If the problem persists, report it via\", \" \", jsx(\"a\", { href: \"mailto:hello@codesandbox.io?subject=Sandpack Timeout Error\", children: \"email\" }), \" \", \"or submit an issue on\", \" \", jsx(\"a\", { href: \"https://github.com/codesandbox/sandpack/issues\", rel: \"noreferrer noopener\", target: \"_blank\", children: \"GitHub.\" })] }) }), jsxs(\"p\", { className: classNames(\"error-message\", [\n errorMessageClassName({ errorCode: true }),\n ]), children: [\"ENV: \", environment, jsx(\"br\", {}), \"ERROR: TIME_OUT\"] }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: runSandpack, title: \"Restart script\", type: \"button\", children: [jsx(RestartIcon, {}), \" \", jsx(\"span\", { children: \"Try again\" })] }) })] }) })));\n }\n var stillLoading = loadingOverlayState === \"LOADING\" || loadingOverlayState === \"PRE_FADING\";\n return (jsxs(Fragment, { children: [jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"loading\"),\n absoluteClassName,\n loadingClassName,\n className,\n ]), style: __assign(__assign({}, style), { opacity: stillLoading ? 1 : 0, transition: \"opacity \".concat(FADE_ANIMATION_DURATION, \"ms ease-out\") }) }, props, { children: [shouldShowStdout && (jsx(\"div\", { className: stdoutPreview.toString(), children: jsx(StdoutList, { data: stdoutData }) })), jsx(Loading, { showOpenInCodeSandbox: showOpenInCodeSandbox })] })), progressMessage && (jsx(\"div\", { className: progressClassName$1.toString(), children: jsx(\"p\", { children: progressMessage }) }))] }));\n};\nvar stdoutPreview = css({\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: \"$space$8\",\n overflow: \"auto\",\n opacity: 0.5,\n overflowX: \"hidden\",\n});\nvar progressClassName$1 = css({\n position: \"absolute\",\n left: \"$space$5\",\n bottom: \"$space$4\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n fontFamily: \"$font$mono\",\n fontSize: \".8em\",\n width: \"75%\",\n p: {\n whiteSpace: \"nowrap\",\n margin: 0,\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n});\n\nvar DependenciesProgress = function (_a) {\n var clientId = _a.clientId;\n var progressMessage = useSandpackPreviewProgress({\n timeout: 3000,\n clientId: clientId,\n });\n if (!progressMessage) {\n return null;\n }\n return (jsx(\"div\", { className: progressClassName.toString(), children: jsx(\"p\", { children: progressMessage }) }));\n};\nvar progressClassName = css({\n position: \"absolute\",\n left: \"$space$5\",\n bottom: \"$space$4\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n fontFamily: \"$font$mono\",\n fontSize: \".8em\",\n width: \"75%\",\n p: {\n whiteSpace: \"nowrap\",\n margin: 0,\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n});\n\nvar explorerClassName = css({\n borderRadius: \"0\",\n width: \"100%\",\n padding: 0,\n marginBottom: \"$space$2\",\n span: {\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n },\n svg: {\n marginRight: \"$space$1\",\n },\n});\nvar File = function (_a) {\n var selectFile = _a.selectFile, path = _a.path, active = _a.active, onClick = _a.onClick, depth = _a.depth, isDirOpen = _a.isDirOpen;\n var classNames = useClassNames();\n var onClickButton = function (event) {\n if (selectFile) {\n selectFile(path);\n }\n onClick === null || onClick === void 0 ? void 0 : onClick(event);\n };\n var fileName = path.split(\"/\").filter(Boolean).pop();\n var getIcon = function () {\n if (selectFile)\n return jsx(FileIcon, {});\n return isDirOpen ? jsx(DirectoryIconOpen, {}) : jsx(DirectoryIconClosed, {});\n };\n return (jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"explorer\"),\n buttonClassName,\n explorerClassName,\n ]), \"data-active\": active, onClick: onClickButton, style: { paddingLeft: 18 * depth + \"px\" }, title: fileName, type: \"button\", children: [getIcon(), jsx(\"span\", { children: fileName })] }));\n};\n\nvar Directory = function (_a) {\n var prefixedPath = _a.prefixedPath, files = _a.files, selectFile = _a.selectFile, activeFile = _a.activeFile, depth = _a.depth, autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, initialCollapsedFolder = _a.initialCollapsedFolder;\n var _b = React.useState(!(initialCollapsedFolder === null || initialCollapsedFolder === void 0 ? void 0 : initialCollapsedFolder.includes(prefixedPath))), open = _b[0], setOpen = _b[1];\n var toggle = function () { return setOpen(function (prev) { return !prev; }); };\n return (jsxs(\"div\", { children: [jsx(File, { depth: depth, isDirOpen: open, onClick: toggle, path: prefixedPath + \"/\" }), open && (jsx(ModuleList, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, depth: depth + 1, files: files, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: prefixedPath, selectFile: selectFile, visibleFiles: visibleFiles }))] }, prefixedPath));\n};\n\nvar fromPropsToModules = function (_a) {\n var autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, files = _a.files, prefixedPath = _a.prefixedPath;\n var hasVisibleFilesOption = visibleFiles.length > 0;\n /**\n * When visibleFiles or activeFile are set, the hidden and active flags on the files prop are ignored.\n */\n var filterByHiddenProperty = autoHiddenFiles && !hasVisibleFilesOption;\n var filterByVisibleFilesOption = autoHiddenFiles && !!hasVisibleFilesOption;\n var fileListWithoutPrefix = Object.keys(files)\n .filter(function (filePath) {\n var _a;\n var isValidatedPath = filePath.startsWith(prefixedPath);\n if (filterByVisibleFilesOption) {\n return isValidatedPath && visibleFiles.includes(filePath);\n }\n if (filterByHiddenProperty) {\n return isValidatedPath && !((_a = files[filePath]) === null || _a === void 0 ? void 0 : _a.hidden);\n }\n return isValidatedPath;\n })\n .map(function (file) { return file.substring(prefixedPath.length); });\n var directories = new Set(fileListWithoutPrefix\n .filter(function (file) { return file.includes(\"/\"); })\n .map(function (file) { return \"\".concat(prefixedPath).concat(file.split(\"/\")[0], \"/\"); }));\n var modules = fileListWithoutPrefix\n .filter(function (file) { return !file.includes(\"/\"); })\n .map(function (file) { return \"\".concat(prefixedPath).concat(file); });\n return { directories: Array.from(directories), modules: modules };\n};\n\nvar ModuleList = function (_a) {\n var _b = _a.depth, depth = _b === void 0 ? 0 : _b, activeFile = _a.activeFile, selectFile = _a.selectFile, prefixedPath = _a.prefixedPath, files = _a.files, autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, initialCollapsedFolder = _a.initialCollapsedFolder;\n var _c = fromPropsToModules({\n visibleFiles: visibleFiles,\n autoHiddenFiles: autoHiddenFiles,\n prefixedPath: prefixedPath,\n files: files,\n }), directories = _c.directories, modules = _c.modules;\n return (jsxs(\"div\", { children: [directories.map(function (dir) { return (jsx(Directory, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, depth: depth, files: files, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: dir, selectFile: selectFile, visibleFiles: visibleFiles }, dir)); }), modules.map(function (file) { return (jsx(File, { active: activeFile === file, depth: depth, path: file, selectFile: selectFile }, file)); })] }));\n};\n\nvar fileExplorerClassName = css({\n padding: \"$space$3\",\n overflow: \"auto\",\n height: \"100%\",\n});\nvar SandpackFileExplorer = function (_a) {\n var className = _a.className, _b = _a.autoHiddenFiles, autoHiddenFiles = _b === void 0 ? false : _b, _c = _a.initialCollapsedFolder, initialCollapsedFolder = _c === void 0 ? [] : _c, props = __rest(_a, [\"className\", \"autoHiddenFiles\", \"initialCollapsedFolder\"]);\n var _d = useSandpack(), _e = _d.sandpack, status = _e.status, updateFile = _e.updateFile, deleteFile = _e.deleteFile, activeFile = _e.activeFile, files = _e.files, openFile = _e.openFile, visibleFilesFromProps = _e.visibleFilesFromProps, listen = _d.listen;\n var classNames = useClassNames();\n React.useEffect(function watchFSFilesChanges() {\n if (status !== \"running\")\n return;\n var unsubscribe = listen(function (message) {\n if (message.type === \"fs/change\") {\n updateFile(message.path, message.content, false);\n }\n if (message.type === \"fs/remove\") {\n deleteFile(message.path, false);\n }\n });\n return unsubscribe;\n }, [status]);\n var orderedFiles = Object.keys(files)\n .sort()\n .reduce(function (obj, key) {\n obj[key] = files[key];\n return obj;\n }, {});\n return (jsx(\"div\", __assign({ className: classNames(\"file-explorer\", [stackClassName, className]) }, props, { children: jsx(\"div\", { className: classNames(\"file-explorer-list\", [fileExplorerClassName]), children: jsx(ModuleList, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, files: orderedFiles, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: \"/\", selectFile: openFile, visibleFiles: visibleFilesFromProps }) }) })));\n};\n\nvar splitUrl = function (url) {\n var match = url.match(/(https?:\\/\\/.*?)\\//);\n if (match && match[1]) {\n return [match[1], url.replace(match[1], \"\")];\n }\n return [url, \"/\"];\n};\n\nvar navigatorClassName = css({\n display: \"flex\",\n alignItems: \"center\",\n height: \"$layout$headerHeight\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"$space$3 $space$2\",\n background: \"$colors$surface1\",\n});\nvar inputClassName = css({\n backgroundColor: \"$colors$surface2\",\n color: \"$colors$clickable\",\n padding: \"$space$1 $space$3\",\n borderRadius: \"99999px\",\n border: \"1px solid $colors$surface2\",\n height: \"24px\",\n lineHeight: \"24px\",\n fontSize: \"inherit\",\n outline: \"none\",\n flex: 1,\n marginLeft: \"$space$4\",\n width: \"0\",\n transition: \"background $transitions$default\",\n \"&:hover\": {\n backgroundColor: \"$colors$surface3\",\n },\n \"&:focus\": {\n backgroundColor: \"$surface1\",\n border: \"1px solid $colors$accent\",\n color: \"$colors$base\",\n },\n});\nvar Navigator = function (_a) {\n var _b;\n var clientId = _a.clientId, onURLChange = _a.onURLChange, className = _a.className, startRoute = _a.startRoute, props = __rest(_a, [\"clientId\", \"onURLChange\", \"className\", \"startRoute\"]);\n var _c = React.useState(\"\"), baseUrl = _c[0], setBaseUrl = _c[1];\n var _d = useSandpack(), sandpack = _d.sandpack, dispatch = _d.dispatch, listen = _d.listen;\n var _e = React.useState((_b = startRoute !== null && startRoute !== void 0 ? startRoute : sandpack.startRoute) !== null && _b !== void 0 ? _b : \"/\"), relativeUrl = _e[0], setRelativeUrl = _e[1];\n var _f = React.useState(false), backEnabled = _f[0], setBackEnabled = _f[1];\n var _g = React.useState(false), forwardEnabled = _g[0], setForwardEnabled = _g[1];\n var classNames = useClassNames();\n React.useEffect(function () {\n var unsub = listen(function (message) {\n if (message.type === \"urlchange\") {\n var url = message.url, back = message.back, forward = message.forward;\n var _a = splitUrl(url), newBaseUrl = _a[0], newRelativeUrl = _a[1];\n setBaseUrl(newBaseUrl);\n setRelativeUrl(newRelativeUrl);\n setBackEnabled(back);\n setForwardEnabled(forward);\n }\n }, clientId);\n return function () { return unsub(); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n var handleInputChange = function (e) {\n var path = e.target.value.startsWith(\"/\")\n ? e.target.value\n : \"/\".concat(e.target.value);\n setRelativeUrl(path);\n };\n var handleKeyDown = function (e) {\n if (e.code === \"Enter\") {\n // Enter\n e.preventDefault();\n e.stopPropagation();\n if (typeof onURLChange === \"function\") {\n onURLChange(baseUrl + e.currentTarget.value);\n }\n }\n };\n var handleRefresh = function () {\n dispatch({ type: \"refresh\" });\n };\n var handleBack = function () {\n dispatch({ type: \"urlback\" });\n };\n var handleForward = function () {\n dispatch({ type: \"urlforward\" });\n };\n var buttonsClassNames = classNames(\"button\", [\n classNames(\"icon\"),\n buttonClassName,\n iconClassName,\n css({\n minWidth: \"$space$6\",\n justifyContent: \"center\",\n }),\n ]);\n return (jsxs(\"div\", __assign({ className: classNames(\"navigator\", [navigatorClassName, className]) }, props, { children: [jsx(\"button\", { \"aria-label\": \"Go back one page\", className: buttonsClassNames, disabled: !backEnabled, onClick: handleBack, type: \"button\", children: jsx(BackwardIcon, {}) }), jsx(\"button\", { \"aria-label\": \"Go forward one page\", className: buttonsClassNames, disabled: !forwardEnabled, onClick: handleForward, type: \"button\", children: jsx(ForwardIcon, {}) }), jsx(\"button\", { \"aria-label\": \"Refresh page\", className: buttonsClassNames, onClick: handleRefresh, type: \"button\", children: jsx(RefreshIcon, {}) }), jsx(\"input\", { \"aria-label\": \"Current Sandpack URL\", className: classNames(\"input\", [inputClassName]), name: \"Current Sandpack URL\", onChange: handleInputChange, onKeyDown: handleKeyDown, type: \"text\", value: relativeUrl })] })));\n};\n\nvar _a$2;\nvar previewClassName = css((_a$2 = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n background: \"white\",\n overflow: \"auto\",\n position: \"relative\"\n },\n _a$2[\".\".concat(THEME_PREFIX, \"-bridge-frame\")] = {\n border: 0,\n position: \"absolute\",\n left: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n height: 12,\n width: \"30%\",\n mixBlendMode: \"multiply\",\n pointerEvents: \"none\",\n },\n _a$2));\nvar previewIframe = css({\n border: \"0\",\n outline: \"0\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"160px\",\n maxHeight: \"2000px\",\n flex: 1,\n});\nvar previewActionsClassName$1 = css({\n display: \"flex\",\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n zIndex: \"$overlay\",\n gap: \"$space$2\",\n});\nvar SandpackPreview = React.forwardRef(function (_a, ref) {\n var _b = _a.showNavigator, showNavigator = _b === void 0 ? false : _b, _c = _a.showRefreshButton, showRefreshButton = _c === void 0 ? true : _c, _d = _a.showOpenInCodeSandbox, showOpenInCodeSandbox = _d === void 0 ? true : _d, _e = _a.showSandpackErrorOverlay, showSandpackErrorOverlay = _e === void 0 ? true : _e; _a.showOpenNewtab; var _g = _a.showRestartButton, showRestartButton = _g === void 0 ? true : _g, _h = _a.actionsChildren, actionsChildren = _h === void 0 ? jsx(Fragment, {}) : _h, children = _a.children, className = _a.className, _j = _a.startRoute, startRoute = _j === void 0 ? \"/\" : _j, props = __rest(_a, [\"showNavigator\", \"showRefreshButton\", \"showOpenInCodeSandbox\", \"showSandpackErrorOverlay\", \"showOpenNewtab\", \"showRestartButton\", \"actionsChildren\", \"children\", \"className\", \"startRoute\"]);\n var _k = useSandpackClient({ startRoute: startRoute }), sandpack = _k.sandpack, listen = _k.listen, iframe = _k.iframe, getClient = _k.getClient, clientId = _k.clientId, dispatch = _k.dispatch;\n var _l = React.useState(null), iframeComputedHeight = _l[0], setComputedAutoHeight = _l[1];\n var status = sandpack.status;\n var refresh = useSandpackNavigation(clientId).refresh;\n var restart = useSandpackShell(clientId).restart;\n var classNames = useClassNames();\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"resize\") {\n setComputedAutoHeight(message.height);\n }\n });\n return unsubscribe;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useImperativeHandle(ref, function () { return ({\n clientId: clientId,\n getClient: getClient,\n }); }, [getClient, clientId]);\n var handleNewURL = function (newUrl) {\n if (!iframe.current) {\n return;\n }\n iframe.current.src = newUrl;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n };\n return (jsxs(SandpackStack, __assign({ className: classNames(\"preview\", [className]) }, props, { children: [showNavigator && (jsx(Navigator, { clientId: clientId, onURLChange: handleNewURL, startRoute: startRoute })), jsxs(\"div\", { className: classNames(\"preview-container\", [previewClassName]), children: [jsx(\"iframe\", { ref: iframe, className: classNames(\"preview-iframe\", [previewIframe]), style: {\n // set height based on the content only in auto mode\n // and when the computed height was returned by the bundler\n height: iframeComputedHeight ? iframeComputedHeight : undefined,\n }, title: \"Sandpack Preview\" }), jsxs(\"div\", { className: classNames(\"preview-actions\", [previewActionsClassName$1]), children: [actionsChildren, showRestartButton && sandpack.environment === \"node\" && (jsx(RoundedButton, { onClick: restart, children: jsx(RestartIcon, {}) })), !showNavigator && showRefreshButton && status === \"running\" && (jsx(RoundedButton, { onClick: refresh, children: jsx(RefreshIcon, {}) })), sandpack.teamId && (jsx(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: function () { return dispatch({ type: \"sign-out\" }); }, title: \"Sign out\", type: \"button\", children: jsx(SignOutIcon, {}) })), showOpenInCodeSandbox && jsx(OpenInCodeSandboxButton, {})] }), jsx(LoadingOverlay, { clientId: clientId, showOpenInCodeSandbox: showOpenInCodeSandbox }), showSandpackErrorOverlay && jsx(ErrorOverlay, {}), children] })] })));\n});\n\nvar _a$1;\nvar transpiledCodeClassName = css((_a$1 = {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"auto\",\n minHeight: \"160px\",\n flex: 1\n },\n _a$1[\".\".concat(THEME_PREFIX, \"-stack\")] = {\n height: \"100%\",\n },\n _a$1));\nvar SandpackTranspiledCode = function (_a) {\n var className = _a.className, props = __rest(_a, [\"className\"]);\n var sandpack = useSandpack().sandpack;\n var transpiledCode = useTranspiledCode();\n var classNames = useClassNames();\n var hiddenIframeRef = React.useRef(null);\n React.useEffect(function () {\n var hiddenIframe = hiddenIframeRef.current;\n if (hiddenIframe) {\n sandpack.registerBundler(hiddenIframe, \"hidden\");\n }\n return function () {\n sandpack.unregisterBundler(\"hidden\");\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (jsxs(\"div\", __assign({ className: classNames(\"transpiled-code\", [\n stackClassName,\n transpiledCodeClassName,\n className,\n ]) }, props, { children: [jsx(SandpackCodeViewer, __assign({ code: transpiledCode !== null && transpiledCode !== void 0 ? transpiledCode : \"\", initMode: sandpack.initMode }, props)), jsx(\"iframe\", { ref: hiddenIframeRef, style: { display: \"none\" }, title: \"transpiled sandpack code\" }), jsx(ErrorOverlay, {}), jsx(LoadingOverlay, { clientId: \"hidden\", showOpenInCodeSandbox: false })] })));\n};\n\nvar wrapperClassName$1 = css({\n justifyContent: \"space-between\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"0 $space$2\",\n fontFamily: \"$font$mono\",\n height: \"$layout$headerHeight\",\n minHeight: \"$layout$headerHeight\",\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n});\nvar flexClassName$1 = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"$space$2\",\n});\nvar Header$1 = function (_a) {\n var status = _a.status, suiteOnly = _a.suiteOnly, setSuiteOnly = _a.setSuiteOnly, setVerbose = _a.setVerbose, verbose = _a.verbose, watchMode = _a.watchMode, setWatchMode = _a.setWatchMode, showSuitesOnly = _a.showSuitesOnly, showWatchButton = _a.showWatchButton, showVerboseButton = _a.showVerboseButton, hideTestsAndSupressLogs = _a.hideTestsAndSupressLogs;\n var classNames = useClassNames();\n var buttonsClassName = classNames(\"test-header-button\", [\n buttonClassName,\n roundedButtonClassName,\n css({ padding: \"$space$1 $space$3\" }),\n ]);\n return (jsxs(\"div\", { className: classNames(\"test-header\", [wrapperClassName$1, flexClassName$1]), children: [jsx(\"div\", { className: classNames(\"test-header-wrapper\", [flexClassName$1]), children: jsxs(\"p\", { className: classNames(\"test-header-title\", [\n css({\n lineHeight: 1,\n margin: 0,\n color: \"$colors$base\",\n fontSize: \"$font$size\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"$space$2\",\n }),\n ]), children: [jsx(ConsoleIcon, {}), \"Tests\"] }) }), jsxs(\"div\", { className: classNames(\"test-header-actions\", [flexClassName$1]), children: [showSuitesOnly && (jsx(\"button\", { className: buttonsClassName, \"data-active\": suiteOnly, disabled: status === \"initialising\", onClick: setSuiteOnly, type: \"button\", children: \"Suite only\" })), showVerboseButton && (jsx(\"button\", { className: buttonsClassName, \"data-active\": verbose, disabled: status === \"initialising\" || hideTestsAndSupressLogs, onClick: setVerbose, type: \"button\", children: \"Verbose\" })), showWatchButton && (jsx(\"button\", { className: buttonsClassName, \"data-active\": watchMode, disabled: status === \"initialising\", onClick: setWatchMode, type: \"button\", children: \"Watch\" }))] })] }));\n};\n\nvar RunButton = function (_a) {\n var onClick = _a.onClick;\n return (jsx(RoundedButton, { onClick: onClick, title: \"Run tests\", children: jsx(RunIcon, {}) }));\n};\n\nvar setTestTheme = function (isDark) { return ({\n \"--test-pass\": isDark ? \"#18df16\" : \"#15c213\",\n \"--test-fail\": isDark ? \"#df162b\" : \"#c21325\",\n \"--test-skip\": isDark ? \"#eace2b\" : \"#c2a813\",\n \"--test-run\": isDark ? \"#eace2b\" : \"#c2a813\",\n \"--test-title\": isDark ? \"#3fbabe\" : \"#256c6f\",\n}); };\nvar color = css({\n variants: {\n status: {\n pass: { color: \"var(--test-pass)\" },\n fail: { color: \"var(--test-fail)\" },\n skip: { color: \"var(--test-skip)\" },\n title: { color: \"var(--test-title)\" },\n },\n },\n});\nvar passTextClassName = color({ status: \"pass\" });\nvar failTextClassName = color({ status: \"fail\" });\nvar skipTextClassName = color({ status: \"skip\" });\nvar titleTextClassName = color({ status: \"title\" });\nvar background = css({\n variants: {\n status: {\n pass: { background: \"var(--test-pass)\", color: \"$colors$surface1\" },\n fail: { background: \"var(--test-fail)\", color: \"$colors$surface1\" },\n run: { background: \"var(--test-run)\", color: \"$colors$surface1\" },\n },\n },\n});\nvar runBackgroundClassName = background({ status: \"run\" });\nvar passBackgroundClassName = background({ status: \"pass\" });\nvar failBackgroundClassName = background({ status: \"fail\" });\n\nvar testContainerClassName = css({\n marginLeft: \"$space$4\",\n});\nvar containerClassName$4 = css({\n marginBottom: \"$space$2\",\n color: \"$colors$clickable\",\n});\nvar testClassName = css({\n marginBottom: \"$space$2\",\n color: \"$colors$hover\",\n});\nvar durationClassName = css({\n marginLeft: \"$space$2\",\n});\nvar gapRightClassName = css({\n marginRight: \"$space$2\",\n});\nvar Tests = function (_a) {\n var tests = _a.tests; _a.style;\n var classNames = useClassNames();\n return (jsx(\"div\", { className: classNames(\"test\", [testContainerClassName]), children: tests.map(function (test) { return (jsxs(\"div\", { className: classNames(\"test-result\", [containerClassName$4]), children: [test.status === \"pass\" && (jsx(\"span\", { className: classNames(\"test-pass-text\", [\n passTextClassName,\n gapRightClassName,\n ]), children: \"\\u2713\" })), test.status === \"fail\" && (jsx(\"span\", { className: classNames(\"test-fail-text\", [\n failTextClassName,\n gapRightClassName,\n ]), children: \"\\u2715\" })), test.status === \"idle\" && (jsx(\"span\", { className: classNames(\"test-idle-text\", [\n skipTextClassName,\n gapRightClassName,\n ]), children: \"\\u25CB\" })), jsx(\"span\", { className: classNames(\"test-name-text\", [testClassName]), children: test.name }), test.duration !== undefined && (jsxs(\"span\", { className: classNames(\"test-duration-text\", [durationClassName]), children: [\"(\", test.duration, \" ms)\"] }))] }, test.name)); }) }));\n};\n\nvar getTests = function (block) {\n var _a;\n var _b, _c;\n return (_a = Object.values((_b = block.tests) !== null && _b !== void 0 ? _b : {})).concat.apply(_a, Object.values((_c = block.describes) !== null && _c !== void 0 ? _c : {}).map(getTests));\n};\nvar getFailingTests = function (block) {\n return getTests(block).filter(function (t) { return t.status === \"fail\"; });\n};\nvar getAllTestResults = function (specs) {\n return specs.map(getSpecTestResults).reduce(function (acc, stats) {\n return {\n pass: acc.pass + stats.pass,\n fail: acc.fail + stats.fail,\n skip: acc.skip + stats.skip,\n total: acc.total + stats.total,\n };\n }, { pass: 0, skip: 0, fail: 0, total: 0 });\n};\nvar getSpecTestResults = function (spec) {\n return getTests(spec).reduce(function (acc, test) {\n return {\n pass: test.status === \"pass\" ? acc.pass + 1 : acc.pass,\n fail: test.status === \"fail\" ? acc.fail + 1 : acc.fail,\n skip: test.status === \"idle\" || test.status === \"running\"\n ? acc.skip + 1\n : acc.skip,\n total: acc.total + 1,\n };\n }, { pass: 0, fail: 0, skip: 0, total: 0 });\n};\nvar getAllSuiteResults = function (specs) {\n return specs\n .filter(function (spec) {\n var _a, _b;\n return Object.values((_a = spec.describes) !== null && _a !== void 0 ? _a : {}).length > 0 ||\n Object.values((_b = spec.tests) !== null && _b !== void 0 ? _b : {}).length > 0;\n })\n .map(getSpecTestResults)\n .reduce(function (acc, stats) {\n return {\n pass: acc.pass + (stats.fail === 0 ? 1 : 0),\n fail: acc.fail + (stats.fail > 0 ? 1 : 0),\n total: acc.total + 1,\n };\n }, { pass: 0, fail: 0, total: 0 });\n};\nvar getDuration = function (specs) {\n return flatMap(specs, getTests).reduce(function (acc, test) { return acc + (test.duration || 0); }, 0);\n};\nvar isEmpty = function (block) {\n var _a, _b;\n return Object.values((_a = block.describes) !== null && _a !== void 0 ? _a : {}).length === 0 &&\n Object.values((_b = block.tests) !== null && _b !== void 0 ? _b : {}).length === 0;\n};\nvar splitTail = function (as) {\n var lastIndex = as.length - 1;\n var head = as.slice(0, lastIndex);\n var tail = as[lastIndex];\n return [head, tail];\n};\nvar flatMap = function (as, f) {\n return as.map(f).reduce(function (acc, next) { return acc.concat(next); }, []);\n};\nvar set = function (path, value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (object) {\n return cleanSet(object, path, value);\n };\n};\n\nvar nameClassName = css({\n color: \"$colors$hover\",\n marginBottom: \"$space$2\",\n});\nvar containerClassName$3 = css({\n marginLeft: \"$space$4\",\n});\nvar Describes = function (_a) {\n var describes = _a.describes;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: describes.map(function (describe) {\n var _a, _b;\n if (isEmpty(describe)) {\n return null;\n }\n var tests = Object.values((_a = describe.tests) !== null && _a !== void 0 ? _a : {});\n var describes = Object.values((_b = describe.describes) !== null && _b !== void 0 ? _b : {});\n return (jsxs(\"div\", { className: classNames(\"test-describe\", [containerClassName$3]), children: [jsx(\"div\", { className: classNames(\"test-name\", [nameClassName]), children: describe.name }), jsx(Tests, { tests: tests }), jsx(Describes, { describes: describes })] }, describe.name));\n }) }));\n};\n\nvar containerClassName$2 = css({\n color: \"$colors$hover\",\n fontSize: \"$font$size\",\n padding: \"$space$2\",\n whiteSpace: \"pre-wrap\",\n});\nvar FormattedError = function (_a) {\n var error = _a.error, path = _a.path;\n var classNames = useClassNames();\n return (jsx(\"div\", { className: classNames(\"test-error\", [containerClassName$2]), dangerouslySetInnerHTML: { __html: formatDiffMessage(error, path) } }));\n};\nvar escapeHtml = function (unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\nvar formatDiffMessage = function (error, path) {\n var _a, _b;\n var finalMessage = \"\";\n if (error.matcherResult) {\n finalMessage = \"\".concat(escapeHtml((_a = error.message) !== null && _a !== void 0 ? _a : \"\")\n .replace(/(expected)/m, \"$1\"))\n .replace(/(received)/m, \"$1\"))\n .replace(/(Difference:)/m, \"$1\")\n .replace(/(Expected:)(.*)/m, \"$1$2\"))\n .replace(/(Received:)(.*)/m, \"$1$2\"))\n .replace(/^(-.*)/gm, \"$1\"))\n .replace(/^(\\+.*)/gm, \"$1\")), \"\");\n }\n else {\n finalMessage = escapeHtml((_b = error.message) !== null && _b !== void 0 ? _b : \"\");\n }\n if (error.mappedErrors &&\n error.mappedErrors[0] &&\n error.mappedErrors[0].fileName.endsWith(path) &&\n error.mappedErrors[0]._originalScriptCode) {\n var mappedError = error.mappedErrors[0];\n var _originalScriptCode = mappedError._originalScriptCode || [];\n var widestNumber_1 = Math.max.apply(Math, _originalScriptCode.map(function (code) { return (code.lineNumber + \"\").length; })) + 2;\n var margin_1 = Array.from({ length: widestNumber_1 }).map(function () { return \" \"; });\n finalMessage += \"
    \";\n finalMessage += \"
    \";\n finalMessage += \"
    \";\n _originalScriptCode\n .filter(function (s) { return s.content.trim(); })\n .forEach(function (code) {\n var currentLineMargin = (code.lineNumber + \"\").length;\n var newMargin = __spreadArray([], margin_1, true);\n newMargin.length -= currentLineMargin;\n if (code.highlight) {\n newMargin.length -= 2;\n }\n var toBeIndex = code.content.indexOf(\".to\");\n var toBeMargin = Array.from({ length: margin_1.length + toBeIndex - (widestNumber_1 - 1) }, function () { return \" \"; });\n var content = escapeHtml(code.content)\n .replace(/(describe|test|it)(\\()('|"|`)(.*)('|"|`)/m, \"$1$2$3$4$5\"))\n .replace(/(expect\\()(.*)(\\)\\..*)(to[\\w\\d]*)(\\()(.*)(\\))/m, \"$1$2$3$4$5$6$7\"));\n finalMessage +=\n \"
    \") +\n (code.highlight\n ? \"> \")\n : \"\") +\n newMargin.join(\"\") +\n escapeHtml(\"\" + code.lineNumber) +\n \" | \" +\n content +\n \"
    \" +\n (code.highlight\n ? \"
    \" +\n margin_1.join(\"\") +\n \" | \" +\n toBeMargin.join(\"\") +\n \"^\") +\n \"
    \"\n : \"\");\n });\n finalMessage += \"
    \";\n }\n return finalMessage.replace(/(?:\\r\\n|\\r|\\n)/g, \"
    \");\n};\n\nvar fileContainer = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginBottom: \"$space$2\",\n});\nvar gapBottomClassName$1 = css({\n marginBottom: \"$space$2\",\n});\nvar failTestClassName = css({\n fontWeight: \"bold\",\n});\nvar labelClassName$1 = css({\n borderRadius: \"calc($border$radius / 2)\",\n});\nvar specLabelClassName = css({\n padding: \"$space$1 $space$2\",\n fontFamily: \"$font$mono\",\n textTransform: \"uppercase\",\n marginRight: \"$space$2\",\n});\nvar filePathButtonClassName = css({\n fontFamily: \"$font$mono\",\n cursor: \"pointer\",\n display: \"inline-block\",\n});\nvar filePathClassName = css({\n color: \"$colors$clickable\",\n textDecorationStyle: \"dotted\",\n textDecorationLine: \"underline\",\n});\nvar fileNameClassName = css({\n color: \"$colors$hover\",\n fontWeight: \"bold\",\n textDecorationStyle: \"dotted\",\n textDecorationLine: \"underline\",\n});\nvar Specs = function (_a) {\n var specs = _a.specs, openSpec = _a.openSpec, status = _a.status, verbose = _a.verbose, hideTestsAndSupressLogs = _a.hideTestsAndSupressLogs;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: specs.map(function (spec) {\n if (spec.error) {\n return (jsxs(\"div\", { className: classNames(\"test-spec\", [gapBottomClassName$1]), children: [jsx(SpecLabel, { className: classNames(\"test-spec-error\", [\n labelClassName$1,\n failBackgroundClassName,\n ]), children: \"Error\" }), jsx(FilePath, { onClick: function () { return openSpec(spec.name); }, path: spec.name }), jsx(FormattedError, { error: spec.error, path: spec.name })] }, spec.name));\n }\n if (isEmpty(spec)) {\n return null;\n }\n var tests = Object.values(spec.tests);\n var describes = Object.values(spec.describes);\n var stats = getSpecTestResults(spec);\n return (jsxs(\"div\", { className: classNames(\"test-spec-name\", [gapBottomClassName$1]), children: [jsxs(\"div\", { className: classNames(\"test-spec-name-container\", [\n fileContainer,\n ]), children: [status === \"complete\" ? (stats.fail > 0 ? (jsx(SpecLabel, { className: classNames(\"test-spec-complete\", [\n labelClassName$1,\n failBackgroundClassName,\n ]), children: \"Fail\" })) : (jsx(SpecLabel, { className: classNames(\"test-spec-pass\", [\n labelClassName$1,\n passBackgroundClassName,\n ]), children: \"Pass\" }))) : (jsx(SpecLabel, { className: classNames(\"test-spec-run\", [\n labelClassName$1,\n runBackgroundClassName,\n ]), children: \"Run\" })), jsx(FilePath, { onClick: function () {\n if (!hideTestsAndSupressLogs) {\n openSpec(spec.name);\n }\n }, path: spec.name })] }), verbose && !hideTestsAndSupressLogs && jsx(Tests, { tests: tests }), verbose && !hideTestsAndSupressLogs && (jsx(Describes, { describes: describes })), !hideTestsAndSupressLogs &&\n getFailingTests(spec).map(function (test) {\n return (jsxs(\"div\", { className: classNames(\"test-spec-error\", [\n gapBottomClassName$1,\n ]), children: [jsxs(\"div\", { className: classNames(\"test-spec-error-text\", [\n failTestClassName,\n failTextClassName,\n ]), children: [\"\\u25CF \", test.blocks.join(\" › \"), \" \\u203A \", test.name] }), test.errors.map(function (e) { return (jsx(FormattedError, { error: e, path: test.path }, \"failing-\".concat(test.name, \"-error\"))); })] }, \"failing-\".concat(test.name)));\n })] }, spec.name));\n }) }));\n};\nvar SpecLabel = function (_a) {\n var children = _a.children, className = _a.className;\n var classNames = useClassNames();\n return (jsx(\"span\", { className: classNames(\"test-spec-label\", [specLabelClassName, className]), children: children }));\n};\nvar FilePath = function (_a) {\n var onClick = _a.onClick, path = _a.path;\n var parts = path.split(\"/\");\n var basePath = parts.slice(0, parts.length - 1).join(\"/\") + \"/\";\n var fileName = parts[parts.length - 1];\n var classNames = useClassNames();\n return (jsxs(\"button\", { className: classNames(\"test-filename\", [\n buttonClassName,\n filePathButtonClassName,\n ]), onClick: onClick, type: \"button\", children: [jsx(\"span\", { className: classNames(\"test-filename-base\", [filePathClassName]), children: basePath }), jsx(\"span\", { className: classNames(\"test-filename-file\", [fileNameClassName]), children: fileName })] }));\n};\n\nvar gapBottomClassName = css({\n marginBottom: \"$space$2\",\n});\nvar labelClassName = css({\n fontWeight: \"bold\",\n color: \"$colors$hover\",\n whiteSpace: \"pre-wrap\",\n});\nvar containerClassName$1 = css({\n fontWeight: \"bold\",\n color: \"$colors$clickable\",\n});\nvar Summary = function (_a) {\n var suites = _a.suites, tests = _a.tests, duration = _a.duration;\n var widestLabel = \"Test suites: \";\n var withMargin = function (label) {\n var difference = widestLabel.length - label.length;\n var margin = Array.from({ length: difference }, function () { return \" \"; }).join(\"\");\n return label + margin;\n };\n var classNames = useClassNames();\n return (jsxs(\"div\", { className: classNames(\"test-summary\", [containerClassName$1]), children: [jsxs(\"div\", { className: classNames(\"test-summary\", [gapBottomClassName]), children: [jsx(\"span\", { className: classNames(\"test-summary-suites-label\", [labelClassName]), children: widestLabel }), suites.fail > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-suites-fail\", [\n failTextClassName,\n ]), children: [suites.fail, \" failed,\", \" \"] })), suites.pass > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-suites-pass\", [\n passTextClassName,\n ]), children: [suites.pass, \" passed,\", \" \"] })), jsxs(\"span\", { children: [suites.total, \" total\"] })] }), jsxs(\"div\", { className: classNames(\"test-summary\", [gapBottomClassName]), children: [jsx(\"span\", { className: classNames(\"test-summary-label\", [labelClassName]), children: withMargin(\"Tests:\") }), tests.fail > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-fail\", [failTextClassName]), children: [tests.fail, \" failed,\", \" \"] })), tests.skip > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-skip\", [skipTextClassName]), children: [tests.skip, \" skipped,\", \" \"] })), tests.pass > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-pass\", [passTextClassName]), children: [tests.pass, \" passed,\", \" \"] })), jsxs(\"span\", { children: [tests.total, \" total\"] })] }), jsxs(\"div\", { className: classNames(\"test-summary-curation\", [labelClassName]), children: [withMargin(\"Time:\"), duration / 1000, \"s\"] })] }));\n};\n\nvar previewActionsClassName = css({\n display: \"flex\",\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n zIndex: \"$overlay\",\n \"> *\": { marginLeft: \"$space$2\" },\n});\nvar INITIAL_STATE = {\n specs: {},\n status: \"initialising\",\n verbose: false,\n watchMode: true,\n suiteOnly: false,\n specsCount: 0,\n};\nvar SandpackTests = function (_a) {\n var _b = _a.verbose, verbose = _b === void 0 ? false : _b, _c = _a.watchMode, watchMode = _c === void 0 ? true : _c, style = _a.style, className = _a.className, onComplete = _a.onComplete, actionsChildren = _a.actionsChildren, _d = _a.showVerboseButton, showVerboseButton = _d === void 0 ? true : _d, _e = _a.showWatchButton, showWatchButton = _e === void 0 ? true : _e, _f = _a.hideTestsAndSupressLogs, hideTestsAndSupressLogs = _f === void 0 ? false : _f, props = __rest(_a, [\"verbose\", \"watchMode\", \"style\", \"className\", \"onComplete\", \"actionsChildren\", \"showVerboseButton\", \"showWatchButton\", \"hideTestsAndSupressLogs\"]);\n var theme = useSandpackTheme();\n var _g = useSandpackClient(), getClient = _g.getClient, iframe = _g.iframe, listen = _g.listen, sandpack = _g.sandpack;\n var _h = React.useState(__assign(__assign({}, INITIAL_STATE), { verbose: verbose, watchMode: watchMode })), state = _h[0], setState = _h[1];\n var runAllTests = React.useCallback(function () {\n setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\", specs: {} })); });\n var client = getClient();\n if (client) {\n client.dispatch({ type: \"run-all-tests\" });\n }\n }, [getClient]);\n var runSpec = React.useCallback(function () {\n setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\", specs: {} })); });\n var client = getClient();\n if (client) {\n client.dispatch({ type: \"run-tests\", path: sandpack.activeFile });\n }\n }, [getClient, sandpack.activeFile]);\n var testFileRegex = /.*\\.(test|spec)\\.[tj]sx?$/;\n var isSpecOpen = sandpack.activeFile.match(testFileRegex) !== null;\n React.useEffect(function () {\n var currentDescribeBlocks = [];\n var currentSpec = \"\";\n var unsubscribe = listen(function (data) {\n // Note: short-circuit if message isn't for the currently active spec when `suiteOnly` is true\n if (state.suiteOnly &&\n ((\"path\" in data && data.path !== sandpack.activeFile) ||\n (\"test\" in data &&\n \"path\" in data.test &&\n data.test.path !== sandpack.activeFile))) {\n return;\n }\n if (data.type === \"action\" &&\n data.action === \"clear-errors\" &&\n data.source === \"jest\") {\n currentSpec = data.path;\n return;\n }\n if (data.type === \"test\") {\n if (data.event === \"initialize_tests\") {\n currentDescribeBlocks = [];\n currentSpec = \"\";\n if (state.watchMode) {\n return runAllTests();\n }\n else {\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"idle\", specs: {} })); });\n }\n }\n if (data.event === \"test_count\") {\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { specsCount: data.count })); });\n }\n if (data.event === \"total_test_start\") {\n currentDescribeBlocks = [];\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\" })); });\n }\n if (data.event === \"total_test_end\") {\n return setState(function (oldState) {\n if (onComplete !== undefined) {\n onComplete(oldState.specs);\n }\n return __assign(__assign({}, oldState), { status: \"complete\" });\n });\n }\n if (data.event === \"add_file\") {\n return setState(set([\"specs\", data.path], {\n describes: {},\n tests: {},\n name: data.path,\n }));\n }\n if (data.event === \"remove_file\") {\n return setState(function (oldState) {\n var specs = Object.entries(oldState.specs).reduce(function (acc, _a) {\n var _b;\n var key = _a[0], value = _a[1];\n if (key === data.path) {\n return acc;\n }\n else {\n return __assign(__assign({}, acc), (_b = {}, _b[key] = value, _b));\n }\n }, {});\n return __assign(__assign({}, oldState), { specs: specs });\n });\n }\n if (data.event === \"file_error\") {\n return setState(set([\"specs\", data.path, \"error\"], data.error));\n }\n if (data.event === \"describe_start\") {\n currentDescribeBlocks.push(data.blockName);\n var _a = splitTail(currentDescribeBlocks), describePath = _a[0], currentDescribe = _a[1];\n var spec = currentSpec;\n if (currentDescribe === undefined) {\n return;\n }\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n spec,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n ], false), {\n name: data.blockName,\n tests: {},\n describes: {},\n }));\n }\n if (data.event === \"describe_end\") {\n currentDescribeBlocks.pop();\n return;\n }\n if (data.event === \"add_test\") {\n var _b = splitTail(currentDescribeBlocks), describePath = _b[0], currentDescribe = _b[1];\n var test_1 = {\n status: \"idle\",\n errors: [],\n name: data.testName,\n blocks: __spreadArray([], currentDescribeBlocks, true),\n path: data.path,\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", data.path, \"tests\", data.testName], test_1));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n data.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n data.testName,\n ], false), test_1));\n }\n }\n if (data.event === \"test_start\") {\n var test_2 = data.test;\n var _c = splitTail(test_2.blocks), describePath = _c[0], currentDescribe = _c[1];\n var startedTest = {\n status: \"running\",\n name: test_2.name,\n blocks: test_2.blocks,\n path: test_2.path,\n errors: [],\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", test_2.path, \"tests\", test_2.name], startedTest));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n test_2.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n test_2.name,\n ], false), startedTest));\n }\n }\n if (data.event === \"test_end\") {\n var test_3 = data.test;\n var _d = splitTail(test_3.blocks), describePath = _d[0], currentDescribe = _d[1];\n var endedTest = {\n status: test_3.status,\n errors: test_3.errors,\n duration: test_3.duration,\n name: test_3.name,\n blocks: test_3.blocks,\n path: test_3.path,\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", test_3.path, \"tests\", test_3.name], endedTest));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n test_3.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n test_3.name,\n ], false), endedTest));\n }\n }\n }\n });\n return unsubscribe;\n }, [state.suiteOnly, state.watchMode, sandpack.activeFile]);\n React.useEffect(function watchMode() {\n var unsunscribe = listen(function (_a) {\n var type = _a.type;\n if (type === \"done\" && state.watchMode) {\n if (isSpecOpen) {\n runSpec();\n }\n else {\n runAllTests();\n }\n }\n });\n return unsunscribe;\n }, [runSpec, runAllTests, state.watchMode, isSpecOpen]);\n var openSpec = function (file) {\n sandpack.setActiveFile(file);\n };\n var specs = Object.values(state.specs);\n var duration = getDuration(specs);\n var testResults = getAllTestResults(specs);\n var suiteResults = getAllSuiteResults(specs);\n var classNames = useClassNames();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"tests\", [className]), style: __assign(__assign({}, setTestTheme(theme.themeMode === \"dark\")), style) }, props, { children: [jsx(\"iframe\", { ref: iframe, style: { display: \"none\" }, title: \"Sandpack Tests\" }), jsx(Header$1, { hideTestsAndSupressLogs: hideTestsAndSupressLogs, setSuiteOnly: function () {\n return setState(function (s) { return (__assign(__assign({}, s), { suiteOnly: !s.suiteOnly })); });\n }, setVerbose: function () {\n return setState(function (s) { return (__assign(__assign({}, s), { verbose: !s.verbose })); });\n }, setWatchMode: function () {\n setState(function (s) { return (__assign(__assign({}, s), { watchMode: !s.watchMode })); });\n }, showSuitesOnly: state.specsCount > 1, showVerboseButton: showVerboseButton, showWatchButton: showWatchButton, status: state.status, suiteOnly: state.suiteOnly, verbose: state.verbose, watchMode: state.watchMode }), state.status === \"running\" || state.status === \"initialising\" ? (jsx(Loading, { showOpenInCodeSandbox: false })) : (jsxs(\"div\", { className: previewActionsClassName.toString(), children: [actionsChildren, jsx(RunButton, { onClick: state.suiteOnly ? runSpec : runAllTests })] })), jsx(\"div\", { className: containerClassName.toString(), children: specs.length === 0 && state.status === \"complete\" ? (jsxs(\"div\", { className: fileErrorContainerClassName.toString(), children: [jsx(\"p\", { children: \"No test files found.\" }), jsxs(\"p\", { children: [\"Test match:\", \" \", jsx(\"span\", { className: failTextClassName.toString(), children: testFileRegex.toString() })] })] })) : (jsxs(Fragment, { children: [jsx(Specs, { hideTestsAndSupressLogs: hideTestsAndSupressLogs, openSpec: openSpec, specs: specs, status: state.status, verbose: state.verbose }), state.status === \"complete\" && testResults.total > 0 && (jsx(Summary, { duration: duration, suites: suiteResults, tests: testResults }))] })) })] })));\n};\nvar containerClassName = css({\n padding: \"$space$4\",\n height: \"100%\",\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n fontFamily: \"$font$mono\",\n});\nvar fileErrorContainerClassName = css({\n fontWeight: \"bold\",\n color: \"$colors$base\",\n});\n\nvar SYNTAX_ERROR_PATTERN = [\"SyntaxError: \", \"Error in sandbox:\"];\nvar CLEAR_LOG = {\n id: \"random\",\n method: \"clear\",\n data: [\"Console was cleared\"],\n};\nvar TRANSFORMED_TYPE_KEY = \"@t\";\nvar TRANSFORMED_TYPE_KEY_ALTERNATE = \"#@t\";\nvar CIRCULAR_REF_KEY = \"@r\";\nvar MAX_LENGTH_STRING = 10000;\nvar MAX_NEST_LEVEL = 2;\nvar MAX_KEYS = 400;\nvar MAX_MESSAGE_COUNT = MAX_KEYS * 2;\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Const\nvar GLOBAL = (function getGlobal() {\n if (typeof globalThis !== \"undefined\")\n return globalThis; // modern standard\n if (typeof window !== \"undefined\")\n return window; // browser\n if (typeof global !== \"undefined\")\n return global; // Node.js\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== \"undefined\")\n return self; // Web Worker\n throw Error(\"Unable to locate global object\");\n})();\nvar ARRAY_BUFFER_SUPPORTED = typeof ArrayBuffer === \"function\";\nvar MAP_SUPPORTED = typeof Map === \"function\";\nvar SET_SUPPORTED = typeof Set === \"function\";\nvar Arithmetic;\n(function (Arithmetic) {\n Arithmetic[Arithmetic[\"infinity\"] = 0] = \"infinity\";\n Arithmetic[Arithmetic[\"minusInfinity\"] = 1] = \"minusInfinity\";\n Arithmetic[Arithmetic[\"minusZero\"] = 2] = \"minusZero\";\n})(Arithmetic || (Arithmetic = {}));\nvar transformers = {\n Arithmetic: function (data) {\n if (data === Arithmetic.infinity)\n return Infinity;\n if (data === Arithmetic.minusInfinity)\n return -Infinity;\n if (data === Arithmetic.minusZero)\n return -0;\n return data;\n },\n HTMLElement: function (data) {\n var sandbox = document.implementation.createHTMLDocument(\"sandbox\");\n try {\n var element = sandbox.createElement(data.tagName);\n element.innerHTML = data.innerHTML;\n for (var _i = 0, _a = Object.keys(data.attributes); _i < _a.length; _i++) {\n var attribute = _a[_i];\n try {\n element.setAttribute(attribute, data.attributes[attribute]);\n }\n catch (_b) {\n //\n }\n }\n return element;\n }\n catch (e) {\n return data;\n }\n },\n Function: function (data) {\n var tempFun = function () { };\n Object.defineProperty(tempFun, \"toString\", {\n value: function () { return \"function \".concat(data.name, \"() {\").concat(data.body, \"}\"); },\n });\n return tempFun;\n },\n \"[[NaN]]\": function () {\n return NaN;\n },\n \"[[undefined]]\": function () {\n return void 0;\n },\n \"[[Date]]\": function (val) {\n var date = new Date();\n date.setTime(val);\n return date;\n },\n \"[[RegExp]]\": function (val) {\n return new RegExp(val.src, val.flags);\n },\n \"[[Error]]\": function (val) {\n var Ctor = GLOBAL[val.name] || Error;\n var err = new Ctor(val.message);\n err.stack = val.stack;\n return err;\n },\n \"[[ArrayBuffer]]\": function (val) {\n if (ARRAY_BUFFER_SUPPORTED) {\n var buffer = new ArrayBuffer(val.length);\n var view = new Int8Array(buffer);\n view.set(val);\n return buffer;\n }\n return val;\n },\n \"[[TypedArray]]\": function (val) {\n return typeof GLOBAL[val.ctorName] === \"function\"\n ? new GLOBAL[val.ctorName](val.arr)\n : val.arr;\n },\n \"[[Map]]\": function (val) {\n if (MAP_SUPPORTED) {\n // NOTE: new Map(iterable) is not supported by all browsers\n var map = new Map();\n for (var i = 0; i < val.length; i += 2)\n map.set(val[i], val[i + 1]);\n return map;\n }\n var kvArr = [];\n // @ts-ignore\n for (var j = 0; j < val.length; j += 2)\n kvArr.push([val[i], val[i + 1]]);\n return kvArr;\n },\n \"[[Set]]\": function (val) {\n if (SET_SUPPORTED) {\n // NOTE: new Set(iterable) is not supported by all browsers\n var set = new Set();\n for (var i = 0; i < val.length; i++)\n set.add(val[i]);\n return set;\n }\n return val;\n },\n};\n\n/* eslint-disable @typescript-eslint/array-type */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar formatSymbols = function (message) {\n var _a;\n if (typeof message === \"string\" ||\n typeof message === \"number\" ||\n message === null) {\n return message;\n }\n else if (Array.isArray(message)) {\n return message.map(formatSymbols);\n }\n else if (typeof message == \"object\" && TRANSFORMED_TYPE_KEY in message) {\n var type = message[TRANSFORMED_TYPE_KEY];\n var transform = transformers[type];\n return transform(message.data);\n }\n else if (typeof message == \"object\" &&\n TRANSFORMED_TYPE_KEY_ALTERNATE in message) {\n var type = message[TRANSFORMED_TYPE_KEY_ALTERNATE];\n var transform = transformers[type];\n return transform(message.data);\n }\n else if (typeof message == \"object\" &&\n ((_a = message.constructor) === null || _a === void 0 ? void 0 : _a.name) === \"NodeList\") {\n var NodeList_1 = {};\n Object.entries(message).forEach(function (_a) {\n var key = _a[0], value = _a[1];\n // @ts-ignore\n NodeList_1[key] = formatSymbols(value);\n });\n return NodeList_1;\n }\n return message;\n};\nvar arrayToString = function (output, references, level) {\n var mergeArray = output.reduce(function (acc, curr, index) {\n return \"\".concat(acc).concat(index ? \", \" : \"\").concat(fromConsoleToString(curr, references, level));\n }, \"\");\n return \"[\".concat(mergeArray, \"]\");\n};\nvar objectToString = function (output, references, level) {\n var constructorName = output.constructor.name !== \"Object\" ? \"\".concat(output.constructor.name, \" \") : \"\";\n if (level > MAX_NEST_LEVEL) {\n return constructorName;\n }\n var entries = Object.entries(output);\n var formattedObject = Object.entries(output).reduce(function (acc, _a, index) {\n var key = _a[0], value = _a[1];\n var comma = index === 0 ? \"\" : \", \";\n var breakLine = entries.length > 10 ? \"\\n \" : \"\";\n var formatted = fromConsoleToString(value, references, level);\n if (index === MAX_KEYS) {\n return acc + breakLine + \"...\";\n }\n else if (index > MAX_KEYS) {\n return acc;\n }\n return acc + \"\".concat(comma).concat(breakLine).concat(key, \": \") + formatted;\n }, \"\");\n return \"\".concat(constructorName, \"{ \").concat(formattedObject).concat(entries.length > 10 ? \"\\n\" : \" \", \"}\");\n};\nvar fromConsoleToString = function (message, references, level) {\n var _a;\n if (level === void 0) { level = 0; }\n try {\n var output_1 = formatSymbols(message);\n if (Array.isArray(output_1)) {\n return arrayToString(output_1, references, level + 1);\n }\n switch (typeof output_1) {\n case \"string\":\n return \"\\\"\".concat(output_1, \"\\\"\").slice(0, MAX_LENGTH_STRING);\n case \"number\":\n case \"function\":\n case \"symbol\":\n return output_1.toString();\n case \"boolean\":\n return String(output_1);\n case \"undefined\":\n return \"undefined\";\n case \"object\":\n default:\n if (output_1 instanceof RegExp ||\n output_1 instanceof Error ||\n output_1 instanceof Date) {\n return output_1.toString();\n }\n if (output_1 === null) {\n return String(null);\n }\n if (output_1 instanceof HTMLElement) {\n return output_1.outerHTML.slice(0, MAX_LENGTH_STRING);\n }\n if (Object.entries(output_1).length === 0) {\n return \"{}\";\n }\n if (CIRCULAR_REF_KEY in output_1) {\n if (level > MAX_NEST_LEVEL) {\n return \"Unable to print information\";\n }\n var newMessage = references[output_1[CIRCULAR_REF_KEY]];\n return fromConsoleToString(newMessage, references, level + 1);\n }\n if (((_a = output_1.constructor) === null || _a === void 0 ? void 0 : _a.name) === \"NodeList\") {\n var length_1 = output_1.length;\n var nodes = new Array(length_1).fill(null).map(function (_, index) {\n return fromConsoleToString(output_1[index], references);\n });\n return \"NodeList(\".concat(output_1.length, \")[\").concat(nodes, \"]\");\n }\n return objectToString(output_1, references, level + 1);\n }\n }\n catch (_b) {\n return \"Unable to print information\";\n }\n};\n\nvar getType = function (message) {\n switch (message) {\n case \"warn\":\n return \"warning\";\n case \"clear\":\n return \"clear\";\n case \"error\":\n return \"error\";\n case \"log\":\n case \"info\":\n default:\n return \"info\";\n }\n};\n\nvar _a;\nvar ConsoleList = function (_a) {\n var data = _a.data;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: data.map(function (_a, logIndex, references) {\n var data = _a.data, id = _a.id, method = _a.method;\n if (!data)\n return null;\n if (Array.isArray(data)) {\n return (jsx(React.Fragment, { children: data.map(function (msg, msgIndex) {\n var fixReferences = references.slice(logIndex, references.length);\n return (jsx(\"div\", { className: classNames(\"console-item\", [\n consoleItemClassName({ variant: getType(method) }),\n ]), children: jsx(CodeMirror, { code: method === \"clear\"\n ? msg\n : fromConsoleToString(msg, fixReferences), fileType: \"js\", initMode: \"user-visible\", showReadOnly: false, readOnly: true, wrapContent: true }) }, \"\".concat(id, \"-\").concat(msgIndex)));\n }) }, id));\n }\n return null;\n }) }));\n};\nvar consoleItemClassName = css((_a = {\n width: \"100%\",\n padding: \"$space$3 $space$2\",\n fontSize: \".8em\",\n position: \"relative\",\n \"&:not(:first-child):after\": {\n content: \"\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n height: 1,\n background: \"$colors$surface3\",\n },\n /**\n * Editor reset\n */\n \".sp-cm\": {\n padding: 0,\n },\n \".cm-editor\": {\n background: \"none\",\n },\n \".cm-content\": {\n padding: 0,\n }\n },\n _a[\".\".concat(THEME_PREFIX, \"-pre-placeholder\")] = {\n margin: \"0 !important\",\n fontSize: \"1em\",\n },\n _a.variants = {\n variant: {\n error: {\n color: \"$colors$error\",\n background: \"$colors$errorSurface\",\n \"&:not(:first-child):after\": {\n background: \"$colors$error\",\n opacity: 0.07,\n },\n },\n warning: {\n color: \"$colors$warning\",\n background: \"$colors$warningSurface\",\n \"&:not(:first-child):after\": {\n background: \"$colors$warning\",\n opacity: 0.07,\n },\n },\n clear: {\n fontStyle: \"italic\",\n },\n info: {},\n },\n },\n _a));\n\nvar wrapperClassName = css({\n justifyContent: \"space-between\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"0 $space$2\",\n fontFamily: \"$font$mono\",\n height: \"$layout$headerHeight\",\n minHeight: \"$layout$headerHeight\",\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n});\nvar flexClassName = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"$space$2\",\n});\nvar Header = function (_a) {\n var currentTab = _a.currentTab, setCurrentTab = _a.setCurrentTab, node = _a.node;\n var classNames = useClassNames();\n var buttonsClassName = classNames(\"console-header-button\", [\n buttonClassName,\n roundedButtonClassName,\n css({ padding: \"$space$1 $space$3\" }),\n ]);\n return (jsxs(\"div\", { className: classNames(\"console-header\", [\n wrapperClassName,\n flexClassName,\n ]), children: [jsxs(\"p\", { className: classNames(\"console-header-title\", [\n css({\n lineHeight: 1,\n margin: 0,\n color: \"$colors$base\",\n fontSize: \"$font$size\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"$space$2\",\n }),\n ]), children: [jsx(ConsoleIcon, {}), jsx(\"span\", { children: \"Terminal\" })] }), node && (jsxs(\"div\", { className: classNames(\"console-header-actions\", [flexClassName]), children: [jsx(\"button\", { className: buttonsClassName, \"data-active\": currentTab === \"server\", onClick: function () { return setCurrentTab(\"server\"); }, type: \"button\", children: \"Server\" }), jsx(\"button\", { className: buttonsClassName, \"data-active\": currentTab === \"client\", onClick: function () { return setCurrentTab(\"client\"); }, type: \"button\", children: \"Client\" })] }))] }));\n};\n\n/**\n * It provides an interface to consume the logs from a sandpack client.\n *\n * @category Hooks\n */\nvar useSandpackConsole = function (_a) {\n var clientId = _a.clientId, _b = _a.maxMessageCount, maxMessageCount = _b === void 0 ? MAX_MESSAGE_COUNT : _b, _c = _a.showSyntaxError, showSyntaxError = _c === void 0 ? false : _c, _d = _a.resetOnPreviewRestart, resetOnPreviewRestart = _d === void 0 ? false : _d;\n var _e = React.useState([]), logs = _e[0], setLogs = _e[1];\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (resetOnPreviewRestart && message.type === \"start\") {\n setLogs([]);\n }\n else if (message.type === \"console\" && message.codesandbox) {\n var payloadLog = Array.isArray(message.log)\n ? message.log\n : [message.log];\n if (payloadLog.find(function (_a) {\n var method = _a.method;\n return method === \"clear\";\n })) {\n return setLogs([CLEAR_LOG]);\n }\n var logsMessages_1 = showSyntaxError\n ? payloadLog\n : payloadLog.filter(function (messageItem) {\n var _a, _b, _c;\n var messagesWithoutSyntaxErrors = (_c = (_b = (_a = messageItem === null || messageItem === void 0 ? void 0 : messageItem.data) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.call(_a, function (dataItem) {\n if (typeof dataItem !== \"string\")\n return true;\n var matches = SYNTAX_ERROR_PATTERN.filter(function (lookFor) {\n return dataItem.startsWith(lookFor);\n });\n return matches.length === 0;\n })) !== null && _c !== void 0 ? _c : [];\n return messagesWithoutSyntaxErrors.length > 0;\n });\n if (!logsMessages_1)\n return;\n setLogs(function (prev) {\n var messages = __spreadArray(__spreadArray([], prev, true), logsMessages_1, true).filter(function (value, index, self) {\n return index === self.findIndex(function (s) { return s.id === value.id; });\n });\n while (messages.length > maxMessageCount) {\n messages.shift();\n }\n return messages;\n });\n }\n }, clientId);\n return unsubscribe;\n }, [showSyntaxError, maxMessageCount, clientId, resetOnPreviewRestart]);\n return { logs: logs, reset: function () { return setLogs([]); } };\n};\n\n/**\n * `SandpackConsole` is a Sandpack devtool that allows printing\n * the console logs from a Sandpack client. It is designed to be\n * a light version of a browser console, which means that it's\n * limited to a set of common use cases you may encounter when coding.\n */\nvar SandpackConsole = React.forwardRef(function (_a, ref) {\n var _b;\n var _c = _a.showHeader, showHeader = _c === void 0 ? true : _c, _d = _a.showSyntaxError, showSyntaxError = _d === void 0 ? false : _d, maxMessageCount = _a.maxMessageCount, onLogsChange = _a.onLogsChange, className = _a.className; _a.showSetupProgress; var _f = _a.showResetConsoleButton, showResetConsoleButton = _f === void 0 ? true : _f, _g = _a.showRestartButton, showRestartButton = _g === void 0 ? true : _g, _h = _a.resetOnPreviewRestart, resetOnPreviewRestart = _h === void 0 ? false : _h, _j = _a.actionsChildren, actionsChildren = _j === void 0 ? jsx(Fragment, {}) : _j, _k = _a.standalone, standalone = _k === void 0 ? false : _k, props = __rest(_a, [\"showHeader\", \"showSyntaxError\", \"maxMessageCount\", \"onLogsChange\", \"className\", \"showSetupProgress\", \"showResetConsoleButton\", \"showRestartButton\", \"resetOnPreviewRestart\", \"actionsChildren\", \"standalone\"]);\n var environment = useSandpack().sandpack.environment;\n var _l = useSandpackClient(), iframe = _l.iframe, internalClientId = _l.clientId;\n var restart = useSandpackShell().restart;\n var _m = React.useState(environment === \"node\" ? \"server\" : \"client\"), currentTab = _m[0], setCurrentTab = _m[1];\n var clientId = standalone ? internalClientId : undefined;\n var _o = useSandpackConsole({\n maxMessageCount: maxMessageCount,\n showSyntaxError: showSyntaxError,\n resetOnPreviewRestart: resetOnPreviewRestart,\n clientId: clientId,\n }), consoleData = _o.logs, resetConsole = _o.reset;\n var _p = useSandpackShellStdout({\n maxMessageCount: maxMessageCount,\n resetOnPreviewRestart: resetOnPreviewRestart,\n clientId: clientId,\n }), stdoutData = _p.logs, resetStdout = _p.reset;\n var wrapperRef = React.useRef(null);\n React.useEffect(function () {\n onLogsChange === null || onLogsChange === void 0 ? void 0 : onLogsChange(consoleData);\n if (wrapperRef.current) {\n wrapperRef.current.scrollTop = wrapperRef.current.scrollHeight;\n }\n }, [onLogsChange, consoleData, stdoutData, currentTab]);\n var isServerTab = currentTab === \"server\";\n var isNodeEnvironment = environment === \"node\";\n React.useImperativeHandle(ref, function () { return ({\n reset: function () {\n resetConsole();\n resetStdout();\n },\n }); });\n var classNames = useClassNames();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"console\", [\n css((_b = {\n height: \"100%\",\n background: \"$surface1\",\n iframe: { display: \"none\" }\n },\n _b[\".\".concat(THEME_PREFIX, \"-bridge-frame\")] = {\n display: \"block\",\n border: 0,\n position: \"absolute\",\n left: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n height: 12,\n width: \"30%\",\n mixBlendMode: \"multiply\",\n pointerEvents: \"none\",\n },\n _b)),\n className,\n ]) }, props, { children: [showHeader && isNodeEnvironment && (jsx(Header, { currentTab: currentTab, node: isNodeEnvironment, setCurrentTab: setCurrentTab })), jsx(\"div\", { ref: wrapperRef, className: classNames(\"console-list\", [\n css({ overflow: \"auto\", scrollBehavior: \"smooth\" }),\n ]), children: isServerTab ? (jsx(StdoutList, { data: stdoutData })) : (jsx(ConsoleList, { data: consoleData })) }), jsxs(\"div\", { className: classNames(\"console-actions\", [\n css({\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n display: \"flex\",\n gap: \"$space$2\",\n }),\n ]), children: [actionsChildren, showRestartButton && isServerTab && (jsx(RoundedButton, { onClick: function () {\n restart();\n resetConsole();\n resetStdout();\n }, children: jsx(RestartIcon, {}) })), showResetConsoleButton && (jsx(RoundedButton, { onClick: function () {\n if (currentTab === \"client\") {\n resetConsole();\n }\n else {\n resetStdout();\n }\n }, children: jsx(CleanIcon, {}) }))] }), standalone && (jsxs(Fragment, { children: [jsx(DependenciesProgress, { clientId: clientId }), jsx(\"iframe\", { ref: iframe })] }))] })));\n});\n\nvar Sandpack = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j;\n var options = _a.options, template = _a.template, customSetup = _a.customSetup, files = _a.files, theme = _a.theme, props = __rest(_a, [\"options\", \"template\", \"customSetup\", \"files\", \"theme\"]);\n options !== null && options !== void 0 ? options : (options = {});\n (_b = options.resizablePanels) !== null && _b !== void 0 ? _b : (options.resizablePanels = true);\n (_c = options.editorWidthPercentage) !== null && _c !== void 0 ? _c : (options.editorWidthPercentage = 50);\n (_d = options.showConsole) !== null && _d !== void 0 ? _d : (options.showConsole = false);\n var rtlLayout = (_e = options === null || options === void 0 ? void 0 : options.rtl) !== null && _e !== void 0 ? _e : false;\n var codeEditorOptions = {\n showTabs: options.showTabs,\n showLineNumbers: options.showLineNumbers,\n showInlineErrors: options.showInlineErrors,\n wrapContent: options.wrapContent,\n closableTabs: options.closableTabs,\n initMode: options.initMode,\n extensions: (_f = options.codeEditor) === null || _f === void 0 ? void 0 : _f.extensions,\n extensionsKeymap: (_g = options.codeEditor) === null || _g === void 0 ? void 0 : _g.extensionsKeymap,\n readOnly: options.readOnly,\n showReadOnly: options.showReadOnly,\n additionalLanguages: (_h = options.codeEditor) === null || _h === void 0 ? void 0 : _h.additionalLanguages,\n };\n var providerOptions = {\n /**\n * TS-why: Type 'string | number | symbol' is not assignable to type 'string'\n */\n activeFile: options.activeFile,\n visibleFiles: options.visibleFiles,\n recompileMode: options.recompileMode,\n recompileDelay: options.recompileDelay,\n autorun: options.autorun,\n autoReload: options.autoReload,\n bundlerURL: options.bundlerURL,\n startRoute: options.startRoute,\n skipEval: options.skipEval,\n fileResolver: options.fileResolver,\n initMode: options.initMode,\n initModeObserverOptions: options.initModeObserverOptions,\n externalResources: options.externalResources,\n logLevel: options.logLevel,\n classes: options.classes,\n experimental_enableServiceWorker: options.experimental_enableServiceWorker,\n experimental_enableStableServiceWorkerId: options.experimental_enableStableServiceWorkerId,\n };\n /**\n * Console\n */\n var _k = React.useState(options.showConsole), consoleVisibility = _k[0], setConsoleVisibility = _k[1];\n var _l = React.useState(0), counter = _l[0], setCounter = _l[1];\n var hasRightColumn = options.showConsole || options.showConsoleButton;\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n var templateFiles = (_j = SANDBOX_TEMPLATES[template]) !== null && _j !== void 0 ? _j : {};\n var mode = ((options === null || options === void 0 ? void 0 : options.layout)\n ? options === null || options === void 0 ? void 0 : options.layout\n : \"mode\" in templateFiles\n ? templateFiles.mode\n : \"preview\");\n var actionsChildren = options.showConsoleButton ? (jsx(ConsoleCounterButton, { counter: counter, onClick: function () { return setConsoleVisibility(function (prev) { return !prev; }); } })) : undefined;\n /**\n * Resizable\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var dragEventTargetRef = React.useRef(null);\n var _m = React.useState(options.editorWidthPercentage), horizontalSize = _m[0], setHorizontalSize = _m[1];\n var _o = React.useState(70), verticalSize = _o[0], setVerticalSize = _o[1];\n var RightColumn = hasRightColumn ? SandpackStack : React.Fragment;\n var rightColumnStyle = {\n flexGrow: 100 - horizontalSize,\n flexShrink: 100 - horizontalSize,\n flexBasis: 0,\n width: 100 - horizontalSize + \"%\",\n gap: consoleVisibility ? 1 : 0,\n height: options.editorHeight, // use the original editor height\n };\n var topRowStyle = hasRightColumn\n ? {\n flexGrow: verticalSize,\n flexShrink: verticalSize,\n flexBasis: 0,\n overflow: \"hidden\",\n }\n : rightColumnStyle;\n var onDragMove = function (event) {\n if (!dragEventTargetRef.current)\n return;\n var container = dragEventTargetRef.current.parentElement;\n if (!container)\n return;\n var direction = dragEventTargetRef.current.dataset.direction;\n var isHorizontal = direction === \"horizontal\";\n var _a = container.getBoundingClientRect(), left = _a.left, top = _a.top, height = _a.height, width = _a.width;\n var offset = isHorizontal\n ? ((event.clientX - left) / width) * 100\n : ((event.clientY - top) / height) * 100;\n var boundaries = Math.min(Math.max(offset, 25), 75);\n if (isHorizontal) {\n setHorizontalSize(rtlLayout ? 100 - boundaries : boundaries);\n }\n else {\n setVerticalSize(boundaries);\n }\n container.querySelectorAll(\".\".concat(THEME_PREFIX, \"-stack\")).forEach(function (item) {\n item.style.pointerEvents = \"none\";\n });\n };\n var stopDragging = function () {\n var _a;\n var container = (_a = dragEventTargetRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;\n if (!container)\n return;\n container.querySelectorAll(\".\".concat(THEME_PREFIX, \"-stack\")).forEach(function (item) {\n item.style.pointerEvents = \"\";\n });\n dragEventTargetRef.current = null;\n };\n React.useEffect(function () {\n if (!(options === null || options === void 0 ? void 0 : options.resizablePanels))\n return;\n document.body.addEventListener(\"mousemove\", onDragMove);\n document.body.addEventListener(\"mouseup\", stopDragging);\n return function () {\n document.body.removeEventListener(\"mousemove\", onDragMove);\n document.body.removeEventListener(\"mouseup\", stopDragging);\n };\n }, [options]);\n React.useEffect(function () {\n var _a;\n setConsoleVisibility((_a = options === null || options === void 0 ? void 0 : options.showConsole) !== null && _a !== void 0 ? _a : false);\n }, [options.showConsole]);\n var rightColumnProps = hasRightColumn\n ? { className: THEME_PREFIX + \"-preset-column\", style: rightColumnStyle }\n : {};\n var classNames = useClassNames();\n return (jsx(SandpackProvider, __assign({ customSetup: customSetup, files: files, options: providerOptions, template: template, theme: theme }, props, { children: jsxs(SandpackLayout, { className: rtlLayout ? classNames(\"rtl-layout\", [rtlLayoutClassName]) : \"\", children: [jsx(SandpackCodeEditor, __assign({}, codeEditorOptions, { style: {\n height: options.editorHeight,\n flexGrow: horizontalSize,\n flexShrink: horizontalSize,\n flexBasis: 0,\n overflow: \"hidden\",\n } })), options.resizablePanels && (jsx(\"div\", { className: classNames(\"resize-handler\", [\n dragHandler({ direction: \"horizontal\" }),\n ]), \"data-direction\": \"horizontal\", onMouseDown: function (event) {\n dragEventTargetRef.current = event.target;\n }, style: {\n left: \"calc(\".concat(rtlLayout ? 100 - horizontalSize : horizontalSize, \"% - 5px)\"),\n } })), jsxs(RightColumn, __assign({}, rightColumnProps, { children: [mode === \"preview\" && (jsx(SandpackPreview, { actionsChildren: actionsChildren, showNavigator: options.showNavigator, showRefreshButton: options.showRefreshButton, style: topRowStyle })), mode === \"tests\" && (jsx(SandpackTests, { actionsChildren: actionsChildren, style: topRowStyle })), mode === \"console\" && (jsx(SandpackConsole, { actionsChildren: actionsChildren, style: topRowStyle, standalone: true })), (options.showConsoleButton || consoleVisibility) && (jsxs(Fragment, { children: [options.resizablePanels && consoleVisibility && (jsx(\"div\", { className: classNames(\"resize-handler\", [\n dragHandler({ direction: \"vertical\" }),\n ]), \"data-direction\": \"vertical\", onMouseDown: function (event) {\n dragEventTargetRef.current = event.target;\n }, style: { top: \"calc(\".concat(verticalSize, \"% - 5px)\") } })), jsx(\"div\", { className: classNames(\"console-wrapper\", [consoleWrapper]), style: {\n flexGrow: consoleVisibility ? 100 - verticalSize : 0,\n flexShrink: consoleVisibility ? 100 - verticalSize : 0,\n flexBasis: 0,\n }, children: jsx(SandpackConsole, { onLogsChange: function (logs) { return setCounter(logs.length); }, showHeader: false }) })] }))] }))] }) }), template));\n};\nvar dragHandler = css({\n position: \"absolute\",\n zIndex: \"$top\",\n variants: {\n direction: {\n vertical: {\n right: 0,\n left: 0,\n height: 10,\n cursor: \"ns-resize\",\n },\n horizontal: {\n top: 0,\n bottom: 0,\n width: 10,\n cursor: \"ew-resize\",\n },\n },\n },\n \"@media screen and (max-width: 768px)\": {\n display: \"none\",\n },\n});\nvar ConsoleCounterButton = function (_a) {\n var onClick = _a.onClick, counter = _a.counter;\n return (jsxs(RoundedButton, { className: buttonCounter.toString(), onClick: onClick, children: [jsx(ConsoleIcon, {}), counter > 0 && jsx(\"strong\", { children: counter })] }));\n};\nvar buttonCounter = css({\n position: \"relative\",\n strong: {\n background: \"$colors$clickable\",\n color: \"$colors$surface1\",\n minWidth: 12,\n height: 12,\n padding: \"0 2px\",\n borderRadius: 12,\n fontSize: 8,\n lineHeight: \"12px\",\n position: \"absolute\",\n top: 0,\n right: 0,\n fontWeight: \"normal\",\n },\n});\nvar consoleWrapper = css({\n width: \"100%\",\n overflow: \"hidden\",\n});\nvar rtlLayoutClassName = css({\n flexDirection: \"row-reverse\",\n \"@media screen and (max-width: 768px)\": {\n flexFlow: \"wrap-reverse !important\",\n flexDirection: \"initial\",\n },\n});\n\nexport { ANGULAR_TEMPLATE, ASTRO_TEMPLATE, BackwardIcon, CleanIcon, CloseIcon, CodeMirror as CodeEditor, ConsoleIcon, DependenciesProgress, DirectoryIconClosed, DirectoryIconOpen, ErrorOverlay, ExportIcon, FADE_ANIMATION_DURATION, FileIcon, FileTabs, ForwardIcon, LoadingOverlay, Navigator, OpenInCodeSandboxButton, REACT_TEMPLATE, REACT_TYPESCRIPT_TEMPLATE, RefreshIcon, RestartIcon, RoundedButton, RunButton$1 as RunButton, RunIcon, SANDBOX_TEMPLATES, SANDPACK_THEMES, SOLID_TEMPLATE, SVELTE_TEMPLATE, Sandpack, SandpackCodeEditor, SandpackCodeViewer, SandpackConsole, SandpackConsumer, SandpackFileExplorer, SandpackLayout, SandpackPreview, SandpackProvider, Sandpack$1 as SandpackReactContext, SandpackStack, SandpackTests, SandpackThemeConsumer, SandpackThemeContext, SandpackThemeProvider, SandpackTranspiledCode, SignInIcon, SignOutIcon, TEST_TYPESCRIPT_TEMPLATE, UnstyledOpenInCodeSandboxButton, VANILLA_TEMPLATE, VANILLA_TYPESCRIPT_TEMPLATE, VUE_TEMPLATE, defaultDark, defaultLight, getCssText as getSandpackCssText, layoutClassName, stackClassName, tabButton, useActiveCode, useClassNames, useErrorMessage, useLoadingOverlayState, useSandpack, useSandpackClient, useSandpackConsole, useSandpackNavigation, useSandpackPreviewProgress, useSandpackShell, useSandpackShellStdout, useSandpackTheme, useTranspiledCode };\n","var amethyst = {\n colors: {\n surface1: \"#000000\",\n surface2: \"#0a0a23\",\n surface3: \"#3b3b4f\",\n clickable: \"#dfdfe2\",\n base: \"#ffffff\",\n disabled: \"#858591\",\n hover: \"#ffffff\",\n accent: \"#a26cd6\",\n error: \"#ffffff\",\n errorSurface: \"#3b3b4f\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#858591\",\n fontStyle: \"italic\"\n },\n keyword: \"#a26cdd\",\n tag: \"#f07178\",\n punctuation: \"#99c9ff\",\n definition: \"#ffffff\",\n property: \"#99c9ff\",\n static: \"#f78c6c\",\n string: \"#57d1b7\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"12px\",\n lineHeight: \"18px\"\n }\n};\n\nvar aquaBlue = {\n colors: {\n surface1: \"#f8f9fb\",\n surface2: \"#EBEDF0\",\n surface3: \"#e4e7eb\",\n clickable: \"#737373\",\n base: \"#323232\",\n disabled: \"#C5C5C5\",\n hover: \"#1f2933\",\n accent: \"#2e7692\"\n },\n syntax: {\n plain: \"#1F2933\",\n comment: { color: \"#A7B6C2\", fontStyle: \"italic\" },\n keyword: \"#1A56DB\",\n tag: \"#1A56DB\",\n punctuation: \"#394b59\",\n definition: \"#A23DAD\",\n property: \"#2e7692\",\n static: \"#1A56DB\",\n string: \"#1992D4\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar atomDark = {\n colors: {\n surface1: \"#282c34\",\n surface2: \"#21252b\",\n surface3: \"#2c313c\",\n clickable: \"#a8b1c2\",\n base: \"#a8b1c2\",\n disabled: \"#4d4d4d\",\n hover: \"#e8effc\",\n accent: \"#c678dd\",\n error: \"#e06c75\",\n errorSurface: \"#ffeceb\"\n },\n syntax: {\n plain: \"#a8b1c2\",\n comment: {\n color: \"#757575\",\n fontStyle: \"italic\"\n },\n keyword: \"#c678dd\",\n tag: \"#e06c75\",\n punctuation: \"#a8b1c2\",\n definition: \"#62aeef\",\n property: \"#d19a66\",\n static: \"#a8b1c2\",\n string: \"#98c379\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar cobalt2 = {\n colors: {\n surface1: \"#193549\",\n surface2: \"#0d3a58\",\n surface3: \"#1f4662\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#C5C5C5\",\n hover: \"#ffffff\",\n accent: \"#ffc600\",\n error: \"#a22929\",\n errorSurface: \"#0d3a58\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#0088ff\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff9d00\",\n tag: \"#9effff\",\n punctuation: \"#e1efff\",\n definition: \"#ffc600\",\n property: \"#ffc600\",\n static: \"#ffee80\",\n string: \"#a5ff90\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Operator Mono\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar cyberpunk = {\n colors: {\n surface1: \"#051c30\",\n surface2: \"#042f40\",\n surface3: \"#042f40\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#C5C5C5\",\n hover: \"#ffffff\",\n accent: \"#fdf500\",\n error: \"#ff003c\",\n errorSurface: \"#051c30\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#1ac5b0\",\n fontStyle: \"italic\"\n },\n keyword: \"#fdf500\",\n tag: \"#ffc600\",\n punctuation: \"#afd7fa\",\n definition: \"#ffc600\",\n property: \"#fdf500\",\n static: \"#e455ae\",\n string: \"#37ebf3\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar dracula = {\n colors: {\n surface1: \"#282a36\",\n surface2: \"#44475a\",\n surface3: \"#44475a\",\n clickable: \"#6272a4\",\n base: \"#f8f8f2\",\n disabled: \"#6272a4\",\n hover: \"#f8f8f2\",\n accent: \"#bd93f9\",\n error: \"#f8f8f2\",\n errorSurface: \"#44475a\"\n },\n syntax: {\n plain: \"#f8f8f2\",\n comment: {\n color: \"#6272a4\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff79c6\",\n tag: \"#ff79c6\",\n punctuation: \"#ff79c6\",\n definition: \"#f8f8f2\",\n property: \"#50fa7b\",\n static: \"#bd93f9\",\n string: \"#f1fa8c\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// ecoLight is inspired by love for green and associative environmental colors\nvar ecoLight = {\n colors: {\n surface1: \"#eae8e8\",\n surface2: \"#00997761\",\n surface3: \"#ffffff5e\",\n clickable: \"#421010\",\n base: \"#421010\",\n disabled: \"#C5C5C5\",\n hover: \"#4D4D4D\",\n accent: \"#009977\",\n error: \"#ff453a\",\n errorSurface: \"#e8cac6\"\n },\n syntax: {\n plain: \"#151515\",\n comment: {\n color: \"#a9a7a7\",\n fontStyle: \"italic\"\n },\n keyword: \"#0971F1\",\n tag: \"#097104\",\n punctuation: \"#3B3B3B\",\n definition: \"#042d60\",\n property: \"#9013fe\",\n static: \"#FF453A\",\n string: \"#f5a623\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar freeCodeCampDark = {\n colors: {\n surface1: \"#2a2a40\",\n surface2: \"#0a0a23\",\n surface3: \"#3b3b4f\",\n clickable: \"#dfdfe2\",\n base: \"#ffffff\",\n disabled: \"#858591\",\n hover: \"#ffffff\",\n accent: \"#dbb8ff\",\n error: \"#ffffff\",\n errorSurface: \"#3b3b4f\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#858591\",\n fontStyle: \"italic\"\n },\n keyword: \"#dbb8ff\",\n tag: \"#f07178\",\n punctuation: \"#99c9ff\",\n definition: \"#ffffff\",\n property: \"#99c9ff\",\n static: \"#f78c6c\",\n string: \"#acd157\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar githubLight = {\n colors: {\n surface1: \"#ffffff\",\n surface2: \"#F3F3F3\",\n surface3: \"#f5f5f5\",\n clickable: \"#959da5\",\n base: \"#24292e\",\n disabled: \"#d1d4d8\",\n hover: \"#24292e\",\n accent: \"#24292e\"\n },\n syntax: {\n keyword: \"#d73a49\",\n property: \"#005cc5\",\n plain: \"#24292e\",\n static: \"#032f62\",\n string: \"#032f62\",\n definition: \"#6f42c1\",\n punctuation: \"#24292e\",\n tag: \"#22863a\",\n comment: {\n color: \"#6a737d\",\n fontStyle: \"normal\"\n }\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// Reference: https://github.com/gruvbox-community/gruvbox\nvar gruvboxDark = {\n colors: {\n surface1: \"#282828\",\n surface2: \"#3c3836\",\n surface3: \"#3c3836\",\n clickable: \"#ebdbb2\",\n base: \"#ebdbb2\",\n disabled: \"#928374\",\n hover: \"#fe8019\",\n accent: \"#d65d0e\",\n error: \"#ff453a\",\n errorSurface: \"#3c3836\"\n },\n syntax: {\n plain: \"#ebdbb2\",\n comment: {\n color: \"#928374\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff453a\",\n tag: \"#83a598\",\n punctuation: \"#ebdbb2\",\n definition: \"#83a598\",\n property: \"#fabd2f\",\n static: \"#ebdbb2\",\n string: \"#b8bb26\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// Reference: https://github.com/gruvbox-community/gruvbox\nvar gruvboxLight = {\n colors: {\n surface1: \"#fbf1c7\",\n surface2: \"#ebdbb2\",\n surface3: \"#ebdbb2\",\n clickable: \"#808080\",\n base: \"#3c3836\",\n disabled: \"#928374\",\n hover: \"#af3a03\",\n accent: \"#d65d0e\",\n error: \"#9d0006\",\n errorSurface: \"#ebdbb2\"\n },\n syntax: {\n plain: \"#3c3836\",\n comment: {\n color: \"#928374\",\n fontStyle: \"italic\"\n },\n keyword: \"#9d0006\",\n tag: \"#076678\",\n punctuation: \"#3c3836\",\n definition: \"#076678\",\n property: \"#b57614\",\n static: \"#3c3836\",\n string: \"#79740e\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar levelUp = {\n colors: {\n surface1: \"#191324\",\n surface2: \"#261e33\",\n surface3: \"#524763\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#aaaaaa\",\n hover: \"#ffffff\",\n accent: \"#82d8d8\",\n error: \"#e54b4b\",\n errorSurface: \"#191324\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#82d8d8\",\n fontStyle: \"italic\"\n },\n keyword: \"#e54b4b\",\n tag: \"#ff26be\",\n punctuation: \"#9588aa\",\n definition: \"#82d8d8\",\n property: \"#82d8d8\",\n static: \"#82d8d8\",\n string: \"#a8fe39\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"MonoLisa\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar monokaiPro = {\n colors: {\n surface1: \"#2D2A2E\",\n surface2: \"#444344\",\n surface3: \"#484747\",\n clickable: \"#939293\",\n base: \"#C1C0C1\",\n disabled: \"#444344\",\n hover: \"#FCFCFA\",\n accent: \"#FFD866\",\n error: \"#ffcdca\",\n errorSurface: \"#c24038\"\n },\n syntax: {\n plain: \"rgb(252, 252, 250)\",\n comment: { color: \"#757575\", fontStyle: \"italic\" },\n keyword: \"rgb(255, 97, 136)\",\n tag: \"rgb(120, 220, 232)\",\n punctuation: \"rgb(147, 146, 147)\",\n definition: \"rgb(169, 220, 118)\",\n property: { color: \"rgb(120, 220, 232)\", fontStyle: \"italic\" },\n static: \"rgb(171, 157, 242)\",\n string: \"rgb(255, 216, 102)\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar neoCyan = {\n colors: {\n surface1: \"#2b3935\",\n surface2: \"#191324\",\n surface3: \"#524763\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#aaaaaa\",\n hover: \"#ffffff\",\n accent: \"#82d8d8\",\n error: \"#e54b4b\",\n errorSurface: \"#191324\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#82d8d8\",\n fontStyle: \"italic\"\n },\n keyword: \"#e54b4b\",\n tag: \"#ff26be\",\n punctuation: \"#9588aa\",\n definition: \"#82d8d8\",\n property: \"#82d8d8\",\n static: \"#82d8d8\",\n string: \"#a8fe39\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"MonoLisa\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"12px\",\n lineHeight: \"18px\"\n }\n};\n\nvar nightOwl = {\n colors: {\n surface1: \"#011627\",\n surface2: \"#243b4c\",\n surface3: \"#112331\",\n clickable: \"#6988a1\",\n base: \"#808080\",\n disabled: \"#4D4D4D\",\n hover: \"#c5e4fd\",\n accent: \"#c5e4fd\",\n error: \"#ffcdca\",\n errorSurface: \"#811e18\"\n },\n syntax: {\n plain: \"#d6deeb\",\n comment: { color: \"#999999\", fontStyle: \"italic\" },\n keyword: { color: \"#c792ea\", fontStyle: \"italic\" },\n tag: \"#7fdbca\",\n punctuation: \"#7fdbca\",\n definition: \"#82aaff\",\n property: { color: \"#addb67\", fontStyle: \"italic\" },\n static: \"#f78c6c\",\n string: \"#ecc48d\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar sandpackDark = {\n colors: {\n surface1: \"#151515\",\n surface2: \"#252525\",\n surface3: \"#2F2F2F\",\n clickable: \"#999999\",\n base: \"#808080\",\n disabled: \"#4D4D4D\",\n hover: \"#C5C5C5\",\n accent: \"#90e86f\",\n error: \"#E1CFF8\",\n errorSurface: \"#b08df8\"\n },\n syntax: {\n plain: \"#f0fdaf\",\n comment: {\n color: \"#757575\",\n fontStyle: \"italic\"\n },\n keyword: \"#e5fd78\",\n tag: \"#f0fdaf\",\n punctuation: \"#ffffff\",\n definition: \"#eeeeee\",\n property: \"#90e86f\",\n static: \"#ffffff\",\n string: \"#dafecf\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nexport { amethyst, aquaBlue, atomDark, cobalt2, cyberpunk, dracula, ecoLight, freeCodeCampDark, githubLight, gruvboxDark, gruvboxLight, levelUp, monokaiPro, neoCyan, nightOwl, sandpackDark };\n","/**\n * Sandpack Preview Component\n *\n * Renders React/Vue/TypeScript components using CodeSandbox's Sandpack.\n * Provides a full bundled preview with live updates.\n */\n\nimport { useMemo } from 'react';\nimport {\n SandpackProvider,\n SandpackLayout,\n SandpackPreview as SandpackPreviewPane,\n SandpackCodeEditor,\n} from '@codesandbox/sandpack-react';\nimport { atomDark } from '@codesandbox/sandpack-themes';\nimport { Code2 } from 'lucide-react';\n\ninterface SandpackPreviewProps {\n content: string;\n fileName: string;\n files?: Record; // Additional files for multi-file projects\n}\n\ntype SandpackTemplate = 'react' | 'react-ts' | 'vue' | 'vue-ts' | 'vanilla' | 'vanilla-ts';\n\nexport function SandpackPreview({ content, fileName, files = {} }: SandpackPreviewProps) {\n // Determine the template based on file extension\n const template = useMemo((): SandpackTemplate => {\n const ext = fileName.split('.').pop()?.toLowerCase();\n\n switch (ext) {\n case 'tsx':\n return 'react-ts';\n case 'jsx':\n return 'react';\n case 'vue':\n return 'vue';\n default:\n return 'react';\n }\n }, [fileName]);\n\n // Prepare files for Sandpack\n const sandpackFiles = useMemo(() => {\n const result: Record = {};\n\n // Add the main file\n const mainPath = fileName.startsWith('/') ? fileName : `/${fileName}`;\n result[mainPath] = content;\n\n // Add additional files\n Object.entries(files).forEach(([path, fileContent]) => {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n result[normalizedPath] = fileContent;\n });\n\n // If this is a React component without App.tsx, wrap it\n if (template.startsWith('react') && !result['/App.tsx'] && !result['/App.jsx']) {\n const ext = template === 'react-ts' ? 'tsx' : 'jsx';\n\n // Check if the content exports a default component\n if (content.includes('export default') || content.includes('export function')) {\n result[`/App.${ext}`] = `\nimport Component from '${mainPath.replace(/\\.(tsx|jsx)$/, '')}';\n\nexport default function App() {\n return ;\n}\n`;\n }\n }\n\n return result;\n }, [content, fileName, files, template]);\n\n // Determine entry file\n const entryFile = useMemo(() => {\n if (sandpackFiles['/App.tsx']) return '/App.tsx';\n if (sandpackFiles['/App.jsx']) return '/App.jsx';\n if (sandpackFiles['/App.vue']) return '/App.vue';\n return fileName.startsWith('/') ? fileName : `/${fileName}`;\n }, [sandpackFiles, fileName]);\n\n return (\n
    \n {/* Header */}\n
    \n \n \n {template.includes('react') ? 'React' : template.includes('vue') ? 'Vue' : 'JavaScript'} Preview\n \n - {fileName}\n
    \n\n {/* Sandpack */}\n
    \n \n \n \n \n \n \n
    \n
    \n );\n}\n\nexport default SandpackPreview;\n","/**\n * ArtifactPreviewModal Component\n *\n * Modal dialog for previewing various artifact types.\n * Automatically detects file type and renders appropriate preview.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, Eye, Code, Download, Copy, Check } from 'lucide-react';\nimport { codeToHtml } from 'shiki';\nimport { useFileContent } from '../hooks/useFileContent';\nimport { detectArtifactType, getArtifactConfig, type ArtifactType } from '../utils/artifactTypes';\nimport type { FileContentResponse } from '../types';\nimport {\n HtmlPreview,\n SvgPreview,\n ImagePreview,\n MarkdownPreview,\n PdfPreview,\n MermaidPreview,\n DocxPreview,\n XlsxPreview,\n PptxPreview,\n VideoPreview,\n SandpackPreview,\n} from './artifactRenderers';\n\ninterface ArtifactPreviewModalProps {\n isOpen: boolean;\n onClose: () => void;\n filePath: string;\n workspacePath: string;\n}\n\ntype ViewMode = 'preview' | 'source';\n\n// Get file name from path\nfunction getFileName(path: string): string {\n return path.split('/').pop() || path;\n}\n\nfunction base64ToBlob(base64: string, mimeType?: string): Blob | null {\n try {\n const byteChars = atob(base64);\n const byteNumbers = new Array(byteChars.length);\n for (let i = 0; i < byteChars.length; i++) {\n byteNumbers[i] = byteChars.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType || 'application/octet-stream' });\n } catch (err) {\n console.error('Failed to decode base64 content for download', err);\n return null;\n }\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Check if a file is a web asset (CSS or JS)\n */\nfunction isWebAsset(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ext === 'css' || ext === 'js';\n}\n\n/**\n * Fetch workspace file list\n */\nasync function fetchWorkspaceFiles(workspacePath: string): Promise {\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n if (!response.ok) return [];\n const data = await response.json();\n // Extract file paths from the response\n return (data.files || []).map((f: { path: string }) => f.path);\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch a single file from workspace\n */\nasync function fetchSingleFile(filePath: string, workspacePath: string): Promise {\n try {\n const params = new URLSearchParams({\n path: filePath,\n workspace: workspacePath,\n });\n const response = await fetch(`/api/workspace/file?${params}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nexport function ArtifactPreviewModal({\n isOpen,\n onClose,\n filePath,\n workspacePath,\n}: ArtifactPreviewModalProps) {\n const { content, isLoading, error, fetchFile, clearContent } = useFileContent();\n const [viewMode, setViewMode] = useState('preview');\n const [copied, setCopied] = useState(false);\n const [highlightedHtml, setHighlightedHtml] = useState('');\n const [isHighlighting, setIsHighlighting] = useState(false);\n const [relatedFiles, setRelatedFiles] = useState>({});\n\n // Detect artifact type\n const artifactType = useMemo((): ArtifactType => {\n if (!content) return 'code';\n const detected = detectArtifactType(filePath, content.mimeType, content.content);\n const lowerPath = filePath.toLowerCase();\n if (\n content.binary &&\n (content.mimeType?.startsWith('video') ||\n lowerPath.endsWith('.mp4') ||\n lowerPath.endsWith('.webm') ||\n lowerPath.endsWith('.mov'))\n ) {\n return 'video';\n }\n return detected;\n }, [filePath, content]);\n\n const artifactConfig = useMemo(() => getArtifactConfig(artifactType), [artifactType]);\n\n // Fetch file when modal opens\n useEffect(() => {\n if (isOpen && filePath && workspacePath) {\n fetchFile(filePath, workspacePath);\n setViewMode('preview'); // Default to preview mode\n }\n }, [isOpen, filePath, workspacePath, fetchFile]);\n\n // Ensure binary videos snap back to preview mode when detected\n useEffect(() => {\n if (artifactType === 'video') {\n setViewMode('preview');\n }\n }, [artifactType]);\n\n // Clear content when modal closes\n useEffect(() => {\n if (!isOpen) {\n clearContent();\n setHighlightedHtml('');\n setCopied(false);\n setRelatedFiles({});\n }\n }, [isOpen, clearContent]);\n\n // Fetch ALL CSS/JS files from workspace for HTML previews\n // This handles any project structure without complex path resolution\n useEffect(() => {\n async function fetchAllWebAssets() {\n if (!content?.content || artifactType !== 'html') {\n return;\n }\n\n // Get list of all files in workspace\n const allFiles = await fetchWorkspaceFiles(workspacePath);\n\n // Filter for CSS and JS files\n const webAssets = allFiles.filter(isWebAsset);\n if (webAssets.length === 0) return;\n\n const fileMap: Record = {};\n\n // Fetch all CSS/JS files\n await Promise.all(\n webAssets.map(async (assetPath) => {\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (fileData?.content) {\n // Store by multiple keys for flexible matching:\n // 1. Full path (e.g., \"css/style.css\")\n // 2. Just filename (e.g., \"style.css\")\n // 3. Path without leading slash\n const fileName = assetPath.split('/').pop() || assetPath;\n fileMap[assetPath] = fileData.content;\n fileMap[fileName] = fileData.content;\n // Also store without leading ./\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = fileData.content;\n }\n })\n );\n\n setRelatedFiles(fileMap);\n }\n\n fetchAllWebAssets();\n }, [content, artifactType, workspacePath]);\n\n // Apply syntax highlighting for source view\n useEffect(() => {\n async function highlight() {\n if (!content || content.binary || !content.content || viewMode !== 'source') {\n return;\n }\n\n setIsHighlighting(true);\n try {\n const languageMap: Record = {\n plaintext: 'text',\n gitignore: 'text',\n dotenv: 'shell',\n dockerfile: 'docker',\n };\n\n const lang = languageMap[content.language] || content.language;\n const html = await codeToHtml(content.content, {\n lang,\n theme: 'github-dark',\n });\n setHighlightedHtml(html);\n } catch (err) {\n console.warn('Syntax highlighting failed:', err);\n setHighlightedHtml('');\n } finally {\n setIsHighlighting(false);\n }\n }\n\n highlight();\n }, [content, viewMode]);\n\n // Handle copy to clipboard\n const handleCopy = useCallback(async () => {\n if (!content?.content) return;\n\n try {\n await navigator.clipboard.writeText(content.content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [content]);\n\n // Handle download\n const handleDownload = useCallback(() => {\n if (!content?.content) return;\n\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (!blob) return;\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = getFileName(filePath);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, [content, filePath]);\n\n // Handle keyboard shortcuts\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose]);\n\n // Render preview based on artifact type\n const renderPreview = useCallback(() => {\n if (!content?.content) return null;\n\n const fileName = getFileName(filePath);\n\n switch (artifactType) {\n case 'html':\n return ;\n case 'svg':\n return ;\n case 'image':\n return (\n \n );\n case 'markdown':\n return ;\n case 'pdf':\n return ;\n case 'mermaid':\n return ;\n case 'docx':\n return ;\n case 'xlsx':\n return ;\n case 'pptx':\n return ;\n case 'video':\n return ;\n case 'react':\n return ;\n default:\n // Fallback to source view for unsupported types\n return null;\n }\n }, [content, filePath, artifactType, relatedFiles]);\n\n // Render source code view\n const renderSource = useCallback(() => {\n if (!content?.content) return null;\n\n if (isHighlighting) {\n return (\n
    \n Applying syntax highlighting...\n
    \n );\n }\n\n if (highlightedHtml) {\n return (\n \n );\n }\n\n return (\n
    \n        {content.content}\n      
    \n );\n }, [content, highlightedHtml, isHighlighting]);\n\n if (!isOpen) return null;\n\n return (\n \n {isOpen && (\n <>\n {/* Backdrop */}\n \n\n {/* Modal */}\n \n {/* Header */}\n
    \n
    \n {artifactConfig.icon}\n
    \n

    \n {getFileName(filePath)}\n

    \n
    \n \n {artifactConfig.label}\n \n {content && (\n <>\n \n {formatFileSize(content.size)}\n \n )}\n
    \n
    \n
    \n\n
    \n {/* View mode toggle */}\n {artifactConfig.canPreview && (\n
    \n setViewMode('preview')}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-md transition-colors ${\n viewMode === 'preview'\n ? 'bg-gray-600 text-gray-100'\n : 'text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Preview\n \n setViewMode('source')}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-md transition-colors ${\n viewMode === 'source'\n ? 'bg-gray-600 text-gray-100'\n : 'text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Source\n \n
    \n )}\n\n {/* Copy button */}\n {content && !content.binary && content.content && (\n \n {copied ? (\n <>\n \n Copied\n \n ) : (\n <>\n \n Copy\n \n )}\n \n )}\n\n {/* Download button */}\n {content && content.content && (\n \n \n Download\n \n )}\n\n {/* Close button */}\n \n \n \n
    \n
    \n\n {/* Content */}\n
    \n {isLoading && (\n
    \n Loading file...\n
    \n )}\n\n {error && (\n
    \n Failed to load file\n {error}\n
    \n )}\n\n {!isLoading && !error && content && (\n <>\n {viewMode === 'preview' && artifactConfig.canPreview ? (\n renderPreview() || renderSource()\n ) : (\n renderSource()\n )}\n \n )}\n
    \n \n \n )}\n
    \n );\n}\n\nexport default ArtifactPreviewModal;\n","/**\n * InlineArtifactPreview Component\n *\n * Renders artifact preview inline (not in modal).\n * Used for split-view workspace browsing.\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { Loader2, AlertCircle, Eye, Code, X, Download, Copy, Check, Maximize2, ExternalLink } from 'lucide-react';\nimport { codeToHtml } from 'shiki';\nimport { useFileContent } from '../hooks/useFileContent';\nimport { detectArtifactType, getArtifactConfig, type ArtifactType } from '../utils/artifactTypes';\nimport type { FileContentResponse } from '../types';\nimport {\n HtmlPreview,\n SvgPreview,\n ImagePreview,\n MarkdownPreview,\n PdfPreview,\n MermaidPreview,\n DocxPreview,\n XlsxPreview,\n PptxPreview,\n VideoPreview,\n SandpackPreview,\n} from './artifactRenderers';\n\ninterface InlineArtifactPreviewProps {\n filePath: string;\n workspacePath: string;\n onClose?: () => void;\n onFullscreen?: () => void;\n // Optional: Enable live HTML preview with working relative links\n sessionId?: string;\n agentId?: string;\n // Optional: Called when file is not found (404) - parent can clear selection\n onFileNotFound?: () => void;\n}\n\ntype ViewMode = 'preview' | 'source';\n\n// Get file name from path\nfunction getFileName(path: string): string {\n return path.split('/').pop() || path;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Check if a file is a web asset (CSS or JS)\n */\nfunction isWebAsset(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ext === 'css' || ext === 'js';\n}\n\n/**\n * Check if a file is an image\n */\nfunction isImageFile(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'ico', 'bmp'].includes(ext || '');\n}\n\n/**\n * Convert base64-encoded content into a Blob for downloads.\n */\nfunction base64ToBlob(base64: string, mimeType?: string): Blob | null {\n try {\n const byteChars = atob(base64);\n const byteNumbers = new Array(byteChars.length);\n for (let i = 0; i < byteChars.length; i++) {\n byteNumbers[i] = byteChars.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType || 'application/octet-stream' });\n } catch (err) {\n console.error('Failed to decode base64 content for download', err);\n return null;\n }\n}\n\n/**\n * Fetch workspace file list\n */\nasync function fetchWorkspaceFiles(workspacePath: string): Promise {\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n if (!response.ok) return [];\n const data = await response.json();\n return (data.files || []).map((f: { path: string }) => f.path);\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch a single file from workspace\n */\nasync function fetchSingleFile(filePath: string, workspacePath: string): Promise {\n try {\n const params = new URLSearchParams({\n path: filePath,\n workspace: workspacePath,\n });\n const response = await fetch(`/api/workspace/file?${params}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nexport function InlineArtifactPreview({\n filePath,\n workspacePath,\n onClose,\n onFullscreen,\n sessionId,\n agentId,\n onFileNotFound,\n}: InlineArtifactPreviewProps) {\n const { content, isLoading, error, fetchFile, clearContent } = useFileContent();\n const [viewMode, setViewMode] = useState('preview');\n const [copied, setCopied] = useState(false);\n const [highlightedHtml, setHighlightedHtml] = useState('');\n const [isHighlighting, setIsHighlighting] = useState(false);\n const [relatedFiles, setRelatedFiles] = useState>({});\n\n // Track scheduled 404 callbacks to prevent stale 404s from clearing selection\n const scheduledNotFoundRef = useRef(null);\n\n // Detect artifact type\n const artifactType = useMemo((): ArtifactType => {\n if (!content) return 'code';\n const detected = detectArtifactType(filePath, content.mimeType, content.content);\n // Force video rendering for binary video payloads even if detection fails\n const lowerPath = filePath.toLowerCase();\n if (\n content.binary &&\n (content.mimeType?.startsWith('video') ||\n lowerPath.endsWith('.mp4') ||\n lowerPath.endsWith('.webm') ||\n lowerPath.endsWith('.mov'))\n ) {\n return 'video';\n }\n return detected;\n }, [filePath, content]);\n\n const artifactConfig = useMemo(() => getArtifactConfig(artifactType), [artifactType]);\n\n // Track previous workspace to detect workspace changes\n const prevWorkspaceRef = useRef(null);\n\n // Fetch file when path changes\n useEffect(() => {\n if (filePath && workspacePath) {\n // Detect if workspace changed (not just file path)\n const workspaceChanged = prevWorkspaceRef.current !== null &&\n prevWorkspaceRef.current !== workspacePath;\n prevWorkspaceRef.current = workspacePath;\n\n // Clear previous state before fetching new file\n setHighlightedHtml('');\n setCopied(false);\n setRelatedFiles({});\n\n // Cancel any pending 404 callbacks from previous workspace\n // This prevents stale 404s from clearing the new workspace's file selection\n if (workspaceChanged) {\n scheduledNotFoundRef.current = null;\n }\n\n // Skip cache if workspace changed to ensure fresh data\n fetchFile(filePath, workspacePath, workspaceChanged);\n setViewMode('preview');\n }\n }, [filePath, workspacePath, fetchFile]);\n // Force preview for detected videos to avoid raw base64 view\n useEffect(() => {\n if (artifactType === 'video') {\n setViewMode('preview');\n }\n }, [artifactType]);\n\n // Clear content when component unmounts or path becomes empty\n useEffect(() => {\n if (!filePath) {\n clearContent();\n setRelatedFiles({});\n }\n }, [filePath, clearContent]);\n\n // AbortController for canceling web asset fetches when file changes\n const webAssetAbortRef = useRef(null);\n\n // Fetch CSS/JS/image files for HTML previews\n useEffect(() => {\n // Cancel any previous web asset fetches\n if (webAssetAbortRef.current) {\n webAssetAbortRef.current.abort();\n }\n\n async function fetchAllWebAssets() {\n if (!content?.content || artifactType !== 'html') {\n return;\n }\n\n const controller = new AbortController();\n webAssetAbortRef.current = controller;\n\n try {\n const allFiles = await fetchWorkspaceFiles(workspacePath);\n if (controller.signal.aborted) return;\n\n const webAssets = allFiles.filter(isWebAsset);\n const imageAssets = allFiles.filter(isImageFile);\n\n if (webAssets.length === 0 && imageAssets.length === 0) return;\n\n const fileMap: Record = {};\n\n // Fetch CSS/JS files (text content)\n await Promise.all(\n webAssets.map(async (assetPath) => {\n if (controller.signal.aborted) return;\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (controller.signal.aborted) return;\n if (fileData?.content) {\n const fileName = assetPath.split('/').pop() || assetPath;\n fileMap[assetPath] = fileData.content;\n fileMap[fileName] = fileData.content;\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = fileData.content;\n }\n })\n );\n\n if (controller.signal.aborted) return;\n\n // Fetch image files (binary content as base64 data URLs)\n await Promise.all(\n imageAssets.map(async (assetPath) => {\n if (controller.signal.aborted) return;\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (controller.signal.aborted) return;\n if (fileData?.content && fileData.binary) {\n const fileName = assetPath.split('/').pop() || assetPath;\n const mimeType = fileData.mimeType || 'image/png';\n const dataUrl = `data:${mimeType};base64,${fileData.content}`;\n // Store as data URL for all path variations\n fileMap[assetPath] = dataUrl;\n fileMap[fileName] = dataUrl;\n fileMap[`./${assetPath}`] = dataUrl;\n fileMap[`./${fileName}`] = dataUrl;\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = dataUrl;\n }\n })\n );\n\n if (controller.signal.aborted) return;\n setRelatedFiles(fileMap);\n } catch (err) {\n // Ignore abort errors\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Failed to fetch web assets:', err);\n }\n }\n\n fetchAllWebAssets();\n\n // Cleanup on unmount or when dependencies change\n return () => {\n if (webAssetAbortRef.current) {\n webAssetAbortRef.current.abort();\n }\n };\n }, [content, artifactType, workspacePath]);\n\n // Apply syntax highlighting for source view\n useEffect(() => {\n async function highlight() {\n if (!content || content.binary || !content.content || viewMode !== 'source') {\n return;\n }\n\n setIsHighlighting(true);\n try {\n const languageMap: Record = {\n plaintext: 'text',\n gitignore: 'text',\n dotenv: 'shell',\n dockerfile: 'docker',\n };\n\n const lang = languageMap[content.language] || content.language;\n const html = await codeToHtml(content.content, {\n lang,\n theme: 'github-dark',\n });\n setHighlightedHtml(html);\n } catch (err) {\n console.warn('Syntax highlighting failed:', err);\n setHighlightedHtml('');\n } finally {\n setIsHighlighting(false);\n }\n }\n\n highlight();\n }, [content, viewMode]);\n\n // Handle copy to clipboard\n const handleCopy = useCallback(async () => {\n if (!content?.content) return;\n\n try {\n await navigator.clipboard.writeText(content.content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [content]);\n\n // Handle download\n const handleDownload = useCallback(() => {\n if (!content?.content) return;\n\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (!blob) return;\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = getFileName(filePath);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, [content, filePath]);\n\n // Handle open in new tab\n const handleOpenInNewTab = useCallback(() => {\n if (!content?.content) return;\n\n // For HTML files, open as rendered HTML\n if (artifactType === 'html') {\n const blob = new Blob([content.content], { type: 'text/html' });\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n // Note: Can't revoke immediately as it's opened in new tab\n return;\n }\n\n // For images, open the image directly\n if (artifactType === 'image' && content.binary) {\n const blob = base64ToBlob(content.content, content.mimeType);\n if (blob) {\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n }\n return;\n }\n\n // For other files, open as plain text/source\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (blob) {\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n }\n }, [content, artifactType]);\n\n // Render preview based on artifact type\n const renderPreview = useCallback(() => {\n if (!content) return null;\n\n // For binary files, content.content may be base64 encoded\n if (!content.content && !content.binary) {\n return (\n
    \n \n No content available\n
    \n );\n }\n\n const fileName = getFileName(filePath);\n\n switch (artifactType) {\n case 'html':\n return (\n \n );\n case 'svg':\n return ;\n case 'image':\n return (\n \n );\n case 'markdown':\n return ;\n case 'pdf':\n return ;\n case 'mermaid':\n return ;\n case 'docx':\n return (\n \n );\n case 'xlsx':\n return ;\n case 'pptx':\n return (\n \n );\n case 'video':\n return (\n \n );\n case 'react':\n return ;\n case 'code':\n default:\n // For code/unknown types, show source with syntax highlighting\n if (highlightedHtml) {\n return (\n \n );\n }\n return (\n
    \n            {content.content}\n          
    \n );\n }\n }, [content, artifactType, filePath, highlightedHtml, relatedFiles, workspacePath]);\n\n // Loading state\n if (isLoading) {\n return (\n
    \n \n Loading preview...\n
    \n );\n }\n\n // Error state - silently recover from 404s, show error for other failures\n if (error) {\n const is404 = error.toLowerCase().includes('not found') || error.includes('404');\n\n // For 404s: silently clear selection and show empty state\n // This handles race conditions where file was deleted after appearing in list\n if (is404 && onFileNotFound) {\n // Only schedule callback if we haven't already for this file+workspace combo\n // This prevents stale 404s from clearing selection when workspace is changing\n const currentKey = `${workspacePath}:${filePath}`;\n if (scheduledNotFoundRef.current !== currentKey) {\n scheduledNotFoundRef.current = currentKey;\n // Call the callback to clear selection in parent\n // Use setTimeout to avoid state update during render\n setTimeout(() => {\n // Double-check the error is still for this same file/workspace\n // If workspace changed, don't clear selection\n if (scheduledNotFoundRef.current === currentKey) {\n onFileNotFound();\n }\n scheduledNotFoundRef.current = null;\n }, 0);\n }\n // Return empty state while parent updates\n return (\n
    \n \n Select a file to preview\n
    \n );\n }\n\n // For other errors, show error UI\n return (\n
    \n \n Failed to load file\n {error}\n
    \n );\n }\n\n // No file selected\n if (!filePath) {\n return (\n
    \n \n Select a file to preview\n
    \n );\n }\n\n const fileName = getFileName(filePath);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n {artifactConfig.icon}\n \n {fileName}\n \n {content && (\n \n ({formatFileSize(content.size)})\n \n )}\n
    \n\n
    \n {/* View mode toggle (for previewable types) */}\n {artifactConfig.canPreview && content && !content.binary && (\n
    \n setViewMode('preview')}\n className={`p-1.5 rounded transition-colors ${\n viewMode === 'preview'\n ? 'bg-blue-600 text-white'\n : 'text-gray-400 hover:text-gray-200 hover:bg-gray-700'\n }`}\n title=\"Preview\"\n >\n \n \n setViewMode('source')}\n className={`p-1.5 rounded transition-colors ${\n viewMode === 'source'\n ? 'bg-blue-600 text-white'\n : 'text-gray-400 hover:text-gray-200 hover:bg-gray-700'\n }`}\n title=\"Source\"\n >\n \n \n
    \n )}\n\n {/* Copy button */}\n {content && !content.binary && (\n \n {copied ? : }\n \n )}\n\n {/* Download button */}\n {content && (\n \n \n \n )}\n\n {/* Open in new tab button */}\n {content && (\n \n \n \n )}\n\n {/* Fullscreen button */}\n {onFullscreen && (\n \n \n \n )}\n\n {/* Close button */}\n {onClose && (\n \n \n \n )}\n
    \n
    \n\n {/* Preview Content */}\n
    \n {viewMode === 'preview' && artifactConfig.canPreview ? (\n renderPreview()\n ) : (\n // Source view\n
    \n {isHighlighting ? (\n
    \n \n
    \n ) : highlightedHtml ? (\n \n ) : content?.content ? (\n
    \n                {content.content}\n              
    \n ) : null}\n
    \n )}\n
    \n
    \n );\n}\n\nexport default InlineArtifactPreview;\n","/**\n * Agent Colors Utility\n *\n * Provides consistent identity colors for agents throughout the UI.\n * Each agent gets a unique color based on their order in the session.\n */\n\nexport interface AgentColor {\n /** Background color class (e.g., 'bg-blue-600') */\n bg: string;\n /** Lighter background for hover/subtle states */\n bgLight: string;\n /** Text color class (e.g., 'text-blue-400') */\n text: string;\n /** Border color class */\n border: string;\n /** Focus ring color class */\n ring: string;\n /** Raw hex value for SVG fills */\n hex: string;\n /** Lighter hex for gradients/secondary use */\n hexLight: string;\n}\n\n/**\n * Predefined color palette for up to 9 agents.\n * Colors are chosen to be visually distinct and accessible.\n */\nconst AGENT_COLORS: AgentColor[] = [\n {\n bg: 'bg-blue-600',\n bgLight: 'bg-blue-600/20',\n text: 'text-blue-400',\n border: 'border-blue-500',\n ring: 'ring-blue-500',\n hex: '#3B82F6',\n hexLight: '#60A5FA',\n },\n {\n bg: 'bg-emerald-600',\n bgLight: 'bg-emerald-600/20',\n text: 'text-emerald-400',\n border: 'border-emerald-500',\n ring: 'ring-emerald-500',\n hex: '#10B981',\n hexLight: '#34D399',\n },\n {\n bg: 'bg-violet-600',\n bgLight: 'bg-violet-600/20',\n text: 'text-violet-400',\n border: 'border-violet-500',\n ring: 'ring-violet-500',\n hex: '#8B5CF6',\n hexLight: '#A78BFA',\n },\n {\n bg: 'bg-orange-600',\n bgLight: 'bg-orange-600/20',\n text: 'text-orange-400',\n border: 'border-orange-500',\n ring: 'ring-orange-500',\n hex: '#F97316',\n hexLight: '#FB923C',\n },\n {\n bg: 'bg-pink-600',\n bgLight: 'bg-pink-600/20',\n text: 'text-pink-400',\n border: 'border-pink-500',\n ring: 'ring-pink-500',\n hex: '#EC4899',\n hexLight: '#F472B6',\n },\n {\n bg: 'bg-cyan-600',\n bgLight: 'bg-cyan-600/20',\n text: 'text-cyan-400',\n border: 'border-cyan-500',\n ring: 'ring-cyan-500',\n hex: '#06B6D4',\n hexLight: '#22D3EE',\n },\n {\n bg: 'bg-amber-600',\n bgLight: 'bg-amber-600/20',\n text: 'text-amber-400',\n border: 'border-amber-500',\n ring: 'ring-amber-500',\n hex: '#F59E0B',\n hexLight: '#FBBF24',\n },\n {\n bg: 'bg-rose-600',\n bgLight: 'bg-rose-600/20',\n text: 'text-rose-400',\n border: 'border-rose-500',\n ring: 'ring-rose-500',\n hex: '#F43F5E',\n hexLight: '#FB7185',\n },\n {\n bg: 'bg-indigo-600',\n bgLight: 'bg-indigo-600/20',\n text: 'text-indigo-400',\n border: 'border-indigo-500',\n ring: 'ring-indigo-500',\n hex: '#6366F1',\n hexLight: '#818CF8',\n },\n];\n\n/**\n * Get the color configuration for an agent based on their position in the agent order.\n *\n * @param agentId - The agent's ID\n * @param agentOrder - Array of agent IDs in order\n * @returns AgentColor configuration, cycling through palette if more than 9 agents\n */\nexport function getAgentColor(agentId: string, agentOrder: string[]): AgentColor {\n const index = agentOrder.indexOf(agentId);\n if (index === -1) {\n // Unknown agent, return first color as fallback\n return AGENT_COLORS[0];\n }\n return AGENT_COLORS[index % AGENT_COLORS.length];\n}\n\n/**\n * Get color by index directly (useful when you have the index already)\n */\nexport function getAgentColorByIndex(index: number): AgentColor {\n return AGENT_COLORS[index % AGENT_COLORS.length];\n}\n\n/**\n * Get the total number of unique colors available\n */\nexport function getColorCount(): number {\n return AGENT_COLORS.length;\n}\n\n/**\n * Get all agent colors (useful for legends/documentation)\n */\nexport function getAllAgentColors(): AgentColor[] {\n return [...AGENT_COLORS];\n}\n","/**\n * TimelineNode Component\n *\n * Renders a single node on the timeline (answer, vote, or final).\n * Color-coded by agent (for answers) or type (for votes/final) with hover effects and tooltips.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport type { TimelineNode as TimelineNodeType } from '../../types';\nimport { getAgentColor } from '../../utils/agentColors';\n\ninterface TimelineNodeProps {\n node: TimelineNodeType;\n x: number;\n y: number;\n size: number;\n agentOrder?: string[];\n isSuperseded?: boolean; // For vote nodes: true if this vote was superseded by a new answer\n onClick?: () => void;\n}\n\n// Track which nodes have been animated to prevent re-animation\nconst animatedNodes = new Set();\n\n// Node colors by type (for votes and final)\nconst nodeColors = {\n vote: {\n fill: 'url(#voteGradient)',\n stroke: '#FBBF24',\n glow: 'rgba(245, 158, 11, 0.4)',\n },\n voteSuperseded: {\n fill: 'url(#voteSupersededGradient)',\n stroke: '#6B7280',\n glow: 'rgba(107, 114, 128, 0.3)',\n },\n final: {\n fill: 'url(#finalGradient)',\n stroke: '#FDE047',\n glow: 'rgba(234, 179, 8, 0.5)',\n },\n};\n\nexport function TimelineNode({ node, x, y, size, agentOrder = [], isSuperseded = false, onClick }: TimelineNodeProps) {\n const [isHovered, setIsHovered] = useState(false);\n const radius = size / 2;\n\n // Get agent-specific color for answer nodes\n const colors = useMemo(() => {\n if (node.type === 'answer') {\n const agentColor = getAgentColor(node.agentId, agentOrder);\n return {\n fill: `url(#agent-${node.agentId}-gradient)`,\n stroke: agentColor.hexLight,\n glow: `${agentColor.hex}66`,\n hex: agentColor.hex,\n hexLight: agentColor.hexLight,\n };\n }\n // Use superseded colors for invalidated votes\n if (node.type === 'vote' && isSuperseded) {\n return nodeColors.voteSuperseded;\n }\n return nodeColors[node.type];\n }, [node.type, node.agentId, agentOrder, isSuperseded]);\n\n // Only animate nodes that haven't been seen before\n const shouldAnimate = !animatedNodes.has(node.id);\n useEffect(() => {\n animatedNodes.add(node.id);\n }, [node.id]);\n\n // Format timestamp for tooltip\n const formatTime = (timestamp: number) => {\n if (!timestamp) return '';\n const date = new Date(timestamp);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n };\n\n return (\n setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={onClick}\n style={{ cursor: onClick ? 'pointer' : 'default' }}\n >\n {/* Gradient definitions */}\n \n {/* Agent-specific gradient for answer nodes */}\n {node.type === 'answer' && 'hex' in colors && (\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 {/* Glow effect on hover */}\n {isHovered && (\n \n )}\n\n {/* Main node circle */}\n \n\n {/* Icon inside node */}\n \n {node.type === 'answer' && 'A'}\n {node.type === 'vote' && 'V'}\n {node.type === 'final' && '★'}\n \n\n {/* Label below node */}\n \n {node.label}{isSuperseded ? ' ✗' : ''}\n \n\n {/* Tooltip on hover */}\n {isHovered && (\n \n {/* Calculate tooltip dimensions based on content */}\n {(() => {\n const tooltipX = x + radius + 10;\n const tooltipY = y - 40;\n const lineHeight = 14;\n let currentY = tooltipY + 16;\n\n // Calculate height based on content\n let contentLines = 2; // label + timestamp\n if (node.type === 'vote' && node.votedFor) contentLines += 1;\n if (node.type === 'vote' && node.contextSources.length > 0) {\n contentLines += 1; // \"Options:\" header\n contentLines += node.contextSources.length; // Each option on its own line\n } else if (node.contextSources.length > 0) {\n contentLines += 1; // \"Context:\" header\n contentLines += Math.min(node.contextSources.length, 4); // Limit displayed\n }\n\n const tooltipHeight = 20 + contentLines * lineHeight;\n const tooltipWidth = 150;\n\n return (\n <>\n \n {/* Label */}\n \n {node.label}\n \n {/* Timestamp */}\n \n {formatTime(node.timestamp)}\n \n {/* Vote target (for vote nodes) */}\n {node.type === 'vote' && node.votedFor && (\n \n Voted: {node.votedFor}\n \n )}\n {/* Vote options (context sources for vote nodes) */}\n {node.type === 'vote' && node.contextSources.length > 0 && (\n <>\n \n Options:\n \n {node.contextSources.map((source) => {\n const isSelected = source === node.votedFor || source.includes(node.votedFor || '');\n return (\n \n {isSelected ? '● ' : '○ '}{source}\n \n );\n })}\n \n )}\n {/* Context sources (for non-vote nodes) */}\n {node.type !== 'vote' && node.contextSources.length > 0 && (\n <>\n \n Context:\n \n {node.contextSources.slice(0, 4).map((source) => (\n \n ← {source}\n \n ))}\n {node.contextSources.length > 4 && (\n \n +{node.contextSources.length - 4} more...\n \n )}\n \n )}\n \n );\n })()}\n \n )}\n \n );\n}\n\nexport default TimelineNode;\n","/**\n * TimelineArrow Component\n *\n * Renders curved arrows connecting timeline nodes.\n * Different styles for context dependencies vs vote arrows.\n */\n\nimport { useMemo } from 'react';\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface TimelineArrowProps {\n from: Point;\n to: Point;\n type: 'context' | 'vote';\n}\n\n// Arrow colors\nconst arrowColors = {\n context: {\n stroke: '#3B82F6',\n fill: '#3B82F6',\n },\n vote: {\n stroke: '#F59E0B',\n fill: '#F59E0B',\n },\n};\n\nexport function TimelineArrow({ from, to, type }: TimelineArrowProps) {\n const colors = arrowColors[type];\n\n // Calculate curved path using quadratic bezier\n const path = useMemo(() => {\n // Control point for curve\n const midX = (from.x + to.x) / 2;\n const midY = (from.y + to.y) / 2;\n\n // Curve direction based on relative positions\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n\n // Offset control point perpendicular to the line\n const curveOffset = Math.min(50, Math.abs(dx) * 0.3);\n const controlX = midX;\n const controlY = dy > 0 ? midY - curveOffset : midY + curveOffset;\n\n // If same column, curve to the side\n if (Math.abs(dx) < 10) {\n const sideOffset = 40;\n return `M ${from.x} ${from.y} Q ${from.x + sideOffset} ${midY} ${to.x} ${to.y}`;\n }\n\n return `M ${from.x} ${from.y} Q ${controlX} ${controlY} ${to.x} ${to.y}`;\n }, [from, to]);\n\n // Unique ID for this arrow's marker\n const markerId = `arrowhead-${type}-${from.x}-${from.y}-${to.x}-${to.y}`;\n\n return (\n \n {/* Arrowhead marker definition */}\n \n \n \n \n \n\n {/* Arrow path */}\n \n \n );\n}\n\nexport default TimelineArrow;\n","/**\n * TimelineLegend Component\n *\n * Displays a legend explaining the different node and arrow types\n * used in the timeline visualization.\n */\n\nexport function TimelineLegend() {\n return (\n
    \n {/* Node types */}\n
    \n Nodes:\n\n {/* Answer node */}\n
    \n
    \n Answer\n
    \n\n {/* Vote node */}\n
    \n
    \n Vote\n
    \n\n {/* Final node */}\n
    \n
    \n Final\n
    \n
    \n\n {/* Divider */}\n
    \n\n {/* Arrow types */}\n
    \n Arrows:\n\n {/* Context arrow */}\n
    \n \n \n \n \n \n \n \n \n Context\n
    \n\n {/* Vote arrow */}\n
    \n \n \n \n \n \n \n \n \n Vote\n
    \n
    \n
    \n );\n}\n\nexport default TimelineLegend;\n","/**\n * TimelineView Component\n *\n * Vertical swimlane visualization showing the coordination flow.\n * Each agent has a column, with nodes for answers/votes/final answer\n * and arrows showing context dependencies.\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { Loader2, GitBranch, CheckCircle2 } from 'lucide-react';\nimport { useAgentStore, selectIsComplete } from '../../stores/agentStore';\nimport type { TimelineNode as TimelineNodeType, TimelineData } from '../../types';\nimport { TimelineNode } from './TimelineNode';\nimport { TimelineArrow } from './TimelineArrow';\nimport { TimelineLegend } from './TimelineLegend';\nimport { getAgentColor } from '../../utils/agentColors';\n\ninterface TimelineViewProps {\n onNodeClick?: (node: TimelineNodeType) => void;\n}\n\n// Node dimensions for layout calculations\nconst NODE_SIZE = 40;\nconst NODE_GAP_Y = 80;\nconst COLUMN_WIDTH = 150;\nconst HEADER_HEIGHT = 60;\nconst PADDING = 40;\n\nexport function TimelineView({ onNodeClick }: TimelineViewProps) {\n const [timelineData, setTimelineData] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(null);\n const sessionId = useAgentStore((state) => state.sessionId);\n const isComplete = useAgentStore(selectIsComplete);\n\n // Check if timeline has a final node\n const hasFinalNode = useMemo(() => {\n return timelineData?.nodes.some(n => n.type === 'final') ?? false;\n }, [timelineData]);\n\n // Fetch timeline data\n const fetchTimeline = useCallback(async () => {\n if (!sessionId) {\n setIsLoading(false);\n return;\n }\n\n // Only show loading on first fetch\n if (!timelineData) {\n setIsLoading(true);\n }\n setError(null);\n\n try {\n const response = await fetch(`/api/sessions/${sessionId}/timeline`);\n if (!response.ok) {\n throw new Error('Failed to fetch timeline');\n }\n const data: TimelineData = await response.json();\n setTimelineData(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load timeline');\n } finally {\n setIsLoading(false);\n }\n }, [sessionId, timelineData]);\n\n // Initial fetch and auto-refresh every 3 seconds\n useEffect(() => {\n fetchTimeline();\n const interval = setInterval(fetchTimeline, 3000);\n return () => clearInterval(interval);\n }, [sessionId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Calculate node positions based on agent and timestamp\n const nodePositions = useMemo(() => {\n if (!timelineData || timelineData.nodes.length === 0) {\n return new Map();\n }\n\n const positions = new Map();\n const { nodes, agents } = timelineData;\n\n // Group nodes by agent\n const nodesByAgent = new Map();\n agents.forEach(agentId => nodesByAgent.set(agentId, []));\n\n nodes.forEach(node => {\n const agentNodes = nodesByAgent.get(node.agentId);\n if (agentNodes) {\n agentNodes.push(node);\n }\n });\n\n // Calculate Y position based on order within agent column\n agents.forEach((agentId, agentIndex) => {\n const agentNodes = nodesByAgent.get(agentId) || [];\n // Sort by timestamp\n agentNodes.sort((a, b) => a.timestamp - b.timestamp);\n\n agentNodes.forEach((node, nodeIndex) => {\n const x = PADDING + agentIndex * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n const y = HEADER_HEIGHT + PADDING + nodeIndex * NODE_GAP_Y;\n positions.set(node.id, { x, y });\n });\n });\n\n return positions;\n }, [timelineData]);\n\n // Calculate SVG dimensions\n const svgDimensions = useMemo(() => {\n if (!timelineData) {\n return { width: 600, height: 400 };\n }\n\n const width = Math.max(600, PADDING * 2 + timelineData.agents.length * COLUMN_WIDTH);\n\n // Find max Y position\n let maxY = HEADER_HEIGHT + PADDING;\n nodePositions.forEach(pos => {\n maxY = Math.max(maxY, pos.y);\n });\n\n const height = Math.max(400, maxY + NODE_GAP_Y + PADDING);\n\n return { width, height };\n }, [timelineData, nodePositions]);\n\n // Render loading state\n if (isLoading) {\n return (\n
    \n \n

    Loading timeline...

    \n
    \n );\n }\n\n // Render error state (will auto-retry)\n if (error) {\n return (\n
    \n \n

    Failed to load timeline

    \n

    {error}

    \n

    Retrying automatically...

    \n
    \n );\n }\n\n // Render empty state\n if (!sessionId) {\n return (\n
    \n \n

    No active session

    \n

    \n Start a coordination to see the timeline\n

    \n
    \n );\n }\n\n if (!timelineData || timelineData.nodes.length === 0) {\n return (\n
    \n \n

    No timeline data yet

    \n

    \n Timeline will populate as agents submit answers and votes\n

    \n
    \n );\n }\n\n return (\n
    \n {/* Legend */}\n \n\n {/* Completion Banner */}\n {(isComplete || hasFinalNode) && (\n
    \n \n
    \n

    Coordination Complete

    \n

    Final answer has been selected

    \n
    \n
    \n )}\n\n {/* Timeline Container */}\n
    \n \n {/* Background grid lines for swimlanes */}\n {timelineData.agents.map((_, index) => (\n \n ))}\n\n {/* Agent column headers */}\n {timelineData.agents.map((agentId, index) => {\n const x = PADDING + index * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n const agentIndex = index + 1;\n const agentColor = getAgentColor(agentId, timelineData.agents);\n return (\n \n \n \n Agent {agentIndex}\n \n \n );\n })}\n\n {/* Draw context arrows (behind nodes) */}\n {/* Context arrows show which ANSWERS provided context to other nodes */}\n {/* Votes never provide context, so we skip arrows FROM vote nodes */}\n {/* We also skip arrows TO vote nodes - votes have contextSources but those */}\n {/* represent \"available options\", not actual context dependency */}\n {timelineData.nodes\n .filter(node => node.type !== 'vote') // Only draw context arrows TO non-vote nodes\n .map(node => {\n const nodePos = nodePositions.get(node.id);\n if (!nodePos) return null;\n\n // Draw arrows from context sources\n return node.contextSources.map(sourceLabel => {\n // Find the source node by label\n const sourceNode = timelineData.nodes.find(n => n.label === sourceLabel);\n // Skip if source doesn't exist or is a vote (votes don't provide context)\n if (!sourceNode || sourceNode.type === 'vote') return null;\n\n // IMPORTANT: Only show context arrow if source existed BEFORE target\n // This filters out incorrect arrows where the API returns all answers\n // but the agent only had access to earlier ones when creating their answer\n if (sourceNode.timestamp >= node.timestamp) return null;\n\n const sourcePos = nodePositions.get(sourceNode.id);\n if (!sourcePos) return null;\n\n return (\n \n );\n });\n })}\n\n {/* Draw vote arrows (showing which answer received the vote) */}\n {timelineData.nodes\n .filter(n => n.type === 'vote' && n.votedFor)\n .map(node => {\n const nodePos = nodePositions.get(node.id);\n if (!nodePos || !node.votedFor) return null;\n\n // votedFor can be either an answer label (e.g., \"agent2.3\") or an agent ID (e.g., \"agent_b\")\n // Try to find by answer label first, then fall back to agent ID\n let targetAnswer = timelineData.nodes.find(\n n => n.type === 'answer' && n.label === node.votedFor\n );\n\n // Fallback: try matching by agent ID (old format)\n if (!targetAnswer) {\n targetAnswer = timelineData.nodes.find(\n n => n.type === 'answer' && n.agentId === node.votedFor\n );\n }\n\n if (!targetAnswer) {\n // Final fallback: point to the agent's column if no answer node found\n // Extract agent from label like \"agent2.3\" -> find agent at index 1 (agent2)\n const labelMatch = node.votedFor.match(/agent(\\d+)/);\n let targetAgentIndex = -1;\n if (labelMatch) {\n targetAgentIndex = parseInt(labelMatch[1], 10) - 1;\n } else {\n targetAgentIndex = timelineData.agents.indexOf(node.votedFor);\n }\n if (targetAgentIndex === -1 || targetAgentIndex >= timelineData.agents.length) return null;\n const targetX = PADDING + targetAgentIndex * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n return (\n \n );\n }\n\n const targetPos = nodePositions.get(targetAnswer.id);\n if (!targetPos) return null;\n\n return (\n \n );\n })}\n\n {/* Draw nodes */}\n {(() => {\n // Find the most recent vote for each agent (by timestamp)\n // Only the most recent vote per agent is valid; earlier ones are superseded\n const latestVoteByAgent = new Map();\n timelineData.nodes\n .filter(n => n.type === 'vote')\n .forEach(node => {\n const existing = latestVoteByAgent.get(node.agentId);\n if (!existing || node.timestamp > existing) {\n latestVoteByAgent.set(node.agentId, node.timestamp);\n }\n });\n\n return timelineData.nodes.map(node => {\n const pos = nodePositions.get(node.id);\n if (!pos) return null;\n\n // Final nodes are larger for emphasis\n const nodeSize = node.type === 'final' ? NODE_SIZE * 1.4 : NODE_SIZE;\n\n // Filter contextSources to only include sources that existed BEFORE this node\n const filteredContextSources = node.contextSources.filter(sourceLabel => {\n const sourceNode = timelineData.nodes.find(n => n.label === sourceLabel);\n // Only include if source existed before this node (by timestamp)\n return sourceNode && sourceNode.timestamp < node.timestamp;\n });\n\n // Create a modified node with filtered context sources for display\n const displayNode = {\n ...node,\n contextSources: filteredContextSources,\n };\n\n // Determine if this vote is superseded\n // A vote is superseded if it's not the most recent vote from that agent\n const isSuperseded = node.type === 'vote' &&\n node.timestamp !== latestVoteByAgent.get(node.agentId);\n\n return (\n onNodeClick?.(node)}\n />\n );\n });\n })()}\n \n
    \n
    \n );\n}\n\nexport default TimelineView;\n","/**\n * ProgressSummaryBar Component\n *\n * Displays a quick summary of the coordination session at the top of the Browser modal.\n * Shows agent count, answer count, vote progress, and winner information.\n */\n\nimport { Users, FileText, Vote, Trophy, Loader2 } from 'lucide-react';\nimport { getAgentColor } from '../utils/agentColors';\n\ninterface ProgressSummaryBarProps {\n agentCount: number;\n answerCount: number;\n voteCount: number;\n totalVotesExpected: number;\n winnerId?: string;\n winnerVotes?: number;\n isComplete: boolean;\n isVoting: boolean;\n agentOrder: string[];\n}\n\nexport function ProgressSummaryBar({\n agentCount,\n answerCount,\n voteCount,\n totalVotesExpected,\n winnerId,\n winnerVotes,\n isComplete,\n isVoting,\n agentOrder,\n}: ProgressSummaryBarProps) {\n // Get winner's display name and color\n const winnerIndex = winnerId ? agentOrder.indexOf(winnerId) : -1;\n const winnerDisplayName = winnerIndex !== -1 ? `Agent ${winnerIndex + 1}` : winnerId;\n const winnerColor = winnerId ? getAgentColor(winnerId, agentOrder) : null;\n\n return (\n
    \n {/* Agents */}\n
    \n \n \n {agentCount} agent{agentCount !== 1 ? 's' : ''}\n \n
    \n\n
    \n\n {/* Answers */}\n
    \n \n \n {answerCount} answer{answerCount !== 1 ? 's' : ''}\n \n
    \n\n
    \n\n {/* Votes / Winner */}\n {isComplete && winnerId ? (\n // Show winner\n
    \n \n \n \n {winnerDisplayName}\n \n {' '}won\n {winnerVotes !== undefined && (\n \n {' '}({winnerVotes} vote{winnerVotes !== 1 ? 's' : ''})\n \n )}\n \n
    \n ) : isVoting ? (\n // Show voting progress\n
    \n \n \n {voteCount}\n /{totalVotesExpected}\n {' '}votes cast\n \n
    \n ) : (\n // Show working status\n
    \n \n Coordinating...\n
    \n )}\n
    \n );\n}\n","/**\n * EmptyState Component\n *\n * Reusable component for displaying empty states with helpful messages and hints.\n * Used throughout the Browser modal for consistent empty state UX.\n */\n\nimport { motion } from 'framer-motion';\nimport { type LucideIcon } from 'lucide-react';\n\ninterface EmptyStateProps {\n /** Icon to display */\n icon: LucideIcon;\n /** Main title */\n title: string;\n /** Description text */\n description: string;\n /** Optional hint text (shown in slightly different style) */\n hint?: string;\n /** Optional action button */\n action?: {\n label: string;\n onClick: () => void;\n };\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n hint,\n action,\n size = 'md',\n}: EmptyStateProps) {\n const sizeClasses = {\n sm: {\n container: 'py-6',\n icon: 'w-10 h-10',\n title: 'text-sm',\n description: 'text-xs',\n hint: 'text-xs',\n },\n md: {\n container: 'py-12',\n icon: 'w-14 h-14',\n title: 'text-base',\n description: 'text-sm',\n hint: 'text-xs',\n },\n lg: {\n container: 'py-16',\n icon: 'w-20 h-20',\n title: 'text-lg',\n description: 'text-base',\n hint: 'text-sm',\n },\n };\n\n const classes = sizeClasses[size];\n\n return (\n \n {/* Icon with subtle background */}\n
    \n
    \n
    \n \n
    \n
    \n\n {/* Title */}\n

    \n {title}\n

    \n\n {/* Description */}\n

    \n {description}\n

    \n\n {/* Hint */}\n {hint && (\n

    \n {hint}\n

    \n )}\n\n {/* Action button */}\n {action && (\n \n {action.label}\n \n )}\n \n );\n}\n\n// Pre-configured empty states for common use cases\nexport const EMPTY_STATES = {\n noAnswers: {\n title: 'No answers yet',\n description: 'Answers will appear here as agents submit them during coordination.',\n hint: 'Press \"A\" to refresh the answer browser',\n },\n noVotes: {\n title: 'No votes cast yet',\n description: 'Votes are recorded after agents review each other\\'s answers.',\n hint: 'Voting begins once all agents have submitted answers',\n },\n noFiles: {\n title: 'No workspace files',\n description: 'Files created by agents will appear here.',\n hint: 'Select an agent above to browse their workspace',\n },\n noWorkspaces: {\n title: 'No workspaces found',\n description: 'The session may still be initializing.',\n hint: 'Workspaces appear once agents start working',\n },\n noTimeline: {\n title: 'No timeline data yet',\n description: 'The timeline will populate as coordination progresses.',\n hint: 'Check back after agents submit answers',\n },\n loading: {\n title: 'Loading...',\n description: 'Please wait while we fetch the data.',\n hint: undefined,\n },\n error: {\n title: 'Something went wrong',\n description: 'We couldn\\'t load this content. Please try again.',\n hint: 'If the problem persists, check your connection',\n },\n} as const;\n","/**\n * File Icons Utility\n *\n * Maps file extensions to lucide-react icons with appropriate colors.\n * Used in the workspace file tree for visual file type identification.\n */\n\nimport {\n Globe,\n Braces,\n FileCode,\n Palette,\n FileJson,\n FileText,\n Image,\n Film,\n FileSpreadsheet,\n Presentation,\n File,\n FileArchive,\n Database,\n Terminal,\n Settings,\n Lock,\n BookOpen,\n type LucideIcon,\n} from 'lucide-react';\n\nexport interface FileIconConfig {\n icon: LucideIcon;\n className: string; // Tailwind color class\n}\n\n// Extension to icon mapping\nconst FILE_ICON_MAP: Record = {\n // Web\n html: { icon: Globe, className: 'text-orange-400' },\n htm: { icon: Globe, className: 'text-orange-400' },\n\n // JavaScript\n js: { icon: Braces, className: 'text-yellow-400' },\n jsx: { icon: Braces, className: 'text-yellow-400' },\n mjs: { icon: Braces, className: 'text-yellow-400' },\n cjs: { icon: Braces, className: 'text-yellow-400' },\n\n // TypeScript\n ts: { icon: FileCode, className: 'text-blue-400' },\n tsx: { icon: FileCode, className: 'text-blue-400' },\n\n // Python\n py: { icon: FileCode, className: 'text-green-400' },\n pyw: { icon: FileCode, className: 'text-green-400' },\n pyx: { icon: FileCode, className: 'text-green-400' },\n ipynb: { icon: BookOpen, className: 'text-orange-400' },\n\n // Styles\n css: { icon: Palette, className: 'text-purple-400' },\n scss: { icon: Palette, className: 'text-pink-400' },\n sass: { icon: Palette, className: 'text-pink-400' },\n less: { icon: Palette, className: 'text-purple-400' },\n\n // Data formats\n json: { icon: FileJson, className: 'text-amber-400' },\n jsonc: { icon: FileJson, className: 'text-amber-400' },\n yaml: { icon: FileJson, className: 'text-red-400' },\n yml: { icon: FileJson, className: 'text-red-400' },\n xml: { icon: FileJson, className: 'text-orange-400' },\n toml: { icon: FileJson, className: 'text-gray-400' },\n\n // Markdown & Text\n md: { icon: FileText, className: 'text-gray-400' },\n mdx: { icon: FileText, className: 'text-gray-400' },\n txt: { icon: FileText, className: 'text-gray-500' },\n rst: { icon: FileText, className: 'text-gray-400' },\n\n // Images\n png: { icon: Image, className: 'text-pink-400' },\n jpg: { icon: Image, className: 'text-pink-400' },\n jpeg: { icon: Image, className: 'text-pink-400' },\n gif: { icon: Image, className: 'text-pink-400' },\n svg: { icon: Image, className: 'text-orange-400' },\n webp: { icon: Image, className: 'text-pink-400' },\n ico: { icon: Image, className: 'text-pink-400' },\n bmp: { icon: Image, className: 'text-pink-400' },\n\n // Video\n mp4: { icon: Film, className: 'text-red-400' },\n webm: { icon: Film, className: 'text-red-400' },\n mov: { icon: Film, className: 'text-red-400' },\n avi: { icon: Film, className: 'text-red-400' },\n mkv: { icon: Film, className: 'text-red-400' },\n\n // Office Documents\n pdf: { icon: FileText, className: 'text-red-500' },\n doc: { icon: FileText, className: 'text-blue-500' },\n docx: { icon: FileText, className: 'text-blue-500' },\n xls: { icon: FileSpreadsheet, className: 'text-green-500' },\n xlsx: { icon: FileSpreadsheet, className: 'text-green-500' },\n csv: { icon: FileSpreadsheet, className: 'text-green-400' },\n ppt: { icon: Presentation, className: 'text-orange-500' },\n pptx: { icon: Presentation, className: 'text-orange-500' },\n\n // Archives\n zip: { icon: FileArchive, className: 'text-amber-500' },\n tar: { icon: FileArchive, className: 'text-amber-500' },\n gz: { icon: FileArchive, className: 'text-amber-500' },\n rar: { icon: FileArchive, className: 'text-amber-500' },\n '7z': { icon: FileArchive, className: 'text-amber-500' },\n\n // Database\n sql: { icon: Database, className: 'text-blue-400' },\n db: { icon: Database, className: 'text-blue-400' },\n sqlite: { icon: Database, className: 'text-blue-400' },\n\n // Shell/Scripts\n sh: { icon: Terminal, className: 'text-green-400' },\n bash: { icon: Terminal, className: 'text-green-400' },\n zsh: { icon: Terminal, className: 'text-green-400' },\n fish: { icon: Terminal, className: 'text-green-400' },\n ps1: { icon: Terminal, className: 'text-blue-400' },\n bat: { icon: Terminal, className: 'text-gray-400' },\n cmd: { icon: Terminal, className: 'text-gray-400' },\n\n // Config\n ini: { icon: Settings, className: 'text-gray-400' },\n conf: { icon: Settings, className: 'text-gray-400' },\n config: { icon: Settings, className: 'text-gray-400' },\n env: { icon: Lock, className: 'text-yellow-500' },\n\n // Other languages\n java: { icon: FileCode, className: 'text-red-400' },\n kt: { icon: FileCode, className: 'text-purple-400' },\n go: { icon: FileCode, className: 'text-cyan-400' },\n rs: { icon: FileCode, className: 'text-orange-400' },\n rb: { icon: FileCode, className: 'text-red-500' },\n php: { icon: FileCode, className: 'text-indigo-400' },\n c: { icon: FileCode, className: 'text-blue-400' },\n cpp: { icon: FileCode, className: 'text-blue-500' },\n h: { icon: FileCode, className: 'text-purple-400' },\n hpp: { icon: FileCode, className: 'text-purple-400' },\n cs: { icon: FileCode, className: 'text-green-500' },\n swift: { icon: FileCode, className: 'text-orange-500' },\n r: { icon: FileCode, className: 'text-blue-400' },\n R: { icon: FileCode, className: 'text-blue-400' },\n lua: { icon: FileCode, className: 'text-blue-500' },\n pl: { icon: FileCode, className: 'text-purple-400' },\n scala: { icon: FileCode, className: 'text-red-400' },\n};\n\n// Special filenames that override extension-based icons\nconst SPECIAL_FILES: Record = {\n 'package.json': { icon: FileJson, className: 'text-green-400' },\n 'package-lock.json': { icon: Lock, className: 'text-amber-400' },\n 'tsconfig.json': { icon: Settings, className: 'text-blue-400' },\n 'vite.config.ts': { icon: Settings, className: 'text-purple-400' },\n 'vite.config.js': { icon: Settings, className: 'text-purple-400' },\n '.gitignore': { icon: Settings, className: 'text-orange-400' },\n '.env': { icon: Lock, className: 'text-yellow-500' },\n '.env.local': { icon: Lock, className: 'text-yellow-500' },\n '.env.example': { icon: Lock, className: 'text-yellow-400' },\n 'Dockerfile': { icon: FileCode, className: 'text-blue-400' },\n 'docker-compose.yml': { icon: Settings, className: 'text-blue-400' },\n 'Makefile': { icon: Terminal, className: 'text-gray-400' },\n 'README.md': { icon: BookOpen, className: 'text-blue-400' },\n 'LICENSE': { icon: FileText, className: 'text-gray-500' },\n 'requirements.txt': { icon: FileText, className: 'text-green-400' },\n 'pyproject.toml': { icon: Settings, className: 'text-blue-400' },\n};\n\n// Default icon for unknown file types\nconst DEFAULT_ICON: FileIconConfig = {\n icon: File,\n className: 'text-gray-400',\n};\n\n/**\n * Get the icon configuration for a file based on its name/extension\n */\nexport function getFileIcon(filename: string): FileIconConfig {\n // Check special filenames first\n const lowerFilename = filename.toLowerCase();\n if (SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename]) {\n return SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename];\n }\n\n // Extract extension\n const parts = filename.split('.');\n if (parts.length > 1) {\n const ext = parts[parts.length - 1].toLowerCase();\n if (FILE_ICON_MAP[ext]) {\n return FILE_ICON_MAP[ext];\n }\n }\n\n return DEFAULT_ICON;\n}\n\n/**\n * Check if a file extension is recognized\n */\nexport function isKnownFileType(filename: string): boolean {\n const lowerFilename = filename.toLowerCase();\n if (SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename]) {\n return true;\n }\n\n const parts = filename.split('.');\n if (parts.length > 1) {\n const ext = parts[parts.length - 1].toLowerCase();\n return ext in FILE_ICON_MAP;\n }\n\n return false;\n}\n","/**\n * useModalKeyboardNavigation Hook\n *\n * Provides keyboard navigation within the Browser modal.\n * Supports tab switching, list navigation, and item selection.\n */\n\nimport { useEffect, useCallback, useState } from 'react';\n\nexport type TabType = 'answers' | 'votes' | 'workspace' | 'timeline';\n\nconst TAB_ORDER: TabType[] = ['answers', 'votes', 'workspace', 'timeline'];\n\ninterface UseModalKeyboardNavigationOptions {\n /** Whether the modal is open */\n isOpen: boolean;\n /** Current active tab */\n activeTab: TabType;\n /** Number of items in the current list */\n itemCount: number;\n /** Callback when tab changes */\n onTabChange: (tab: TabType) => void;\n /** Callback when selected item changes */\n onItemSelect: (index: number) => void;\n /** Callback when item is activated (Enter/Space) */\n onItemActivate?: (index: number) => void;\n /** Callback to close the modal */\n onClose: () => void;\n /** Whether to enable navigation (disabled when focused on input) */\n enabled?: boolean;\n}\n\ninterface ModalNavigationState {\n /** Currently selected item index (-1 = none) */\n selectedIndex: number;\n /** Whether keyboard navigation is actively being used */\n isNavigating: boolean;\n}\n\nexport interface ModalKeyboardShortcut {\n key: string;\n description: string;\n category: 'tabs' | 'navigation' | 'actions';\n}\n\n/** Shortcuts available within the modal */\nexport const MODAL_SHORTCUTS: ModalKeyboardShortcut[] = [\n { key: '1', description: 'Answers tab', category: 'tabs' },\n { key: '2', description: 'Votes tab', category: 'tabs' },\n { key: '3', description: 'Workspace tab', category: 'tabs' },\n { key: '4', description: 'Timeline tab', category: 'tabs' },\n { key: 'j / ↓', description: 'Move down', category: 'navigation' },\n { key: 'k / ↑', description: 'Move up', category: 'navigation' },\n { key: 'Enter', description: 'Expand / Select', category: 'actions' },\n { key: 'Esc', description: 'Close modal', category: 'actions' },\n];\n\nexport function useModalKeyboardNavigation(options: UseModalKeyboardNavigationOptions) {\n const {\n isOpen,\n activeTab,\n itemCount,\n onTabChange,\n onItemSelect,\n onItemActivate,\n onClose,\n enabled = true,\n } = options;\n\n const [state, setState] = useState({\n selectedIndex: -1,\n isNavigating: false,\n });\n\n // Reset selection when tab changes or modal closes\n useEffect(() => {\n setState({ selectedIndex: -1, isNavigating: false });\n }, [activeTab, isOpen]);\n\n // Notify parent of selection changes\n useEffect(() => {\n if (state.selectedIndex >= 0) {\n onItemSelect(state.selectedIndex);\n }\n }, [state.selectedIndex, onItemSelect]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!isOpen || !enabled) return;\n\n // Skip if focused on an input/textarea\n const target = event.target as HTMLElement;\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable\n ) {\n return;\n }\n\n // Don't interfere with modifier key combinations (except Shift for ?)\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return;\n }\n\n let handled = false;\n\n switch (event.key) {\n // Tab switching with number keys\n case '1':\n case '2':\n case '3':\n case '4': {\n const tabIndex = parseInt(event.key, 10) - 1;\n if (tabIndex >= 0 && tabIndex < TAB_ORDER.length) {\n onTabChange(TAB_ORDER[tabIndex]);\n handled = true;\n }\n break;\n }\n\n // Navigate down\n case 'j':\n case 'ArrowDown': {\n if (itemCount > 0) {\n setState((prev) => ({\n selectedIndex: Math.min(prev.selectedIndex + 1, itemCount - 1),\n isNavigating: true,\n }));\n handled = true;\n }\n break;\n }\n\n // Navigate up\n case 'k':\n case 'ArrowUp': {\n if (itemCount > 0) {\n setState((prev) => ({\n selectedIndex: Math.max(prev.selectedIndex - 1, 0),\n isNavigating: true,\n }));\n handled = true;\n }\n break;\n }\n\n // Jump to first item\n case 'Home': {\n if (itemCount > 0) {\n setState({ selectedIndex: 0, isNavigating: true });\n handled = true;\n }\n break;\n }\n\n // Jump to last item\n case 'End': {\n if (itemCount > 0) {\n setState({ selectedIndex: itemCount - 1, isNavigating: true });\n handled = true;\n }\n break;\n }\n\n // Activate selected item\n case 'Enter':\n case ' ': {\n if (state.selectedIndex >= 0 && onItemActivate) {\n onItemActivate(state.selectedIndex);\n handled = true;\n }\n break;\n }\n\n // Close modal\n case 'Escape': {\n onClose();\n handled = true;\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [isOpen, enabled, activeTab, itemCount, state.selectedIndex, onTabChange, onItemActivate, onClose]\n );\n\n // Register keyboard listener\n useEffect(() => {\n if (isOpen && enabled) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n }, [isOpen, enabled, handleKeyDown]);\n\n // Clear navigation state when clicking with mouse\n const clearNavigation = useCallback(() => {\n setState({ selectedIndex: -1, isNavigating: false });\n }, []);\n\n // Set specific selection (for mouse hover integration)\n const setSelectedIndex = useCallback((index: number) => {\n setState({ selectedIndex: index, isNavigating: false });\n }, []);\n\n return {\n /** Current selected index (-1 = none) */\n selectedIndex: state.selectedIndex,\n /** Whether user is actively navigating with keyboard */\n isNavigating: state.isNavigating,\n /** Clear the current selection */\n clearNavigation,\n /** Set selection to specific index */\n setSelectedIndex,\n /** Available shortcuts for display in help */\n shortcuts: MODAL_SHORTCUTS,\n };\n}\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","/**\n * FileDiffView Component\n *\n * Shows a git-style diff between two file contents.\n * Only used when comparing files with the same name.\n */\n\nimport { useMemo } from 'react';\nimport { diffLines, type Change } from 'diff';\nimport { GitCompare, Plus, Minus, Equal } from 'lucide-react';\n\ninterface FileDiffViewProps {\n /** Left file content */\n leftContent: string;\n /** Right file content */\n rightContent: string;\n /** Left label (e.g., \"Agent 1 - agent1.1\") */\n leftLabel: string;\n /** Right label (e.g., \"Agent 2 - agent2.1\") */\n rightLabel: string;\n /** File name being compared */\n fileName: string;\n}\n\nexport function FileDiffView({\n leftContent,\n rightContent,\n leftLabel,\n rightLabel,\n fileName,\n}: FileDiffViewProps) {\n // Compute the diff\n const diffResult = useMemo(() => {\n return diffLines(leftContent, rightContent);\n }, [leftContent, rightContent]);\n\n // Calculate statistics\n const stats = useMemo(() => {\n let additions = 0;\n let deletions = 0;\n let unchanged = 0;\n\n diffResult.forEach((part) => {\n const lines = part.value.split('\\n').filter((l) => l !== '').length;\n if (part.added) {\n additions += lines;\n } else if (part.removed) {\n deletions += lines;\n } else {\n unchanged += lines;\n }\n });\n\n return { additions, deletions, unchanged };\n }, [diffResult]);\n\n // Check if files are identical\n const isIdentical = stats.additions === 0 && stats.deletions === 0;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Diff: {fileName}\n
    \n
    \n {isIdentical ? (\n \n \n Files are identical\n \n ) : (\n <>\n \n \n {stats.additions} additions\n \n \n \n {stats.deletions} deletions\n \n \n )}\n
    \n
    \n\n {/* Labels */}\n
    \n
    \n \n {leftLabel}\n
    \n
    \n \n {rightLabel}\n
    \n
    \n\n {/* Diff content */}\n
    \n
    \n          {diffResult.map((part, index) => (\n            \n          ))}\n        
    \n
    \n
    \n );\n}\n\ninterface DiffBlockProps {\n part: Change;\n}\n\nfunction DiffBlock({ part }: DiffBlockProps) {\n const lines = part.value.split('\\n');\n // Remove trailing empty line from split\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n if (part.added) {\n return (\n <>\n {lines.map((line, i) => (\n \n +\n {line || ' '}\n
    \n ))}\n \n );\n }\n\n if (part.removed) {\n return (\n <>\n {lines.map((line, i) => (\n \n -\n {line || ' '}\n
    \n ))}\n \n );\n }\n\n // Unchanged lines\n return (\n <>\n {lines.map((line, i) => (\n
    \n \n {line || ' '}\n
    \n ))}\n \n );\n}\n\nexport default FileDiffView;\n","/**\n * ComparisonView Component\n *\n * Side-by-side comparison of files from different agents or answer versions.\n * Supports both visual comparison (for HTML, images) and diff view (for code).\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { X, Columns, GitCompare, ChevronDown, Loader2, Split } from 'lucide-react';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { FileDiffView } from './FileDiffView';\nimport { getAgentColor } from '../utils/agentColors';\nimport type { AnswerWorkspace } from '../types';\n\ninterface ComparisonSource {\n agentId: string;\n answerLabel: string;\n workspacePath: string;\n filePath: string;\n}\n\ninterface WorkspaceInfo {\n path: string;\n answerLabel?: string;\n name?: string;\n}\n\ninterface ComparisonViewProps {\n /** Whether the comparison view is open */\n isOpen: boolean;\n /** Close the comparison view */\n onClose: () => void;\n /** Available agents and their workspaces (current from filesystem) */\n agentWorkspaces: Record;\n /** Historical answer workspaces (from status.json) */\n answerWorkspaces: AnswerWorkspace[];\n /** Agent order for consistent coloring */\n agentOrder: string[];\n /** Session ID for live preview */\n sessionId?: string;\n /** Initial file to compare (optional) */\n initialFile?: string;\n}\n\nexport function ComparisonView({\n isOpen,\n onClose,\n agentWorkspaces,\n answerWorkspaces,\n agentOrder,\n sessionId,\n initialFile: _initialFile,\n}: ComparisonViewProps) {\n // Left and right panel selections\n const [leftSource, setLeftSource] = useState(null);\n const [rightSource, setRightSource] = useState(null);\n\n // File lists for each panel\n const [leftFiles, setLeftFiles] = useState([]);\n const [rightFiles, setRightFiles] = useState([]);\n const [isLoadingLeft, setIsLoadingLeft] = useState(false);\n const [isLoadingRight, setIsLoadingRight] = useState(false);\n\n // Diff mode state\n const [showDiff, setShowDiff] = useState(false);\n const [leftContent, setLeftContent] = useState(null);\n const [rightContent, setRightContent] = useState(null);\n const [isLoadingDiff, setIsLoadingDiff] = useState(false);\n const [diffError, setDiffError] = useState(null);\n\n // Helper to extract filename from path\n const getFileName = useCallback((path: string) => path.split('/').pop() || path, []);\n\n // Check if both files have the same name (enabling diff mode)\n const canShowDiff = useMemo(() => {\n if (!leftSource?.filePath || !rightSource?.filePath) return false;\n const leftName = getFileName(leftSource.filePath);\n const rightName = getFileName(rightSource.filePath);\n return leftName === rightName;\n }, [leftSource?.filePath, rightSource?.filePath, getFileName]);\n\n // Get labels for diff view\n const getSourceLabel = useCallback((source: ComparisonSource | null) => {\n if (!source) return '';\n const agentIdx = agentOrder.indexOf(source.agentId);\n const agentNum = agentIdx >= 0 ? agentIdx + 1 : 0;\n return agentNum > 0 ? `Agent ${agentNum} - ${source.answerLabel}` : source.answerLabel;\n }, [agentOrder]);\n\n // Fetch file content for diff - returns { content, error } to distinguish failure types\n const fetchFileContent = useCallback(async (workspacePath: string, filePath: string): Promise<{ content: string | null; error?: string }> => {\n try {\n console.log('[ComparisonView] Fetching file for diff:', { workspace: workspacePath, path: filePath });\n // API requires separate workspace and relative path parameters\n const response = await fetch(`/api/workspace/file?workspace=${encodeURIComponent(workspacePath)}&path=${encodeURIComponent(filePath)}`);\n\n if (!response.ok) {\n console.error('[ComparisonView] File fetch failed:', response.status, response.statusText);\n return { content: null, error: `Failed to load file (${response.status})` };\n }\n\n const data = await response.json();\n console.log('[ComparisonView] File data received:', { binary: data.binary, size: data.size, hasContent: !!data.content });\n\n // Check if content is binary\n if (data.binary) {\n return { content: null, error: 'Binary file cannot be diffed' };\n }\n\n return { content: data.content || '' };\n } catch (err) {\n console.error('[ComparisonView] Error fetching file for diff:', err);\n return { content: null, error: `Error loading file: ${err}` };\n }\n }, []);\n\n // Load both file contents when diff mode is enabled\n useEffect(() => {\n if (showDiff && canShowDiff && leftSource?.filePath && rightSource?.filePath) {\n setIsLoadingDiff(true);\n setDiffError(null);\n Promise.all([\n fetchFileContent(leftSource.workspacePath, leftSource.filePath),\n fetchFileContent(rightSource.workspacePath, rightSource.filePath),\n ]).then(([leftResult, rightResult]) => {\n // Check for errors\n if (leftResult.error || rightResult.error) {\n const errors = [leftResult.error, rightResult.error].filter(Boolean);\n setDiffError(errors.join(' | '));\n setLeftContent(null);\n setRightContent(null);\n } else {\n setLeftContent(leftResult.content);\n setRightContent(rightResult.content);\n }\n setIsLoadingDiff(false);\n });\n } else {\n setLeftContent(null);\n setRightContent(null);\n setDiffError(null);\n }\n }, [showDiff, canShowDiff, leftSource?.workspacePath, leftSource?.filePath, rightSource?.workspacePath, rightSource?.filePath, fetchFileContent]);\n\n // Reset diff mode when files change\n useEffect(() => {\n setShowDiff(false);\n }, [leftSource?.filePath, rightSource?.filePath]);\n\n // Build options for dropdowns - merge current workspaces + answer workspaces\n const sourceOptions = useMemo(() => {\n const options: Array<{ agentId: string; answerLabel: string; workspacePath: string; displayName: string }> = [];\n const seenPaths = new Set(); // Avoid duplicates\n\n // First add current workspaces\n agentOrder.forEach((agentId, index) => {\n const agentData = agentWorkspaces[agentId];\n if (!agentData) return;\n\n const agentNum = index + 1;\n\n // Current workspace\n if (agentData.current && !seenPaths.has(agentData.current.path)) {\n seenPaths.add(agentData.current.path);\n options.push({\n agentId,\n answerLabel: 'current',\n workspacePath: agentData.current.path,\n displayName: `Agent ${agentNum} - Current`,\n });\n }\n });\n\n // Then add all historical answer workspaces\n answerWorkspaces.forEach((aw) => {\n if (seenPaths.has(aw.workspacePath)) return;\n seenPaths.add(aw.workspacePath);\n\n const agentIdx = agentOrder.indexOf(aw.agentId);\n const agentNum = agentIdx >= 0 ? agentIdx + 1 : 0;\n const displayLabel = aw.answerLabel || `Answer ${aw.answerNumber}`;\n\n options.push({\n agentId: aw.agentId,\n answerLabel: displayLabel,\n workspacePath: aw.workspacePath,\n displayName: agentNum > 0 ? `Agent ${agentNum} - ${displayLabel}` : displayLabel,\n });\n });\n\n // Sort by agent number, then by answer label\n options.sort((a, b) => {\n const aIdx = agentOrder.indexOf(a.agentId);\n const bIdx = agentOrder.indexOf(b.agentId);\n if (aIdx !== bIdx) return aIdx - bIdx;\n // Put 'current' first\n if (a.answerLabel === 'current') return -1;\n if (b.answerLabel === 'current') return 1;\n return a.answerLabel.localeCompare(b.answerLabel);\n });\n\n console.log('[ComparisonView] Built sourceOptions:', options);\n console.log('[ComparisonView] agentWorkspaces:', agentWorkspaces);\n console.log('[ComparisonView] answerWorkspaces:', answerWorkspaces);\n return options;\n }, [agentWorkspaces, answerWorkspaces, agentOrder]);\n\n // Auto-select first two options when opening\n useEffect(() => {\n if (isOpen && sourceOptions.length >= 2 && !leftSource && !rightSource) {\n const first = sourceOptions[0];\n const second = sourceOptions[1];\n\n // Don't auto-set filePath - let user select after files load\n setLeftSource({\n agentId: first.agentId,\n answerLabel: first.answerLabel,\n workspacePath: first.workspacePath,\n filePath: '',\n });\n setRightSource({\n agentId: second.agentId,\n answerLabel: second.answerLabel,\n workspacePath: second.workspacePath,\n filePath: '',\n });\n }\n }, [isOpen, sourceOptions, leftSource, rightSource]);\n\n // Fetch files when workspace changes\n const fetchFiles = async (workspacePath: string, setSide: 'left' | 'right') => {\n const setLoading = setSide === 'left' ? setIsLoadingLeft : setIsLoadingRight;\n const setFiles = setSide === 'left' ? setLeftFiles : setRightFiles;\n\n if (!workspacePath) {\n console.warn(`[ComparisonView] ${setSide}: No workspace path provided`);\n setFiles([]);\n return;\n }\n\n console.log(`[ComparisonView] ${setSide}: Fetching files from:`, workspacePath);\n setLoading(true);\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n console.log(`[ComparisonView] ${setSide}: Response status:`, response.status);\n\n if (response.ok) {\n const data = await response.json();\n console.log(`[ComparisonView] ${setSide}: Raw response:`, data);\n // API returns files with {path, size, modified} - no type field\n // All entries are files (directories are not returned by the API)\n const files = (data.files || []).map((f: { path: string }) => f.path);\n console.log(`[ComparisonView] ${setSide}: Found ${files.length} files:`, files);\n setFiles(files);\n } else {\n const errorText = await response.text();\n console.error(`[ComparisonView] ${setSide}: Failed to fetch files:`, response.status, errorText);\n setFiles([]);\n }\n } catch (err) {\n console.error(`[ComparisonView] ${setSide}: Error fetching files:`, err);\n setFiles([]);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (leftSource?.workspacePath) {\n fetchFiles(leftSource.workspacePath, 'left');\n }\n }, [leftSource?.workspacePath]);\n\n useEffect(() => {\n if (rightSource?.workspacePath) {\n fetchFiles(rightSource.workspacePath, 'right');\n }\n }, [rightSource?.workspacePath]);\n\n // Handle source selection\n const handleSourceChange = (side: 'left' | 'right', option: typeof sourceOptions[0]) => {\n const newSource: ComparisonSource = {\n agentId: option.agentId,\n answerLabel: option.answerLabel,\n workspacePath: option.workspacePath,\n filePath: '',\n };\n\n if (side === 'left') {\n setLeftSource(newSource);\n } else {\n setRightSource(newSource);\n }\n };\n\n // Handle file selection\n const handleFileSelect = (side: 'left' | 'right', filePath: string) => {\n if (side === 'left' && leftSource) {\n setLeftSource({ ...leftSource, filePath });\n } else if (side === 'right' && rightSource) {\n setRightSource({ ...rightSource, filePath });\n }\n };\n\n if (!isOpen) return null;\n\n return (\n \n e.stopPropagation()}\n >\n {/* Header */}\n
    \n
    \n \n

    Side-by-Side Comparison

    \n
    \n
    \n {/* Diff toggle - only shown when both files have the same name */}\n {canShowDiff && (\n setShowDiff(!showDiff)}\n className={`flex items-center gap-2 px-3 py-2 rounded-lg transition-colors ${\n showDiff\n ? 'bg-purple-600 text-white'\n : 'bg-gray-700 text-gray-300 hover:bg-gray-600'\n }`}\n title=\"Toggle diff view (available for same-name files)\"\n >\n \n \n {showDiff ? 'Diff View' : 'Show Diff'}\n \n \n )}\n \n \n \n
    \n
    \n\n {/* Main content - two panels or diff view */}\n {showDiff && canShowDiff ? (\n // Diff view mode\n
    \n {/* Source selectors row */}\n
    \n
    \n handleSourceChange('left', opt)}\n />\n
    \n handleFileSelect('left', e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {leftFiles.map((file) => (\n \n ))}\n \n
    \n
    \n
    \n
    \n handleSourceChange('right', opt)}\n />\n
    \n handleFileSelect('right', e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {rightFiles.map((file) => (\n \n ))}\n \n
    \n
    \n
    \n\n {/* Diff content */}\n
    \n {isLoadingDiff ? (\n
    \n \n Loading diff...\n
    \n ) : diffError ? (\n
    \n \n {diffError}\n Check console for details\n
    \n ) : leftContent === null || rightContent === null ? (\n
    \n \n Could not load file content\n Select files to compare\n
    \n ) : (\n \n )}\n
    \n
    \n ) : (\n // Side-by-side preview mode\n
    \n {/* Left Panel */}\n handleSourceChange('left', opt)}\n onFileSelect={(f) => handleFileSelect('left', f)}\n />\n\n {/* Divider */}\n
    \n\n {/* Right Panel */}\n handleSourceChange('right', opt)}\n onFileSelect={(f) => handleFileSelect('right', f)}\n />\n
    \n )}\n \n \n );\n}\n\ninterface SourceOption {\n agentId: string;\n answerLabel: string;\n workspacePath: string;\n displayName: string;\n}\n\n// Reusable source selector dropdown\ninterface SourceSelectorProps {\n source: ComparisonSource | null;\n sourceOptions: SourceOption[];\n agentOrder: string[];\n onSourceChange: (option: SourceOption) => void;\n}\n\nfunction SourceSelector({ source, sourceOptions, agentOrder, onSourceChange }: SourceSelectorProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const selectedOption = sourceOptions.find(\n (opt) => opt.workspacePath === source?.workspacePath\n );\n\n const agentColor = source ? getAgentColor(source.agentId, agentOrder) : null;\n\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n className={`w-full flex items-center justify-between px-4 py-2 rounded-lg border transition-colors ${\n agentColor\n ? `${agentColor.bgLight} ${agentColor.border} ${agentColor.text}`\n : 'bg-gray-700 border-gray-600 text-gray-300'\n }`}\n >\n \n {selectedOption?.displayName || 'Select source...'}\n \n \n \n\n {isDropdownOpen && (\n
    \n {sourceOptions.map((opt, idx) => {\n const optColor = getAgentColor(opt.agentId, agentOrder);\n return (\n {\n onSourceChange(opt);\n setIsDropdownOpen(false);\n }}\n className={`w-full px-4 py-2 text-left hover:bg-gray-700 transition-colors ${\n opt.workspacePath === source?.workspacePath ? optColor.bgLight : ''\n }`}\n >\n {opt.displayName}\n \n );\n })}\n
    \n )}\n
    \n );\n}\n\ninterface ComparisonPanelProps {\n side: 'left' | 'right';\n source: ComparisonSource | null;\n files: string[];\n isLoading: boolean;\n sourceOptions: SourceOption[];\n agentOrder: string[];\n sessionId?: string;\n onSourceChange: (option: SourceOption) => void;\n onFileSelect: (filePath: string) => void;\n}\n\nfunction ComparisonPanel({\n side: _side,\n source,\n files,\n isLoading,\n sourceOptions,\n agentOrder,\n sessionId,\n onSourceChange,\n onFileSelect,\n}: ComparisonPanelProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const selectedOption = sourceOptions.find(\n (opt) => opt.workspacePath === source?.workspacePath\n );\n\n const agentColor = source ? getAgentColor(source.agentId, agentOrder) : null;\n\n return (\n
    \n {/* Source selector */}\n
    \n
    \n setIsDropdownOpen(!isDropdownOpen)}\n className={`w-full flex items-center justify-between px-4 py-2 rounded-lg border transition-colors ${\n agentColor\n ? `${agentColor.bgLight} ${agentColor.border} ${agentColor.text}`\n : 'bg-gray-700 border-gray-600 text-gray-300'\n }`}\n >\n \n {selectedOption?.displayName || 'Select source...'}\n \n \n \n\n {isDropdownOpen && (\n
    \n {sourceOptions.map((opt, idx) => {\n const optColor = getAgentColor(opt.agentId, agentOrder);\n return (\n {\n onSourceChange(opt);\n setIsDropdownOpen(false);\n }}\n className={`w-full px-4 py-2 text-left hover:bg-gray-700 transition-colors ${\n opt.workspacePath === source?.workspacePath ? optColor.bgLight : ''\n }`}\n >\n {opt.displayName}\n \n );\n })}\n
    \n )}\n
    \n\n {/* File selector */}\n {source && (\n
    \n onFileSelect(e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {files.map((file) => (\n \n ))}\n \n
    \n )}\n
    \n\n {/* Preview area */}\n
    \n {isLoading ? (\n
    \n \n Loading files...\n
    \n ) : !source ? (\n
    \n \n Select a source to compare\n
    \n ) : !source.filePath ? (\n
    \n \n Select a file to preview\n \n {files.length} files available\n \n
    \n ) : (\n \n )}\n
    \n
    \n );\n}\n\nexport default ComparisonView;\n","/**\n * ResizableSplitPane Component\n *\n * A horizontal split pane with a draggable divider.\n * Stores the split ratio in localStorage for persistence.\n */\n\nimport { useState, useRef, useCallback, useEffect, type ReactNode } from 'react';\nimport { GripVertical } from 'lucide-react';\n\ninterface ResizableSplitPaneProps {\n /** Left panel content */\n left: ReactNode;\n /** Right panel content */\n right: ReactNode;\n /** Unique key for localStorage persistence */\n storageKey?: string;\n /** Initial left panel width as percentage (0-100) */\n defaultLeftWidth?: number;\n /** Minimum left panel width as percentage */\n minLeftWidth?: number;\n /** Maximum left panel width as percentage */\n maxLeftWidth?: number;\n /** Additional className for the container */\n className?: string;\n}\n\nexport function ResizableSplitPane({\n left,\n right,\n storageKey = 'split-pane-width',\n defaultLeftWidth = 30,\n minLeftWidth = 15,\n maxLeftWidth = 60,\n className = '',\n}: ResizableSplitPaneProps) {\n // Load saved width or use default\n const [leftWidth, setLeftWidth] = useState(() => {\n if (typeof window === 'undefined') return defaultLeftWidth;\n const saved = localStorage.getItem(storageKey);\n if (saved) {\n const parsed = parseFloat(saved);\n if (!isNaN(parsed) && parsed >= minLeftWidth && parsed <= maxLeftWidth) {\n return parsed;\n }\n }\n return defaultLeftWidth;\n });\n\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef(null);\n\n // Save to localStorage when width changes\n useEffect(() => {\n localStorage.setItem(storageKey, String(leftWidth));\n }, [leftWidth, storageKey]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n }, []);\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || !containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const newWidth = (x / rect.width) * 100;\n\n // Clamp to min/max\n const clampedWidth = Math.max(minLeftWidth, Math.min(maxLeftWidth, newWidth));\n setLeftWidth(clampedWidth);\n },\n [isDragging, minLeftWidth, maxLeftWidth]\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // Add/remove global mouse listeners when dragging\n useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n // Prevent text selection while dragging\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'col-resize';\n } else {\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n return (\n
    \n {/* Left Panel */}\n \n {left}\n
    \n\n {/* Resizer */}\n \n \n
    \n\n {/* Right Panel */}\n
    \n {right}\n
    \n
    \n );\n}\n\nexport default ResizableSplitPane;\n","/**\n * Fetch Utilities with AbortController Support\n *\n * Provides utilities for making cancellable fetch requests, particularly\n * useful for workspace browser where rapid switching between workspaces\n * requires cancelling in-flight requests.\n *\n * @see specs/001-fix-workspace-browser/spec.md FR-008\n */\n\n/**\n * Options for fetch with abort support.\n */\nexport interface FetchWithAbortOptions extends Omit {\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n}\n\n/**\n * Result from createAbortableFetch.\n */\nexport interface AbortableFetchResult {\n /** Promise that resolves with the parsed response */\n promise: Promise;\n /** Function to abort the request */\n abort: () => void;\n /** The AbortController instance */\n controller: AbortController;\n}\n\n/**\n * Error thrown when a fetch request is aborted.\n */\nexport class FetchAbortError extends Error {\n constructor(message = 'Request was aborted') {\n super(message);\n this.name = 'FetchAbortError';\n }\n}\n\n/**\n * Error thrown when a fetch request times out.\n */\nexport class FetchTimeoutError extends Error {\n constructor(timeout: number) {\n super(`Request timed out after ${timeout}ms`);\n this.name = 'FetchTimeoutError';\n }\n}\n\n/**\n * Creates an abortable fetch request that returns JSON.\n *\n * @param url - The URL to fetch\n * @param options - Fetch options including timeout\n * @returns Object containing the promise, abort function, and controller\n *\n * @example\n * ```typescript\n * // Create the request\n * const { promise, abort, controller } = createAbortableFetch(\n * `/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`\n * );\n *\n * // Use the promise\n * try {\n * const data = await promise;\n * console.log('Files:', data.files);\n * } catch (err) {\n * if (err instanceof FetchAbortError) {\n * console.log('Request was cancelled');\n * } else {\n * console.error('Fetch failed:', err);\n * }\n * }\n *\n * // Cancel if needed (e.g., when workspace changes)\n * abort();\n * ```\n */\nexport function createAbortableFetch(\n url: string,\n options: FetchWithAbortOptions = {}\n): AbortableFetchResult {\n const controller = new AbortController();\n const { timeout = 30000, ...fetchOptions } = options;\n\n // Set up timeout\n let timeoutId: ReturnType | null = null;\n\n const promise = new Promise((resolve, reject) => {\n // Set timeout\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n controller.abort();\n reject(new FetchTimeoutError(timeout));\n }, timeout);\n }\n\n fetch(url, {\n ...fetchOptions,\n signal: controller.signal,\n })\n .then(async (response) => {\n // Clear timeout on response\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n return response.json();\n })\n .then(resolve)\n .catch((err) => {\n // Clear timeout on error\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n // Convert abort error to our custom error\n if (err.name === 'AbortError') {\n reject(new FetchAbortError());\n } else {\n reject(err);\n }\n });\n });\n\n const abort = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n controller.abort();\n };\n\n return { promise, abort, controller };\n}\n\n/**\n * Simplified fetch with abort support - returns promise only.\n * Use createAbortableFetch if you need the abort function.\n *\n * @param url - The URL to fetch\n * @param signal - Optional AbortSignal for cancellation\n * @param options - Fetch options\n * @returns Promise that resolves with the parsed response\n *\n * @example\n * ```typescript\n * const controller = new AbortController();\n *\n * try {\n * const data = await fetchWithAbort(\n * `/api/workspace/browse?path=${path}`,\n * controller.signal\n * );\n * } catch (err) {\n * if (err instanceof FetchAbortError) {\n * // Cancelled - ignore\n * }\n * }\n *\n * // To cancel:\n * controller.abort();\n * ```\n */\nexport async function fetchWithAbort(\n url: string,\n signal?: AbortSignal,\n options: Omit = {}\n): Promise {\n try {\n const response = await fetch(url, {\n ...options,\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n return response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new FetchAbortError();\n }\n throw err;\n }\n}\n\n/**\n * Type guard for FetchAbortError.\n */\nexport function isAbortError(err: unknown): err is FetchAbortError {\n return err instanceof FetchAbortError;\n}\n\n/**\n * Type guard for FetchTimeoutError.\n */\nexport function isTimeoutError(err: unknown): err is FetchTimeoutError {\n return err instanceof FetchTimeoutError;\n}\n\n/**\n * Helper to check if error is either abort or timeout.\n */\nexport function isCancellationError(err: unknown): boolean {\n return isAbortError(err) || isTimeoutError(err);\n}\n","/**\n * AnswerBrowserModal Component\n *\n * Modal dialog for browsing all answers and workspace files from agents.\n * Includes tabs for Answers and Workspace views.\n */\n\nimport { useState, useMemo, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, FileText, User, Clock, ChevronDown, Trophy, Folder, ChevronRight, RefreshCw, History, Vote, ArrowRight, Eye, GitBranch, ExternalLink, Bell, Wifi, WifiOff, File, Columns } from 'lucide-react';\nimport { useAgentStore, selectAnswers, selectAgents, selectAgentOrder, selectSelectedAgent, selectFinalAnswer, selectVoteDistribution, selectVoteHistory, selectCurrentVotingRound, resolveAnswerContent } from '../stores/agentStore';\nimport { useWorkspaceStore, selectWsStatus, selectWsError } from '../stores/workspaceStore';\nimport type { Answer, AnswerWorkspace, TimelineNode as TimelineNodeType } from '../types';\nimport { ArtifactPreviewModal } from './ArtifactPreviewModal';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { TimelineView } from './timeline';\nimport { ProgressSummaryBar } from './ProgressSummaryBar';\nimport { EmptyState, EMPTY_STATES } from './EmptyState';\nimport { canPreviewFile } from '../utils/artifactTypes';\nimport { getFileIcon } from '../utils/fileIcons';\nimport { getAgentColor } from '../utils/agentColors';\nimport { clearFileCache } from '../hooks/useFileContent';\nimport { useModalKeyboardNavigation } from '../hooks/useModalKeyboardNavigation';\nimport { ComparisonView } from './ComparisonView';\nimport { ResizableSplitPane } from './ResizableSplitPane';\nimport { createAbortableFetch, isAbortError } from '../utils/fetchWithAbort';\nimport { debugLog } from '../utils/debugLogger';\n\n// Types for workspace API responses\ninterface WorkspaceInfo {\n name: string;\n path: string;\n type: 'current' | 'historical';\n date?: string;\n agentId?: string;\n}\n\ninterface WorkspacesResponse {\n current: WorkspaceInfo[];\n historical: WorkspaceInfo[];\n}\n\ninterface AnswerWorkspacesResponse {\n workspaces: AnswerWorkspace[];\n current: WorkspaceInfo[];\n sources?: string[];\n log_dir_used?: string;\n}\n\n// Map workspace name to agent ID (e.g., \"workspace1\" -> agent at index 0)\nfunction getAgentIdFromWorkspace(workspaceName: string, agentOrder: string[]): string | undefined {\n // Try agent_X pattern inside full path\n const agentMatch = workspaceName.match(/agent_([a-z0-9_]+)/i);\n if (agentMatch) {\n const candidate = `agent_${agentMatch[1].toLowerCase()}`;\n if (agentOrder.includes(candidate)) {\n return candidate;\n }\n }\n\n const match = workspaceName.match(/workspace(\\d+)/);\n if (match) {\n const index = parseInt(match[1], 10) - 1; // workspace1 = index 0\n return agentOrder[index];\n }\n return undefined;\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n modified: number;\n operation?: 'create' | 'modify' | 'delete';\n}\n\ninterface BrowseResponse {\n files: FileInfo[];\n workspace_path: string;\n workspace_mtime?: number;\n}\n\ninterface AnswerBrowserModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialTab?: TabType;\n}\n\ntype TabType = 'answers' | 'votes' | 'workspace' | 'timeline';\n\nfunction formatTimestamp(timestamp: number): string {\n const date = new Date(timestamp);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\n// ============================================================================\n// Workspace File Tree Components\n// ============================================================================\n\ninterface FileTreeNode {\n name: string;\n path: string;\n isDirectory: boolean;\n children: FileTreeNode[];\n size?: number;\n modified?: number;\n}\n\n// Patterns for files/directories to hide in the workspace browser\nconst HIDDEN_FILE_PATTERNS = [\n /^\\.mcp\\//, // MCP server config\n /^\\.mcp$/,\n /^server\\//, // Backend server code\n /^servers\\//, // MCP servers directory\n /^servers$/,\n /^custom_tools\\//, // Custom tools directory\n /^custom_tools$/,\n /^massgen\\//, // MassGen internal directory\n /^massgen$/,\n /^node_modules\\//, // Node dependencies\n /^__pycache__\\//, // Python cache\n /^\\.git\\//, // Git internals\n /^\\.venv\\//, // Python virtual env\n /^venv\\//,\n /^\\.env$/, // Environment files\n /^\\.env\\./,\n /\\.pyc$/, // Compiled Python\n /\\.tmp$/, // Temporary files\n /\\.tmp\\./, // Temp files with extensions\n];\n\n// Filter out hidden/internal files from workspace\nfunction filterHiddenFiles(files: FileInfo[]): FileInfo[] {\n return files.filter(file => {\n return !HIDDEN_FILE_PATTERNS.some(pattern => pattern.test(file.path));\n });\n}\n\nfunction buildFileTree(files: FileInfo[]): FileTreeNode[] {\n const root: FileTreeNode[] = [];\n\n files.forEach((file) => {\n const parts = file.path.split('/').filter(Boolean);\n let current = root;\n\n parts.forEach((part, idx) => {\n const isLast = idx === parts.length - 1;\n let node = current.find((n) => n.name === part);\n\n if (!node) {\n node = {\n name: part,\n path: parts.slice(0, idx + 1).join('/'),\n isDirectory: !isLast,\n children: [],\n size: isLast ? file.size : undefined,\n modified: isLast ? file.modified : undefined,\n };\n current.push(node);\n }\n\n if (!isLast) {\n node.isDirectory = true;\n current = node.children;\n }\n });\n });\n\n // Sort: directories first, then files alphabetically\n const sortNodes = (nodes: FileTreeNode[]): FileTreeNode[] => {\n return nodes.sort((a, b) => {\n if (a.isDirectory && !b.isDirectory) return -1;\n if (!a.isDirectory && b.isDirectory) return 1;\n return a.name.localeCompare(b.name);\n }).map(node => ({\n ...node,\n children: sortNodes(node.children),\n }));\n };\n\n return sortNodes(root);\n}\n\ninterface FileNodeProps {\n node: FileTreeNode;\n depth: number;\n onFileClick?: (filePath: string) => void;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction FileNode({ node, depth, onFileClick }: FileNodeProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const isPreviewable = !node.isDirectory && canPreviewFile(node.name);\n\n // Get file-type specific icon and color\n const fileIconConfig = !node.isDirectory ? getFileIcon(node.name) : null;\n const FileIcon = fileIconConfig?.icon;\n const fileIconClass = fileIconConfig?.className || 'text-gray-400';\n\n const handleClick = () => {\n if (node.isDirectory) {\n setIsExpanded(!isExpanded);\n } else if (onFileClick) {\n onFileClick(node.path);\n }\n };\n\n return (\n
    \n \n {node.isDirectory ? (\n isExpanded ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n\n {node.isDirectory ? (\n \n ) : FileIcon ? (\n \n ) : null}\n\n {node.name}\n\n {/* Preview icon for previewable files */}\n {isPreviewable && (\n \n \n \n )}\n\n {/* File size for non-directories */}\n {!node.isDirectory && node.size !== undefined && (\n \n {formatFileSize(node.size)}\n \n )}\n \n\n \n {node.isDirectory && isExpanded && (\n \n {node.children.map((child) => (\n \n ))}\n \n )}\n \n
    \n );\n}\n\n// ============================================================================\n// Main Modal Component\n// ============================================================================\n\nexport function AnswerBrowserModal({ isOpen, onClose, initialTab = 'answers' }: AnswerBrowserModalProps) {\n const answers = useAgentStore(selectAnswers);\n const agents = useAgentStore(selectAgents);\n const agentOrder = useAgentStore(selectAgentOrder);\n const selectedAgent = useAgentStore(selectSelectedAgent);\n const finalAnswer = useAgentStore(selectFinalAnswer);\n const voteDistribution = useAgentStore(selectVoteDistribution);\n const voteHistory = useAgentStore(selectVoteHistory);\n const currentVotingRound = useAgentStore(selectCurrentVotingRound);\n const sessionId = useAgentStore((s) => s.sessionId);\n\n // Workspace store - always-on WebSocket provides real-time file updates\n const wsStatus = useWorkspaceStore(selectWsStatus);\n const wsError = useWorkspaceStore(selectWsError);\n const wsReconnectAttempts = useWorkspaceStore((s) => s.reconnectAttempts);\n const allWorkspaces = useWorkspaceStore((s) => s.workspaces);\n const historicalSnapshots = useWorkspaceStore((s) => s.historicalSnapshots);\n const getWorkspaceFiles = useWorkspaceStore((s) => s.getWorkspaceFiles);\n const getHistoricalFiles = useWorkspaceStore((s) => s.getHistoricalFiles);\n const setSnapshotFiles = useWorkspaceStore((s) => s.setSnapshotFiles);\n const refreshSessionFn = useWorkspaceStore((s) => s.refreshSessionFn);\n\n const [activeTab, setActiveTab] = useState(initialTab);\n\n // Update active tab when initialTab changes (e.g., opening from notification)\n useEffect(() => {\n if (isOpen) {\n setActiveTab(initialTab);\n }\n }, [isOpen, initialTab]);\n const [filterAgent, setFilterAgent] = useState('all');\n const [expandedAnswerId, setExpandedAnswerId] = useState(null);\n\n // Auto-expand final answer when modal opens with answers tab\n useEffect(() => {\n if (isOpen && activeTab === 'answers' && !expandedAnswerId) {\n // Find the final answer (answerNumber === 0) and expand it\n const finalAnswerEntry = answers.find(a => a.answerNumber === 0);\n if (finalAnswerEntry) {\n setExpandedAnswerId(finalAnswerEntry.id);\n }\n }\n }, [isOpen, activeTab, answers, expandedAnswerId]);\n\n // Workspace state - API provides workspace info, store provides files\n const [workspaces, setWorkspaces] = useState({ current: [], historical: [] });\n const [isLoadingWorkspaces, setIsLoadingWorkspaces] = useState(false);\n const [isLoadingHistoricalFiles, setIsLoadingHistoricalFiles] = useState(false);\n const [workspaceError, setWorkspaceError] = useState(null);\n const [missingVersion, setMissingVersion] = useState(null);\n const [logDirOverride, setLogDirOverride] = useState(null);\n\n // Per-agent workspace selection state\n const [selectedAgentWorkspace, setSelectedAgentWorkspace] = useState(null);\n\n // Answer-linked workspace state\n const [answerWorkspaces, setAnswerWorkspaces] = useState([]);\n const [selectedAnswerLabel, setSelectedAnswerLabel] = useState('current');\n\n // File viewer modal state\n const [fileViewerOpen, setFileViewerOpen] = useState(false);\n const [selectedFilePath, setSelectedFilePath] = useState('');\n const [isPreviewFullscreen, setIsPreviewFullscreen] = useState(false);\n const [isComparisonOpen, setIsComparisonOpen] = useState(false);\n\n // Track if we've auto-previewed for the current workspace\n const hasAutoPreviewedRef = useRef(null);\n // Track previous workspace path to detect changes\n const prevWorkspacePathRef = useRef(null);\n\n // New answer notification state\n const [newAnswerNotification, setNewAnswerNotification] = useState<{\n answerLabel: string; // Selection label for dropdown (e.g., \"agent1.2\")\n displayLabel: string; // Human-readable label (e.g., \"Agent 1 Answer 2\")\n agentId: string;\n } | null>(null);\n // Track per-agent answer counts for new answer detection\n // Value of -1 means \"not yet initialized\" (different from 0 answers)\n const lastKnownAgentAnswerCountRef = useRef>({});\n // Track previous selected agent to detect agent switches\n const prevSelectedAgentRef = useRef(null);\n\n // AbortController ref for cancelling in-flight fetch requests (historical workspaces)\n const fetchAbortRef = useRef<(() => void) | null>(null);\n // Request ID to prevent stale finally blocks from clearing loading state\n const fetchRequestIdRef = useRef(0);\n // Debounce ref to coalesce rapid new_answer events into single fetch\n const debouncedNewAnswerFetchRef = useRef | null>(null);\n\n // Clear workspace/browser state when session changes to avoid stale paths/files\n // Note: workspaceStore is cleared by useWorkspaceConnection when session changes\n useEffect(() => {\n setWorkspaces({ current: [], historical: [] });\n setSelectedAgentWorkspace(null);\n setSelectedFilePath('');\n setSelectedAnswerLabel('current');\n setWorkspaceError(null);\n setIsLoadingHistoricalFiles(false);\n setIsLoadingWorkspaces(false);\n hasAutoPreviewedRef.current = null;\n prevWorkspacePathRef.current = null;\n clearFileCache();\n setMissingVersion(null);\n }, [sessionId]);\n\n // Auto-select the final answer's workspace version when viewing a completed session\n // This ensures that when a session has ended and final answer exists, we show\n // the workspace from the winning agent's final answer, not \"current\" which may be empty\n useEffect(() => {\n debugLog.info('[HistoricalLoad] Auto-select effect running', {\n hasFinalAnswer: !!finalAnswer,\n selectedAgentWorkspace,\n selectedAnswerLabel,\n answersCount: answers.length,\n });\n\n if (!finalAnswer || !selectedAgentWorkspace || selectedAnswerLabel !== 'current') {\n debugLog.info('[HistoricalLoad] Auto-select skipped', {\n reason: !finalAnswer ? 'no finalAnswer' : !selectedAgentWorkspace ? 'no selectedAgentWorkspace' : 'not current',\n });\n return;\n }\n\n // Find the highest answer number for the selected agent (their final answer)\n const agentAnswers = answers.filter(a => a.agentId === selectedAgentWorkspace && a.answerNumber > 0);\n debugLog.info('[HistoricalLoad] Agent answers for auto-select', {\n selectedAgentWorkspace,\n agentAnswersCount: agentAnswers.length,\n answerNumbers: agentAnswers.map(a => a.answerNumber),\n });\n\n if (agentAnswers.length === 0) return;\n\n const latestAnswer = agentAnswers.reduce((latest, current) =>\n current.answerNumber > latest.answerNumber ? current : latest\n );\n\n // Compute the answer label for this agent's final answer\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n const latestLabel = `agent${agentIdx}.${latestAnswer.answerNumber}`;\n\n debugLog.info('[HistoricalLoad] Auto-selecting final answer workspace', {\n selectedAgentWorkspace,\n latestAnswerNumber: latestAnswer.answerNumber,\n latestLabel,\n });\n\n setSelectedAnswerLabel(latestLabel);\n }, [finalAnswer, selectedAgentWorkspace, answers, agentOrder, selectedAnswerLabel]);\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debouncedNewAnswerFetchRef.current) {\n clearTimeout(debouncedNewAnswerFetchRef.current);\n }\n };\n }, []);\n\n // Read ?log_dir override from URL once\n useEffect(() => {\n const url = new URL(window.location.href);\n const logDir = url.searchParams.get('log_dir');\n if (logDir) {\n setLogDirOverride(logDir);\n }\n }, []);\n\n // Track new answers while on workspace tab - only for the agent being viewed\n // This effect detects new answers and sets a flag for workspace refresh\n // The actual fetch calls happen in a later effect after functions are defined\n const [pendingNewAnswerRefresh, setPendingNewAnswerRefresh] = useState(false);\n\n useEffect(() => {\n if (activeTab === 'workspace' && isOpen && selectedAgentWorkspace) {\n // Skip detection if this is a fresh agent selection (agent just changed)\n // The baseline will be set by the effect that runs right after, and we'll\n // start detecting from there. This prevents false notifications when switching agents.\n if (selectedAgentWorkspace !== prevSelectedAgentRef.current) {\n return;\n }\n\n // Filter answers to only the currently viewed agent\n const agentAnswers = answers.filter(a => a.agentId === selectedAgentWorkspace);\n const lastKnownCount = lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace];\n const hasBaseline = lastKnownCount !== undefined && lastKnownCount >= 0;\n\n // Check if this agent has NEW answers since we started viewing\n // A baseline count of >= 0 means we've been tracking, so we should notify on increase\n // This handles first answer (0 -> 1) as well as subsequent answers\n if (hasBaseline && agentAnswers.length > lastKnownCount) {\n // Set flag to trigger workspace refresh in later effect\n setPendingNewAnswerRefresh(true);\n\n // Show notification for ALL views (current AND historical) per FR-015\n // This ensures users are always aware of new answers and can navigate to them\n const newestAnswer = [...agentAnswers].sort((a, b) => b.timestamp - a.timestamp)[0];\n if (newestAnswer) {\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n // Store both display label and selection label (used by version dropdown)\n const displayLabel = newestAnswer.answerNumber === 0\n ? 'Final Answer'\n : `Agent ${agentIdx} Answer ${newestAnswer.answerNumber}`;\n const selectionLabel = `agent${agentIdx}.${newestAnswer.answerNumber}`;\n\n setNewAnswerNotification({\n answerLabel: selectionLabel,\n displayLabel,\n agentId: selectedAgentWorkspace,\n });\n }\n }\n\n // Update tracking for this agent\n lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace] = agentAnswers.length;\n }\n }, [answers, activeTab, isOpen, agentOrder, selectedAgentWorkspace, selectedAnswerLabel]);\n\n // Initialize answer count when agent selection changes\n // Reset baseline when switching to a different agent to prevent false notifications\n useEffect(() => {\n if (selectedAgentWorkspace && selectedAgentWorkspace !== prevSelectedAgentRef.current) {\n // Agent changed - establish a new baseline\n const currentCount = answers.filter(a => a.agentId === selectedAgentWorkspace).length;\n lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace] = currentCount;\n prevSelectedAgentRef.current = selectedAgentWorkspace;\n }\n }, [selectedAgentWorkspace, answers]);\n\n // Clear notification when user manually changes agent or version selection\n useEffect(() => {\n setNewAnswerNotification(null);\n }, [selectedAgentWorkspace, selectedAnswerLabel]);\n\n // Handle notification actions - navigate to current workspace or stay in historical\n const handleMoveToCurrentWorkspace = useCallback(() => {\n if (newAnswerNotification) {\n // Navigate to the current workspace (where the new answer was produced)\n setSelectedAnswerLabel('current');\n // Clear file selection to trigger auto-preview of new content\n setSelectedFilePath('');\n // Dismiss the notification\n setNewAnswerNotification(null);\n }\n }, [newAnswerNotification]);\n\n const handleStayInHistorical = useCallback(() => {\n if (newAnswerNotification) {\n // Navigate to the new historical snapshot (what was \"current\" before the answer)\n // This is the workspace state we were viewing before it got cleared\n setSelectedAnswerLabel(newAnswerNotification.answerLabel);\n // Clear file selection since we're switching workspaces\n setSelectedFilePath('');\n }\n // Dismiss the notification\n setNewAnswerNotification(null);\n }, [newAnswerNotification]);\n\n // Handle file click from workspace browser - sets file for inline preview\n const handleFileClick = useCallback((filePath: string) => {\n setSelectedFilePath(filePath);\n // Don't open modal - use inline preview in workspace tab\n }, []);\n\n // Handle closing inline preview\n const handleInlinePreviewClose = useCallback(() => {\n setSelectedFilePath('');\n }, []);\n\n // Handle preview close for modal (used by other tabs)\n const handlePreviewClose = useCallback(() => {\n setFileViewerOpen(false);\n }, []);\n\n // Handle timeline node click - navigate to appropriate tab\n const handleTimelineNodeClick = useCallback((node: TimelineNodeType) => {\n if (node.type === 'answer' || node.type === 'final') {\n // Switch to answers tab and expand the matching answer\n setActiveTab('answers');\n // Find and expand the answer that matches this node's label\n const matchingAnswer = answers.find(a => {\n // Match by agent ID and answer number\n const agentIdx = agentOrder.indexOf(a.agentId) + 1;\n const expectedLabel = a.answerNumber === 0\n ? 'final'\n : `agent${agentIdx}.${a.answerNumber}`;\n return node.label === expectedLabel || node.label === `answer${agentIdx}.${a.answerNumber}`;\n });\n if (matchingAnswer) {\n setExpandedAnswerId(matchingAnswer.id);\n }\n } else if (node.type === 'vote') {\n // Switch to votes tab\n setActiveTab('votes');\n }\n }, [answers, agentOrder]);\n\n // Fetch available workspaces from API (reads status.json - should be instant)\n const fetchWorkspaces = useCallback(async () => {\n setIsLoadingWorkspaces(true);\n setWorkspaceError(null);\n\n try {\n // Pass session_id for fast lookup from status.json\n const url = sessionId\n ? `/api/workspaces?session_id=${encodeURIComponent(sessionId)}`\n : '/api/workspaces';\n const response = await fetch(url);\n\n if (!response.ok) {\n // Handle status.json unavailable specifically (FR-011, T021)\n if (response.status === 503) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Workspace info not yet available. Session may still be initializing.');\n }\n throw new Error(`Failed to fetch workspaces (${response.status})`);\n }\n const data: WorkspacesResponse = await response.json();\n setWorkspaces(data);\n\n // Auto-select first agent's workspace if available\n if (data.current.length > 0 && !selectedAgentWorkspace) {\n const firstWorkspace = data.current[0];\n // Use agentId from API response if available (fast path), otherwise fall back to heuristic\n const agentId = firstWorkspace.agentId || getAgentIdFromWorkspace(firstWorkspace.name, agentOrder);\n if (agentId) {\n setSelectedAgentWorkspace(agentId);\n }\n } else if (data.current.length === 0 && !selectedAgentWorkspace) {\n // No current workspaces - try to use historical workspaces for completed sessions\n if (data.historical.length > 0) {\n // For completed sessions, select the first agent with historical workspaces\n const firstHistorical = data.historical[0];\n const agentId = firstHistorical.agentId || getAgentIdFromWorkspace(firstHistorical.name, agentOrder);\n if (agentId) {\n setSelectedAgentWorkspace(agentId);\n }\n } else {\n // Clear selection only if no workspaces exist at all\n setSelectedFilePath('');\n hasAutoPreviewedRef.current = null;\n }\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load workspaces');\n } finally {\n setIsLoadingWorkspaces(false);\n }\n }, [selectedAgentWorkspace, agentOrder, sessionId]);\n\n // Fetch files for historical workspace (current workspaces use WebSocket via store)\n // Historical workspace files are static - fetch once and store in snapshot\n const fetchHistoricalFiles = useCallback(async (answerLabel: string, workspacePath: string) => {\n debugLog.info('[Modal] fetchHistoricalFiles called', { answerLabel, workspacePath });\n\n // Cancel any in-flight request before starting a new one\n if (fetchAbortRef.current) {\n fetchAbortRef.current();\n fetchAbortRef.current = null;\n }\n\n // Increment request ID to track this specific request\n const requestId = ++fetchRequestIdRef.current;\n\n setIsLoadingHistoricalFiles(true);\n setWorkspaceError(null);\n\n const { promise, abort } = createAbortableFetch(\n `/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`,\n { timeout: 30000 }\n );\n\n fetchAbortRef.current = abort;\n\n try {\n const data = await promise;\n debugLog.info('[Modal] fetchHistoricalFiles response', {\n answerLabel,\n workspacePath,\n responseWorkspacePath: data.workspace_path,\n fileCount: data.files?.length ?? 0,\n });\n // Verify this response is for the currently requested workspace\n if (data.workspace_path !== workspacePath) {\n debugLog.warn('[Modal] fetchHistoricalFiles path mismatch', {\n expected: workspacePath,\n got: data.workspace_path,\n });\n return;\n }\n // Only update state if this is still the current request\n if (requestId === fetchRequestIdRef.current) {\n // Store files in the workspace store's historical snapshot\n setSnapshotFiles(answerLabel, data.files || []);\n debugLog.info('[Modal] fetchHistoricalFiles stored files', {\n answerLabel,\n fileCount: data.files?.length ?? 0,\n });\n }\n } catch (err) {\n if (isAbortError(err)) {\n debugLog.info('[Modal] fetchHistoricalFiles aborted', { answerLabel });\n return;\n }\n debugLog.error('[Modal] fetchHistoricalFiles error', {\n answerLabel,\n error: err instanceof Error ? err.message : String(err),\n });\n if (requestId === fetchRequestIdRef.current) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load files');\n }\n } finally {\n if (requestId === fetchRequestIdRef.current) {\n setIsLoadingHistoricalFiles(false);\n fetchAbortRef.current = null;\n }\n }\n }, [setSnapshotFiles]);\n\n // Fetch answer-linked workspaces from API\n const fetchAnswerWorkspaces = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n try {\n const params = new URLSearchParams();\n if (logDirOverride) {\n params.set('log_dir', logDirOverride);\n }\n const response = await fetch(`/api/sessions/${sessionId}/answer-workspaces?${params.toString()}`);\n if (response.ok) {\n const data: AnswerWorkspacesResponse = await response.json();\n setAnswerWorkspaces(data.workspaces || []);\n }\n } catch (err) {\n console.error('Failed to fetch answer workspaces:', err);\n }\n }, [logDirOverride]);\n\n // CRITICAL FIX: Handle pending new answer refresh with debouncing\n // This effect runs when a new answer is detected and triggers workspace sync\n // Debouncing coalesces rapid new_answer events into a single fetch to prevent cascade\n // NOTE: fetchAnswerWorkspaces removed - new answers now include workspace_path via WebSocket\n useEffect(() => {\n if (pendingNewAnswerRefresh) {\n // Reset the flag first to prevent loops\n setPendingNewAnswerRefresh(false);\n\n // Clear selected file to prevent showing stale \"file not found\" errors\n // The file list will update shortly and user can select a new file\n setSelectedFilePath('');\n\n // Debounce to coalesce rapid new_answer events into single fetch\n if (debouncedNewAnswerFetchRef.current) {\n clearTimeout(debouncedNewAnswerFetchRef.current);\n }\n debouncedNewAnswerFetchRef.current = setTimeout(() => {\n // Refresh the current workspaces in case they changed\n fetchWorkspaces();\n // Also refresh file list via WebSocket to get updated files immediately\n if (refreshSessionFn) {\n refreshSessionFn();\n }\n }, 100);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pendingNewAnswerRefresh]);\n\n // Open workspace in native file browser\n const openWorkspaceInFinder = useCallback(async (workspacePath: string) => {\n try {\n const response = await fetch('/api/workspace/open', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: workspacePath }),\n });\n if (!response.ok) {\n const data = await response.json();\n setWorkspaceError(data.error || 'Failed to open workspace');\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to open workspace');\n }\n }, []);\n\n // Map workspaces to agents\n const workspacesByAgent = useMemo(() => {\n const map: Record = {};\n\n // Initialize for all agents\n agentOrder.forEach((agentId) => {\n map[agentId] = { historical: [] };\n });\n\n // Map current workspaces - use agentId from API if available, otherwise fall back to heuristic\n workspaces.current.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].current = ws;\n }\n });\n\n // Map historical workspaces\n workspaces.historical.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].historical.push(ws);\n }\n });\n\n return map;\n }, [workspaces, agentOrder]);\n\n // Compute active workspace to display\n const activeWorkspace = useMemo(() => {\n if (!selectedAgentWorkspace) return null;\n\n // If a historical answer version is selected, get workspace path\n if (selectedAnswerLabel !== 'current') {\n // Check answerWorkspaces FIRST (from HTTP API via status.json, always has correct absolute paths)\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === selectedAgentWorkspace && w.answerLabel === selectedAnswerLabel\n );\n if (answerWs) {\n setMissingVersion(null);\n return {\n name: answerWs.answerLabel,\n path: answerWs.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Fallback to answers from agentStore (has workspace_path from new_answer WebSocket event)\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n const matchingAnswer = answers.find(a => {\n const expectedLabel = `agent${agentIdx}.${a.answerNumber}`;\n return a.agentId === selectedAgentWorkspace && expectedLabel === selectedAnswerLabel;\n });\n\n if (matchingAnswer?.workspacePath) {\n setMissingVersion(null);\n return {\n name: selectedAnswerLabel,\n path: matchingAnswer.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Selected a version but no mapping yet; avoid falling back to current\n setMissingVersion(`Workspace for version \"${selectedAnswerLabel}\" not available yet`);\n return null;\n }\n setMissingVersion(null);\n\n // Fallback to current workspace for the agent\n return workspacesByAgent[selectedAgentWorkspace]?.current || null;\n }, [selectedAgentWorkspace, selectedAnswerLabel, answers, answerWorkspaces, workspacesByAgent, agentOrder]);\n\n // Fetch workspaces when modal opens or tab switches to workspace\n // Note: fetchWorkspaces excluded from deps to prevent refetch cascade\n // FIX: Also fetch answerWorkspaces eagerly - WebSocket new_answer events may not always include workspace_path\n // The HTTP API reads from status.json which always has correct absolute paths\n useEffect(() => {\n if (isOpen && activeTab === 'workspace') {\n fetchWorkspaces();\n fetchAnswerWorkspaces(); // Always fetch historical workspace mappings from status.json\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, activeTab, sessionId]);\n\n // Check if current workspace files are missing from store and trigger refresh ONCE\n // This handles the case where WebSocket connected before status.json was ready\n const hasRefreshedForMissingRef = useRef(false);\n useEffect(() => {\n // Reset the guard when modal closes\n if (!isOpen) {\n hasRefreshedForMissingRef.current = false;\n return;\n }\n\n if (activeTab !== 'workspace') {\n return;\n }\n\n // Only check once per modal open to prevent infinite loops\n if (hasRefreshedForMissingRef.current) {\n return;\n }\n\n // Check if any current workspace paths are missing from the store\n const missingPaths = workspaces.current.filter(\n (ws) => {\n const storeData = allWorkspaces[ws.path];\n return !storeData || storeData.files.length === 0;\n }\n );\n\n if (missingPaths.length > 0 && refreshSessionFn) {\n hasRefreshedForMissingRef.current = true;\n refreshSessionFn();\n }\n }, [isOpen, activeTab, workspaces.current, allWorkspaces, refreshSessionFn]);\n\n // Poll for file updates every 3 seconds when viewing CURRENT workspace\n // Historical workspaces are snapshots and don't need polling\n useEffect(() => {\n // Only poll when modal is open, workspace tab is active, and we have refresh function\n if (!isOpen || activeTab !== 'workspace' || !refreshSessionFn || !activeWorkspace) {\n return;\n }\n\n // Skip polling for historical workspaces - they don't change\n if (activeWorkspace.type === 'historical') {\n return;\n }\n\n const pollInterval = setInterval(() => {\n refreshSessionFn();\n }, 3000);\n\n return () => clearInterval(pollInterval);\n }, [isOpen, activeTab, refreshSessionFn, activeWorkspace]);\n\n // FIX: Removed hasFetchedAnswerWorkspacesRef guard - answerWorkspaces is now fetched eagerly on tab open\n // This fallback effect triggers refetch if a version is selected but not found in answerWorkspaces\n // This handles edge cases where the initial fetch didn't include this version (e.g., answer created after fetch)\n useEffect(() => {\n if (missingVersion && answerWorkspaces.length === 0) {\n fetchAnswerWorkspaces();\n }\n }, [missingVersion, answerWorkspaces.length, fetchAnswerWorkspaces]);\n\n\n // Track previous workspace path to detect actual changes\n // For historical workspaces, fetch files if not already cached in store\n useEffect(() => {\n const currentPath = activeWorkspace?.path || null;\n const pathChanged = prevWorkspacePathRef.current !== currentPath;\n\n if (activeWorkspace && pathChanged) {\n prevWorkspacePathRef.current = currentPath;\n // Clear the selected file path when workspace actually changes\n setSelectedFilePath('');\n // Reset auto-preview tracking for this new workspace\n hasAutoPreviewedRef.current = null;\n } else if (!activeWorkspace && prevWorkspacePathRef.current !== null) {\n prevWorkspacePathRef.current = null;\n setSelectedFilePath('');\n }\n\n // For historical workspaces, always check if we need to fetch files\n // This runs on every render where we have an activeWorkspace + historical label\n // because the answer label might change without the path changing\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n debugLog.info('[HistoricalLoad] Decision point in useEffect', {\n selectedAnswerLabel,\n historicalFilesIsNull: historicalFiles === null,\n willFetch: historicalFiles === null,\n });\n if (historicalFiles === null) {\n // Need to fetch - files not in store yet\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, fetchHistoricalFiles]);\n\n // FIX: Eagerly fetch historical files when answerWorkspaces arrives and we have a pending historical selection\n // This handles the race condition where the version dropdown is selected before answerWorkspaces is fetched\n useEffect(() => {\n if (selectedAnswerLabel === 'current' || !selectedAgentWorkspace) return;\n\n // Check if we can now find the workspace in answerWorkspaces\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === selectedAgentWorkspace && w.answerLabel === selectedAnswerLabel\n );\n\n if (answerWs) {\n // answerWorkspaces now has this version - fetch files if not already cached\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n if (historicalFiles === null) {\n fetchHistoricalFiles(selectedAnswerLabel, answerWs.workspacePath);\n }\n }\n }, [answerWorkspaces, selectedAnswerLabel, selectedAgentWorkspace, getHistoricalFiles, fetchHistoricalFiles]);\n\n // Compute workspace files from store (replaces local state)\n // - Current workspaces: files come from WebSocket via workspaceStore\n // - Historical workspaces: files come from HTTP fetch, stored in historicalSnapshots\n const workspaceFiles = useMemo((): FileInfo[] => {\n if (!activeWorkspace) return [];\n\n if (selectedAnswerLabel !== 'current') {\n // Historical workspace - get from snapshot store\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n return historicalFiles || [];\n } else {\n // Current workspace - get from live workspace store\n return getWorkspaceFiles(activeWorkspace.path);\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, getWorkspaceFiles, allWorkspaces, historicalSnapshots, wsStatus]);\n\n // Determine loading state\n const isLoadingFiles = useMemo(() => {\n if (!activeWorkspace) return false;\n\n if (selectedAnswerLabel !== 'current') {\n // Historical: loading if we're fetching OR if files are null (not yet loaded)\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n return isLoadingHistoricalFiles || historicalFiles === null;\n } else {\n // Current: WebSocket always provides files - check if workspace exists in store\n const wsData = allWorkspaces[activeWorkspace.path];\n // Loading if connected but no workspace data yet\n return wsStatus === 'connecting' || (wsStatus === 'connected' && !wsData);\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, isLoadingHistoricalFiles, allWorkspaces, wsStatus]);\n\n // NOTE: Polling removed - now using WebSocket for real-time updates (T030)\n // WebSocket provides <2s update latency vs 8s polling\n\n // Auto-preview: Select first previewable file when workspace files are loaded\n // Use filtered files to avoid selecting hidden/temp files\n useEffect(() => {\n // Only auto-preview when:\n // 1. We have files\n // 2. No file is already selected\n // 3. We haven't auto-previewed this workspace yet\n const workspaceKey = activeWorkspace?.path || '';\n const visibleFiles = filterHiddenFiles(workspaceFiles);\n\n if (\n visibleFiles.length > 0 &&\n !selectedFilePath &&\n activeTab === 'workspace' &&\n hasAutoPreviewedRef.current !== workspaceKey\n ) {\n // Find the \"main\" previewable file with priority:\n // 1. PDF (specialized document)\n // 2. PPTX (specialized document)\n // 3. DOCX (specialized document)\n // 4. index.html (web entry point)\n // 5. Any .html file\n // 6. Images\n // 7. Any other previewable file\n const findMainPreviewable = (): string | null => {\n const previewableFiles = visibleFiles.filter(f => canPreviewFile(f.path));\n if (previewableFiles.length === 0) return null;\n\n // Priority 1: PDF\n const pdf = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.pdf')\n );\n if (pdf) return pdf.path;\n\n // Priority 2: PPTX\n const pptx = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.pptx')\n );\n if (pptx) return pptx.path;\n\n // Priority 3: DOCX\n const docx = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.docx')\n );\n if (docx) return docx.path;\n\n // Priority 4: index.html\n const indexHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('index.html')\n );\n if (indexHtml) return indexHtml.path;\n\n // Priority 5: Any HTML file\n const anyHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.html') || f.path.toLowerCase().endsWith('.htm')\n );\n if (anyHtml) return anyHtml.path;\n\n // Priority 6: Images\n const image = previewableFiles.find(f => {\n const ext = f.path.toLowerCase();\n return ext.endsWith('.png') || ext.endsWith('.jpg') || ext.endsWith('.jpeg') ||\n ext.endsWith('.gif') || ext.endsWith('.svg') || ext.endsWith('.webp');\n });\n if (image) return image.path;\n\n // Priority 7: First previewable file\n return previewableFiles[0].path;\n };\n\n const mainFile = findMainPreviewable();\n if (mainFile) {\n hasAutoPreviewedRef.current = workspaceKey;\n setSelectedFilePath(mainFile);\n }\n }\n }, [workspaceFiles, selectedFilePath, activeTab, activeWorkspace]);\n\n // Filter answers based on selected agent\n const filteredAnswers = useMemo(() => {\n let result = [...answers];\n\n if (filterAgent !== 'all') {\n result = result.filter((a) => a.agentId === filterAgent);\n }\n\n return result.sort((a, b) => b.timestamp - a.timestamp);\n }, [answers, filterAgent]);\n\n // Group answers by agent for summary stats\n const answersByAgent = useMemo(() => {\n const grouped: Record = {};\n answers.forEach((answer) => {\n if (!grouped[answer.agentId]) {\n grouped[answer.agentId] = [];\n }\n grouped[answer.agentId].push(answer);\n });\n return grouped;\n }, [answers]);\n\n // Collect vote data from voteHistory - permanent record that survives round resets\n const votes = useMemo(() => {\n return voteHistory.map((record) => {\n const voterIdx = agentOrder.indexOf(record.voterId);\n const targetIdx = agentOrder.indexOf(record.targetId);\n const voterAgent = agents[record.voterId];\n const targetAgent = agents[record.targetId];\n\n // Find what answers were available to choose from at the time of this vote\n // This is approximate - we use the votedAnswerLabel's answer number as the baseline\n const voteAnswerNum = parseInt(record.votedAnswerLabel?.match(/\\.(\\d+)$/)?.[1] || '1', 10);\n const availableAnswers = agentOrder.map((_, idx) => `answer${idx + 1}.${voteAnswerNum}`);\n\n // Check if this vote is from the current voting round (valid) or a previous round (invalidated)\n const isValid = record.voteRound === currentVotingRound;\n\n return {\n voterId: record.voterId,\n voterIndex: voterIdx + 1,\n voterModel: voterAgent?.modelName,\n targetId: record.targetId,\n targetIndex: targetIdx + 1,\n targetModel: targetAgent?.modelName,\n votedAnswerLabel: record.votedAnswerLabel || `answer${targetIdx + 1}.1`,\n availableAnswers,\n reason: record.reason || 'No reason provided',\n isValid,\n voteRound: record.voteRound,\n timestamp: record.timestamp,\n };\n }).sort((a, b) => b.timestamp - a.timestamp); // Newest first (top-down chronological)\n }, [voteHistory, agents, agentOrder, currentVotingRound]);\n\n // Sort vote distribution by votes (highest first)\n const sortedDistribution = useMemo(() => {\n return Object.entries(voteDistribution)\n .sort(([, a], [, b]) => b - a)\n .map(([agentId, voteCount]) => {\n const idx = agentOrder.indexOf(agentId);\n return {\n agentId,\n agentIndex: idx + 1,\n modelName: agents[agentId]?.modelName,\n votes: voteCount,\n isWinner: agentId === selectedAgent,\n };\n });\n }, [voteDistribution, agents, agentOrder, selectedAgent]);\n\n // Filter out hidden/internal directories from workspace files\n const filteredWorkspaceFiles = useMemo(() => filterHiddenFiles(workspaceFiles), [workspaceFiles]);\n\n // Build file tree from filtered workspace files\n const fileTree = useMemo(() => buildFileTree(filteredWorkspaceFiles), [filteredWorkspaceFiles]);\n\n // Count total workspaces\n const totalWorkspaces = workspaces.current.length + answerWorkspaces.length;\n\n // Compute item counts for keyboard navigation\n const itemCountByTab = useMemo(() => ({\n answers: filteredAnswers.length,\n votes: votes.length,\n workspace: fileTree.length,\n timeline: 0, // Timeline uses its own navigation\n }), [filteredAnswers.length, votes.length, fileTree.length]);\n\n // Keyboard navigation within modal\n // Note: selectedIndex and isNavigating can be used for visual highlighting\n const {\n selectedIndex: _selectedIndex,\n isNavigating: _isNavigating,\n setSelectedIndex: _setSelectedIndex,\n } = useModalKeyboardNavigation({\n isOpen,\n activeTab,\n itemCount: itemCountByTab[activeTab],\n onTabChange: setActiveTab,\n onItemSelect: (index) => {\n // Handle item selection based on active tab\n if (activeTab === 'answers' && filteredAnswers[index]) {\n setExpandedAnswerId(filteredAnswers[index].id);\n }\n },\n onItemActivate: (index) => {\n // Handle Enter/Space on selected item\n if (activeTab === 'answers' && filteredAnswers[index]) {\n const answerId = filteredAnswers[index].id;\n setExpandedAnswerId(expandedAnswerId === answerId ? null : answerId);\n }\n },\n onClose,\n });\n\n // Compute progress summary values\n const isVoting = useMemo(() => {\n return votes.length > 0 && !selectedAgent;\n }, [votes.length, selectedAgent]);\n\n const isComplete = useMemo(() => {\n return !!selectedAgent || !!finalAnswer;\n }, [selectedAgent, finalAnswer]);\n\n const winnerVotes = useMemo(() => {\n if (!selectedAgent) return undefined;\n return voteDistribution[selectedAgent] || 0;\n }, [selectedAgent, voteDistribution]);\n\n if (!isOpen) return null;\n\n return (\n \n {isOpen && (\n <>\n {/* Backdrop */}\n \n\n {/* Modal */}\n \n {/* Header */}\n
    \n
    \n \n

    Browser

    \n
    \n \n \n \n
    \n\n {/* Tabs */}\n
    \n setActiveTab('answers')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'answers'\n ? 'border-blue-500 text-blue-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Answers\n \n {answers.length}\n \n \n setActiveTab('votes')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'votes'\n ? 'border-amber-500 text-amber-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Votes\n \n {votes.length}\n \n \n setActiveTab('workspace')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'workspace'\n ? 'border-blue-500 text-blue-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Workspace\n \n {totalWorkspaces}\n \n \n setActiveTab('timeline')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'timeline'\n ? 'border-green-500 text-green-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Timeline\n \n\n {/* Progress Summary Bar - right-aligned */}\n
    \n \n
    \n
    \n\n {/* Tab Content */}\n {activeTab === 'answers' ? (\n <>\n {/* Filter Bar */}\n
    \n Filter by agent:\n
    \n setFilterAgent(e.target.value)}\n className=\"appearance-none bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 pr-10 text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {agentOrder.map((agentId) => (\n \n ))}\n \n \n
    \n
    \n\n {/* Answer List */}\n
    \n {filteredAnswers.length === 0 ? (\n \n ) : (\n
    \n {filteredAnswers.map((answer) => {\n const isExpanded = expandedAnswerId === answer.id;\n const isWinner = answer.agentId === selectedAgent;\n\n return (\n setExpandedAnswerId(isExpanded ? null : answer.id)}\n >\n {/* Answer Header */}\n
    \n
    \n
    \n {isWinner ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n {answer.agentId}\n \n {answer.answerNumber === 0 ? 'Final Answer' : `Answer #${answer.answerNumber}`}\n \n {answer.answerNumber === 0 && (\n \n Final\n \n )}\n {isWinner && answer.answerNumber !== 0 && (\n \n Winner\n \n )}\n
    \n
    \n \n {formatTimestamp(answer.timestamp)}\n
    \n
    \n
    \n \n \n \n
    \n\n {/* Answer Content (Expandable) */}\n \n {isExpanded && (\n \n
    \n
    \n                                      {resolveAnswerContent(answer, agents, finalAnswer)}\n                                    
    \n
    \n \n )}\n
    \n \n );\n })}\n
    \n )}\n
    \n \n ) : activeTab === 'votes' ? (\n <>\n {/* Votes Tab Content */}\n
    \n {/* Vote Distribution Summary */}\n {sortedDistribution.length > 0 && (\n
    \n

    \n \n Vote Distribution\n

    \n
    \n {sortedDistribution.map(({ agentId, agentIndex, modelName, votes: voteCount, isWinner }) => (\n \n
    \n \n
    \n \n Agent {agentIndex}\n \n {modelName && (\n {modelName}\n )}\n
    \n {isWinner && 👑}\n
    \n \n {voteCount}\n \n
    \n ))}\n
    \n
    \n )}\n\n {/* Individual Votes */}\n
    \n

    \n \n Individual Votes\n

    \n\n {votes.length === 0 ? (\n \n ) : (\n
    \n {votes.map((vote) => (\n \n {/* Vote header */}\n
    \n
    \n \n Agent {vote.voterIndex}\n {vote.voterModel && (\n ({vote.voterModel})\n )}\n
    \n \n
    \n \n {vote.votedAnswerLabel}\n \n {vote.isValid && vote.targetId === selectedAgent && 👑}\n {!vote.isValid && (\n \n superseded\n \n )}\n
    \n
    \n\n {/* Vote details */}\n
    \n {/* Voted for */}\n
    \n Voted for: \n \n Agent {vote.targetIndex}\n {vote.targetModel && ` (${vote.targetModel})`}\n \n
    \n\n {/* Available choices */}\n
    \n From choices: \n \n {vote.availableAnswers.join(', ')}\n \n
    \n\n {/* Reason */}\n
    \n

    {vote.reason}

    \n
    \n
    \n \n ))}\n
    \n )}\n
    \n
    \n \n ) : activeTab === 'workspace' ? (\n <>\n {/* Per-Agent Workspace Selector Bar */}\n
    \n {/* Agent Buttons */}\n
    \n \n Agent:\n
    \n {agentOrder.map((agentId, index) => {\n const agentData = workspacesByAgent[agentId];\n const hasWorkspace = agentData?.current || agentData?.historical.length > 0;\n if (!hasWorkspace) return null;\n\n const agentColor = getAgentColor(agentId, agentOrder);\n const isSelected = selectedAgentWorkspace === agentId;\n\n return (\n {\n setSelectedAgentWorkspace(agentId);\n setSelectedAnswerLabel('current');\n setSelectedFilePath(''); // Clear selection for auto-preview\n fetchWorkspaces();\n }}\n className={`px-3 py-1 text-sm rounded transition-colors ${\n isSelected\n ? `${agentColor.bg} text-white`\n : `${agentColor.bgLight} ${agentColor.text} hover:opacity-80`\n }`}\n >\n Agent {index + 1}\n \n );\n })}\n
    \n
    \n\n {/* Answer Version Dropdown - uses answers from agentStore for immediate updates */}\n {selectedAgentWorkspace && (\n
    \n \n Version:\n
    \n {\n const label = e.target.value;\n // FIX: Clear file content caches when switching versions\n // This prevents stale 404s from persisting across version switches\n clearFileCache();\n setSelectedAnswerLabel(label);\n\n // Always clear file selection when switching versions\n setSelectedFilePath('');\n\n // When switching to \"current\", trigger a refresh to get latest files\n if (label === 'current' && refreshSessionFn) {\n refreshSessionFn();\n }\n }}\n className=\"appearance-none bg-gray-700 border border-gray-600 rounded-lg px-3 py-1 pr-8 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {/* Show versions from answers (instant via WebSocket), not answerWorkspaces (requires HTTP) */}\n {answers\n .filter(a => a.agentId === selectedAgentWorkspace && a.answerNumber > 0)\n .sort((a, b) => a.answerNumber - b.answerNumber)\n .map((answer) => {\n const agentIdx = agentOrder.indexOf(answer.agentId) + 1;\n const label = `agent${agentIdx}.${answer.answerNumber}`;\n return (\n \n );\n })}\n \n \n
    \n
    \n )}\n\n {/* Compare Button */}\n {totalWorkspaces >= 2 && (\n setIsComparisonOpen(true)}\n className=\"ml-auto flex items-center gap-2 px-3 py-1.5 bg-purple-600 hover:bg-purple-500 rounded-lg transition-colors text-white text-sm\"\n title=\"Compare workspaces side-by-side\"\n >\n \n Compare\n \n )}\n\n {/* Open Folder Button */}\n {activeWorkspace && (\n openWorkspaceInFinder(activeWorkspace.path)}\n className={`flex items-center gap-2 px-3 py-1.5 bg-blue-600 hover:bg-blue-500 rounded-lg transition-colors text-white text-sm ${totalWorkspaces < 2 ? 'ml-auto' : ''}`}\n title=\"Open workspace in file browser\"\n >\n \n Open Folder\n \n )}\n\n {/* WebSocket Connection Status (T016) */}\n \n {wsStatus === 'connected' ? (\n \n ) : (\n \n )}\n \n {wsStatus === 'connected'\n ? 'Live'\n : wsStatus === 'reconnecting'\n ? 'Reconnecting...'\n : wsStatus === 'connecting'\n ? 'Connecting...'\n : 'Offline'}\n \n
    \n\n {/* Refresh Button */}\n {\n fetchWorkspaces();\n // For historical workspaces, refetch files; current workspaces auto-update via WebSocket\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }}\n disabled={isLoadingWorkspaces || isLoadingFiles}\n className={`${!activeWorkspace ? 'ml-auto' : ''} p-2 hover:bg-gray-700 rounded-lg transition-colors text-gray-400 hover:text-gray-200`}\n title=\"Refresh workspaces\"\n >\n \n \n
    \n\n {/* Error Display with Retry Button (T019) */}\n {workspaceError && (\n
    \n {workspaceError}\n {\n fetchWorkspaces();\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }}\n className=\"ml-4 px-3 py-1 bg-red-800/50 hover:bg-red-700/50 rounded text-red-200 text-xs transition-colors\"\n >\n Retry\n \n
    \n )}\n {missingVersion && (\n
    \n {missingVersion}\n
    \n )}\n\n {/* Split View: File Tree + Preview - wrapped in relative for overlay */}\n
    \n {/* New Answer Notification - Prominent Modal Overlay */}\n \n {newAnswerNotification && (\n \n \n
    \n {/* Icon with pulse animation */}\n \n \n \n\n {/* Title and description */}\n
    \n

    \n New Answer Available\n

    \n

    \n \n {newAnswerNotification.displayLabel}\n {' '}\n has been submitted for{' '}\n \n {newAnswerNotification.agentId}\n \n

    \n

    \n You are currently viewing a historical workspace version.\n

    \n
    \n\n {/* Action buttons */}\n
    \n \n \n Move to Current\n \n \n \n Stay Here\n \n
    \n
    \n \n \n )}\n
    \n\n {/* Resizable Split: File Tree + Preview */}\n \n {/* Only show full loading state on first load (no workspaces yet) */}\n {isLoadingWorkspaces && totalWorkspaces === 0 ? (\n
    \n \n

    Loading workspaces...

    \n
    \n ) : totalWorkspaces === 0 ? (\n \n ) : !activeWorkspace ? (\n \n ) : isLoadingFiles && filteredWorkspaceFiles.length === 0 ? (\n \n ) : filteredWorkspaceFiles.length === 0 ? (\n \n ) : (\n
    \n
    \n {filteredWorkspaceFiles.length} files\n {selectedAnswerLabel !== 'current' && (\n (historical)\n )}\n {isLoadingFiles && (\n \n )}\n
    \n {fileTree.map((node) => (\n \n ))}\n
    \n )}\n
    \n }\n right={\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n sessionId={sessionId}\n agentId={selectedAgentWorkspace || undefined}\n onFileNotFound={() => setSelectedFilePath('')}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n }\n />\n
    \n\n {/* Workspace Summary */}\n {activeWorkspace && filteredWorkspaceFiles.length > 0 && (\n
    \n \n {filteredWorkspaceFiles.length} files in {activeWorkspace.name}\n \n \n {activeWorkspace.path}\n \n
    \n )}\n \n ) : activeTab === 'timeline' ? (\n
    \n \n
    \n ) : null}\n \n \n )}\n\n {/* Artifact Preview Modal */}\n \n\n {/* Fullscreen Preview Modal */}\n {isPreviewFullscreen && selectedFilePath && activeWorkspace && (\n setIsPreviewFullscreen(false)}\n >\n e.stopPropagation()}\n >\n {/* Fullscreen header */}\n
    \n
    \n \n {selectedFilePath}\n
    \n setIsPreviewFullscreen(false)}\n className=\"p-2 hover:bg-gray-700 rounded-lg transition-colors text-gray-400 hover:text-white\"\n title=\"Close fullscreen\"\n >\n \n \n
    \n {/* Fullscreen preview content */}\n
    \n setIsPreviewFullscreen(false)}\n sessionId={sessionId}\n agentId={selectedAgentWorkspace || undefined}\n onFileNotFound={() => {\n setSelectedFilePath('');\n setIsPreviewFullscreen(false);\n }}\n />\n
    \n \n \n )}\n\n {/* Side-by-Side Comparison View */}\n setIsComparisonOpen(false)}\n agentWorkspaces={workspacesByAgent}\n answerWorkspaces={answerWorkspaces}\n agentOrder={agentOrder}\n sessionId={sessionId}\n initialFile={selectedFilePath}\n />\n \n );\n}\n\nexport default AnswerBrowserModal;\n","/**\n * ConversationHistory - Compact conversation history display\n *\n * Shows previous turns in a dropdown/popover format:\n * - Compact header that shows turn count\n * - Click to expand full chat history in a floating panel\n * - Does NOT take up vertical space in main layout\n */\n\nimport { useState, useMemo, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { User, Bot, ExternalLink, ChevronDown, ChevronUp, MessageSquare, X } from 'lucide-react';\nimport { useAgentStore } from '../stores/agentStore';\n\ninterface ConversationHistoryProps {\n /** Callback when user clicks to view full response in browser */\n onViewResponse?: (turn: number) => void;\n}\n\nexport function ConversationHistory({\n onViewResponse,\n}: ConversationHistoryProps) {\n const conversationHistory = useAgentStore((s) => s.conversationHistory);\n const [isOpen, setIsOpen] = useState(false);\n const [expandedMessages, setExpandedMessages] = useState>(new Set());\n const panelRef = useRef(null);\n\n // Close panel when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Parse conversation history into messages\n const messages = useMemo(() => {\n const result: Array<{\n role: 'user' | 'assistant';\n content: string;\n turn: number;\n }> = [];\n\n for (const msg of conversationHistory) {\n result.push({\n role: msg.role,\n content: msg.content,\n turn: msg.turn || 1,\n });\n }\n\n return result;\n }, [conversationHistory]);\n\n // Count unique turns (any turn that has at least one message)\n const uniqueTurns = useMemo(() => {\n const turns = new Set();\n for (const msg of messages) {\n turns.add(msg.turn);\n }\n return turns;\n }, [messages]);\n\n // Get completed turn pairs for \"View in browser\" functionality\n const completedTurns = useMemo(() => {\n const turns = new Set();\n for (let i = 0; i < messages.length - 1; i += 2) {\n if (messages[i]?.role === 'user' && messages[i + 1]?.role === 'assistant') {\n turns.add(messages[i].turn);\n }\n }\n return turns;\n }, [messages]);\n\n const turnCount = uniqueTurns.size;\n\n // Don't render if no history\n if (messages.length === 0) {\n return null;\n }\n\n // Check if message needs truncation\n const needsTruncation = (text: string) => {\n return text.split('\\n').length > 5 || text.length > 500;\n };\n\n // Truncate for display\n const truncateForDisplay = (text: string) => {\n const lines = text.split('\\n').slice(0, 5);\n const truncated = lines.join('\\n');\n if (truncated.length > 500) {\n return truncated.slice(0, 500) + '...';\n }\n return text.split('\\n').length > 5 ? truncated + '...' : truncated;\n };\n\n // Toggle individual message expansion\n const toggleMessageExpanded = (idx: number) => {\n setExpandedMessages(prev => {\n const next = new Set(prev);\n if (next.has(idx)) {\n next.delete(idx);\n } else {\n next.add(idx);\n }\n return next;\n });\n };\n\n return (\n
    \n {/* Compact toggle button */}\n setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-3 py-1.5 bg-gray-200/80 dark:bg-gray-700/80\n rounded-full hover:bg-gray-300 dark:hover:bg-gray-600 transition-colors text-sm\"\n >\n \n \n {turnCount} {turnCount === 1 ? 'turn' : 'turns'}\n \n {isOpen ? (\n \n ) : (\n \n )}\n \n\n {/* Floating panel */}\n \n {isOpen && (\n \n {/* Panel header */}\n
    \n \n Conversation History\n \n setIsOpen(false)}\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n \n \n
    \n\n {/* Messages */}\n
    \n {messages.map((msg, idx) => {\n const isUser = msg.role === 'user';\n const isAssistant = msg.role === 'assistant';\n const isTruncatable = isAssistant && needsTruncation(msg.content);\n const isExpanded = expandedMessages.has(idx);\n const displayText = (isTruncatable && !isExpanded)\n ? truncateForDisplay(msg.content)\n : msg.content;\n\n return (\n \n \n {/* Header */}\n
    \n {isUser ? (\n <>\n \n You\n · Turn {msg.turn}\n \n ) : (\n <>\n Turn {msg.turn} ·\n MassGen\n \n \n )}\n
    \n\n {/* Content */}\n

    \n {displayText}\n

    \n\n {/* Actions for assistant messages */}\n {isAssistant && (\n
    \n {isTruncatable && (\n toggleMessageExpanded(idx)}\n className=\"text-xs text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition-colors\"\n >\n {isExpanded ? '▲ Show less' : '▼ Show more'}\n \n )}\n {onViewResponse && completedTurns.has(msg.turn) && (\n onViewResponse(msg.turn)}\n className=\"flex items-center gap-1 text-xs text-blue-500 hover:text-blue-400 transition-colors\"\n >\n \n Browser\n \n )}\n
    \n )}\n
    \n
    \n );\n })}\n
    \n \n )}\n \n
    \n );\n}\n","/**\n * FinalAnswerView Component\n *\n * Full-screen display of the completed final answer.\n * Features tabbed interface for Answer and Workspace views.\n */\n\nimport { useState, useMemo, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ArrowLeft, FileText, Folder, Trophy, ChevronDown, ChevronRight, File, RefreshCw, History, Copy, Check, Loader2, Send, Plus, ExternalLink, Share2, X, Eye, Columns } from 'lucide-react';\nimport { useAgentStore, selectSelectedAgent, selectAgents, selectResolvedFinalAnswer, selectAgentOrder } from '../stores/agentStore';\nimport type { AnswerWorkspace } from '../types';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { ConversationHistory } from './ConversationHistory';\nimport { ComparisonView } from './ComparisonView';\nimport { ResizableSplitPane } from './ResizableSplitPane';\nimport { canPreviewFile } from '../utils/artifactTypes';\nimport { clearFileCache } from '../hooks/useFileContent';\n\n// Types for workspace API responses\ninterface WorkspaceInfo {\n name: string;\n path: string;\n type: 'current' | 'historical';\n date?: string;\n agentId?: string;\n}\n\ninterface WorkspacesResponse {\n current: WorkspaceInfo[];\n historical: WorkspaceInfo[];\n}\n\ninterface AnswerWorkspacesResponse {\n workspaces: AnswerWorkspace[];\n current: WorkspaceInfo[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n modified: number;\n operation?: 'create' | 'modify' | 'delete';\n}\n\n// Map workspace name to agent ID (e.g., \"workspace1\" -> agent at index 0)\nfunction getAgentIdFromWorkspace(workspaceName: string, agentOrder: string[]): string | undefined {\n const agentMatch = workspaceName.match(/agent_([a-z0-9_]+)/i);\n if (agentMatch) {\n const candidate = `agent_${agentMatch[1].toLowerCase()}`;\n if (agentOrder.includes(candidate)) {\n return candidate;\n }\n }\n\n const match = workspaceName.match(/workspace(\\d+)/);\n if (match) {\n const index = parseInt(match[1], 10) - 1;\n return agentOrder[index];\n }\n return undefined;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n// File tree types and helpers\ninterface FileTreeNode {\n name: string;\n path: string;\n isDirectory: boolean;\n children: FileTreeNode[];\n size?: number;\n modified?: number;\n}\n\nfunction buildFileTree(files: FileInfo[]): FileTreeNode[] {\n const root: FileTreeNode[] = [];\n\n files.forEach((file) => {\n const parts = file.path.split('/').filter(Boolean);\n let current = root;\n\n parts.forEach((part, idx) => {\n const isLast = idx === parts.length - 1;\n let node = current.find((n) => n.name === part);\n\n if (!node) {\n node = {\n name: part,\n path: parts.slice(0, idx + 1).join('/'),\n isDirectory: !isLast,\n children: [],\n size: isLast ? file.size : undefined,\n modified: isLast ? file.modified : undefined,\n };\n current.push(node);\n }\n\n if (!isLast) {\n node.isDirectory = true;\n current = node.children;\n }\n });\n });\n\n // Sort: directories first, then files alphabetically\n const sortNodes = (nodes: FileTreeNode[]): FileTreeNode[] => {\n return nodes.sort((a, b) => {\n if (a.isDirectory && !b.isDirectory) return -1;\n if (!a.isDirectory && b.isDirectory) return 1;\n return a.name.localeCompare(b.name);\n }).map(node => ({\n ...node,\n children: sortNodes(node.children),\n }));\n };\n\n return sortNodes(root);\n}\n\ninterface FileNodeProps {\n node: FileTreeNode;\n depth: number;\n onFileClick?: (filePath: string) => void;\n}\n\nfunction FileNode({ node, depth, onFileClick }: FileNodeProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const isPreviewable = !node.isDirectory && canPreviewFile(node.name);\n\n const handleClick = () => {\n if (node.isDirectory) {\n setIsExpanded(!isExpanded);\n } else if (onFileClick) {\n onFileClick(node.path);\n }\n };\n\n return (\n
    \n \n {node.isDirectory ? (\n isExpanded ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n\n {node.isDirectory ? (\n \n ) : (\n \n )}\n\n {node.name}\n\n {isPreviewable && (\n \n \n \n )}\n\n {!node.isDirectory && node.size !== undefined && (\n \n {formatFileSize(node.size)}\n \n )}\n \n\n \n {node.isDirectory && isExpanded && (\n \n {node.children.map((child) => (\n \n ))}\n \n )}\n \n
    \n );\n}\n\ntype TabType = 'answer' | 'workspace';\n\ninterface FinalAnswerViewProps {\n onBackToAgents: () => void;\n onFollowUp?: (question: string) => void;\n onNewSession?: () => void;\n isConnected?: boolean;\n}\n\nexport function FinalAnswerView({ onBackToAgents, onFollowUp, onNewSession, isConnected = true }: FinalAnswerViewProps) {\n const [activeTab, setActiveTab] = useState('answer');\n const [copied, setCopied] = useState(false);\n const [followUpQuestion, setFollowUpQuestion] = useState('');\n\n // Share modal state\n const [showShareModal, setShowShareModal] = useState(false);\n const [isSharing, setIsSharing] = useState(false);\n const [shareResult, setShareResult] = useState<{ url: string; message: string } | null>(null);\n const [shareError, setShareError] = useState(null);\n const [shareLinkCopied, setShareLinkCopied] = useState(false);\n\n const finalAnswer = useAgentStore(selectResolvedFinalAnswer);\n const selectedAgent = useAgentStore(selectSelectedAgent);\n const agents = useAgentStore(selectAgents);\n const agentOrder = useAgentStore(selectAgentOrder);\n const sessionId = useAgentStore((s) => s.sessionId);\n\n const winnerAgent = selectedAgent ? agents[selectedAgent] : null;\n const displayName = winnerAgent?.modelName\n ? `${selectedAgent} (${winnerAgent.modelName})`\n : selectedAgent;\n\n // Workspace state\n const [workspaces, setWorkspaces] = useState({ current: [], historical: [] });\n const [workspaceFiles, setWorkspaceFiles] = useState([]);\n const [isLoadingWorkspaces, setIsLoadingWorkspaces] = useState(false);\n const [isLoadingFiles, setIsLoadingFiles] = useState(false);\n const [workspaceError, setWorkspaceError] = useState(null);\n const [answerWorkspaces, setAnswerWorkspaces] = useState([]);\n const [selectedAnswerLabel, setSelectedAnswerLabel] = useState('current');\n // Track which agent's workspace we're viewing (defaults to winner)\n const [selectedAgentWorkspace, setSelectedAgentWorkspace] = useState(null);\n\n // File viewer state (inline preview, not modal)\n const [selectedFilePath, setSelectedFilePath] = useState('');\n const [isPreviewFullscreen, setIsPreviewFullscreen] = useState(false);\n\n // Comparison view state\n const [isComparisonOpen, setIsComparisonOpen] = useState(false);\n\n // Track auto-preview per workspace\n const hasAutoPreviewedRef = useRef(null);\n // Track previous workspace path for change detection\n const prevWorkspacePathRef = useRef(null);\n\n // Reset workspace-related state when session changes (new run)\n useEffect(() => {\n setWorkspaces({ current: [], historical: [] });\n setWorkspaceFiles([]);\n setSelectedFilePath('');\n setSelectedAnswerLabel('current');\n setSelectedAgentWorkspace(null);\n setWorkspaceError(null);\n setIsLoadingFiles(false);\n setIsLoadingWorkspaces(false);\n hasAutoPreviewedRef.current = null;\n prevWorkspacePathRef.current = null;\n clearFileCache();\n }, [sessionId]);\n\n // Initialize selectedAgentWorkspace to winner when available\n useEffect(() => {\n if (selectedAgent && !selectedAgentWorkspace) {\n setSelectedAgentWorkspace(selectedAgent);\n }\n }, [selectedAgent, selectedAgentWorkspace]);\n\n // Handle file click from workspace browser - sets file for inline preview\n const handleFileClick = useCallback((filePath: string) => {\n setSelectedFilePath(filePath);\n }, []);\n\n // Handle closing inline preview\n const handleInlinePreviewClose = useCallback(() => {\n setSelectedFilePath('');\n }, []);\n\n // Fetch workspaces\n const fetchWorkspaces = useCallback(async () => {\n setIsLoadingWorkspaces(true);\n setWorkspaceError(null);\n try {\n const url = sessionId\n ? `/api/workspaces?session_id=${encodeURIComponent(sessionId)}`\n : '/api/workspaces';\n const response = await fetch(url);\n if (!response.ok) throw new Error('Failed to fetch workspaces');\n const data: WorkspacesResponse = await response.json();\n setWorkspaces(data);\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load workspaces');\n } finally {\n setIsLoadingWorkspaces(false);\n }\n }, [sessionId]);\n\n // Fetch workspace files\n const fetchWorkspaceFiles = useCallback(async (workspace: WorkspaceInfo) => {\n setIsLoadingFiles(true);\n setWorkspaceError(null);\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspace.path)}`);\n if (!response.ok) throw new Error('Failed to fetch workspace files');\n const data = await response.json();\n setWorkspaceFiles(data.files || []);\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load files');\n setWorkspaceFiles([]);\n } finally {\n setIsLoadingFiles(false);\n }\n }, []);\n\n // Fetch answer workspaces\n const fetchAnswerWorkspaces = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n try {\n const response = await fetch(`/api/sessions/${sessionId}/answer-workspaces`);\n if (response.ok) {\n const data: AnswerWorkspacesResponse = await response.json();\n setAnswerWorkspaces(data.workspaces || []);\n }\n } catch (err) {\n console.error('Failed to fetch answer workspaces:', err);\n }\n }, []);\n\n // Open workspace in native file browser\n const openWorkspaceInFinder = useCallback(async (workspacePath: string) => {\n try {\n const response = await fetch('/api/workspace/open', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: workspacePath }),\n });\n if (!response.ok) {\n const data = await response.json();\n setWorkspaceError(data.error || 'Failed to open workspace');\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to open workspace');\n }\n }, []);\n\n // Map workspaces to selected agent (defaults to winner, but can switch)\n const activeWorkspace = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n if (!targetAgent) return null;\n\n // If viewing historical version, get path from answerWorkspaces\n if (selectedAnswerLabel !== 'current') {\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === targetAgent && w.answerLabel === selectedAnswerLabel\n );\n if (answerWs) {\n return {\n name: answerWs.answerLabel,\n path: answerWs.workspacePath,\n type: 'historical' as const,\n };\n }\n return null;\n }\n\n // For FinalAnswerView, prioritize final workspace from log directory\n // Look for workspace with /final/ in path from answerWorkspaces\n const finalWs = answerWorkspaces.find(\n (w) => w.agentId === targetAgent && w.workspacePath.includes('/final/')\n );\n if (finalWs) {\n return {\n name: 'Final',\n path: finalWs.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Fallback: Get current workspace for the agent\n const ws = workspaces.current.find((w) => {\n const agentId = getAgentIdFromWorkspace(w.name, agentOrder);\n return agentId === targetAgent;\n });\n return ws || null;\n }, [workspaces, selectedAgent, selectedAgentWorkspace, selectedAnswerLabel, answerWorkspaces, agentOrder]);\n\n // Check if current agent is the winner AND has a workspace\n // Only the winner agent should show \"Final\" option\n const hasFinalWorkspace = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n // Only show \"Final\" for the winner agent\n if (!targetAgent || targetAgent !== selectedAgent) return false;\n return workspaces.current.some((w) => {\n const agentId = getAgentIdFromWorkspace(w.name, agentOrder);\n return agentId === targetAgent;\n });\n }, [workspaces, selectedAgent, selectedAgentWorkspace, agentOrder]);\n\n // Get historical workspaces for current agent\n const agentHistoricalWorkspaces = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n return answerWorkspaces.filter(w => w.agentId === targetAgent);\n }, [answerWorkspaces, selectedAgentWorkspace, selectedAgent]);\n\n // Map workspaces by agent for ComparisonView\n const workspacesByAgent = useMemo(() => {\n const map: Record = {};\n\n // Initialize for all agents\n agentOrder.forEach((agentId) => {\n map[agentId] = { historical: [] };\n });\n\n // Map current workspaces\n workspaces.current.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].current = ws;\n }\n });\n\n // Map historical workspaces from answer workspaces\n answerWorkspaces.forEach((aw) => {\n if (map[aw.agentId]) {\n map[aw.agentId].historical.push({\n name: aw.answerLabel,\n path: aw.workspacePath,\n type: 'historical',\n agentId: aw.agentId,\n });\n }\n });\n\n return map;\n }, [workspaces, answerWorkspaces, agentOrder]);\n\n // Count total workspaces for compare button visibility\n const totalWorkspaces = useMemo(() => {\n let count = 0;\n Object.values(workspacesByAgent).forEach(({ current, historical }) => {\n if (current) count++;\n count += historical.length;\n });\n return count;\n }, [workspacesByAgent]);\n\n // Fetch workspaces when workspace tab is active\n useEffect(() => {\n if (activeTab === 'workspace') {\n fetchWorkspaces();\n fetchAnswerWorkspaces();\n }\n }, [activeTab, fetchWorkspaces, fetchAnswerWorkspaces, sessionId]);\n\n // Fetch files when workspace is available\n // Also clear selected file when workspace changes to avoid showing stale content\n useEffect(() => {\n const currentPath = activeWorkspace?.path || null;\n const pathChanged = prevWorkspacePathRef.current !== currentPath;\n\n if (activeWorkspace && activeTab === 'workspace' && pathChanged) {\n prevWorkspacePathRef.current = currentPath;\n // Clear the selected file path when workspace actually changes\n setSelectedFilePath('');\n // Reset auto-preview tracking for this new workspace\n hasAutoPreviewedRef.current = null;\n // Clear workspace files first to show loading state\n setWorkspaceFiles([]);\n fetchWorkspaceFiles(activeWorkspace);\n } else if (!activeWorkspace && workspaceFiles.length > 0) {\n setWorkspaceFiles([]);\n setSelectedFilePath('');\n }\n }, [activeWorkspace, activeTab, fetchWorkspaceFiles, workspaceFiles.length]);\n\n // Clear selected file when workspace files become empty (prevents stale preview)\n useEffect(() => {\n if (workspaceFiles.length === 0 && selectedFilePath && !isLoadingFiles) {\n setSelectedFilePath('');\n }\n }, [workspaceFiles.length, selectedFilePath, isLoadingFiles]);\n\n // Build file tree\n const fileTree = useMemo(() => buildFileTree(workspaceFiles), [workspaceFiles]);\n\n // Auto-preview: Select first previewable file when workspace files are loaded\n useEffect(() => {\n const workspaceKey = activeWorkspace?.path || '';\n if (\n workspaceFiles.length > 0 &&\n !selectedFilePath &&\n activeTab === 'workspace' &&\n hasAutoPreviewedRef.current !== workspaceKey\n ) {\n // Find main previewable file with priority: PDF > PPTX > DOCX > HTML > images > other\n const findMainPreviewable = (): string | null => {\n const previewableFiles = workspaceFiles.filter(f => canPreviewFile(f.path));\n if (previewableFiles.length === 0) return null;\n\n // Priority 1: PDF\n const pdf = previewableFiles.find(f => f.path.toLowerCase().endsWith('.pdf'));\n if (pdf) return pdf.path;\n\n // Priority 2: PPTX\n const pptx = previewableFiles.find(f => f.path.toLowerCase().endsWith('.pptx'));\n if (pptx) return pptx.path;\n\n // Priority 3: DOCX\n const docx = previewableFiles.find(f => f.path.toLowerCase().endsWith('.docx'));\n if (docx) return docx.path;\n\n // Priority 4: index.html\n const indexHtml = previewableFiles.find(f => f.path.toLowerCase().endsWith('index.html'));\n if (indexHtml) return indexHtml.path;\n\n // Priority 5: Any HTML file\n const anyHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.html') || f.path.toLowerCase().endsWith('.htm')\n );\n if (anyHtml) return anyHtml.path;\n\n // Priority 6: Images\n const image = previewableFiles.find(f => {\n const ext = f.path.toLowerCase();\n return ext.endsWith('.png') || ext.endsWith('.jpg') || ext.endsWith('.jpeg') ||\n ext.endsWith('.gif') || ext.endsWith('.svg') || ext.endsWith('.webp');\n });\n if (image) return image.path;\n\n // Priority 7: First previewable file\n return previewableFiles[0].path;\n };\n\n const mainFile = findMainPreviewable();\n if (mainFile) {\n hasAutoPreviewedRef.current = workspaceKey;\n setSelectedFilePath(mainFile);\n }\n }\n }, [workspaceFiles, selectedFilePath, activeTab, activeWorkspace]);\n\n // Copy to clipboard\n const handleCopy = useCallback(async () => {\n if (finalAnswer && finalAnswer !== '__PENDING__') {\n await navigator.clipboard.writeText(finalAnswer);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [finalAnswer]);\n\n // Handle follow-up question submission\n const handleFollowUpSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n if (followUpQuestion.trim() && onFollowUp) {\n onFollowUp(followUpQuestion.trim());\n setFollowUpQuestion('');\n }\n }, [followUpQuestion, onFollowUp]);\n\n // Share - create gist and show result\n const handleShare = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n setIsSharing(true);\n setShareError(null);\n setShareResult(null);\n setShowShareModal(true);\n try {\n const response = await fetch(`/api/sessions/${sessionId}/share`, { method: 'POST' });\n const data = await response.json();\n if (!response.ok) {\n setShareError(data.error || 'Failed to share session');\n return;\n }\n setShareResult({ url: data.viewer_url, message: data.message });\n } catch (err) {\n console.error('Share failed:', err);\n setShareError('Failed to share session. Check console for details.');\n } finally {\n setIsSharing(false);\n }\n }, []);\n\n // Copy share link to clipboard\n const handleCopyShareLink = useCallback(async () => {\n if (!shareResult?.url) return;\n await navigator.clipboard.writeText(shareResult.url);\n setShareLinkCopied(true);\n setTimeout(() => setShareLinkCopied(false), 2000);\n }, [shareResult]);\n\n return (\n \n {/* Header */}\n
    \n \n \n Back to Agents\n \n\n
    \n \n
    \n

    \n Final Answer\n

    \n

    \n from {displayName}\n

    \n
    \n
    \n\n
    \n \n {copied ? (\n <>\n \n Copied!\n \n ) : (\n <>\n \n Copy\n \n )}\n \n \n \n Share\n \n {onNewSession && (\n \n \n New Session\n \n )}\n
    \n
    \n\n {/* Tabs */}\n
    \n setActiveTab('answer')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'answer'\n ? 'border-blue-500 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-200'\n }`}\n >\n \n Answer\n \n setActiveTab('workspace')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'workspace'\n ? 'border-blue-500 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-200'\n }`}\n >\n \n Workspace\n \n
    \n\n {/* Tab Content */}\n
    \n \n {activeTab === 'answer' ? (\n \n
    \n {/* Conversation History - shown at top for context */}\n \n\n {/* Final Answer Content */}\n
    \n {!finalAnswer || finalAnswer === '__PENDING__' ? (\n
    \n \n

    Loading final answer...

    \n
    \n ) : (\n
    \n                      {finalAnswer}\n                    
    \n )}\n
    \n
    \n \n ) : (\n \n {/* Workspace toolbar */}\n
    \n {/* Agent selector */}\n
    \n \n Agent:\n
    \n {agentOrder.map((agentId) => {\n const isWinner = agentId === selectedAgent;\n const isSelected = agentId === (selectedAgentWorkspace || selectedAgent);\n return (\n {\n setSelectedAgentWorkspace(agentId);\n // For winner, default to 'current' (Final)\n // For non-winners, default to most recent (highest answerNumber) workspace\n if (agentId === selectedAgent) {\n setSelectedAnswerLabel('current');\n } else {\n const agentWs = answerWorkspaces\n .filter(w => w.agentId === agentId)\n .sort((a, b) => (b.answerNumber || 0) - (a.answerNumber || 0));\n if (agentWs.length > 0) {\n // Select the most recent answer (highest answerNumber)\n setSelectedAnswerLabel(agentWs[0].answerLabel);\n } else {\n setSelectedAnswerLabel('current'); // Will show empty state\n }\n }\n setSelectedFilePath('');\n }}\n className={`px-3 py-1 text-sm rounded transition-colors flex items-center gap-1 ${\n isSelected\n ? 'bg-blue-600 text-white'\n : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600'\n }`}\n >\n {agentId}\n {isWinner && }\n \n );\n })}\n
    \n
    \n\n {/* Version selector - only show if there are versions to select */}\n {(hasFinalWorkspace || agentHistoricalWorkspaces.length > 0) && (\n
    \n \n Version:\n
    \n {\n const label = e.target.value;\n setSelectedAnswerLabel(label);\n // Workspace will be automatically updated via activeWorkspace memo\n setSelectedFilePath('');\n }}\n className=\"appearance-none bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg px-3 py-1.5 pr-8 text-sm text-gray-700 dark:text-gray-200\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n {hasFinalWorkspace && }\n {agentHistoricalWorkspaces.map((ws) => (\n \n ))}\n \n \n
    \n
    \n )}\n\n {/* Compare button - show when there are 2+ workspaces */}\n {totalWorkspaces >= 2 && (\n setIsComparisonOpen(true)}\n className=\"ml-auto flex items-center gap-2 px-3 py-1.5 bg-purple-600 hover:bg-purple-500\n rounded-lg transition-colors text-white text-sm\"\n title=\"Compare workspaces side-by-side\"\n >\n \n Compare\n \n )}\n\n {/* Open Folder button */}\n {activeWorkspace && (\n openWorkspaceInFinder(activeWorkspace.path)}\n className={`${totalWorkspaces < 2 ? 'ml-auto' : ''} flex items-center gap-2 px-3 py-1.5 bg-blue-600 hover:bg-blue-500\n rounded-lg transition-colors text-white text-sm`}\n title=\"Open workspace in file browser\"\n >\n \n Open Folder\n \n )}\n\n {/* Refresh button */}\n { fetchWorkspaces(); fetchAnswerWorkspaces(); }}\n disabled={isLoadingWorkspaces}\n className={`${!activeWorkspace ? 'ml-auto' : ''} p-2 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors\n text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200`}\n title=\"Refresh workspaces\"\n >\n \n \n
    \n\n {/* Active workspace path display */}\n {activeWorkspace && (\n
    \n Path:\n \n {activeWorkspace.path}\n \n \n ({selectedAnswerLabel === 'current' ? 'final' : 'historical snapshot'})\n \n
    \n )}\n\n {/* Error display */}\n {workspaceError && (\n
    \n {workspaceError}\n
    \n )}\n\n {/* Split View: File Tree + Preview with draggable divider */}\n
    \n {isPreviewFullscreen ? (\n /* When fullscreen, show only the preview */\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n ) : (\n \n {isLoadingWorkspaces || isLoadingFiles ? (\n
    \n \n

    Loading...

    \n
    \n ) : !activeWorkspace ? (\n
    \n \n

    No workspace found

    \n {selectedAnswerLabel !== 'current' && (\n

    Historical snapshot not available

    \n )}\n
    \n ) : workspaceFiles.length === 0 ? (\n
    \n \n

    No files

    \n
    \n ) : (\n
    \n
    \n \n {workspaceFiles.length} files\n \n ({selectedAnswerLabel === 'current' ? 'final' : 'historical'})\n \n
    \n {fileTree.map((node) => (\n \n ))}\n
    \n )}\n
    \n }\n right={\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n }\n />\n )}\n \n \n )}\n
    \n\n {/* Fullscreen Preview Modal */}\n \n {isPreviewFullscreen && selectedFilePath && activeWorkspace && (\n setIsPreviewFullscreen(false)}\n >\n e.stopPropagation()}\n >\n {/* Fullscreen header */}\n
    \n
    \n \n {selectedFilePath}\n
    \n setIsPreviewFullscreen(false)}\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors text-gray-500 dark:text-gray-400\"\n title=\"Close fullscreen\"\n >\n \n \n
    \n {/* Fullscreen preview content */}\n
    \n setIsPreviewFullscreen(false)}\n />\n
    \n \n \n )}\n
    \n
    \n\n {/* Follow-up Input Footer */}\n {onFollowUp && (\n
    \n
    \n setFollowUpQuestion(e.target.value)}\n placeholder=\"Ask a follow-up question...\"\n disabled={!isConnected}\n className=\"flex-1 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg px-4 py-3\n text-gray-900 dark:text-gray-100 placeholder-gray-500\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n \n \n Continue\n \n \n
    \n )}\n\n {/* Share Modal */}\n \n {showShareModal && (\n setShowShareModal(false)}\n >\n e.stopPropagation()}\n >\n
    \n

    Share Session

    \n setShowShareModal(false)}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n >\n \n \n
    \n\n {isSharing && (\n
    \n \n

    Uploading to GitHub Gist...

    \n
    \n )}\n\n {shareError && !isSharing && (\n
    \n

    {shareError}

    \n

    \n Make sure GitHub CLI (gh) is installed and authenticated.\n

    \n
    \n )}\n\n {shareResult && !isSharing && (\n
    \n
    \n

    \n {shareResult.message}\n

    \n
    \n \n \n {shareLinkCopied ? (\n <>\n \n Copied!\n \n ) : (\n <>\n \n Copy\n \n )}\n \n
    \n
    \n \n Open in New Tab →\n \n
    \n )}\n \n \n )}\n
    \n\n {/* Comparison View Modal */}\n setIsComparisonOpen(false)}\n agentWorkspaces={workspacesByAgent}\n answerWorkspaces={answerWorkspaces}\n agentOrder={agentOrder}\n sessionId={sessionId}\n initialFile={selectedFilePath}\n />\n \n );\n}\n\nexport default FinalAnswerView;\n","/**\n * Context Paths Step Component\n *\n * Configure read/write paths for agents.\n * Uses backend API to open native file picker dialogs.\n */\n\nimport { motion } from 'framer-motion';\nimport { FolderOpen, File, Plus, Trash2, BookOpen, Edit3, Loader2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { useWizardStore, selectContextPaths } from '../../stores/wizardStore';\n\nexport function ContextPathsStep() {\n const contextPaths = useWizardStore(selectContextPaths);\n const addContextPath = useWizardStore((s) => s.addContextPath);\n const removeContextPath = useWizardStore((s) => s.removeContextPath);\n const updateContextPath = useWizardStore((s) => s.updateContextPath);\n\n const [newPath, setNewPath] = useState('');\n const [newType, setNewType] = useState<'read' | 'write'>('read');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const handleAddPath = () => {\n if (newPath.trim()) {\n addContextPath(newPath.trim(), newType);\n setNewPath('');\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n handleAddPath();\n }\n };\n\n const browseFiles = async (mode: 'files' | 'directory') => {\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await fetch('/api/browse/files', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n mode,\n multiple: mode === 'files',\n title: mode === 'files' ? 'Select Files' : 'Select Directory',\n }),\n });\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.error || 'Failed to open file picker');\n }\n\n const data = await response.json();\n const paths = data.paths || [];\n\n // Add each selected path\n for (const path of paths) {\n if (path) {\n addContextPath(path, newType);\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to open file picker');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n
    \n

    \n Context Paths\n

    \n

    \n Add files or directories that agents can access. Read paths are for reference,\n write paths allow agents to create and modify files.\n

    \n
    \n\n {/* Browse Buttons */}\n
    \n browseFiles('files')}\n disabled={isLoading}\n className=\"flex-1 flex items-center justify-center gap-2 p-4 border-2 border-dashed\n border-gray-300 dark:border-gray-600 rounded-lg\n hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20\n disabled:opacity-50 disabled:cursor-not-allowed transition-all\"\n >\n {isLoading ? (\n \n ) : (\n \n )}\n Browse Files\n \n\n browseFiles('directory')}\n disabled={isLoading}\n className=\"flex-1 flex items-center justify-center gap-2 p-4 border-2 border-dashed\n border-gray-300 dark:border-gray-600 rounded-lg\n hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20\n disabled:opacity-50 disabled:cursor-not-allowed transition-all\"\n >\n {isLoading ? (\n \n ) : (\n \n )}\n Browse Directory\n \n
    \n\n {error && (\n
    \n {error}\n
    \n )}\n\n {/* Manual Path Entry */}\n
    \n
    \n setNewPath(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter path (relative or absolute)\"\n className=\"w-full px-3 py-2 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg text-gray-800 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n
    \n setNewType(e.target.value as 'read' | 'write')}\n className=\"px-3 py-2 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg text-gray-800 dark:text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n \n \n \n \n \n
    \n\n {/* Path List */}\n {contextPaths.length > 0 && (\n
    \n

    \n Added Paths ({contextPaths.length})\n

    \n
    \n {contextPaths.map((cp, index) => (\n \n {/* Type Icon */}\n {cp.type === 'read' ? (\n \n ) : (\n \n )}\n\n {/* Path */}\n \n {cp.path}\n \n\n {/* Type Toggle */}\n updateContextPath(index, cp.path, cp.type === 'read' ? 'write' : 'read')}\n className={`\n px-2 py-1 text-xs rounded transition-colors\n ${cp.type === 'read'\n ? 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-900/50'\n : 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400 hover:bg-amber-200 dark:hover:bg-amber-900/50'\n }\n `}\n >\n {cp.type}\n \n\n {/* Remove Button */}\n removeContextPath(index)}\n className=\"p-1 text-gray-400 hover:text-red-500 transition-colors\"\n >\n \n \n \n ))}\n
    \n
    \n )}\n\n {contextPaths.length === 0 && (\n
    \n No paths added yet. This step is optional - you can proceed without adding any paths.\n
    \n )}\n\n
    \n Tip: Use relative paths from where MassGen is launched, or absolute paths for any location.\n
    \n \n );\n}\n","/**\n * Docker Step Component\n *\n * First step in the quickstart wizard - choose Docker or local mode.\n */\n\nimport { motion } from 'framer-motion';\nimport { Container, Monitor, AlertTriangle, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function DockerStep() {\n const useDocker = useWizardStore((s) => s.useDocker);\n const setUseDocker = useWizardStore((s) => s.setUseDocker);\n const setupStatus = useWizardStore((s) => s.setupStatus);\n\n const dockerAvailable = setupStatus?.docker_available ?? false;\n\n return (\n \n
    \n

    \n Execution Mode\n

    \n

    \n Choose how agents execute code and commands.\n

    \n
    \n\n
    \n {/* Docker Option */}\n dockerAvailable && setUseDocker(true)}\n disabled={!dockerAvailable}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n useDocker && dockerAvailable\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : dockerAvailable\n ? 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n : 'border-gray-200 dark:border-gray-700 opacity-50 cursor-not-allowed'\n }`}\n >\n
    \n \n
    \n \n Docker\n \n {dockerAvailable && (\n \n Recommended\n \n )}\n
    \n {useDocker && dockerAvailable && (\n \n )}\n
    \n

    \n Full code execution in isolated containers. Agents can run commands,\n install packages, and use tools safely.\n

    \n {!dockerAvailable && (\n
    \n \n Docker images not found. Run massgen --setup-docker\n
    \n )}\n \n\n {/* Local Option */}\n setUseDocker(false)}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n !useDocker\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Local\n \n {!useDocker && (\n \n )}\n
    \n

    \n File operations only. Agents can create and edit files but cannot\n execute commands or install packages.\n

    \n \n
    \n\n
    \n You can change this later in the config file.\n
    \n \n );\n}\n","/**\n * API Key Step Component\n *\n * Shows which providers have API keys configured and provides setup instructions.\n */\n\nimport { motion } from 'framer-motion';\nimport { Key, Check, AlertTriangle, RefreshCw, ExternalLink } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function ApiKeyStep() {\n const providers = useWizardStore((s) => s.providers);\n const isLoading = useWizardStore((s) => s.isLoading);\n const fetchProviders = useWizardStore((s) => s.fetchProviders);\n\n const availableProviders = providers.filter((p) => p.has_api_key);\n const unavailableProviders = providers.filter((p) => !p.has_api_key);\n\n const handleRefresh = () => {\n fetchProviders();\n };\n\n return (\n \n
    \n

    \n API Keys\n

    \n

    \n MassGen needs API keys to access LLM providers. Set up at least one provider to continue.\n

    \n
    \n\n {/* Available Providers */}\n {availableProviders.length > 0 && (\n
    \n

    \n Available Providers\n

    \n
    \n {availableProviders.map((provider) => (\n \n \n \n {provider.name}\n \n \n API key configured\n \n
    \n ))}\n
    \n \n )}\n\n {/* Unavailable Providers */}\n {unavailableProviders.length > 0 && (\n
    \n

    \n Not Configured\n

    \n
    \n {unavailableProviders.map((provider) => (\n \n \n \n {provider.name}\n \n {provider.env_var && (\n \n {provider.env_var}\n \n )}\n
    \n ))}\n
    \n \n )}\n\n {/* Setup Instructions */}\n
    \n
    \n \n

    \n How to Set API Keys\n

    \n
    \n
    \n

    In your terminal, set environment variables before running MassGen:

    \n
    \n
    # OpenAI
    \n
    export OPENAI_API_KEY=sk-your-key-here
    \n
    # Anthropic (Claude)
    \n
    export ANTHROPIC_API_KEY=sk-ant-your-key-here
    \n
    # Google (Gemini)
    \n
    export GOOGLE_API_KEY=your-key-here
    \n
    \n

    \n Then restart the MassGen server for changes to take effect.\n

    \n
    \n \n \n View full setup guide\n \n
    \n\n {/* Refresh Button */}\n
    \n \n \n Refresh\n \n {availableProviders.length === 0 && (\n \n Set at least one API key to continue\n \n )}\n
    \n \n );\n}\n","/**\n * Agent Count Step Component\n *\n * Second step - choose number of agents.\n */\n\nimport { motion } from 'framer-motion';\nimport { Users, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nconst agentOptions = [\n { count: 1, label: '1 agent', description: 'Single agent' },\n { count: 2, label: '2 agents', description: 'Basic collaboration' },\n { count: 3, label: '3 agents', description: 'Recommended for most tasks', recommended: true },\n { count: 4, label: '4 agents', description: 'More diverse perspectives' },\n { count: 5, label: '5 agents', description: 'Maximum collaboration' },\n];\n\nexport function AgentCountStep() {\n const agentCount = useWizardStore((s) => s.agentCount);\n const setAgentCount = useWizardStore((s) => s.setAgentCount);\n\n return (\n \n
    \n

    \n How many agents?\n

    \n

    \n More agents provide diverse perspectives but use more API credits.\n

    \n
    \n\n
    \n {agentOptions.map((option) => (\n setAgentCount(option.count)}\n className={`p-4 rounded-lg border-2 text-left transition-all ${\n agentCount === option.count\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n
    \n \n \n {option.label}\n \n
    \n {agentCount === option.count && (\n \n )}\n
    \n

    \n {option.description}\n

    \n {option.recommended && (\n \n Recommended\n \n )}\n \n ))}\n
    \n \n );\n}\n","/**\n * Setup Mode Step Component\n *\n * Third step (for 2+ agents) - choose same or different providers.\n */\n\nimport { motion } from 'framer-motion';\nimport { Copy, Shuffle, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function SetupModeStep() {\n const setupMode = useWizardStore((s) => s.setupMode);\n const setSetupMode = useWizardStore((s) => s.setSetupMode);\n const agentCount = useWizardStore((s) => s.agentCount);\n\n return (\n \n
    \n

    \n Setup Mode\n

    \n

    \n Configure how your {agentCount} agents will be set up.\n

    \n
    \n\n
    \n {/* Same Config Option */}\n setSetupMode('same')}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n setupMode === 'same'\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Same for all\n \n {setupMode === 'same' && (\n \n )}\n
    \n

    \n Use the same provider and model for all agents. Quick setup for\n comparing agent responses.\n

    \n \n\n {/* Different Config Option */}\n setSetupMode('different')}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n setupMode === 'different'\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Different per agent\n \n {setupMode === 'different' && (\n \n )}\n
    \n

    \n Configure each agent with a different provider and model.\n Great for diverse perspectives.\n

    \n \n
    \n \n );\n}\n","/**\n * Agent Config Step Component\n *\n * Fourth step - configure provider and model for each agent.\n * Full-page scrollable layout with large, visible cards for easy selection.\n */\n\nimport { useEffect, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { Bot, AlertCircle, Check, Search, Sparkles, X, Globe, Code, MessageSquare } from 'lucide-react';\nimport { useWizardStore, ProviderInfo, ProviderCapabilities } from '../../stores/wizardStore';\n\ninterface ProviderCardProps {\n provider: ProviderInfo;\n isSelected: boolean;\n onSelect: () => void;\n disabled?: boolean;\n}\n\nfunction ProviderCard({ provider, isSelected, onSelect, disabled }: ProviderCardProps) {\n return (\n \n
    \n
    \n {provider.name}\n
    \n {isSelected && (\n
    \n \n
    \n )}\n
    \n\n {disabled && (\n
    \n Needs {provider.env_var}\n
    \n )}\n \n );\n}\n\ninterface ModelCardProps {\n model: string;\n isSelected: boolean;\n isDefault: boolean;\n onSelect: () => void;\n}\n\nfunction ModelCard({ model, isSelected, isDefault, onSelect }: ModelCardProps) {\n return (\n \n
    \n
    \n \n {model}\n \n {isDefault && (\n \n \n Recommended\n \n )}\n
    \n {isSelected && (\n
    \n \n
    \n )}\n
    \n \n );\n}\n\n// Per-agent option toggle component\ninterface OptionToggleProps {\n enabled: boolean;\n onChange: (enabled: boolean) => void;\n icon: React.ReactNode;\n label: string;\n description?: string;\n}\n\nfunction OptionToggle({ enabled, onChange, icon, label, description }: OptionToggleProps) {\n return (\n

    \n${text}\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? \"th\" : \"td\";\n const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n return tag2 + content + `\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n em({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n codespan({ text }) {\n return `${escape2(text, true)}`;\n }\n br(token) {\n return \"
    \";\n }\n del({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '\" + text + \"\";\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape2(text);\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n\";\n return out;\n }\n text(token) {\n return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return \"\" + text;\n }\n image({ text }) {\n return \"\" + text;\n }\n br() {\n return \"\";\n }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n options;\n renderer;\n textRenderer;\n constructor(options2) {\n this.options = options2 || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"space\": {\n out += this.renderer.space(token);\n continue;\n }\n case \"hr\": {\n out += this.renderer.hr(token);\n continue;\n }\n case \"heading\": {\n out += this.renderer.heading(token);\n continue;\n }\n case \"code\": {\n out += this.renderer.code(token);\n continue;\n }\n case \"table\": {\n out += this.renderer.table(token);\n continue;\n }\n case \"blockquote\": {\n out += this.renderer.blockquote(token);\n continue;\n }\n case \"list\": {\n out += this.renderer.list(token);\n continue;\n }\n case \"html\": {\n out += this.renderer.html(token);\n continue;\n }\n case \"paragraph\": {\n out += this.renderer.paragraph(token);\n continue;\n }\n case \"text\": {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n textToken = tokens[++i];\n body += \"\\n\" + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: \"paragraph\",\n raw: body,\n text: body,\n tokens: [{ type: \"text\", raw: body, text: body, escaped: true }]\n });\n } else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"escape\": {\n out += renderer.text(token);\n break;\n }\n case \"html\": {\n out += renderer.html(token);\n break;\n }\n case \"link\": {\n out += renderer.link(token);\n break;\n }\n case \"image\": {\n out += renderer.image(token);\n break;\n }\n case \"strong\": {\n out += renderer.strong(token);\n break;\n }\n case \"em\": {\n out += renderer.em(token);\n break;\n }\n case \"codespan\": {\n out += renderer.codespan(token);\n break;\n }\n case \"br\": {\n out += renderer.br(token);\n break;\n }\n case \"del\": {\n out += renderer.del(token);\n break;\n }\n case \"text\": {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\n// src/Hooks.ts\nvar _Hooks = class {\n options;\n block;\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n static passThroughHooks = /* @__PURE__ */ new Set([\n \"preprocess\",\n \"postprocess\",\n \"processAllTokens\"\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html2) {\n return html2;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n};\n\n// src/Instance.ts\nvar Marked = class {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case \"table\": {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case \"list\": {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens2 = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens2, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n const opts = { ...pack };\n opts.async = this.defaults.async || opts.async || false;\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error(\"extension name required\");\n }\n if (\"renderer\" in ext) {\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n extensions.renderers[ext.name] = function(...args2) {\n let ret = ext.renderer.apply(this, args2);\n if (ret === false) {\n ret = prevRenderer.apply(this, args2);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (\"tokenizer\" in ext) {\n if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n if (ext.level === \"block\") {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === \"inline\") {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (\"childTokens\" in ext && ext.childTokens) {\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if ([\"options\", \"parser\"].includes(prop)) {\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n renderer[rendererProp] = (...args2) => {\n let ret = rendererFunc.apply(renderer, args2);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args2);\n }\n return ret || \"\";\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n tokenizer[tokenizerProp] = (...args2) => {\n let ret = tokenizerFunc.apply(tokenizer, args2);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args2);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if ([\"options\", \"block\"].includes(prop)) {\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => {\n return prevHook.call(hooks, ret2);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[hooksProp] = (...args2) => {\n let ret = hooksFunc.apply(hooks, args2);\n if (ret === false) {\n ret = prevHook.apply(hooks, args2);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n if (pack.walkTokens) {\n const walkTokens2 = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens2) {\n values = values.concat(walkTokens2.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options2) {\n return _Lexer.lex(src, options2 ?? this.defaults);\n }\n parser(tokens, options2) {\n return _Parser.parse(tokens, options2 ?? this.defaults);\n }\n parseMarkdown(blockType) {\n const parse2 = (src, options2) => {\n const origOpt = { ...options2 };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n }\n if (typeof src === \"undefined\" || src === null) {\n return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n }\n if (typeof src !== \"string\") {\n return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer2(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html2 = parser2(tokens, opt);\n if (opt.hooks) {\n html2 = opt.hooks.postprocess(html2);\n }\n return html2;\n } catch (e) {\n return throwError(e);\n }\n };\n return parse2;\n }\n onError(silent, async) {\n return (e) => {\n e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n if (silent) {\n const msg = \"

    An error occurred:

    \" + escape2(e.message + \"\", true) + \"
    \";\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function(options2) {\n markedInstance.setOptions(options2);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function(...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.walkTokens = function(tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport {\n _Hooks as Hooks,\n _Lexer as Lexer,\n Marked,\n _Parser as Parser,\n _Renderer as Renderer,\n _TextRenderer as TextRenderer,\n _Tokenizer as Tokenizer,\n _defaults as defaults,\n _getDefaults as getDefaults,\n lexer,\n marked,\n options,\n parse,\n parseInline,\n parser,\n setOptions,\n use,\n walkTokens\n};\n//# sourceMappingURL=marked.esm.js.map\n","/**\n * Markdown Preview Component\n *\n * Renders Markdown content as HTML using the marked library.\n */\n\nimport { useMemo } from 'react';\nimport { FileText } from 'lucide-react';\nimport { marked } from 'marked';\n\ninterface MarkdownPreviewProps {\n content: string;\n fileName: string;\n}\n\nexport function MarkdownPreview({ content, fileName }: MarkdownPreviewProps) {\n // Convert markdown to HTML\n const htmlContent = useMemo(() => {\n // Configure marked for safety\n marked.setOptions({\n gfm: true, // GitHub Flavored Markdown\n breaks: true, // Convert line breaks to
    \n });\n\n try {\n const renderedMarkdown = marked.parse(content);\n return `\n\n\n\n \n \n\n\n${renderedMarkdown}\n\n`;\n } catch (error) {\n console.error('Markdown parsing error:', error);\n return `
    ${content}
    `;\n }\n }, [content]);\n\n return (\n
    \n {/* Header */}\n
    \n \n Markdown Preview\n - {fileName}\n
    \n\n {/* Preview iframe */}\n \n
    \n );\n}\n\nexport default MarkdownPreview;\n","/**\n * PDF Preview Component\n *\n * Displays PDF documents using the native browser PDF viewer.\n * Uses Blob URLs for better handling of large files.\n */\n\nimport { useEffect, useState } from 'react';\nimport { FileText, Loader2 } from 'lucide-react';\n\ninterface PdfPreviewProps {\n content: string; // Base64 encoded PDF data or data URL\n fileName: string;\n}\n\nexport function PdfPreview({ content, fileName }: PdfPreviewProps) {\n const [blobUrl, setBlobUrl] = useState(null);\n const [error, setError] = useState(null);\n\n // Convert base64 to Blob URL for better large file handling\n useEffect(() => {\n if (import.meta.env.DEV) {\n console.log('PdfPreview received content:', {\n fileName,\n contentLength: content?.length,\n contentPreview: content?.substring(0, 100),\n startsWithData: content?.startsWith('data:'),\n });\n }\n\n // Validate content before attempting to decode\n if (!content || content.length === 0) {\n setError('No content received for PDF preview');\n setBlobUrl(null);\n return;\n }\n\n try {\n // Extract base64 data\n let base64Data = content;\n if (content.startsWith('data:')) {\n base64Data = content.split(',')[1] || content;\n }\n\n // Validate base64 format (should only contain valid base64 chars)\n // Remove any whitespace first\n base64Data = base64Data.replace(/\\s/g, '');\n\n // Check if it looks like base64 (only contains valid chars)\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64Data)) {\n console.error('PdfPreview: Content does not look like valid base64:', {\n firstChars: base64Data.substring(0, 50),\n lastChars: base64Data.substring(base64Data.length - 50),\n });\n setError('Invalid PDF data format - content is not valid base64');\n setBlobUrl(null);\n return;\n }\n\n // Decode base64 to binary\n const binaryString = atob(base64Data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Create Blob and URL\n const blob = new Blob([bytes], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n if (import.meta.env.DEV) {\n console.log('PdfPreview created blob URL, size:', blob.size);\n }\n setBlobUrl(url);\n setError(null);\n\n // Cleanup on unmount or content change\n return () => {\n URL.revokeObjectURL(url);\n };\n } catch (err) {\n console.error('PdfPreview failed to create blob:', err);\n setError(err instanceof Error ? err.message : 'Failed to load PDF');\n setBlobUrl(null);\n }\n }, [content, fileName]);\n\n return (\n
    \n {/* Header */}\n
    \n \n PDF Document\n - {fileName}\n
    \n\n {/* Loading state */}\n {!blobUrl && !error && (\n
    \n \n
    \n )}\n\n {/* Error state */}\n {error && (\n
    \n Failed to load PDF: {error}\n
    \n )}\n\n {/* PDF viewer using iframe with blob URL */}\n {blobUrl && (\n \n )}\n
    \n );\n}\n\nexport default PdfPreview;\n","// package.json\nvar package_default = {\n name: \"mermaid\",\n version: \"11.12.2\",\n description: \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.\",\n type: \"module\",\n module: \"./dist/mermaid.core.mjs\",\n types: \"./dist/mermaid.d.ts\",\n exports: {\n \".\": {\n types: \"./dist/mermaid.d.ts\",\n import: \"./dist/mermaid.core.mjs\",\n default: \"./dist/mermaid.core.mjs\"\n },\n \"./*\": \"./*\"\n },\n keywords: [\n \"diagram\",\n \"markdown\",\n \"flowchart\",\n \"sequence diagram\",\n \"gantt\",\n \"class diagram\",\n \"git graph\",\n \"mindmap\",\n \"packet diagram\",\n \"c4 diagram\",\n \"er diagram\",\n \"pie chart\",\n \"pie diagram\",\n \"quadrant chart\",\n \"requirement diagram\",\n \"graph\"\n ],\n scripts: {\n clean: \"rimraf dist\",\n dev: \"pnpm -w dev\",\n \"docs:code\": \"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup\",\n \"docs:build\": \"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts\",\n \"docs:verify\": \"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify\",\n \"docs:pre:vitepress\": \"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts\",\n \"docs:build:vitepress\": \"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing\",\n \"docs:dev\": 'pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev\" \"tsx scripts/docs.cli.mts --watch --vitepress\"',\n \"docs:dev:docker\": 'pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev:docker\" \"tsx scripts/docs.cli.mts --watch --vitepress\"',\n \"docs:serve\": \"pnpm docs:build:vitepress && vitepress serve src/vitepress\",\n \"docs:spellcheck\": 'cspell \"src/docs/**/*.md\"',\n \"docs:release-version\": \"tsx scripts/update-release-version.mts\",\n \"docs:verify-version\": \"tsx scripts/update-release-version.mts --verify\",\n \"types:build-config\": \"tsx scripts/create-types-from-json-schema.mts\",\n \"types:verify-config\": \"tsx scripts/create-types-from-json-schema.mts --verify\",\n checkCircle: \"npx madge --circular ./src\",\n prepublishOnly: \"pnpm docs:verify-version\"\n },\n repository: {\n type: \"git\",\n url: \"https://github.com/mermaid-js/mermaid\"\n },\n author: \"Knut Sveidqvist\",\n license: \"MIT\",\n standard: {\n ignore: [\n \"**/parser/*.js\",\n \"dist/**/*.js\",\n \"cypress/**/*.js\"\n ],\n globals: [\n \"page\"\n ]\n },\n dependencies: {\n \"@braintree/sanitize-url\": \"^7.1.1\",\n \"@iconify/utils\": \"^3.0.1\",\n \"@mermaid-js/parser\": \"workspace:^\",\n \"@types/d3\": \"^7.4.3\",\n cytoscape: \"^3.29.3\",\n \"cytoscape-cose-bilkent\": \"^4.1.0\",\n \"cytoscape-fcose\": \"^2.2.0\",\n d3: \"^7.9.0\",\n \"d3-sankey\": \"^0.12.3\",\n \"dagre-d3-es\": \"7.0.13\",\n dayjs: \"^1.11.18\",\n dompurify: \"^3.2.5\",\n katex: \"^0.16.22\",\n khroma: \"^2.1.0\",\n \"lodash-es\": \"^4.17.21\",\n marked: \"^16.2.1\",\n roughjs: \"^4.6.6\",\n stylis: \"^4.3.6\",\n \"ts-dedent\": \"^2.2.0\",\n uuid: \"^11.1.0\"\n },\n devDependencies: {\n \"@adobe/jsonschema2md\": \"^8.0.5\",\n \"@iconify/types\": \"^2.0.0\",\n \"@types/cytoscape\": \"^3.21.9\",\n \"@types/cytoscape-fcose\": \"^2.2.4\",\n \"@types/d3-sankey\": \"^0.12.4\",\n \"@types/d3-scale\": \"^4.0.9\",\n \"@types/d3-scale-chromatic\": \"^3.1.0\",\n \"@types/d3-selection\": \"^3.0.11\",\n \"@types/d3-shape\": \"^3.1.7\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/katex\": \"^0.16.7\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/micromatch\": \"^4.0.9\",\n \"@types/stylis\": \"^4.2.7\",\n \"@types/uuid\": \"^10.0.0\",\n ajv: \"^8.17.1\",\n canvas: \"^3.1.2\",\n chokidar: \"3.6.0\",\n concurrently: \"^9.1.2\",\n \"csstree-validator\": \"^4.0.1\",\n globby: \"^14.1.0\",\n jison: \"^0.4.18\",\n \"js-base64\": \"^3.7.8\",\n jsdom: \"^26.1.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n micromatch: \"^4.0.8\",\n \"path-browserify\": \"^1.0.1\",\n prettier: \"^3.5.3\",\n remark: \"^15.0.1\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n rimraf: \"^6.0.1\",\n \"start-server-and-test\": \"^2.0.13\",\n \"type-fest\": \"^4.35.0\",\n typedoc: \"^0.28.12\",\n \"typedoc-plugin-markdown\": \"^4.8.1\",\n typescript: \"~5.7.3\",\n \"unist-util-flatmap\": \"^1.0.0\",\n \"unist-util-visit\": \"^5.0.0\",\n vitepress: \"^1.6.4\",\n \"vitepress-plugin-search\": \"1.0.4-alpha.22\"\n },\n files: [\n \"dist/\",\n \"README.md\"\n ],\n publishConfig: {\n access: \"public\"\n }\n};\n\nexport {\n package_default\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t) __defProp(target, \"name\", { value, configurable: true });\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/logger.ts\nimport dayjs from \"dayjs\";\nvar LEVELS = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n};\nvar log = {\n trace: /* @__PURE__ */ __name((..._args) => {\n }, \"trace\"),\n debug: /* @__PURE__ */ __name((..._args) => {\n }, \"debug\"),\n info: /* @__PURE__ */ __name((..._args) => {\n }, \"info\"),\n warn: /* @__PURE__ */ __name((..._args) => {\n }, \"warn\"),\n error: /* @__PURE__ */ __name((..._args) => {\n }, \"error\"),\n fatal: /* @__PURE__ */ __name((..._args) => {\n }, \"fatal\")\n};\nvar setLogLevel = /* @__PURE__ */ __name(function(level = \"fatal\") {\n let numericLevel = LEVELS.fatal;\n if (typeof level === \"string\") {\n if (level.toLowerCase() in LEVELS) {\n numericLevel = LEVELS[level];\n }\n } else if (typeof level === \"number\") {\n numericLevel = level;\n }\n log.trace = () => {\n };\n log.debug = () => {\n };\n log.info = () => {\n };\n log.warn = () => {\n };\n log.error = () => {\n };\n log.fatal = () => {\n };\n if (numericLevel <= LEVELS.fatal) {\n log.fatal = console.error ? console.error.bind(console, format(\"FATAL\"), \"color: orange\") : console.log.bind(console, \"\\x1B[35m\", format(\"FATAL\"));\n }\n if (numericLevel <= LEVELS.error) {\n log.error = console.error ? console.error.bind(console, format(\"ERROR\"), \"color: orange\") : console.log.bind(console, \"\\x1B[31m\", format(\"ERROR\"));\n }\n if (numericLevel <= LEVELS.warn) {\n log.warn = console.warn ? console.warn.bind(console, format(\"WARN\"), \"color: orange\") : console.log.bind(console, `\\x1B[33m`, format(\"WARN\"));\n }\n if (numericLevel <= LEVELS.info) {\n log.info = console.info ? console.info.bind(console, format(\"INFO\"), \"color: lightblue\") : console.log.bind(console, \"\\x1B[34m\", format(\"INFO\"));\n }\n if (numericLevel <= LEVELS.debug) {\n log.debug = console.debug ? console.debug.bind(console, format(\"DEBUG\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"DEBUG\"));\n }\n if (numericLevel <= LEVELS.trace) {\n log.trace = console.debug ? console.debug.bind(console, format(\"TRACE\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"TRACE\"));\n }\n}, \"setLogLevel\");\nvar format = /* @__PURE__ */ __name((level) => {\n const time = dayjs().format(\"ss.SSS\");\n return `%c${time} : ${level} : `;\n}, \"format\");\n\nexport {\n __name,\n __export,\n log,\n setLogLevel\n};\n","/* IMPORT */\n/* MAIN */\nconst Channel = {\n /* CLAMP */\n min: {\n r: 0,\n g: 0,\n b: 0,\n s: 0,\n l: 0,\n a: 0\n },\n max: {\n r: 255,\n g: 255,\n b: 255,\n h: 360,\n s: 100,\n l: 100,\n a: 1\n },\n clamp: {\n r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),\n g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),\n b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),\n h: (h) => h % 360,\n s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),\n l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),\n a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)\n },\n /* CONVERSION */\n //SOURCE: https://planetcalc.com/7779\n toLinear: (c) => {\n const n = c / 255;\n return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;\n },\n //SOURCE: https://gist.github.com/mjackson/5311256\n hue2rgb: (p, q, t) => {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n },\n hsl2rgb: ({ h, s, l }, channel) => {\n if (!s)\n return l * 2.55; // Achromatic\n h /= 360;\n s /= 100;\n l /= 100;\n const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);\n const p = 2 * l - q;\n switch (channel) {\n case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;\n case 'g': return Channel.hue2rgb(p, q, h) * 255;\n case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;\n }\n },\n rgb2hsl: ({ r, g, b }, channel) => {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n if (channel === 'l')\n return l * 100;\n if (max === min)\n return 0; // Achromatic\n const d = max - min;\n const s = (l > .5) ? d / (2 - max - min) : d / (max + min);\n if (channel === 's')\n return s * 100;\n switch (max) {\n case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;\n case g: return ((b - r) / d + 2) * 60;\n case b: return ((r - g) / d + 4) * 60;\n default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement\n }\n }\n};\n/* EXPORT */\nexport default Channel;\n","/* MAIN */\nconst Lang = {\n /* API */\n clamp: (number, lower, upper) => {\n if (lower > upper)\n return Math.min(lower, Math.max(upper, number));\n return Math.min(upper, Math.max(lower, number));\n },\n round: (number) => {\n return Math.round(number * 10000000000) / 10000000000;\n }\n};\n/* EXPORT */\nexport default Lang;\n","/* MAIN */\nconst Unit = {\n /* API */\n dec2hex: (dec) => {\n const hex = Math.round(dec).toString(16);\n return hex.length > 1 ? hex : `0${hex}`;\n }\n};\n/* EXPORT */\nexport default Unit;\n","/* IMPORT */\nimport channel from './channel.js';\nimport lang from './lang.js';\nimport unit from './unit.js';\n/* MAIN */\nconst Utils = {\n channel,\n lang,\n unit\n};\n/* EXPORT */\nexport default Utils;\n","/* IMPORT */\nimport _ from './utils/index.js';\n/* MAIN */\nconst DEC2HEX = {};\nfor (let i = 0; i <= 255; i++)\n DEC2HEX[i] = _.unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance\nconst TYPE = {\n ALL: 0,\n RGB: 1,\n HSL: 2\n};\n/* EXPORT */\nexport { DEC2HEX, TYPE };\n","/* IMPORT */\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Type {\n constructor() {\n /* VARIABLES */\n this.type = TYPE.ALL;\n }\n /* API */\n get() {\n return this.type;\n }\n set(type) {\n if (this.type && this.type !== type)\n throw new Error('Cannot change both RGB and HSL channels at the same time');\n this.type = type;\n }\n reset() {\n this.type = TYPE.ALL;\n }\n is(type) {\n return this.type === type;\n }\n}\n/* EXPORT */\nexport default Type;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Type from './type.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Channels {\n /* CONSTRUCTOR */\n constructor(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type = new Type();\n }\n /* API */\n set(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type.type = TYPE.ALL;\n return this;\n }\n /* HELPERS */\n _ensureHSL() {\n const data = this.data;\n const { h, s, l } = data;\n if (h === undefined)\n data.h = _.channel.rgb2hsl(data, 'h');\n if (s === undefined)\n data.s = _.channel.rgb2hsl(data, 's');\n if (l === undefined)\n data.l = _.channel.rgb2hsl(data, 'l');\n }\n _ensureRGB() {\n const data = this.data;\n const { r, g, b } = data;\n if (r === undefined)\n data.r = _.channel.hsl2rgb(data, 'r');\n if (g === undefined)\n data.g = _.channel.hsl2rgb(data, 'g');\n if (b === undefined)\n data.b = _.channel.hsl2rgb(data, 'b');\n }\n /* GETTERS */\n get r() {\n const data = this.data;\n const r = data.r;\n if (!this.type.is(TYPE.HSL) && r !== undefined)\n return r;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'r');\n }\n get g() {\n const data = this.data;\n const g = data.g;\n if (!this.type.is(TYPE.HSL) && g !== undefined)\n return g;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'g');\n }\n get b() {\n const data = this.data;\n const b = data.b;\n if (!this.type.is(TYPE.HSL) && b !== undefined)\n return b;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'b');\n }\n get h() {\n const data = this.data;\n const h = data.h;\n if (!this.type.is(TYPE.RGB) && h !== undefined)\n return h;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'h');\n }\n get s() {\n const data = this.data;\n const s = data.s;\n if (!this.type.is(TYPE.RGB) && s !== undefined)\n return s;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 's');\n }\n get l() {\n const data = this.data;\n const l = data.l;\n if (!this.type.is(TYPE.RGB) && l !== undefined)\n return l;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'l');\n }\n get a() {\n return this.data.a;\n }\n /* SETTERS */\n set r(r) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.r = r;\n }\n set g(g) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.g = g;\n }\n set b(b) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.b = b;\n }\n set h(h) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.h = h;\n }\n set s(s) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.s = s;\n }\n set l(l) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.l = l;\n }\n set a(a) {\n this.changed = true;\n this.data.a = a;\n }\n}\n/* EXPORT */\nexport default Channels;\n","/* IMPORT */\nimport Channels from './/index.js';\n/* MAIN */\nconst channels = new Channels({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');\n/* EXPORT */\nexport default channels;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport { DEC2HEX } from '../constants.js';\n/* MAIN */\nconst Hex = {\n /* VARIABLES */\n re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,\n /* API */\n parse: (color) => {\n if (color.charCodeAt(0) !== 35)\n return; // '#'\n const match = color.match(Hex.re);\n if (!match)\n return;\n const hex = match[1];\n const dec = parseInt(hex, 16);\n const length = hex.length;\n const hasAlpha = length % 4 === 0;\n const isFullLength = length > 4;\n const multiplier = isFullLength ? 1 : 17;\n const bits = isFullLength ? 8 : 4;\n const bitsOffset = hasAlpha ? 0 : -1;\n const mask = isFullLength ? 255 : 15;\n return ChannelsReusable.set({\n r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,\n g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,\n b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,\n a: hasAlpha ? (dec & mask) * multiplier / 255 : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // #RRGGBBAA\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}${DEC2HEX[Math.round(a * 255)]}`;\n }\n else { // #RRGGBB\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}`;\n }\n }\n};\n/* EXPORT */\nexport default Hex;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst HSL = {\n /* VARIABLES */\n re: /^hsla?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(?:deg|grad|rad|turn)?)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(%)?))?\\s*?\\)$/i,\n hueRe: /^(.+?)(deg|grad|rad|turn)$/i,\n /* HELPERS */\n _hue2deg: (hue) => {\n const match = hue.match(HSL.hueRe);\n if (match) {\n const [, number, unit] = match;\n switch (unit) {\n case 'grad': return _.channel.clamp.h(parseFloat(number) * .9);\n case 'rad': return _.channel.clamp.h(parseFloat(number) * 180 / Math.PI);\n case 'turn': return _.channel.clamp.h(parseFloat(number) * 360);\n }\n }\n return _.channel.clamp.h(parseFloat(hue));\n },\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 104 && charCode !== 72)\n return; // 'h'/'H'\n const match = color.match(HSL.re);\n if (!match)\n return;\n const [, h, s, l, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n h: HSL._hue2deg(h),\n s: _.channel.clamp.s(parseFloat(s)),\n l: _.channel.clamp.l(parseFloat(l)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { h, s, l, a } = channels;\n if (a < 1) { // HSLA\n return `hsla(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%, ${a})`;\n }\n else { // HSL\n return `hsl(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%)`;\n }\n }\n};\n/* EXPORT */\nexport default HSL;\n","/* IMPORT */\nimport Hex from './hex.js';\n/* MAIN */\nconst Keyword = {\n /* VARIABLES */\n 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 cyanaqua: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\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 darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\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 grey: '#808080',\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 lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#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: '#9370db',\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: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\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 slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n transparent: '#00000000',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n },\n /* API */\n parse: (color) => {\n color = color.toLowerCase();\n const hex = Keyword.colors[color];\n if (!hex)\n return;\n return Hex.parse(hex);\n },\n stringify: (channels) => {\n const hex = Hex.stringify(channels);\n for (const name in Keyword.colors) {\n if (Keyword.colors[name] === hex)\n return name;\n }\n return;\n }\n};\n/* EXPORT */\nexport default Keyword;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst RGB = {\n /* VARIABLES */\n re: /^rgba?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?)))?\\s*?\\)$/i,\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 114 && charCode !== 82)\n return; // 'r'/'R'\n const match = color.match(RGB.re);\n if (!match)\n return;\n const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n r: _.channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),\n g: _.channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),\n b: _.channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // RGBA\n return `rgba(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)}, ${_.lang.round(a)})`;\n }\n else { // RGB\n return `rgb(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)})`;\n }\n }\n};\n/* EXPORT */\nexport default RGB;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Hex from './hex.js';\nimport HSL from './hsl.js';\nimport Keyword from './keyword.js';\nimport RGB from './rgb.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nconst Color = {\n /* VARIABLES */\n format: {\n keyword: Keyword,\n hex: Hex,\n rgb: RGB,\n rgba: RGB,\n hsl: HSL,\n hsla: HSL\n },\n /* API */\n parse: (color) => {\n if (typeof color !== 'string')\n return color;\n const channels = Hex.parse(color) || RGB.parse(color) || HSL.parse(color) || Keyword.parse(color); // Color providers ordered with performance in mind\n if (channels)\n return channels;\n throw new Error(`Unsupported color format: \"${color}\"`);\n },\n stringify: (channels) => {\n // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value\n if (!channels.changed && channels.color)\n return channels.color;\n if (channels.type.is(TYPE.HSL) || channels.data.r === undefined) {\n return HSL.stringify(channels);\n }\n else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {\n return RGB.stringify(channels);\n }\n else {\n return Hex.stringify(channels);\n }\n }\n};\n/* EXPORT */\nexport default Color;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst change = (color, channels) => {\n const ch = Color.parse(color);\n for (const c in channels) {\n ch[c] = _.channel.clamp[c](channels[c]);\n }\n return Color.stringify(ch);\n};\n/* EXPORT */\nexport default change;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst rgba = (r, g, b = 0, a = 1) => {\n if (typeof r !== 'number')\n return change(r, { a: g });\n const channels = ChannelsReusable.set({\n r: _.channel.clamp.r(r),\n g: _.channel.clamp.g(g),\n b: _.channel.clamp.b(b),\n a: _.channel.clamp.a(a)\n });\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default rgba;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\n//SOURCE: https://planetcalc.com/7779\nconst luminance = (color) => {\n const { r, g, b } = Color.parse(color);\n const luminance = .2126 * _.channel.toLinear(r) + .7152 * _.channel.toLinear(g) + .0722 * _.channel.toLinear(b);\n return _.lang.round(luminance);\n};\n/* EXPORT */\nexport default luminance;\n","/* IMPORT */\nimport luminance from './luminance.js';\n/* MAIN */\nconst isLight = (color) => {\n return luminance(color) >= .5;\n};\n/* EXPORT */\nexport default isLight;\n","/* IMPORT */\nimport isLight from './is_light.js';\n/* MAIN */\nconst isDark = (color) => {\n return !isLight(color);\n};\n/* EXPORT */\nexport default isDark;\n","/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst adjustChannel = (color, channel, amount) => {\n const channels = Color.parse(color);\n const amountCurrent = channels[channel];\n const amountNext = _.channel.clamp[channel](amountCurrent + amount);\n if (amountCurrent !== amountNext)\n channels[channel] = amountNext;\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default adjustChannel;\n","/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst lighten = (color, amount) => {\n return adjustChannel(color, 'l', amount);\n};\n/* EXPORT */\nexport default lighten;\n","/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst darken = (color, amount) => {\n return adjustChannel(color, 'l', -amount);\n};\n/* EXPORT */\nexport default darken;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst adjust = (color, channels) => {\n const ch = Color.parse(color);\n const changes = {};\n for (const c in channels) {\n if (!channels[c])\n continue;\n changes[c] = ch[c] + channels[c];\n }\n return change(color, changes);\n};\n/* EXPORT */\nexport default adjust;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport rgba from './rgba.js';\n/* MAIN */\n//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756\nconst mix = (color1, color2, weight = 50) => {\n const { r: r1, g: g1, b: b1, a: a1 } = Color.parse(color1);\n const { r: r2, g: g2, b: b2, a: a2 } = Color.parse(color2);\n const weightScale = weight / 100;\n const weightNormalized = (weightScale * 2) - 1;\n const alphaDelta = a1 - a2;\n const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);\n const weight1 = (weight1combined + 1) / 2;\n const weight2 = 1 - weight1;\n const r = (r1 * weight1) + (r2 * weight2);\n const g = (g1 * weight1) + (g2 * weight2);\n const b = (b1 * weight1) + (b2 * weight2);\n const a = (a1 * weightScale) + (a2 * (1 - weightScale));\n return rgba(r, g, b, a);\n};\n/* EXPORT */\nexport default mix;\n","/* IMPORT */\nimport Color from '../color/index.js';\nimport mix from './mix.js';\n/* MAIN */\nconst invert = (color, weight = 100) => {\n const inverse = Color.parse(color);\n inverse.r = 255 - inverse.r;\n inverse.g = 255 - inverse.g;\n inverse.b = 255 - inverse.b;\n return mix(inverse, color, weight);\n};\n/* EXPORT */\nexport default invert;\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import {\n __export,\n __name,\n log,\n setLogLevel\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagram-api/regexes.ts\nvar frontMatterRegex = /^-{3}\\s*[\\n\\r](.*?)[\\n\\r]-{3}\\s*[\\n\\r]+/s;\nvar directiveRegex = /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nvar anyCommentRegex = /\\s*%%.*\\n/gm;\n\n// src/errors.ts\nvar UnknownDiagramError = class extends Error {\n static {\n __name(this, \"UnknownDiagramError\");\n }\n constructor(message) {\n super(message);\n this.name = \"UnknownDiagramError\";\n }\n};\n\n// src/diagram-api/detectType.ts\nvar detectors = {};\nvar detectType = /* @__PURE__ */ __name(function(text, config2) {\n text = text.replace(frontMatterRegex, \"\").replace(directiveRegex, \"\").replace(anyCommentRegex, \"\\n\");\n for (const [key, { detector }] of Object.entries(detectors)) {\n const diagram = detector(text, config2);\n if (diagram) {\n return key;\n }\n }\n throw new UnknownDiagramError(\n `No diagram type detected matching given configuration for text: ${text}`\n );\n}, \"detectType\");\nvar registerLazyLoadedDiagrams = /* @__PURE__ */ __name((...diagrams2) => {\n for (const { id, detector, loader } of diagrams2) {\n addDetector(id, detector, loader);\n }\n}, \"registerLazyLoadedDiagrams\");\nvar addDetector = /* @__PURE__ */ __name((key, detector, loader) => {\n if (detectors[key]) {\n log.warn(`Detector with key ${key} already exists. Overwriting.`);\n }\n detectors[key] = { detector, loader };\n log.debug(`Detector with key ${key} added${loader ? \" with loader\" : \"\"}`);\n}, \"addDetector\");\nvar getDiagramLoader = /* @__PURE__ */ __name((key) => {\n return detectors[key].loader;\n}, \"getDiagramLoader\");\n\n// src/assignWithDepth.ts\nvar assignWithDepth = /* @__PURE__ */ __name((dst, src, { depth = 2, clobber = false } = {}) => {\n const config2 = { depth, clobber };\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach((s) => assignWithDepth(dst, s, config2));\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach((s) => {\n if (!dst.includes(s)) {\n dst.push(s);\n }\n });\n return dst;\n }\n if (dst === void 0 || depth <= 0) {\n if (dst !== void 0 && dst !== null && typeof dst === \"object\" && typeof src === \"object\") {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n if (src !== void 0 && typeof dst === \"object\" && typeof src === \"object\") {\n Object.keys(src).forEach((key) => {\n if (typeof src[key] === \"object\" && (dst[key] === void 0 || typeof dst[key] === \"object\")) {\n if (dst[key] === void 0) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n } else if (clobber || typeof dst[key] !== \"object\" && typeof src[key] !== \"object\") {\n dst[key] = src[key];\n }\n });\n }\n return dst;\n}, \"assignWithDepth\");\nvar assignWithDepth_default = assignWithDepth;\n\n// src/themes/theme-base.js\nimport { adjust as adjust2, darken, invert, isDark, lighten } from \"khroma\";\n\n// src/themes/erDiagram-oldHardcodedValues.ts\nvar oldAttributeBackgroundColorOdd = \"#ffffff\";\nvar oldAttributeBackgroundColorEven = \"#f2f2f2\";\n\n// src/themes/theme-helpers.js\nimport { adjust } from \"khroma\";\nvar mkBorder = /* @__PURE__ */ __name((col, darkMode) => darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 }), \"mkBorder\");\n\n// src/themes/theme-base.js\nvar Theme = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#fff4dd\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n }\n updateColors() {\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? \"#eee\" : \"#333\");\n this.secondaryColor = this.secondaryColor || adjust2(this.primaryColor, { h: -120 });\n this.tertiaryColor = this.tertiaryColor || adjust2(this.primaryColor, { h: 180, l: 5 });\n this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n this.noteBkgColor = this.noteBkgColor || \"#fff5ad\";\n this.noteTextColor = this.noteTextColor || \"#333\";\n this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor);\n this.lineColor = this.lineColor || invert(this.background);\n this.arrowheadColor = this.arrowheadColor || invert(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n this.border2 = this.border2 || this.tertiaryBorderColor;\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || this.actorBorder;\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor);\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || \"white\";\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.excludeBkgColor = this.excludeBkgColor || \"#eeeeee\";\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23);\n this.gridColor = this.gridColor || \"lightgrey\";\n this.doneTaskBkgColor = this.doneTaskBkgColor || \"lightgrey\";\n this.doneTaskBorderColor = this.doneTaskBorderColor || \"grey\";\n this.critBorderColor = this.critBorderColor || \"#ff8888\";\n this.critBkgColor = this.critBkgColor || \"red\";\n this.todayLineColor = this.todayLineColor || \"red\";\n this.vertLineColor = this.vertLineColor || \"navy\";\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || \"#003163\";\n this.personBorder = this.personBorder || this.primaryBorderColor;\n this.personBkg = this.personBkg || this.mainBkg;\n if (this.darkMode) {\n this.rowOdd = this.rowOdd || darken(this.mainBkg, 5) || \"#ffffff\";\n this.rowEven = this.rowEven || darken(this.mainBkg, 10);\n } else {\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten(this.mainBkg, 5);\n }\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.specialStateColor = this.lineColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust2(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust2(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust2(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust2(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust2(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust2(this.primaryColor, { h: 210, l: 150 });\n this.cScale9 = this.cScale9 || adjust2(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust2(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust2(this.primaryColor, { h: 330 });\n if (this.darkMode) {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 75);\n }\n } else {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 25);\n }\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n const multiplier = this.darkMode ? -4 : -1;\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust2(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust2(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });\n }\n this.classText = this.classText || this.textColor;\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || adjust2(this.primaryColor, { h: 64 });\n this.fillType3 = this.fillType3 || adjust2(this.secondaryColor, { h: 64 });\n this.fillType4 = this.fillType4 || adjust2(this.primaryColor, { h: -64 });\n this.fillType5 = this.fillType5 || adjust2(this.secondaryColor, { h: -64 });\n this.fillType6 = this.fillType6 || adjust2(this.primaryColor, { h: 128 });\n this.fillType7 = this.fillType7 || adjust2(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust2(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust2(this.secondaryColor, { l: -10 });\n this.pie6 = this.pie6 || adjust2(this.tertiaryColor, { l: -10 });\n this.pie7 = this.pie7 || adjust2(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust2(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust2(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust2(this.primaryColor, { h: 60, l: -20 });\n this.pie11 = this.pie11 || adjust2(this.primaryColor, { h: -60, l: -20 });\n this.pie12 = this.pie12 || adjust2(this.primaryColor, { h: 120, l: -10 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.archEdgeColor = this.archEdgeColor || \"#777\";\n this.archEdgeArrowColor = this.archEdgeArrowColor || \"#777\";\n this.archEdgeWidth = this.archEdgeWidth || \"3\";\n this.archGroupBorderColor = this.archGroupBorderColor || \"#000\";\n this.archGroupBorderWidth = this.archGroupBorderWidth || \"2px\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust2(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust2(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust2(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust2(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust2(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust2(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust2(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust2(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust2(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust2(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust2(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.branchLabelColor = this.branchLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-dark.js\nimport { adjust as adjust3, darken as darken2, invert as invert2, isDark as isDark2, lighten as lighten2, rgba } from \"khroma\";\nvar Theme2 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#333\";\n this.primaryColor = \"#1f2020\";\n this.secondaryColor = lighten2(this.primaryColor, 16);\n this.tertiaryColor = adjust3(this.primaryColor, { h: -160 });\n this.primaryBorderColor = invert2(this.background);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert2(this.primaryColor);\n this.secondaryTextColor = invert2(this.secondaryColor);\n this.tertiaryTextColor = invert2(this.tertiaryColor);\n this.lineColor = invert2(this.background);\n this.textColor = invert2(this.background);\n this.mainBkg = \"#1f2020\";\n this.secondBkg = \"calculated\";\n this.mainContrastColor = \"lightgrey\";\n this.darkTextColor = lighten2(invert2(\"#323D47\"), 10);\n this.lineColor = \"calculated\";\n this.border1 = \"#ccc\";\n this.border2 = rgba(255, 255, 255, 0.25);\n this.arrowheadColor = \"calculated\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#181818\";\n this.textColor = \"#ccc\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#F9FFFE\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"calculated\";\n this.activationBkgColor = \"calculated\";\n this.sequenceNumberColor = \"black\";\n this.sectionBkgColor = darken2(\"#EAE8D9\", 30);\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"#EAE8D9\";\n this.excludeBkgColor = darken2(this.sectionBkgColor, 10);\n this.taskBorderColor = rgba(255, 255, 255, 70);\n this.taskBkgColor = \"calculated\";\n this.taskTextColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = rgba(255, 255, 255, 50);\n this.activeTaskBkgColor = \"#81B1DB\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#E83737\";\n this.critBkgColor = \"#E83737\";\n this.taskTextDarkColor = \"calculated\";\n this.todayLineColor = \"#DB5757\";\n this.vertLineColor = \"#00BFFF\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = this.rowOdd || lighten2(this.mainBkg, 5) || \"#ffffff\";\n this.rowEven = this.rowEven || darken2(this.mainBkg, 10);\n this.labelColor = \"calculated\";\n this.errorBkgColor = \"#a44141\";\n this.errorTextColor = \"#ddd\";\n }\n updateColors() {\n this.secondBkg = lighten2(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = lighten2(this.labelBackground, 25);\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.secondaryBorderColor;\n this.noteBkgColor = this.secondBkg;\n this.noteTextColor = this.secondaryTextColor;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = lighten2(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#555\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#f4f4f4\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust3(this.primaryColor, { h: 64 });\n this.fillType3 = adjust3(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust3(this.primaryColor, { h: -64 });\n this.fillType5 = adjust3(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust3(this.primaryColor, { h: 128 });\n this.fillType7 = adjust3(this.secondaryColor, { h: 128 });\n this.cScale1 = this.cScale1 || \"#0b0000\";\n this.cScale2 = this.cScale2 || \"#4d1037\";\n this.cScale3 = this.cScale3 || \"#3f5258\";\n this.cScale4 = this.cScale4 || \"#4f2f1b\";\n this.cScale5 = this.cScale5 || \"#6e0a0a\";\n this.cScale6 = this.cScale6 || \"#3b0048\";\n this.cScale7 = this.cScale7 || \"#995a01\";\n this.cScale8 = this.cScale8 || \"#154706\";\n this.cScale9 = this.cScale9 || \"#161722\";\n this.cScale10 = this.cScale10 || \"#00296f\";\n this.cScale11 = this.cScale11 || \"#01629c\";\n this.cScale12 = this.cScale12 || \"#010029\";\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust3(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust3(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust3(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust3(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust3(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust3(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust3(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust3(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust3(this.primaryColor, { h: 330 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert2(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten2(this[\"cScale\" + i], 10);\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust3(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust3(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust3(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust3(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust3(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust3(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust3(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust3(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark2(this.quadrant1Fill) ? lighten2(this.quadrant1Fill) : darken2(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22\"\n };\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.background\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.classText = this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken2(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = lighten2(this.secondaryColor, 20);\n this.git1 = lighten2(this.pie2 || this.secondaryColor, 20);\n this.git2 = lighten2(this.pie3 || this.tertiaryColor, 20);\n this.git3 = lighten2(this.pie4 || adjust3(this.primaryColor, { h: -30 }), 20);\n this.git4 = lighten2(this.pie5 || adjust3(this.primaryColor, { h: -60 }), 20);\n this.git5 = lighten2(this.pie6 || adjust3(this.primaryColor, { h: -90 }), 10);\n this.git6 = lighten2(this.pie7 || adjust3(this.primaryColor, { h: 60 }), 10);\n this.git7 = lighten2(this.pie8 || adjust3(this.primaryColor, { h: 120 }), 20);\n this.gitInv0 = this.gitInv0 || invert2(this.git0);\n this.gitInv1 = this.gitInv1 || invert2(this.git1);\n this.gitInv2 = this.gitInv2 || invert2(this.git2);\n this.gitInv3 = this.gitInv3 || invert2(this.git3);\n this.gitInv4 = this.gitInv4 || invert2(this.git4);\n this.gitInv5 = this.gitInv5 || invert2(this.git5);\n this.gitInv6 = this.gitInv6 || invert2(this.git6);\n this.gitInv7 = this.gitInv7 || invert2(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert2(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert2(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || lighten2(this.background, 12);\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || lighten2(this.background, 2);\n this.nodeBorder = this.nodeBorder || \"#999\";\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables2 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme2();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-default.js\nimport { invert as invert3, lighten as lighten3, rgba as rgba2, adjust as adjust4, darken as darken3, isDark as isDark3 } from \"khroma\";\nvar Theme3 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#ECECFF\";\n this.secondaryColor = adjust4(this.primaryColor, { h: 120 });\n this.secondaryColor = \"#ffffde\";\n this.tertiaryColor = adjust4(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert3(this.primaryColor);\n this.secondaryTextColor = invert3(this.secondaryColor);\n this.tertiaryTextColor = invert3(this.tertiaryColor);\n this.lineColor = invert3(this.background);\n this.textColor = invert3(this.background);\n this.background = \"white\";\n this.mainBkg = \"#ECECFF\";\n this.secondBkg = \"#ffffde\";\n this.lineColor = \"#333333\";\n this.border1 = \"#9370DB\";\n this.border2 = \"#aaaa33\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"rgba(232,232,232, 0.8)\";\n this.textColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = \"calculated\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.vertLineColor = \"calculated\";\n this.sectionBkgColor = rgba2(102, 102, 255, 0.49);\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#fff400\";\n this.taskBorderColor = \"#534fbc\";\n this.taskBkgColor = \"#8a90dd\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"#534fbc\";\n this.activeTaskBkgColor = \"#bfc7ff\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.vertLineColor = \"navy\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = \"calculated\";\n this.rowEven = \"calculated\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n this.updateColors();\n }\n updateColors() {\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust4(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust4(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust4(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust4(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust4(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust4(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust4(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust4(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust4(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken3(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken3(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken3(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken3(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust4(this[\"cScale\" + i], { h: 180 });\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust4(this.mainBkg, { h: 30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust4(this.mainBkg, { h: 30, l: -(7 + i * 5) });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n if (this.labelTextColor !== \"calculated\") {\n this.cScaleLabel0 = this.cScaleLabel0 || invert3(this.labelTextColor);\n this.cScaleLabel3 = this.cScaleLabel3 || invert3(this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.labelTextColor;\n }\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n this.actorBorder = lighten3(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.rowOdd = this.rowOdd || lighten3(this.primaryColor, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten3(this.primaryColor, 1);\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust4(this.primaryColor, { h: 64 });\n this.fillType3 = adjust4(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust4(this.primaryColor, { h: -64 });\n this.fillType5 = adjust4(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust4(this.primaryColor, { h: 128 });\n this.fillType7 = adjust4(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || adjust4(this.tertiaryColor, { l: -40 });\n this.pie4 = this.pie4 || adjust4(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust4(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust4(this.tertiaryColor, { l: -20 });\n this.pie7 = this.pie7 || adjust4(this.primaryColor, { h: 60, l: -20 });\n this.pie8 = this.pie8 || adjust4(this.primaryColor, { h: -60, l: -40 });\n this.pie9 = this.pie9 || adjust4(this.primaryColor, { h: 120, l: -40 });\n this.pie10 = this.pie10 || adjust4(this.primaryColor, { h: 60, l: -40 });\n this.pie11 = this.pie11 || adjust4(this.primaryColor, { h: -90, l: -40 });\n this.pie12 = this.pie12 || adjust4(this.primaryColor, { h: 120, l: -30 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust4(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust4(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust4(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust4(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust4(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust4(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark3(this.quadrant1Fill) ? lighten3(this.quadrant1Fill) : darken3(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust4(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust4(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust4(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust4(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust4(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten3(this.git0, 25);\n this.git1 = lighten3(this.git1, 25);\n this.git2 = lighten3(this.git2, 25);\n this.git3 = lighten3(this.git3, 25);\n this.git4 = lighten3(this.git4, 25);\n this.git5 = lighten3(this.git5, 25);\n this.git6 = lighten3(this.git6, 25);\n this.git7 = lighten3(this.git7, 25);\n } else {\n this.git0 = darken3(this.git0, 25);\n this.git1 = darken3(this.git1, 25);\n this.git2 = darken3(this.git2, 25);\n this.git3 = darken3(this.git3, 25);\n this.git4 = darken3(this.git4, 25);\n this.git5 = darken3(this.git5, 25);\n this.git6 = darken3(this.git6, 25);\n this.git7 = darken3(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || darken3(invert3(this.git0), 25);\n this.gitInv1 = this.gitInv1 || invert3(this.git1);\n this.gitInv2 = this.gitInv2 || invert3(this.git2);\n this.gitInv3 = this.gitInv3 || invert3(this.git3);\n this.gitInv4 = this.gitInv4 || invert3(this.git4);\n this.gitInv5 = this.gitInv5 || invert3(this.git5);\n this.gitInv6 = this.gitInv6 || invert3(this.git6);\n this.gitInv7 = this.gitInv7 || invert3(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert3(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert3(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n Object.keys(this).forEach((k) => {\n if (this[k] === \"calculated\") {\n this[k] = void 0;\n }\n });\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables3 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme3();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-forest.js\nimport { adjust as adjust5, darken as darken4, invert as invert4, isDark as isDark4, lighten as lighten4 } from \"khroma\";\nvar Theme4 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#cde498\";\n this.secondaryColor = \"#cdffb2\";\n this.background = \"white\";\n this.mainBkg = \"#cde498\";\n this.secondBkg = \"#cdffb2\";\n this.lineColor = \"green\";\n this.border1 = \"#13540c\";\n this.border2 = \"#6eaa49\";\n this.arrowheadColor = \"green\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.tertiaryColor = lighten4(\"#cde498\", 10);\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert4(this.primaryColor);\n this.secondaryTextColor = invert4(this.secondaryColor);\n this.tertiaryTextColor = invert4(this.primaryColor);\n this.lineColor = invert4(this.background);\n this.textColor = invert4(this.background);\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#333\";\n this.edgeLabelBackground = \"#e8e8e8\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"#333\";\n this.signalTextColor = \"#333\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"#326932\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"#6eaa49\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#6eaa49\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"#487e3a\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.vertLineColor = \"#00BFFF\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.actorBorder = darken4(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust5(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust5(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust5(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust5(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust5(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust5(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust5(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust5(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust5(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken4(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken4(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken4(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken4(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust5(this[\"cScale\" + i], { h: 180 });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust5(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust5(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.rowOdd = this.rowOdd || lighten4(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || lighten4(this.mainBkg, 20);\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust5(this.primaryColor, { h: 64 });\n this.fillType3 = adjust5(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust5(this.primaryColor, { h: -64 });\n this.fillType5 = adjust5(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust5(this.primaryColor, { h: 128 });\n this.fillType7 = adjust5(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust5(this.primaryColor, { l: -30 });\n this.pie5 = this.pie5 || adjust5(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust5(this.tertiaryColor, { h: 40, l: -40 });\n this.pie7 = this.pie7 || adjust5(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust5(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust5(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust5(this.primaryColor, { h: 60, l: -50 });\n this.pie11 = this.pie11 || adjust5(this.primaryColor, { h: -60, l: -50 });\n this.pie12 = this.pie12 || adjust5(this.primaryColor, { h: 120, l: -50 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust5(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust5(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust5(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust5(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust5(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust5(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark4(this.quadrant1Fill) ? lighten4(this.quadrant1Fill) : darken4(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.mainBkg\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust5(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust5(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust5(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust5(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust5(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten4(this.git0, 25);\n this.git1 = lighten4(this.git1, 25);\n this.git2 = lighten4(this.git2, 25);\n this.git3 = lighten4(this.git3, 25);\n this.git4 = lighten4(this.git4, 25);\n this.git5 = lighten4(this.git5, 25);\n this.git6 = lighten4(this.git6, 25);\n this.git7 = lighten4(this.git7, 25);\n } else {\n this.git0 = darken4(this.git0, 25);\n this.git1 = darken4(this.git1, 25);\n this.git2 = darken4(this.git2, 25);\n this.git3 = darken4(this.git3, 25);\n this.git4 = darken4(this.git4, 25);\n this.git5 = darken4(this.git5, 25);\n this.git6 = darken4(this.git6, 25);\n this.git7 = darken4(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert4(this.git0);\n this.gitInv1 = this.gitInv1 || invert4(this.git1);\n this.gitInv2 = this.gitInv2 || invert4(this.git2);\n this.gitInv3 = this.gitInv3 || invert4(this.git3);\n this.gitInv4 = this.gitInv4 || invert4(this.git4);\n this.gitInv5 = this.gitInv5 || invert4(this.git5);\n this.gitInv6 = this.gitInv6 || invert4(this.git6);\n this.gitInv7 = this.gitInv7 || invert4(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert4(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert4(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables4 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme4();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/theme-neutral.js\nimport { invert as invert5, darken as darken5, lighten as lighten5, adjust as adjust6, isDark as isDark5 } from \"khroma\";\nvar Theme5 = class {\n static {\n __name(this, \"Theme\");\n }\n constructor() {\n this.primaryColor = \"#eee\";\n this.contrast = \"#707070\";\n this.secondaryColor = lighten5(this.contrast, 55);\n this.background = \"#ffffff\";\n this.tertiaryColor = adjust6(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert5(this.primaryColor);\n this.secondaryTextColor = invert5(this.secondaryColor);\n this.tertiaryTextColor = invert5(this.tertiaryColor);\n this.lineColor = invert5(this.background);\n this.textColor = invert5(this.background);\n this.mainBkg = \"#eee\";\n this.secondBkg = \"calculated\";\n this.lineColor = \"#666\";\n this.border1 = \"#999\";\n this.border2 = \"calculated\";\n this.note = \"#ffa\";\n this.text = \"#333\";\n this.critical = \"#d42\";\n this.done = \"#bbb\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"white\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = this.actorBorder;\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"calculated\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.vertLineColor = \"calculated\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.archEdgeColor = \"calculated\";\n this.archEdgeArrowColor = \"calculated\";\n this.archEdgeWidth = \"3\";\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = \"2px\";\n this.rowOdd = this.rowOdd || lighten5(this.mainBkg, 75) || \"#ffffff\";\n this.rowEven = this.rowEven || \"#f4f4f4\";\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.secondBkg = lighten5(this.contrast, 55);\n this.border2 = this.contrast;\n this.actorBorder = lighten5(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = \"#999\";\n this.noteBkgColor = \"#666\";\n this.noteTextColor = \"#fff\";\n this.cScale0 = this.cScale0 || \"#555\";\n this.cScale1 = this.cScale1 || \"#F4F4F4\";\n this.cScale2 = this.cScale2 || \"#555\";\n this.cScale3 = this.cScale3 || \"#BBB\";\n this.cScale4 = this.cScale4 || \"#777\";\n this.cScale5 = this.cScale5 || \"#999\";\n this.cScale6 = this.cScale6 || \"#DDD\";\n this.cScale7 = this.cScale7 || \"#FFF\";\n this.cScale8 = this.cScale8 || \"#DDD\";\n this.cScale9 = this.cScale9 || \"#BBB\";\n this.cScale10 = this.cScale10 || \"#999\";\n this.cScale11 = this.cScale11 || \"#777\";\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert5(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten5(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken5(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.cScaleLabel0 = this.cScaleLabel0 || this.cScale1;\n this.cScaleLabel2 = this.cScaleLabel2 || this.cScale1;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust6(this.mainBkg, { l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust6(this.mainBkg, { l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n this.sectionBkgColor = lighten5(this.contrast, 30);\n this.sectionBkgColor2 = lighten5(this.contrast, 30);\n this.taskBorderColor = darken5(this.contrast, 10);\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = lighten5(this.border1, 30);\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = darken5(this.critBkgColor, 10);\n this.todayLineColor = this.critBkgColor;\n this.vertLineColor = this.critBkgColor;\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n this.transitionColor = this.transitionColor || \"#000\";\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f4f4f4\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.stateBorder = this.stateBorder || \"#000\";\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#222\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust6(this.primaryColor, { h: 64 });\n this.fillType3 = adjust6(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust6(this.primaryColor, { h: -64 });\n this.fillType5 = adjust6(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust6(this.primaryColor, { h: 128 });\n this.fillType7 = adjust6(this.secondaryColor, { h: 128 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pie12 = this.pie0;\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust6(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust6(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust6(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust6(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust6(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust6(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark5(this.quadrant1Fill) ? lighten5(this.quadrant1Fill) : darken5(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette: this.xyChart?.plotColorPalette || \"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0\"\n };\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || \"#DEDEDE\",\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = darken5(this.pie1, 25) || this.primaryColor;\n this.git1 = this.pie2 || this.secondaryColor;\n this.git2 = this.pie3 || this.tertiaryColor;\n this.git3 = this.pie4 || adjust6(this.primaryColor, { h: -30 });\n this.git4 = this.pie5 || adjust6(this.primaryColor, { h: -60 });\n this.git5 = this.pie6 || adjust6(this.primaryColor, { h: -90 });\n this.git6 = this.pie7 || adjust6(this.primaryColor, { h: 60 });\n this.git7 = this.pie8 || adjust6(this.primaryColor, { h: 120 });\n this.gitInv0 = this.gitInv0 || invert5(this.git0);\n this.gitInv1 = this.gitInv1 || invert5(this.git1);\n this.gitInv2 = this.gitInv2 || invert5(this.git2);\n this.gitInv3 = this.gitInv3 || invert5(this.git3);\n this.gitInv4 = this.gitInv4 || invert5(this.git4);\n this.gitInv5 = this.gitInv5 || invert5(this.git5);\n this.gitInv6 = this.gitInv6 || invert5(this.git6);\n this.gitInv7 = this.gitInv7 || invert5(this.git7);\n this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n this.gitBranchLabel0 = this.branchLabelColor;\n this.gitBranchLabel1 = \"white\";\n this.gitBranchLabel2 = this.branchLabelColor;\n this.gitBranchLabel3 = \"white\";\n this.gitBranchLabel4 = this.branchLabelColor;\n this.gitBranchLabel5 = this.branchLabelColor;\n this.gitBranchLabel6 = this.branchLabelColor;\n this.gitBranchLabel7 = this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nvar getThemeVariables5 = /* @__PURE__ */ __name((userOverrides) => {\n const theme = new Theme5();\n theme.calculate(userOverrides);\n return theme;\n}, \"getThemeVariables\");\n\n// src/themes/index.js\nvar themes_default = {\n base: {\n getThemeVariables\n },\n dark: {\n getThemeVariables: getThemeVariables2\n },\n default: {\n getThemeVariables: getThemeVariables3\n },\n forest: {\n getThemeVariables: getThemeVariables4\n },\n neutral: {\n getThemeVariables: getThemeVariables5\n }\n};\n\n// src/schemas/config.schema.yaml?only-defaults=true\nvar config_schema_default = {\n \"flowchart\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"subGraphTitleMargin\": {\n \"top\": 0,\n \"bottom\": 0\n },\n \"diagramPadding\": 8,\n \"htmlLabels\": true,\n \"nodeSpacing\": 50,\n \"rankSpacing\": 50,\n \"curve\": \"basis\",\n \"padding\": 15,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"wrappingWidth\": 200,\n \"inheritDir\": false\n },\n \"sequence\": {\n \"useMaxWidth\": true,\n \"hideUnusedParticipants\": false,\n \"activationWidth\": 10,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"actorMargin\": 50,\n \"width\": 150,\n \"height\": 65,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"mirrorActors\": true,\n \"forceMenus\": false,\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"showSequenceNumbers\": false,\n \"actorFontSize\": 14,\n \"actorFontFamily\": '\"Open Sans\", sans-serif',\n \"actorFontWeight\": 400,\n \"noteFontSize\": 14,\n \"noteFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"noteFontWeight\": 400,\n \"noteAlign\": \"center\",\n \"messageFontSize\": 16,\n \"messageFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"messageFontWeight\": 400,\n \"wrap\": false,\n \"wrapPadding\": 10,\n \"labelBoxWidth\": 50,\n \"labelBoxHeight\": 20\n },\n \"gantt\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"barHeight\": 20,\n \"barGap\": 4,\n \"topPadding\": 50,\n \"rightPadding\": 75,\n \"leftPadding\": 75,\n \"gridLineStartPadding\": 35,\n \"fontSize\": 11,\n \"sectionFontSize\": 11,\n \"numberSectionStyles\": 4,\n \"axisFormat\": \"%Y-%m-%d\",\n \"topAxis\": false,\n \"displayMode\": \"\",\n \"weekday\": \"sunday\"\n },\n \"journey\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"maxLabelWidth\": 360,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"titleColor\": \"\",\n \"titleFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"titleFontSize\": \"4ex\"\n },\n \"class\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"arrowMarkerAbsolute\": false,\n \"dividerMargin\": 10,\n \"padding\": 5,\n \"textHeight\": 10,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"htmlLabels\": false,\n \"hideEmptyMembersBox\": false\n },\n \"state\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"dividerMargin\": 10,\n \"sizeUnit\": 5,\n \"padding\": 8,\n \"textHeight\": 10,\n \"titleShift\": -15,\n \"noteMargin\": 10,\n \"forkWidth\": 70,\n \"forkHeight\": 7,\n \"miniPadding\": 2,\n \"fontSizeFactor\": 5.02,\n \"fontSize\": 24,\n \"labelHeight\": 16,\n \"edgeLengthFactor\": \"20\",\n \"compositTitleSize\": 35,\n \"radius\": 5,\n \"defaultRenderer\": \"dagre-wrapper\"\n },\n \"er\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 20,\n \"layoutDirection\": \"TB\",\n \"minEntityWidth\": 100,\n \"minEntityHeight\": 75,\n \"entityPadding\": 15,\n \"nodeSpacing\": 140,\n \"rankSpacing\": 80,\n \"stroke\": \"gray\",\n \"fill\": \"honeydew\",\n \"fontSize\": 12\n },\n \"pie\": {\n \"useMaxWidth\": true,\n \"textPosition\": 0.75\n },\n \"quadrantChart\": {\n \"useMaxWidth\": true,\n \"chartWidth\": 500,\n \"chartHeight\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"quadrantPadding\": 5,\n \"xAxisLabelPadding\": 5,\n \"yAxisLabelPadding\": 5,\n \"xAxisLabelFontSize\": 16,\n \"yAxisLabelFontSize\": 16,\n \"quadrantLabelFontSize\": 16,\n \"quadrantTextTopPadding\": 5,\n \"pointTextPadding\": 5,\n \"pointLabelFontSize\": 12,\n \"pointRadius\": 5,\n \"xAxisPosition\": \"top\",\n \"yAxisPosition\": \"left\",\n \"quadrantInternalBorderStrokeWidth\": 1,\n \"quadrantExternalBorderStrokeWidth\": 2\n },\n \"xyChart\": {\n \"useMaxWidth\": true,\n \"width\": 700,\n \"height\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"showDataLabel\": false,\n \"showTitle\": true,\n \"xAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"yAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"chartOrientation\": \"vertical\",\n \"plotReservedSpacePercent\": 50\n },\n \"requirement\": {\n \"useMaxWidth\": true,\n \"rect_fill\": \"#f9f9f9\",\n \"text_color\": \"#333\",\n \"rect_border_size\": \"0.5px\",\n \"rect_border_color\": \"#bbb\",\n \"rect_min_width\": 200,\n \"rect_min_height\": 200,\n \"fontSize\": 14,\n \"rect_padding\": 10,\n \"line_height\": 20\n },\n \"mindmap\": {\n \"useMaxWidth\": true,\n \"padding\": 10,\n \"maxNodeWidth\": 200,\n \"layoutAlgorithm\": \"cose-bilkent\"\n },\n \"kanban\": {\n \"useMaxWidth\": true,\n \"padding\": 8,\n \"sectionWidth\": 200,\n \"ticketBaseUrl\": \"\"\n },\n \"timeline\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"disableMulticolor\": false\n },\n \"gitGraph\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 8,\n \"nodeLabel\": {\n \"width\": 75,\n \"height\": 100,\n \"x\": -25,\n \"y\": 0\n },\n \"mainBranchName\": \"main\",\n \"mainBranchOrder\": 0,\n \"showCommitLabel\": true,\n \"showBranches\": true,\n \"rotateCommitLabel\": true,\n \"parallelCommits\": false,\n \"arrowMarkerAbsolute\": false\n },\n \"c4\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"c4ShapeMargin\": 50,\n \"c4ShapePadding\": 20,\n \"width\": 216,\n \"height\": 60,\n \"boxMargin\": 10,\n \"c4ShapeInRow\": 4,\n \"nextLinePaddingX\": 0,\n \"c4BoundaryInRow\": 2,\n \"personFontSize\": 14,\n \"personFontFamily\": '\"Open Sans\", sans-serif',\n \"personFontWeight\": \"normal\",\n \"external_personFontSize\": 14,\n \"external_personFontFamily\": '\"Open Sans\", sans-serif',\n \"external_personFontWeight\": \"normal\",\n \"systemFontSize\": 14,\n \"systemFontFamily\": '\"Open Sans\", sans-serif',\n \"systemFontWeight\": \"normal\",\n \"external_systemFontSize\": 14,\n \"external_systemFontFamily\": '\"Open Sans\", sans-serif',\n \"external_systemFontWeight\": \"normal\",\n \"system_dbFontSize\": 14,\n \"system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"system_dbFontWeight\": \"normal\",\n \"external_system_dbFontSize\": 14,\n \"external_system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_dbFontWeight\": \"normal\",\n \"system_queueFontSize\": 14,\n \"system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"system_queueFontWeight\": \"normal\",\n \"external_system_queueFontSize\": 14,\n \"external_system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_queueFontWeight\": \"normal\",\n \"boundaryFontSize\": 14,\n \"boundaryFontFamily\": '\"Open Sans\", sans-serif',\n \"boundaryFontWeight\": \"normal\",\n \"messageFontSize\": 12,\n \"messageFontFamily\": '\"Open Sans\", sans-serif',\n \"messageFontWeight\": \"normal\",\n \"containerFontSize\": 14,\n \"containerFontFamily\": '\"Open Sans\", sans-serif',\n \"containerFontWeight\": \"normal\",\n \"external_containerFontSize\": 14,\n \"external_containerFontFamily\": '\"Open Sans\", sans-serif',\n \"external_containerFontWeight\": \"normal\",\n \"container_dbFontSize\": 14,\n \"container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"container_dbFontWeight\": \"normal\",\n \"external_container_dbFontSize\": 14,\n \"external_container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_dbFontWeight\": \"normal\",\n \"container_queueFontSize\": 14,\n \"container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"container_queueFontWeight\": \"normal\",\n \"external_container_queueFontSize\": 14,\n \"external_container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_queueFontWeight\": \"normal\",\n \"componentFontSize\": 14,\n \"componentFontFamily\": '\"Open Sans\", sans-serif',\n \"componentFontWeight\": \"normal\",\n \"external_componentFontSize\": 14,\n \"external_componentFontFamily\": '\"Open Sans\", sans-serif',\n \"external_componentFontWeight\": \"normal\",\n \"component_dbFontSize\": 14,\n \"component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"component_dbFontWeight\": \"normal\",\n \"external_component_dbFontSize\": 14,\n \"external_component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_dbFontWeight\": \"normal\",\n \"component_queueFontSize\": 14,\n \"component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"component_queueFontWeight\": \"normal\",\n \"external_component_queueFontSize\": 14,\n \"external_component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_queueFontWeight\": \"normal\",\n \"wrap\": true,\n \"wrapPadding\": 10,\n \"person_bg_color\": \"#08427B\",\n \"person_border_color\": \"#073B6F\",\n \"external_person_bg_color\": \"#686868\",\n \"external_person_border_color\": \"#8A8A8A\",\n \"system_bg_color\": \"#1168BD\",\n \"system_border_color\": \"#3C7FC0\",\n \"system_db_bg_color\": \"#1168BD\",\n \"system_db_border_color\": \"#3C7FC0\",\n \"system_queue_bg_color\": \"#1168BD\",\n \"system_queue_border_color\": \"#3C7FC0\",\n \"external_system_bg_color\": \"#999999\",\n \"external_system_border_color\": \"#8A8A8A\",\n \"external_system_db_bg_color\": \"#999999\",\n \"external_system_db_border_color\": \"#8A8A8A\",\n \"external_system_queue_bg_color\": \"#999999\",\n \"external_system_queue_border_color\": \"#8A8A8A\",\n \"container_bg_color\": \"#438DD5\",\n \"container_border_color\": \"#3C7FC0\",\n \"container_db_bg_color\": \"#438DD5\",\n \"container_db_border_color\": \"#3C7FC0\",\n \"container_queue_bg_color\": \"#438DD5\",\n \"container_queue_border_color\": \"#3C7FC0\",\n \"external_container_bg_color\": \"#B3B3B3\",\n \"external_container_border_color\": \"#A6A6A6\",\n \"external_container_db_bg_color\": \"#B3B3B3\",\n \"external_container_db_border_color\": \"#A6A6A6\",\n \"external_container_queue_bg_color\": \"#B3B3B3\",\n \"external_container_queue_border_color\": \"#A6A6A6\",\n \"component_bg_color\": \"#85BBF0\",\n \"component_border_color\": \"#78A8D8\",\n \"component_db_bg_color\": \"#85BBF0\",\n \"component_db_border_color\": \"#78A8D8\",\n \"component_queue_bg_color\": \"#85BBF0\",\n \"component_queue_border_color\": \"#78A8D8\",\n \"external_component_bg_color\": \"#CCCCCC\",\n \"external_component_border_color\": \"#BFBFBF\",\n \"external_component_db_bg_color\": \"#CCCCCC\",\n \"external_component_db_border_color\": \"#BFBFBF\",\n \"external_component_queue_bg_color\": \"#CCCCCC\",\n \"external_component_queue_border_color\": \"#BFBFBF\"\n },\n \"sankey\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 400,\n \"linkColor\": \"gradient\",\n \"nodeAlignment\": \"justify\",\n \"showValues\": true,\n \"prefix\": \"\",\n \"suffix\": \"\"\n },\n \"block\": {\n \"useMaxWidth\": true,\n \"padding\": 8\n },\n \"packet\": {\n \"useMaxWidth\": true,\n \"rowHeight\": 32,\n \"bitWidth\": 32,\n \"bitsPerRow\": 32,\n \"showBits\": true,\n \"paddingX\": 5,\n \"paddingY\": 5\n },\n \"architecture\": {\n \"useMaxWidth\": true,\n \"padding\": 40,\n \"iconSize\": 80,\n \"fontSize\": 16\n },\n \"radar\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 600,\n \"marginTop\": 50,\n \"marginRight\": 50,\n \"marginBottom\": 50,\n \"marginLeft\": 50,\n \"axisScaleFactor\": 1,\n \"axisLabelFactor\": 1.05,\n \"curveTension\": 0.17\n },\n \"theme\": \"default\",\n \"look\": \"classic\",\n \"handDrawnSeed\": 0,\n \"layout\": \"dagre\",\n \"maxTextSize\": 5e4,\n \"maxEdges\": 500,\n \"darkMode\": false,\n \"fontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif;',\n \"logLevel\": 5,\n \"securityLevel\": \"strict\",\n \"startOnLoad\": true,\n \"arrowMarkerAbsolute\": false,\n \"secure\": [\n \"secure\",\n \"securityLevel\",\n \"startOnLoad\",\n \"maxTextSize\",\n \"suppressErrorRendering\",\n \"maxEdges\"\n ],\n \"legacyMathML\": false,\n \"forceLegacyMathML\": false,\n \"deterministicIds\": false,\n \"fontSize\": 16,\n \"markdownAutoWrap\": true,\n \"suppressErrorRendering\": false\n};\n\n// src/defaultConfig.ts\nvar config = {\n ...config_schema_default,\n // Set, even though they're `undefined` so that `configKeys` finds these keys\n // TODO: Should we replace these with `null` so that they can go in the JSON Schema?\n deterministicIDSeed: void 0,\n elk: {\n // mergeEdges is needed here to be considered\n mergeEdges: false,\n nodePlacementStrategy: \"BRANDES_KOEPF\",\n forceNodeModelOrder: false,\n considerModelOrder: \"NODES_AND_EDGES\"\n },\n themeCSS: void 0,\n // add non-JSON default config values\n themeVariables: themes_default.default.getThemeVariables(),\n sequence: {\n ...config_schema_default.sequence,\n messageFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n }, \"messageFont\"),\n noteFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.noteFontFamily,\n fontSize: this.noteFontSize,\n fontWeight: this.noteFontWeight\n };\n }, \"noteFont\"),\n actorFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.actorFontFamily,\n fontSize: this.actorFontSize,\n fontWeight: this.actorFontWeight\n };\n }, \"actorFont\")\n },\n class: {\n hideEmptyMembersBox: false\n },\n gantt: {\n ...config_schema_default.gantt,\n tickInterval: void 0,\n useWidth: void 0\n // can probably be removed since `configKeys` already includes this\n },\n c4: {\n ...config_schema_default.c4,\n useWidth: void 0,\n personFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.personFontFamily,\n fontSize: this.personFontSize,\n fontWeight: this.personFontWeight\n };\n }, \"personFont\"),\n flowchart: {\n ...config_schema_default.flowchart,\n inheritDir: false\n // default to legacy behavior\n },\n external_personFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_personFontFamily,\n fontSize: this.external_personFontSize,\n fontWeight: this.external_personFontWeight\n };\n }, \"external_personFont\"),\n systemFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.systemFontFamily,\n fontSize: this.systemFontSize,\n fontWeight: this.systemFontWeight\n };\n }, \"systemFont\"),\n external_systemFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_systemFontFamily,\n fontSize: this.external_systemFontSize,\n fontWeight: this.external_systemFontWeight\n };\n }, \"external_systemFont\"),\n system_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.system_dbFontFamily,\n fontSize: this.system_dbFontSize,\n fontWeight: this.system_dbFontWeight\n };\n }, \"system_dbFont\"),\n external_system_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_system_dbFontFamily,\n fontSize: this.external_system_dbFontSize,\n fontWeight: this.external_system_dbFontWeight\n };\n }, \"external_system_dbFont\"),\n system_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.system_queueFontFamily,\n fontSize: this.system_queueFontSize,\n fontWeight: this.system_queueFontWeight\n };\n }, \"system_queueFont\"),\n external_system_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_system_queueFontFamily,\n fontSize: this.external_system_queueFontSize,\n fontWeight: this.external_system_queueFontWeight\n };\n }, \"external_system_queueFont\"),\n containerFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.containerFontFamily,\n fontSize: this.containerFontSize,\n fontWeight: this.containerFontWeight\n };\n }, \"containerFont\"),\n external_containerFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_containerFontFamily,\n fontSize: this.external_containerFontSize,\n fontWeight: this.external_containerFontWeight\n };\n }, \"external_containerFont\"),\n container_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.container_dbFontFamily,\n fontSize: this.container_dbFontSize,\n fontWeight: this.container_dbFontWeight\n };\n }, \"container_dbFont\"),\n external_container_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_container_dbFontFamily,\n fontSize: this.external_container_dbFontSize,\n fontWeight: this.external_container_dbFontWeight\n };\n }, \"external_container_dbFont\"),\n container_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.container_queueFontFamily,\n fontSize: this.container_queueFontSize,\n fontWeight: this.container_queueFontWeight\n };\n }, \"container_queueFont\"),\n external_container_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_container_queueFontFamily,\n fontSize: this.external_container_queueFontSize,\n fontWeight: this.external_container_queueFontWeight\n };\n }, \"external_container_queueFont\"),\n componentFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.componentFontFamily,\n fontSize: this.componentFontSize,\n fontWeight: this.componentFontWeight\n };\n }, \"componentFont\"),\n external_componentFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_componentFontFamily,\n fontSize: this.external_componentFontSize,\n fontWeight: this.external_componentFontWeight\n };\n }, \"external_componentFont\"),\n component_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.component_dbFontFamily,\n fontSize: this.component_dbFontSize,\n fontWeight: this.component_dbFontWeight\n };\n }, \"component_dbFont\"),\n external_component_dbFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_component_dbFontFamily,\n fontSize: this.external_component_dbFontSize,\n fontWeight: this.external_component_dbFontWeight\n };\n }, \"external_component_dbFont\"),\n component_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.component_queueFontFamily,\n fontSize: this.component_queueFontSize,\n fontWeight: this.component_queueFontWeight\n };\n }, \"component_queueFont\"),\n external_component_queueFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.external_component_queueFontFamily,\n fontSize: this.external_component_queueFontSize,\n fontWeight: this.external_component_queueFontWeight\n };\n }, \"external_component_queueFont\"),\n boundaryFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.boundaryFontFamily,\n fontSize: this.boundaryFontSize,\n fontWeight: this.boundaryFontWeight\n };\n }, \"boundaryFont\"),\n messageFont: /* @__PURE__ */ __name(function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n }, \"messageFont\")\n },\n pie: {\n ...config_schema_default.pie,\n useWidth: 984\n },\n xyChart: {\n ...config_schema_default.xyChart,\n useWidth: void 0\n },\n requirement: {\n ...config_schema_default.requirement,\n useWidth: void 0\n },\n packet: {\n ...config_schema_default.packet\n },\n radar: {\n ...config_schema_default.radar\n },\n treemap: {\n useMaxWidth: true,\n padding: 10,\n diagramPadding: 8,\n showValues: true,\n nodeWidth: 100,\n nodeHeight: 40,\n borderWidth: 1,\n valueFontSize: 12,\n labelFontSize: 14,\n valueFormat: \",\"\n }\n};\nvar keyify = /* @__PURE__ */ __name((obj, prefix = \"\") => Object.keys(obj).reduce((res, el) => {\n if (Array.isArray(obj[el])) {\n return res;\n } else if (typeof obj[el] === \"object\" && obj[el] !== null) {\n return [...res, prefix + el, ...keyify(obj[el], \"\")];\n }\n return [...res, prefix + el];\n}, []), \"keyify\");\nvar configKeys = new Set(keyify(config, \"\"));\nvar defaultConfig_default = config;\n\n// src/utils/sanitizeDirective.ts\nvar sanitizeDirective = /* @__PURE__ */ __name((args) => {\n log.debug(\"sanitizeDirective called with\", args);\n if (typeof args !== \"object\" || args == null) {\n return;\n }\n if (Array.isArray(args)) {\n args.forEach((arg) => sanitizeDirective(arg));\n return;\n }\n for (const key of Object.keys(args)) {\n log.debug(\"Checking key\", key);\n if (key.startsWith(\"__\") || key.includes(\"proto\") || key.includes(\"constr\") || !configKeys.has(key) || args[key] == null) {\n log.debug(\"sanitize deleting key: \", key);\n delete args[key];\n continue;\n }\n if (typeof args[key] === \"object\") {\n log.debug(\"sanitizing object\", key);\n sanitizeDirective(args[key]);\n continue;\n }\n const cssMatchers = [\"themeCSS\", \"fontFamily\", \"altFontFamily\"];\n for (const cssKey of cssMatchers) {\n if (key.includes(cssKey)) {\n log.debug(\"sanitizing css option\", key);\n args[key] = sanitizeCss(args[key]);\n }\n }\n }\n if (args.themeVariables) {\n for (const k of Object.keys(args.themeVariables)) {\n const val = args.themeVariables[k];\n if (val?.match && !val.match(/^[\\d \"#%(),.;A-Za-z]+$/)) {\n args.themeVariables[k] = \"\";\n }\n }\n }\n log.debug(\"After sanitization\", args);\n}, \"sanitizeDirective\");\nvar sanitizeCss = /* @__PURE__ */ __name((str) => {\n let startCnt = 0;\n let endCnt = 0;\n for (const element of str) {\n if (startCnt < endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n if (element === \"{\") {\n startCnt++;\n } else if (element === \"}\") {\n endCnt++;\n }\n }\n if (startCnt !== endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n return str;\n}, \"sanitizeCss\");\n\n// src/config.ts\nvar defaultConfig = Object.freeze(defaultConfig_default);\nvar siteConfig = assignWithDepth_default({}, defaultConfig);\nvar configFromInitialize;\nvar directives = [];\nvar currentConfig = assignWithDepth_default({}, defaultConfig);\nvar updateCurrentConfig = /* @__PURE__ */ __name((siteCfg, _directives) => {\n let cfg = assignWithDepth_default({}, siteCfg);\n let sumOfDirectives = {};\n for (const d of _directives) {\n sanitize(d);\n sumOfDirectives = assignWithDepth_default(sumOfDirectives, d);\n }\n cfg = assignWithDepth_default(cfg, sumOfDirectives);\n if (sumOfDirectives.theme && sumOfDirectives.theme in themes_default) {\n const tmpConfigFromInitialize = assignWithDepth_default({}, configFromInitialize);\n const themeVariables = assignWithDepth_default(\n tmpConfigFromInitialize.themeVariables || {},\n sumOfDirectives.themeVariables\n );\n if (cfg.theme && cfg.theme in themes_default) {\n cfg.themeVariables = themes_default[cfg.theme].getThemeVariables(themeVariables);\n }\n }\n currentConfig = cfg;\n checkConfig(currentConfig);\n return currentConfig;\n}, \"updateCurrentConfig\");\nvar setSiteConfig = /* @__PURE__ */ __name((conf) => {\n siteConfig = assignWithDepth_default({}, defaultConfig);\n siteConfig = assignWithDepth_default(siteConfig, conf);\n if (conf.theme && themes_default[conf.theme]) {\n siteConfig.themeVariables = themes_default[conf.theme].getThemeVariables(conf.themeVariables);\n }\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n}, \"setSiteConfig\");\nvar saveConfigFromInitialize = /* @__PURE__ */ __name((conf) => {\n configFromInitialize = assignWithDepth_default({}, conf);\n}, \"saveConfigFromInitialize\");\nvar updateSiteConfig = /* @__PURE__ */ __name((conf) => {\n siteConfig = assignWithDepth_default(siteConfig, conf);\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n}, \"updateSiteConfig\");\nvar getSiteConfig = /* @__PURE__ */ __name(() => {\n return assignWithDepth_default({}, siteConfig);\n}, \"getSiteConfig\");\nvar setConfig = /* @__PURE__ */ __name((conf) => {\n checkConfig(conf);\n assignWithDepth_default(currentConfig, conf);\n return getConfig();\n}, \"setConfig\");\nvar getConfig = /* @__PURE__ */ __name(() => {\n return assignWithDepth_default({}, currentConfig);\n}, \"getConfig\");\nvar sanitize = /* @__PURE__ */ __name((options) => {\n if (!options) {\n return;\n }\n [\"secure\", ...siteConfig.secure ?? []].forEach((key) => {\n if (Object.hasOwn(options, key)) {\n log.debug(`Denied attempt to modify a secure key ${key}`, options[key]);\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (key.startsWith(\"__\")) {\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (typeof options[key] === \"string\" && (options[key].includes(\"<\") || options[key].includes(\">\") || options[key].includes(\"url(data:\"))) {\n delete options[key];\n }\n if (typeof options[key] === \"object\") {\n sanitize(options[key]);\n }\n });\n}, \"sanitize\");\nvar addDirective = /* @__PURE__ */ __name((directive) => {\n sanitizeDirective(directive);\n if (directive.fontFamily && !directive.themeVariables?.fontFamily) {\n directive.themeVariables = {\n ...directive.themeVariables,\n fontFamily: directive.fontFamily\n };\n }\n directives.push(directive);\n updateCurrentConfig(siteConfig, directives);\n}, \"addDirective\");\nvar reset = /* @__PURE__ */ __name((config2 = siteConfig) => {\n directives = [];\n updateCurrentConfig(config2, directives);\n}, \"reset\");\nvar ConfigWarning = {\n LAZY_LOAD_DEPRECATED: \"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.\"\n};\nvar issuedWarnings = {};\nvar issueWarning = /* @__PURE__ */ __name((warning) => {\n if (issuedWarnings[warning]) {\n return;\n }\n log.warn(ConfigWarning[warning]);\n issuedWarnings[warning] = true;\n}, \"issueWarning\");\nvar checkConfig = /* @__PURE__ */ __name((config2) => {\n if (!config2) {\n return;\n }\n if (config2.lazyLoadedDiagrams || config2.loadExternalDiagramsAtStartup) {\n issueWarning(\"LAZY_LOAD_DEPRECATED\");\n }\n}, \"checkConfig\");\nvar getUserDefinedConfig = /* @__PURE__ */ __name(() => {\n let userConfig = {};\n if (configFromInitialize) {\n userConfig = assignWithDepth_default(userConfig, configFromInitialize);\n }\n for (const d of directives) {\n userConfig = assignWithDepth_default(userConfig, d);\n }\n return userConfig;\n}, \"getUserDefinedConfig\");\n\n// src/diagrams/common/common.ts\nimport DOMPurify from \"dompurify\";\nvar lineBreakRegex = //gi;\nvar getRows = /* @__PURE__ */ __name((s) => {\n if (!s) {\n return [\"\"];\n }\n const str = breakToPlaceholder(s).replace(/\\\\n/g, \"#br#\");\n return str.split(\"#br#\");\n}, \"getRows\");\nvar setupDompurifyHooksIfNotSetup = /* @__PURE__ */ (() => {\n let setup = false;\n return () => {\n if (!setup) {\n setupDompurifyHooks();\n setup = true;\n }\n };\n})();\nfunction setupDompurifyHooks() {\n const TEMPORARY_ATTRIBUTE = \"data-temp-href-target\";\n DOMPurify.addHook(\"beforeSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(\"target\")) {\n node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute(\"target\") ?? \"\");\n }\n });\n DOMPurify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {\n node.setAttribute(\"target\", node.getAttribute(TEMPORARY_ATTRIBUTE) ?? \"\");\n node.removeAttribute(TEMPORARY_ATTRIBUTE);\n if (node.getAttribute(\"target\") === \"_blank\") {\n node.setAttribute(\"rel\", \"noopener\");\n }\n }\n });\n}\n__name(setupDompurifyHooks, \"setupDompurifyHooks\");\nvar removeScript = /* @__PURE__ */ __name((txt) => {\n setupDompurifyHooksIfNotSetup();\n const sanitizedText = DOMPurify.sanitize(txt);\n return sanitizedText;\n}, \"removeScript\");\nvar sanitizeMore = /* @__PURE__ */ __name((text, config2) => {\n if (config2.flowchart?.htmlLabels !== false) {\n const level = config2.securityLevel;\n if (level === \"antiscript\" || level === \"strict\") {\n text = removeScript(text);\n } else if (level !== \"loose\") {\n text = breakToPlaceholder(text);\n text = text.replace(//g, \">\");\n text = text.replace(/=/g, \"=\");\n text = placeholderToBreak(text);\n }\n }\n return text;\n}, \"sanitizeMore\");\nvar sanitizeText = /* @__PURE__ */ __name((text, config2) => {\n if (!text) {\n return text;\n }\n if (config2.dompurifyConfig) {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), config2.dompurifyConfig).toString();\n } else {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), {\n FORBID_TAGS: [\"style\"]\n }).toString();\n }\n return text;\n}, \"sanitizeText\");\nvar sanitizeTextOrArray = /* @__PURE__ */ __name((a, config2) => {\n if (typeof a === \"string\") {\n return sanitizeText(a, config2);\n }\n return a.flat().map((x) => sanitizeText(x, config2));\n}, \"sanitizeTextOrArray\");\nvar hasBreaks = /* @__PURE__ */ __name((text) => {\n return lineBreakRegex.test(text);\n}, \"hasBreaks\");\nvar splitBreaks = /* @__PURE__ */ __name((text) => {\n return text.split(lineBreakRegex);\n}, \"splitBreaks\");\nvar placeholderToBreak = /* @__PURE__ */ __name((s) => {\n return s.replace(/#br#/g, \"
    \");\n}, \"placeholderToBreak\");\nvar breakToPlaceholder = /* @__PURE__ */ __name((s) => {\n return s.replace(lineBreakRegex, \"#br#\");\n}, \"breakToPlaceholder\");\nvar getUrl = /* @__PURE__ */ __name((useAbsolute) => {\n let url = \"\";\n if (useAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = CSS.escape(url);\n }\n return url;\n}, \"getUrl\");\nvar evaluate = /* @__PURE__ */ __name((val) => val === false || [\"false\", \"null\", \"0\"].includes(String(val).trim().toLowerCase()) ? false : true, \"evaluate\");\nvar getMax = /* @__PURE__ */ __name(function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n}, \"getMax\");\nvar getMin = /* @__PURE__ */ __name(function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n}, \"getMin\");\nvar parseGenericTypes = /* @__PURE__ */ __name(function(input) {\n const inputSets = input.split(/(,)/);\n const output = [];\n for (let i = 0; i < inputSets.length; i++) {\n let thisSet = inputSets[i];\n if (thisSet === \",\" && i > 0 && i + 1 < inputSets.length) {\n const previousSet = inputSets[i - 1];\n const nextSet = inputSets[i + 1];\n if (shouldCombineSets(previousSet, nextSet)) {\n thisSet = previousSet + \",\" + nextSet;\n i++;\n output.pop();\n }\n }\n output.push(processSet(thisSet));\n }\n return output.join(\"\");\n}, \"parseGenericTypes\");\nvar countOccurrence = /* @__PURE__ */ __name((string, substring) => {\n return Math.max(0, string.split(substring).length - 1);\n}, \"countOccurrence\");\nvar shouldCombineSets = /* @__PURE__ */ __name((previousSet, nextSet) => {\n const prevCount = countOccurrence(previousSet, \"~\");\n const nextCount = countOccurrence(nextSet, \"~\");\n return prevCount === 1 && nextCount === 1;\n}, \"shouldCombineSets\");\nvar processSet = /* @__PURE__ */ __name((input) => {\n const tildeCount = countOccurrence(input, \"~\");\n let hasStartingTilde = false;\n if (tildeCount <= 1) {\n return input;\n }\n if (tildeCount % 2 !== 0 && input.startsWith(\"~\")) {\n input = input.substring(1);\n hasStartingTilde = true;\n }\n const chars = [...input];\n let first = chars.indexOf(\"~\");\n let last = chars.lastIndexOf(\"~\");\n while (first !== -1 && last !== -1 && first !== last) {\n chars[first] = \"<\";\n chars[last] = \">\";\n first = chars.indexOf(\"~\");\n last = chars.lastIndexOf(\"~\");\n }\n if (hasStartingTilde) {\n chars.unshift(\"~\");\n }\n return chars.join(\"\");\n}, \"processSet\");\nvar isMathMLSupported = /* @__PURE__ */ __name(() => window.MathMLElement !== void 0, \"isMathMLSupported\");\nvar katexRegex = /\\$\\$(.*)\\$\\$/g;\nvar hasKatex = /* @__PURE__ */ __name((text) => (text.match(katexRegex)?.length ?? 0) > 0, \"hasKatex\");\nvar calculateMathMLDimensions = /* @__PURE__ */ __name(async (text, config2) => {\n const divElem = document.createElement(\"div\");\n divElem.innerHTML = await renderKatexSanitized(text, config2);\n divElem.id = \"katex-temp\";\n divElem.style.visibility = \"hidden\";\n divElem.style.position = \"absolute\";\n divElem.style.top = \"0\";\n const body = document.querySelector(\"body\");\n body?.insertAdjacentElement(\"beforeend\", divElem);\n const dim = { width: divElem.clientWidth, height: divElem.clientHeight };\n divElem.remove();\n return dim;\n}, \"calculateMathMLDimensions\");\nvar renderKatexUnsanitized = /* @__PURE__ */ __name(async (text, config2) => {\n if (!hasKatex(text)) {\n return text;\n }\n if (!(isMathMLSupported() || config2.legacyMathML || config2.forceLegacyMathML)) {\n return text.replace(katexRegex, \"MathML is unsupported in this environment.\");\n }\n if (true) {\n const { default: katex } = await import(\"katex\");\n const outputMode = config2.forceLegacyMathML || !isMathMLSupported() && config2.legacyMathML ? \"htmlAndMathml\" : \"mathml\";\n return text.split(lineBreakRegex).map(\n (line) => hasKatex(line) ? `
    ${line}
    ` : `
    ${line}
    `\n ).join(\"\").replace(\n katexRegex,\n (_, c) => katex.renderToString(c, {\n throwOnError: true,\n displayMode: true,\n output: outputMode\n }).replace(/\\n/g, \" \").replace(//g, \"\")\n );\n }\n return text.replace(\n katexRegex,\n \"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.\"\n );\n}, \"renderKatexUnsanitized\");\nvar renderKatexSanitized = /* @__PURE__ */ __name(async (text, config2) => {\n return sanitizeText(await renderKatexUnsanitized(text, config2), config2);\n}, \"renderKatexSanitized\");\nvar common_default = {\n getRows,\n sanitizeText,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin\n};\n\n// src/setupGraphViewbox.js\nvar d3Attrs = /* @__PURE__ */ __name(function(d3Elem, attrs) {\n for (let attr of attrs) {\n d3Elem.attr(attr[0], attr[1]);\n }\n}, \"d3Attrs\");\nvar calculateSvgSizeAttrs = /* @__PURE__ */ __name(function(height, width, useMaxWidth) {\n let attrs = /* @__PURE__ */ new Map();\n if (useMaxWidth) {\n attrs.set(\"width\", \"100%\");\n attrs.set(\"style\", `max-width: ${width}px;`);\n } else {\n attrs.set(\"height\", height);\n attrs.set(\"width\", width);\n }\n return attrs;\n}, \"calculateSvgSizeAttrs\");\nvar configureSvgSize = /* @__PURE__ */ __name(function(svgElem, height, width, useMaxWidth) {\n const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n}, \"configureSvgSize\");\nvar setupGraphViewbox = /* @__PURE__ */ __name(function(graph, svgElem, padding, useMaxWidth) {\n const svgBounds = svgElem.node().getBBox();\n const sWidth = svgBounds.width;\n const sHeight = svgBounds.height;\n log.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);\n let width = 0;\n let height = 0;\n log.info(`Graph bounds: ${width}x${height}`, graph);\n width = sWidth + padding * 2;\n height = sHeight + padding * 2;\n log.info(`Calculated bounds: ${width}x${height}`);\n configureSvgSize(svgElem, height, width, useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${svgBounds.width + 2 * padding} ${svgBounds.height + 2 * padding}`;\n svgElem.attr(\"viewBox\", vBox);\n}, \"setupGraphViewbox\");\n\n// src/styles.ts\nvar themes = {};\nvar getStyles = /* @__PURE__ */ __name((type, userStyles, options) => {\n let diagramStyles = \"\";\n if (type in themes && themes[type]) {\n diagramStyles = themes[type](options);\n } else {\n log.warn(`No theme found for ${type}`);\n }\n return ` & {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor}\n }\n @keyframes edge-animation-frame {\n from {\n stroke-dashoffset: 0;\n }\n }\n @keyframes dash {\n to {\n stroke-dashoffset: 0;\n }\n }\n & .edge-animation-slow {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 50s linear infinite;\n stroke-linecap: round;\n }\n & .edge-animation-fast {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 20s linear infinite;\n stroke-linecap: round;\n }\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${options.errorBkgColor};\n }\n & .error-text {\n fill: ${options.errorTextColor};\n stroke: ${options.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 1px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n & .edge-thickness-invisible {\n stroke-width: 0;\n fill: none;\n }\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n }\n & .marker.cross {\n stroke: ${options.lineColor};\n }\n\n & svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n & p {\n margin: 0\n }\n\n ${diagramStyles}\n\n ${userStyles}\n`;\n}, \"getStyles\");\nvar addStylesForDiagram = /* @__PURE__ */ __name((type, diagramTheme) => {\n if (diagramTheme !== void 0) {\n themes[type] = diagramTheme;\n }\n}, \"addStylesForDiagram\");\nvar styles_default = getStyles;\n\n// src/diagrams/common/commonDb.ts\nvar commonDb_exports = {};\n__export(commonDb_exports, {\n clear: () => clear,\n getAccDescription: () => getAccDescription,\n getAccTitle: () => getAccTitle,\n getDiagramTitle: () => getDiagramTitle,\n setAccDescription: () => setAccDescription,\n setAccTitle: () => setAccTitle,\n setDiagramTitle: () => setDiagramTitle\n});\nvar accTitle = \"\";\nvar diagramTitle = \"\";\nvar accDescription = \"\";\nvar sanitizeText2 = /* @__PURE__ */ __name((txt) => sanitizeText(txt, getConfig()), \"sanitizeText\");\nvar clear = /* @__PURE__ */ __name(() => {\n accTitle = \"\";\n accDescription = \"\";\n diagramTitle = \"\";\n}, \"clear\");\nvar setAccTitle = /* @__PURE__ */ __name((txt) => {\n accTitle = sanitizeText2(txt).replace(/^\\s+/g, \"\");\n}, \"setAccTitle\");\nvar getAccTitle = /* @__PURE__ */ __name(() => accTitle, \"getAccTitle\");\nvar setAccDescription = /* @__PURE__ */ __name((txt) => {\n accDescription = sanitizeText2(txt).replace(/\\n\\s+/g, \"\\n\");\n}, \"setAccDescription\");\nvar getAccDescription = /* @__PURE__ */ __name(() => accDescription, \"getAccDescription\");\nvar setDiagramTitle = /* @__PURE__ */ __name((txt) => {\n diagramTitle = sanitizeText2(txt);\n}, \"setDiagramTitle\");\nvar getDiagramTitle = /* @__PURE__ */ __name(() => diagramTitle, \"getDiagramTitle\");\n\n// src/diagram-api/diagramAPI.ts\nvar log2 = log;\nvar setLogLevel2 = setLogLevel;\nvar getConfig2 = getConfig;\nvar setConfig2 = setConfig;\nvar defaultConfig2 = defaultConfig;\nvar sanitizeText3 = /* @__PURE__ */ __name((text) => sanitizeText(text, getConfig2()), \"sanitizeText\");\nvar setupGraphViewbox2 = setupGraphViewbox;\nvar getCommonDb = /* @__PURE__ */ __name(() => {\n return commonDb_exports;\n}, \"getCommonDb\");\nvar diagrams = {};\nvar registerDiagram = /* @__PURE__ */ __name((id, diagram, detector) => {\n if (diagrams[id]) {\n log2.warn(`Diagram with id ${id} already registered. Overwriting.`);\n }\n diagrams[id] = diagram;\n if (detector) {\n addDetector(id, detector);\n }\n addStylesForDiagram(id, diagram.styles);\n diagram.injectUtils?.(\n log2,\n setLogLevel2,\n getConfig2,\n sanitizeText3,\n setupGraphViewbox2,\n getCommonDb(),\n () => {\n }\n );\n}, \"registerDiagram\");\nvar getDiagram = /* @__PURE__ */ __name((name) => {\n if (name in diagrams) {\n return diagrams[name];\n }\n throw new DiagramNotFoundError(name);\n}, \"getDiagram\");\nvar DiagramNotFoundError = class extends Error {\n static {\n __name(this, \"DiagramNotFoundError\");\n }\n constructor(name) {\n super(`Diagram ${name} not found.`);\n }\n};\n\nexport {\n assignWithDepth_default,\n getThemeVariables3 as getThemeVariables,\n themes_default,\n defaultConfig_default,\n sanitizeDirective,\n defaultConfig,\n setSiteConfig,\n saveConfigFromInitialize,\n updateSiteConfig,\n getSiteConfig,\n setConfig,\n getConfig,\n addDirective,\n reset,\n getUserDefinedConfig,\n lineBreakRegex,\n sanitizeText,\n getUrl,\n evaluate,\n parseGenericTypes,\n hasKatex,\n calculateMathMLDimensions,\n renderKatexSanitized,\n common_default,\n frontMatterRegex,\n directiveRegex,\n UnknownDiagramError,\n detectors,\n detectType,\n registerLazyLoadedDiagrams,\n getDiagramLoader,\n configureSvgSize,\n setupGraphViewbox,\n styles_default,\n clear,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n setDiagramTitle,\n getDiagramTitle,\n commonDb_exports,\n getConfig2,\n setConfig2,\n defaultConfig2,\n sanitizeText3 as sanitizeText2,\n setupGraphViewbox2,\n registerDiagram,\n getDiagram\n};\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/selectSvgElement.ts\nimport { select } from \"d3\";\nvar selectSvgElement = /* @__PURE__ */ __name((id) => {\n const { securityLevel } = getConfig();\n let root = select(\"body\");\n if (securityLevel === \"sandbox\") {\n const sandboxElement = select(`#i${id}`);\n const doc = sandboxElement.node()?.contentDocument ?? document;\n root = select(doc.body);\n }\n const svg = root.select(`#${id}`);\n return svg;\n}, \"selectSvgElement\");\n\nexport {\n selectSvgElement\n};\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// ../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/dist/js-yaml.mjs\nfunction isNothing(subject) {\n return typeof subject === \"undefined\" || subject === null;\n}\n__name(isNothing, \"isNothing\");\nfunction isObject(subject) {\n return typeof subject === \"object\" && subject !== null;\n}\n__name(isObject, \"isObject\");\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n return [sequence];\n}\n__name(toArray, \"toArray\");\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n if (source) {\n sourceKeys = Object.keys(source);\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n return target;\n}\n__name(extend, \"extend\");\nfunction repeat(string, count) {\n var result = \"\", cycle;\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n return result;\n}\n__name(repeat, \"repeat\");\nfunction isNegativeZero(number) {\n return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\n__name(isNegativeZero, \"isNegativeZero\");\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\nvar common = {\n isNothing: isNothing_1,\n isObject: isObject_1,\n toArray: toArray_1,\n repeat: repeat_1,\n isNegativeZero: isNegativeZero_1,\n extend: extend_1\n};\nfunction formatError(exception2, compact) {\n var where = \"\", message = exception2.reason || \"(unknown reason)\";\n if (!exception2.mark) return message;\n if (exception2.mark.name) {\n where += 'in \"' + exception2.mark.name + '\" ';\n }\n where += \"(\" + (exception2.mark.line + 1) + \":\" + (exception2.mark.column + 1) + \")\";\n if (!compact && exception2.mark.snippet) {\n where += \"\\n\\n\" + exception2.mark.snippet;\n }\n return message + \" \" + where;\n}\n__name(formatError, \"formatError\");\nfunction YAMLException$1(reason, mark) {\n Error.call(this);\n this.name = \"YAMLException\";\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack || \"\";\n }\n}\n__name(YAMLException$1, \"YAMLException$1\");\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\nYAMLException$1.prototype.toString = /* @__PURE__ */ __name(function toString(compact) {\n return this.name + \": \" + formatError(this, compact);\n}, \"toString\");\nvar exception = YAMLException$1;\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = \"\";\n var tail = \"\";\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n if (position - lineStart > maxHalfLength) {\n head = \" ... \";\n lineStart = position - maxHalfLength + head.length;\n }\n if (lineEnd - position > maxHalfLength) {\n tail = \" ...\";\n lineEnd = position + maxHalfLength - tail.length;\n }\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"\\u2192\") + tail,\n pos: position - lineStart + head.length\n // relative position\n };\n}\n__name(getLine, \"getLine\");\nfunction padStart(string, max) {\n return common.repeat(\" \", max - string.length) + string;\n}\n__name(padStart, \"padStart\");\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n if (!mark.buffer) return null;\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== \"number\") options.indent = 1;\n if (typeof options.linesBefore !== \"number\") options.linesBefore = 3;\n if (typeof options.linesAfter !== \"number\") options.linesAfter = 2;\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [0];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n while (match = re.exec(mark.buffer)) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n var result = \"\", i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n }\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\\n\";\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n }\n return result.replace(/\\n$/, \"\");\n}\n__name(makeSnippet, \"makeSnippet\");\nvar snippet = makeSnippet;\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n \"kind\",\n \"multi\",\n \"resolve\",\n \"construct\",\n \"instanceOf\",\n \"predicate\",\n \"represent\",\n \"representName\",\n \"defaultStyle\",\n \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n \"scalar\",\n \"sequence\",\n \"mapping\"\n];\nfunction compileStyleAliases(map2) {\n var result = {};\n if (map2 !== null) {\n Object.keys(map2).forEach(function(style) {\n map2[style].forEach(function(alias) {\n result[String(alias)] = style;\n });\n });\n }\n return result;\n}\n__name(compileStyleAliases, \"compileStyleAliases\");\nfunction Type$1(tag, options) {\n options = options || {};\n Object.keys(options).forEach(function(name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n this.options = options;\n this.tag = tag;\n this.kind = options[\"kind\"] || null;\n this.resolve = options[\"resolve\"] || function() {\n return true;\n };\n this.construct = options[\"construct\"] || function(data) {\n return data;\n };\n this.instanceOf = options[\"instanceOf\"] || null;\n this.predicate = options[\"predicate\"] || null;\n this.represent = options[\"represent\"] || null;\n this.representName = options[\"representName\"] || null;\n this.defaultStyle = options[\"defaultStyle\"] || null;\n this.multi = options[\"multi\"] || false;\n this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n__name(Type$1, \"Type$1\");\nvar type = Type$1;\nfunction compileList(schema2, name) {\n var result = [];\n schema2[name].forEach(function(currentType) {\n var newIndex = result.length;\n result.forEach(function(previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n newIndex = previousIndex;\n }\n });\n result[newIndex] = currentType;\n });\n return result;\n}\n__name(compileList, \"compileList\");\nfunction compileMap() {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n function collectType(type2) {\n if (type2.multi) {\n result.multi[type2.kind].push(type2);\n result.multi[\"fallback\"].push(type2);\n } else {\n result[type2.kind][type2.tag] = result[\"fallback\"][type2.tag] = type2;\n }\n }\n __name(collectType, \"collectType\");\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n__name(compileMap, \"compileMap\");\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n__name(Schema$1, \"Schema$1\");\nSchema$1.prototype.extend = /* @__PURE__ */ __name(function extend2(definition) {\n var implicit = [];\n var explicit = [];\n if (definition instanceof type) {\n explicit.push(definition);\n } else if (Array.isArray(definition)) {\n explicit = explicit.concat(definition);\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n } else {\n throw new exception(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");\n }\n implicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n if (type$1.loadKind && type$1.loadKind !== \"scalar\") {\n throw new exception(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n }\n if (type$1.multi) {\n throw new exception(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n }\n });\n explicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n });\n var result = Object.create(Schema$1.prototype);\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n result.compiledImplicit = compileList(result, \"implicit\");\n result.compiledExplicit = compileList(result, \"explicit\");\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n return result;\n}, \"extend\");\nvar schema = Schema$1;\nvar str = new type(\"tag:yaml.org,2002:str\", {\n kind: \"scalar\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : \"\";\n }, \"construct\")\n});\nvar seq = new type(\"tag:yaml.org,2002:seq\", {\n kind: \"sequence\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : [];\n }, \"construct\")\n});\nvar map = new type(\"tag:yaml.org,2002:map\", {\n kind: \"mapping\",\n construct: /* @__PURE__ */ __name(function(data) {\n return data !== null ? data : {};\n }, \"construct\")\n});\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n var max = data.length;\n return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\n__name(resolveYamlNull, \"resolveYamlNull\");\nfunction constructYamlNull() {\n return null;\n}\n__name(constructYamlNull, \"constructYamlNull\");\nfunction isNull(object) {\n return object === null;\n}\n__name(isNull, \"isNull\");\nvar _null = new type(\"tag:yaml.org,2002:null\", {\n kind: \"scalar\",\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: /* @__PURE__ */ __name(function() {\n return \"~\";\n }, \"canonical\"),\n lowercase: /* @__PURE__ */ __name(function() {\n return \"null\";\n }, \"lowercase\"),\n uppercase: /* @__PURE__ */ __name(function() {\n return \"NULL\";\n }, \"uppercase\"),\n camelcase: /* @__PURE__ */ __name(function() {\n return \"Null\";\n }, \"camelcase\"),\n empty: /* @__PURE__ */ __name(function() {\n return \"\";\n }, \"empty\")\n },\n defaultStyle: \"lowercase\"\n});\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n var max = data.length;\n return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\n__name(resolveYamlBoolean, \"resolveYamlBoolean\");\nfunction constructYamlBoolean(data) {\n return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\n__name(constructYamlBoolean, \"constructYamlBoolean\");\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\n__name(isBoolean, \"isBoolean\");\nvar bool = new type(\"tag:yaml.org,2002:bool\", {\n kind: \"scalar\",\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: /* @__PURE__ */ __name(function(object) {\n return object ? \"true\" : \"false\";\n }, \"lowercase\"),\n uppercase: /* @__PURE__ */ __name(function(object) {\n return object ? \"TRUE\" : \"FALSE\";\n }, \"uppercase\"),\n camelcase: /* @__PURE__ */ __name(function(object) {\n return object ? \"True\" : \"False\";\n }, \"camelcase\")\n },\n defaultStyle: \"lowercase\"\n});\nfunction isHexCode(c) {\n return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;\n}\n__name(isHexCode, \"isHexCode\");\nfunction isOctCode(c) {\n return 48 <= c && c <= 55;\n}\n__name(isOctCode, \"isOctCode\");\nfunction isDecCode(c) {\n return 48 <= c && c <= 57;\n}\n__name(isDecCode, \"isDecCode\");\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n var max = data.length, index = 0, hasDigits = false, ch;\n if (!max) return false;\n ch = data[index];\n if (ch === \"-\" || ch === \"+\") {\n ch = data[++index];\n }\n if (ch === \"0\") {\n if (index + 1 === max) return true;\n ch = data[++index];\n if (ch === \"b\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (ch !== \"0\" && ch !== \"1\") return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"x\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"o\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n }\n if (ch === \"_\") return false;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\") continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n if (!hasDigits || ch === \"_\") return false;\n return true;\n}\n__name(resolveYamlInteger, \"resolveYamlInteger\");\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n if (value.indexOf(\"_\") !== -1) {\n value = value.replace(/_/g, \"\");\n }\n ch = value[0];\n if (ch === \"-\" || ch === \"+\") {\n if (ch === \"-\") sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n if (value === \"0\") return 0;\n if (ch === \"0\") {\n if (value[1] === \"b\") return sign * parseInt(value.slice(2), 2);\n if (value[1] === \"x\") return sign * parseInt(value.slice(2), 16);\n if (value[1] === \"o\") return sign * parseInt(value.slice(2), 8);\n }\n return sign * parseInt(value, 10);\n}\n__name(constructYamlInteger, \"constructYamlInteger\");\nfunction isInteger(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 === 0 && !common.isNegativeZero(object));\n}\n__name(isInteger, \"isInteger\");\nvar int = new type(\"tag:yaml.org,2002:int\", {\n kind: \"scalar\",\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n }, \"binary\"),\n octal: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n }, \"octal\"),\n decimal: /* @__PURE__ */ __name(function(obj) {\n return obj.toString(10);\n }, \"decimal\"),\n /* eslint-disable max-len */\n hexadecimal: /* @__PURE__ */ __name(function(obj) {\n return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n }, \"hexadecimal\")\n },\n defaultStyle: \"decimal\",\n styleAliases: {\n binary: [2, \"bin\"],\n octal: [8, \"oct\"],\n decimal: [10, \"dec\"],\n hexadecimal: [16, \"hex\"]\n }\n});\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n \"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\"\n);\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === \"_\") {\n return false;\n }\n return true;\n}\n__name(resolveYamlFloat, \"resolveYamlFloat\");\nfunction constructYamlFloat(data) {\n var value, sign;\n value = data.replace(/_/g, \"\").toLowerCase();\n sign = value[0] === \"-\" ? -1 : 1;\n if (\"+-\".indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n if (value === \".inf\") {\n return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n } else if (value === \".nan\") {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n__name(constructYamlFloat, \"constructYamlFloat\");\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n var res;\n if (isNaN(object)) {\n switch (style) {\n case \"lowercase\":\n return \".nan\";\n case \"uppercase\":\n return \".NAN\";\n case \"camelcase\":\n return \".NaN\";\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \".inf\";\n case \"uppercase\":\n return \".INF\";\n case \"camelcase\":\n return \".Inf\";\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \"-.inf\";\n case \"uppercase\":\n return \"-.INF\";\n case \"camelcase\":\n return \"-.Inf\";\n }\n } else if (common.isNegativeZero(object)) {\n return \"-0.0\";\n }\n res = object.toString(10);\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\n__name(representYamlFloat, \"representYamlFloat\");\nfunction isFloat(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\n__name(isFloat, \"isFloat\");\nvar float = new type(\"tag:yaml.org,2002:float\", {\n kind: \"scalar\",\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: \"lowercase\"\n});\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\nvar core = json;\nvar YAML_DATE_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"\n);\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\"\n);\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n__name(resolveYamlTimestamp, \"resolveYamlTimestamp\");\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n if (match === null) throw new Error(\"Date resolve error\");\n year = +match[1];\n month = +match[2] - 1;\n day = +match[3];\n if (!match[4]) {\n return new Date(Date.UTC(year, month, day));\n }\n hour = +match[4];\n minute = +match[5];\n second = +match[6];\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) {\n fraction += \"0\";\n }\n fraction = +fraction;\n }\n if (match[9]) {\n tz_hour = +match[10];\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 6e4;\n if (match[9] === \"-\") delta = -delta;\n }\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n if (delta) date.setTime(date.getTime() - delta);\n return date;\n}\n__name(constructYamlTimestamp, \"constructYamlTimestamp\");\nfunction representYamlTimestamp(object) {\n return object.toISOString();\n}\n__name(representYamlTimestamp, \"representYamlTimestamp\");\nvar timestamp = new type(\"tag:yaml.org,2002:timestamp\", {\n kind: \"scalar\",\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\nfunction resolveYamlMerge(data) {\n return data === \"<<\" || data === null;\n}\n__name(resolveYamlMerge, \"resolveYamlMerge\");\nvar merge = new type(\"tag:yaml.org,2002:merge\", {\n kind: \"scalar\",\n resolve: resolveYamlMerge\n});\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n code = map2.indexOf(data.charAt(idx));\n if (code > 64) continue;\n if (code < 0) return false;\n bitlen += 6;\n }\n return bitlen % 8 === 0;\n}\n__name(resolveYamlBinary, \"resolveYamlBinary\");\nfunction constructYamlBinary(data) {\n var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];\n for (idx = 0; idx < max; idx++) {\n if (idx % 4 === 0 && idx) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n }\n bits = bits << 6 | map2.indexOf(input.charAt(idx));\n }\n tailbits = max % 4 * 6;\n if (tailbits === 0) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n } else if (tailbits === 18) {\n result.push(bits >> 10 & 255);\n result.push(bits >> 2 & 255);\n } else if (tailbits === 12) {\n result.push(bits >> 4 & 255);\n }\n return new Uint8Array(result);\n}\n__name(constructYamlBinary, \"constructYamlBinary\");\nfunction representYamlBinary(object) {\n var result = \"\", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n if (idx % 3 === 0 && idx) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n }\n bits = (bits << 8) + object[idx];\n }\n tail = max % 3;\n if (tail === 0) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n } else if (tail === 2) {\n result += map2[bits >> 10 & 63];\n result += map2[bits >> 4 & 63];\n result += map2[bits << 2 & 63];\n result += map2[64];\n } else if (tail === 1) {\n result += map2[bits >> 2 & 63];\n result += map2[bits << 4 & 63];\n result += map2[64];\n result += map2[64];\n }\n return result;\n}\n__name(representYamlBinary, \"representYamlBinary\");\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\n__name(isBinary, \"isBinary\");\nvar binary = new type(\"tag:yaml.org,2002:binary\", {\n kind: \"scalar\",\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n if (_toString$2.call(pair) !== \"[object Object]\") return false;\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n if (!pairHasKey) return false;\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n return true;\n}\n__name(resolveYamlOmap, \"resolveYamlOmap\");\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n__name(constructYamlOmap, \"constructYamlOmap\");\nvar omap = new type(\"tag:yaml.org,2002:omap\", {\n kind: \"sequence\",\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\nvar _toString$1 = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n if (_toString$1.call(pair) !== \"[object Object]\") return false;\n keys = Object.keys(pair);\n if (keys.length !== 1) return false;\n result[index] = [keys[0], pair[keys[0]]];\n }\n return true;\n}\n__name(resolveYamlPairs, \"resolveYamlPairs\");\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n keys = Object.keys(pair);\n result[index] = [keys[0], pair[keys[0]]];\n }\n return result;\n}\n__name(constructYamlPairs, \"constructYamlPairs\");\nvar pairs = new type(\"tag:yaml.org,2002:pairs\", {\n kind: \"sequence\",\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n var key, object = data;\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n return true;\n}\n__name(resolveYamlSet, \"resolveYamlSet\");\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n__name(constructYamlSet, \"constructYamlSet\");\nvar set = new type(\"tag:yaml.org,2002:set\", {\n kind: \"mapping\",\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\n__name(_class, \"_class\");\nfunction is_EOL(c) {\n return c === 10 || c === 13;\n}\n__name(is_EOL, \"is_EOL\");\nfunction is_WHITE_SPACE(c) {\n return c === 9 || c === 32;\n}\n__name(is_WHITE_SPACE, \"is_WHITE_SPACE\");\nfunction is_WS_OR_EOL(c) {\n return c === 9 || c === 32 || c === 10 || c === 13;\n}\n__name(is_WS_OR_EOL, \"is_WS_OR_EOL\");\nfunction is_FLOW_INDICATOR(c) {\n return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;\n}\n__name(is_FLOW_INDICATOR, \"is_FLOW_INDICATOR\");\nfunction fromHexCode(c) {\n var lc;\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n lc = c | 32;\n if (97 <= lc && lc <= 102) {\n return lc - 97 + 10;\n }\n return -1;\n}\n__name(fromHexCode, \"fromHexCode\");\nfunction escapedHexLen(c) {\n if (c === 120) {\n return 2;\n }\n if (c === 117) {\n return 4;\n }\n if (c === 85) {\n return 8;\n }\n return 0;\n}\n__name(escapedHexLen, \"escapedHexLen\");\nfunction fromDecimalCode(c) {\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n return -1;\n}\n__name(fromDecimalCode, \"fromDecimalCode\");\nfunction simpleEscapeSequence(c) {\n return c === 48 ? \"\\0\" : c === 97 ? \"\\x07\" : c === 98 ? \"\\b\" : c === 116 ? \"\t\" : c === 9 ? \"\t\" : c === 110 ? \"\\n\" : c === 118 ? \"\\v\" : c === 102 ? \"\\f\" : c === 114 ? \"\\r\" : c === 101 ? \"\\x1B\" : c === 32 ? \" \" : c === 34 ? '\"' : c === 47 ? \"/\" : c === 92 ? \"\\\\\" : c === 78 ? \"\\x85\" : c === 95 ? \"\\xA0\" : c === 76 ? \"\\u2028\" : c === 80 ? \"\\u2029\" : \"\";\n}\n__name(simpleEscapeSequence, \"simpleEscapeSequence\");\nfunction charFromCodepoint(c) {\n if (c <= 65535) {\n return String.fromCharCode(c);\n }\n return String.fromCharCode(\n (c - 65536 >> 10) + 55296,\n (c - 65536 & 1023) + 56320\n );\n}\n__name(charFromCodepoint, \"charFromCodepoint\");\nvar simpleEscapeCheck = new Array(256);\nvar simpleEscapeMap = new Array(256);\nfor (i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nvar i;\nfunction State$1(input, options) {\n this.input = input;\n this.filename = options[\"filename\"] || null;\n this.schema = options[\"schema\"] || _default;\n this.onWarning = options[\"onWarning\"] || null;\n this.legacy = options[\"legacy\"] || false;\n this.json = options[\"json\"] || false;\n this.listener = options[\"listener\"] || null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n this.firstTabInLine = -1;\n this.documents = [];\n}\n__name(State$1, \"State$1\");\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1),\n // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n mark.snippet = snippet(mark);\n return new exception(message, mark);\n}\n__name(generateError, \"generateError\");\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n__name(throwError, \"throwError\");\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n__name(throwWarning, \"throwWarning\");\nvar directiveHandlers = {\n YAML: /* @__PURE__ */ __name(function handleYamlDirective(state, name, args) {\n var match, major, minor;\n if (state.version !== null) {\n throwError(state, \"duplication of %YAML directive\");\n }\n if (args.length !== 1) {\n throwError(state, \"YAML directive accepts exactly one argument\");\n }\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n if (match === null) {\n throwError(state, \"ill-formed argument of the YAML directive\");\n }\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n if (major !== 1) {\n throwError(state, \"unacceptable YAML version of the document\");\n }\n state.version = args[0];\n state.checkLineBreaks = minor < 2;\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, \"unsupported YAML version of the document\");\n }\n }, \"handleYamlDirective\"),\n TAG: /* @__PURE__ */ __name(function handleTagDirective(state, name, args) {\n var handle, prefix;\n if (args.length !== 2) {\n throwError(state, \"TAG directive accepts exactly two arguments\");\n }\n handle = args[0];\n prefix = args[1];\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, \"ill-formed tag handle (first argument) of the TAG directive\");\n }\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, \"ill-formed tag prefix (second argument) of the TAG directive\");\n }\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, \"tag prefix is malformed: \" + prefix);\n }\n state.tagMap[handle] = prefix;\n }, \"handleTagDirective\")\n};\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n if (start < end) {\n _result = state.input.slice(start, end);\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {\n throwError(state, \"expected valid JSON character\");\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, \"the stream contains non-printable characters\");\n }\n state.result += _result;\n }\n}\n__name(captureSegment, \"captureSegment\");\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n if (!common.isObject(source)) {\n throwError(state, \"cannot merge mappings; the provided source object is unacceptable\");\n }\n sourceKeys = Object.keys(source);\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\n__name(mergeMappings, \"mergeMappings\");\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n var index, quantity;\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, \"nested arrays are not supported inside keys\");\n }\n if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n keyNode[index] = \"[object Object]\";\n }\n }\n }\n if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n keyNode = \"[object Object]\";\n }\n keyNode = String(keyNode);\n if (_result === null) {\n _result = {};\n }\n if (keyTag === \"tag:yaml.org,2002:merge\") {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, \"duplicated mapping key\");\n }\n if (keyNode === \"__proto__\") {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n return _result;\n}\n__name(storeMappingPair, \"storeMappingPair\");\nfunction readLineBreak(state) {\n var ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 10) {\n state.position++;\n } else if (ch === 13) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 10) {\n state.position++;\n }\n } else {\n throwError(state, \"a line break is expected\");\n }\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n__name(readLineBreak, \"readLineBreak\");\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0, ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 9 && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n if (allowComments && ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 10 && ch !== 13 && ch !== 0);\n }\n if (is_EOL(ch)) {\n readLineBreak(state);\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n while (ch === 32) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, \"deficient indentation\");\n }\n return lineBreaks;\n}\n__name(skipSeparationSpace, \"skipSeparationSpace\");\nfunction testDocumentSeparator(state) {\n var _position = state.position, ch;\n ch = state.input.charCodeAt(_position);\n if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {\n _position += 3;\n ch = state.input.charCodeAt(_position);\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n return false;\n}\n__name(testDocumentSeparator, \"testDocumentSeparator\");\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += \" \";\n } else if (count > 1) {\n state.result += common.repeat(\"\\n\", count - 1);\n }\n}\n__name(writeFoldedLines, \"writeFoldedLines\");\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;\n ch = state.input.charCodeAt(state.position);\n if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {\n return false;\n }\n if (ch === 63 || ch === 45) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n state.kind = \"scalar\";\n state.result = \"\";\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n while (ch !== 0) {\n if (ch === 58) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n } else if (ch === 35) {\n preceding = state.input.charCodeAt(state.position - 1);\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n captureSegment(state, captureStart, captureEnd, false);\n if (state.result) {\n return true;\n }\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n__name(readPlainScalar, \"readPlainScalar\");\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch, captureStart, captureEnd;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 39) {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n state.position++;\n captureStart = captureEnd = state.position;\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 39) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n if (ch === 39) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, \"unexpected end of the document within a single quoted scalar\");\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n throwError(state, \"unexpected end of the stream within a single quoted scalar\");\n}\n__name(readSingleQuotedScalar, \"readSingleQuotedScalar\");\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 34) {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n state.position++;\n captureStart = captureEnd = state.position;\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 34) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n } else if (ch === 92) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n } else {\n throwError(state, \"expected hexadecimal character\");\n }\n }\n state.result += charFromCodepoint(hexResult);\n state.position++;\n } else {\n throwError(state, \"unknown escape sequence\");\n }\n captureStart = captureEnd = state.position;\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, \"unexpected end of the document within a double quoted scalar\");\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n throwError(state, \"unexpected end of the stream within a double quoted scalar\");\n}\n__name(readDoubleQuotedScalar, \"readDoubleQuotedScalar\");\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 91) {\n terminator = 93;\n isMapping = false;\n _result = [];\n } else if (ch === 123) {\n terminator = 125;\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(++state.position);\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? \"mapping\" : \"sequence\";\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, \"missed comma between flow collection entries\");\n } else if (ch === 44) {\n throwError(state, \"expected the node content, but found ','\");\n }\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n if (ch === 63) {\n following = state.input.charCodeAt(state.position + 1);\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n _line = state.line;\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if ((isExplicitPair || state.line === _line) && ch === 58) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n skipSeparationSpace(state, true, nodeIndent);\n ch = state.input.charCodeAt(state.position);\n if (ch === 44) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n throwError(state, \"unexpected end of the stream within a flow collection\");\n}\n__name(readFlowCollection, \"readFlowCollection\");\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch === 124) {\n folding = false;\n } else if (ch === 62) {\n folding = true;\n } else {\n return false;\n }\n state.kind = \"scalar\";\n state.result = \"\";\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n if (ch === 43 || ch === 45) {\n if (CHOMPING_CLIP === chomping) {\n chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, \"repeat of a chomping mode identifier\");\n }\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, \"repeat of an indentation width identifier\");\n }\n } else {\n break;\n }\n }\n if (is_WHITE_SPACE(ch)) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (is_WHITE_SPACE(ch));\n if (ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (!is_EOL(ch) && ch !== 0);\n }\n }\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n ch = state.input.charCodeAt(state.position);\n while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n if (state.lineIndent < textIndent) {\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) {\n state.result += \"\\n\";\n }\n }\n break;\n }\n if (folding) {\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat(\"\\n\", emptyLines + 1);\n } else if (emptyLines === 0) {\n if (didReadContent) {\n state.result += \" \";\n }\n } else {\n state.result += common.repeat(\"\\n\", emptyLines);\n }\n } else {\n state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n }\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n while (!is_EOL(ch) && ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n }\n captureSegment(state, captureStart, state.position, false);\n }\n return true;\n}\n__name(readBlockScalar, \"readBlockScalar\");\nfunction readBlockSequence(state, nodeIndent) {\n var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;\n if (state.firstTabInLine !== -1) return false;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, \"tab characters must not be used in indentation\");\n }\n if (ch !== 45) {\n break;\n }\n following = state.input.charCodeAt(state.position + 1);\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n detected = true;\n state.position++;\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state, \"bad indentation of a sequence entry\");\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = \"sequence\";\n state.result = _result;\n return true;\n }\n return false;\n}\n__name(readBlockSequence, \"readBlockSequence\");\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n if (state.firstTabInLine !== -1) return false;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n ch = state.input.charCodeAt(state.position);\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, \"tab characters must not be used in indentation\");\n }\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line;\n if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {\n if (ch === 63) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n } else if (atExplicitKey) {\n atExplicitKey = false;\n allowCompact = true;\n } else {\n throwError(state, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n }\n state.position += 1;\n ch = following;\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n break;\n }\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (ch === 58) {\n ch = state.input.charCodeAt(++state.position);\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, \"a whitespace character is expected after the key-value separator within a block mapping\");\n }\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n } else if (detected) {\n throwError(state, \"can not read an implicit mapping pair; a colon is missed\");\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true;\n }\n } else if (detected) {\n throwError(state, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true;\n }\n }\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state, \"bad indentation of a mapping entry\");\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = \"mapping\";\n state.result = _result;\n }\n return detected;\n}\n__name(readBlockMapping, \"readBlockMapping\");\nfunction readTagProperty(state) {\n var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 33) return false;\n if (state.tag !== null) {\n throwError(state, \"duplication of a tag property\");\n }\n ch = state.input.charCodeAt(++state.position);\n if (ch === 60) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n } else if (ch === 33) {\n isNamed = true;\n tagHandle = \"!!\";\n ch = state.input.charCodeAt(++state.position);\n } else {\n tagHandle = \"!\";\n }\n _position = state.position;\n if (isVerbatim) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0 && ch !== 62);\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, \"unexpected end of the stream within a verbatim tag\");\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n if (ch === 33) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, \"named tag handle cannot contain such characters\");\n }\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, \"tag suffix cannot contain exclamation marks\");\n }\n }\n ch = state.input.charCodeAt(++state.position);\n }\n tagName = state.input.slice(_position, state.position);\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, \"tag suffix cannot contain flow indicator characters\");\n }\n }\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, \"tag name cannot contain such characters: \" + tagName);\n }\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, \"tag name is malformed: \" + tagName);\n }\n if (isVerbatim) {\n state.tag = tagName;\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n } else if (tagHandle === \"!\") {\n state.tag = \"!\" + tagName;\n } else if (tagHandle === \"!!\") {\n state.tag = \"tag:yaml.org,2002:\" + tagName;\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n return true;\n}\n__name(readTagProperty, \"readTagProperty\");\nfunction readAnchorProperty(state) {\n var _position, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 38) return false;\n if (state.anchor !== null) {\n throwError(state, \"duplication of an anchor property\");\n }\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (state.position === _position) {\n throwError(state, \"name of an anchor node must contain at least one character\");\n }\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n__name(readAnchorProperty, \"readAnchorProperty\");\nfunction readAlias(state) {\n var _position, alias, ch;\n ch = state.input.charCodeAt(state.position);\n if (ch !== 42) return false;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (state.position === _position) {\n throwError(state, \"name of an alias node must contain at least one character\");\n }\n alias = state.input.slice(_position, state.position);\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n__name(readAlias, \"readAlias\");\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;\n if (state.listener !== null) {\n state.listener(\"open\", state);\n }\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n blockIndent = state.position - state.lineStart;\n if (indentStatus === 1) {\n if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n } else if (readAlias(state)) {\n hasContent = true;\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, \"alias node should not have any properties\");\n }\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n if (state.tag === null) {\n state.tag = \"?\";\n }\n }\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n } else if (state.tag === \"?\") {\n if (state.result !== null && state.kind !== \"scalar\") {\n throwError(state, 'unacceptable node kind for ! tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type2 = state.implicitTypes[typeIndex];\n if (type2.resolve(state.result)) {\n state.result = type2.construct(state.result);\n state.tag = type2.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== \"!\") {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || \"fallback\"], state.tag)) {\n type2 = state.typeMap[state.kind || \"fallback\"][state.tag];\n } else {\n type2 = null;\n typeList = state.typeMap.multi[state.kind || \"fallback\"];\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type2 = typeList[typeIndex];\n break;\n }\n }\n }\n if (!type2) {\n throwError(state, \"unknown tag !<\" + state.tag + \">\");\n }\n if (state.result !== null && type2.kind !== state.kind) {\n throwError(state, \"unacceptable node kind for !<\" + state.tag + '> tag; it should be \"' + type2.kind + '\", not \"' + state.kind + '\"');\n }\n if (!type2.resolve(state.result, state.tag)) {\n throwError(state, \"cannot resolve a node with !<\" + state.tag + \"> explicit tag\");\n } else {\n state.result = type2.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n if (state.listener !== null) {\n state.listener(\"close\", state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n__name(composeNode, \"composeNode\");\nfunction readDocument(state) {\n var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = /* @__PURE__ */ Object.create(null);\n state.anchorMap = /* @__PURE__ */ Object.create(null);\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n if (state.lineIndent > 0 || ch !== 37) {\n break;\n }\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n if (directiveName.length < 1) {\n throwError(state, \"directive name must not be less than one character in length\");\n }\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n if (ch === 35) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0 && !is_EOL(ch));\n break;\n }\n if (is_EOL(ch)) break;\n _position = state.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n if (ch !== 0) readLineBreak(state);\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n skipSeparationSpace(state, true, -1);\n if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n } else if (hasDirectives) {\n throwError(state, \"directives end mark is expected\");\n }\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, \"non-ASCII line breaks are interpreted as content\");\n }\n state.documents.push(state.result);\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n if (state.input.charCodeAt(state.position) === 46) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n if (state.position < state.length - 1) {\n throwError(state, \"end of the stream or a document separator is expected\");\n } else {\n return;\n }\n}\n__name(readDocument, \"readDocument\");\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n if (input.length !== 0) {\n if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {\n input += \"\\n\";\n }\n if (input.charCodeAt(0) === 65279) {\n input = input.slice(1);\n }\n }\n var state = new State$1(input, options);\n var nullpos = input.indexOf(\"\\0\");\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, \"null byte is not allowed in input\");\n }\n state.input += \"\\0\";\n while (state.input.charCodeAt(state.position) === 32) {\n state.lineIndent += 1;\n state.position += 1;\n }\n while (state.position < state.length - 1) {\n readDocument(state);\n }\n return state.documents;\n}\n__name(loadDocuments, \"loadDocuments\");\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === \"object\" && typeof options === \"undefined\") {\n options = iterator;\n iterator = null;\n }\n var documents = loadDocuments(input, options);\n if (typeof iterator !== \"function\") {\n return documents;\n }\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n__name(loadAll$1, \"loadAll$1\");\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n if (documents.length === 0) {\n return void 0;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception(\"expected a single document in the stream, but found more\");\n}\n__name(load$1, \"load$1\");\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\nvar loader = {\n loadAll: loadAll_1,\n load: load_1\n};\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar CHAR_BOM = 65279;\nvar CHAR_TAB = 9;\nvar CHAR_LINE_FEED = 10;\nvar CHAR_CARRIAGE_RETURN = 13;\nvar CHAR_SPACE = 32;\nvar CHAR_EXCLAMATION = 33;\nvar CHAR_DOUBLE_QUOTE = 34;\nvar CHAR_SHARP = 35;\nvar CHAR_PERCENT = 37;\nvar CHAR_AMPERSAND = 38;\nvar CHAR_SINGLE_QUOTE = 39;\nvar CHAR_ASTERISK = 42;\nvar CHAR_COMMA = 44;\nvar CHAR_MINUS = 45;\nvar CHAR_COLON = 58;\nvar CHAR_EQUALS = 61;\nvar CHAR_GREATER_THAN = 62;\nvar CHAR_QUESTION = 63;\nvar CHAR_COMMERCIAL_AT = 64;\nvar CHAR_LEFT_SQUARE_BRACKET = 91;\nvar CHAR_RIGHT_SQUARE_BRACKET = 93;\nvar CHAR_GRAVE_ACCENT = 96;\nvar CHAR_LEFT_CURLY_BRACKET = 123;\nvar CHAR_VERTICAL_LINE = 124;\nvar CHAR_RIGHT_CURLY_BRACKET = 125;\nvar ESCAPE_SEQUENCES = {};\nESCAPE_SEQUENCES[0] = \"\\\\0\";\nESCAPE_SEQUENCES[7] = \"\\\\a\";\nESCAPE_SEQUENCES[8] = \"\\\\b\";\nESCAPE_SEQUENCES[9] = \"\\\\t\";\nESCAPE_SEQUENCES[10] = \"\\\\n\";\nESCAPE_SEQUENCES[11] = \"\\\\v\";\nESCAPE_SEQUENCES[12] = \"\\\\f\";\nESCAPE_SEQUENCES[13] = \"\\\\r\";\nESCAPE_SEQUENCES[27] = \"\\\\e\";\nESCAPE_SEQUENCES[34] = '\\\\\"';\nESCAPE_SEQUENCES[92] = \"\\\\\\\\\";\nESCAPE_SEQUENCES[133] = \"\\\\N\";\nESCAPE_SEQUENCES[160] = \"\\\\_\";\nESCAPE_SEQUENCES[8232] = \"\\\\L\";\nESCAPE_SEQUENCES[8233] = \"\\\\P\";\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n \"y\",\n \"Y\",\n \"yes\",\n \"Yes\",\n \"YES\",\n \"on\",\n \"On\",\n \"ON\",\n \"n\",\n \"N\",\n \"no\",\n \"No\",\n \"NO\",\n \"off\",\n \"Off\",\n \"OFF\"\n];\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\nfunction compileStyleMap(schema2, map2) {\n var result, keys, index, length, tag, style, type2;\n if (map2 === null) return {};\n result = {};\n keys = Object.keys(map2);\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map2[tag]);\n if (tag.slice(0, 2) === \"!!\") {\n tag = \"tag:yaml.org,2002:\" + tag.slice(2);\n }\n type2 = schema2.compiledTypeMap[\"fallback\"][tag];\n if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) {\n style = type2.styleAliases[style];\n }\n result[tag] = style;\n }\n return result;\n}\n__name(compileStyleMap, \"compileStyleMap\");\nfunction encodeHex(character) {\n var string, handle, length;\n string = character.toString(16).toUpperCase();\n if (character <= 255) {\n handle = \"x\";\n length = 2;\n } else if (character <= 65535) {\n handle = \"u\";\n length = 4;\n } else if (character <= 4294967295) {\n handle = \"U\";\n length = 8;\n } else {\n throw new exception(\"code point within a string may not be greater than 0xFFFFFFFF\");\n }\n return \"\\\\\" + handle + common.repeat(\"0\", length - string.length) + string;\n}\n__name(encodeHex, \"encodeHex\");\nvar QUOTING_TYPE_SINGLE = 1;\nvar QUOTING_TYPE_DOUBLE = 2;\nfunction State(options) {\n this.schema = options[\"schema\"] || _default;\n this.indent = Math.max(1, options[\"indent\"] || 2);\n this.noArrayIndent = options[\"noArrayIndent\"] || false;\n this.skipInvalid = options[\"skipInvalid\"] || false;\n this.flowLevel = common.isNothing(options[\"flowLevel\"]) ? -1 : options[\"flowLevel\"];\n this.styleMap = compileStyleMap(this.schema, options[\"styles\"] || null);\n this.sortKeys = options[\"sortKeys\"] || false;\n this.lineWidth = options[\"lineWidth\"] || 80;\n this.noRefs = options[\"noRefs\"] || false;\n this.noCompatMode = options[\"noCompatMode\"] || false;\n this.condenseFlow = options[\"condenseFlow\"] || false;\n this.quotingType = options[\"quotingType\"] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options[\"forceQuotes\"] || false;\n this.replacer = typeof options[\"replacer\"] === \"function\" ? options[\"replacer\"] : null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n this.tag = null;\n this.result = \"\";\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n__name(State, \"State\");\nfunction indentString(string, spaces) {\n var ind = common.repeat(\" \", spaces), position = 0, next = -1, result = \"\", line, length = string.length;\n while (position < length) {\n next = string.indexOf(\"\\n\", position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n if (line.length && line !== \"\\n\") result += ind;\n result += line;\n }\n return result;\n}\n__name(indentString, \"indentString\");\nfunction generateNextLine(state, level) {\n return \"\\n\" + common.repeat(\" \", state.indent * level);\n}\n__name(generateNextLine, \"generateNextLine\");\nfunction testImplicitResolving(state, str2) {\n var index, length, type2;\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type2 = state.implicitTypes[index];\n if (type2.resolve(str2)) {\n return true;\n }\n }\n return false;\n}\n__name(testImplicitResolving, \"testImplicitResolving\");\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n__name(isWhitespace, \"isWhitespace\");\nfunction isPrintable(c) {\n return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111;\n}\n__name(isPrintable, \"isPrintable\");\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;\n}\n__name(isNsCharOrWhitespace, \"isNsCharOrWhitespace\");\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n (inblock ? (\n // c = flow-in\n cIsNsCharOrWhitespace\n ) : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar\n );\n}\n__name(isPlainSafe, \"isPlainSafe\");\nfunction isPlainSafeFirst(c) {\n return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;\n}\n__name(isPlainSafeFirst, \"isPlainSafeFirst\");\nfunction isPlainSafeLast(c) {\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n__name(isPlainSafeLast, \"isPlainSafeLast\");\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 55296 && first <= 56319 && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 56320 && second <= 57343) {\n return (first - 55296) * 1024 + second - 56320 + 65536;\n }\n }\n return first;\n}\n__name(codePointAt, \"codePointAt\");\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n__name(needIndentIndicator, \"needIndentIndicator\");\nvar STYLE_PLAIN = 1;\nvar STYLE_SINGLE = 2;\nvar STYLE_LITERAL = 3;\nvar STYLE_FOLDED = 4;\nvar STYLE_DOUBLE = 5;\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false;\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1;\n var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));\n if (singleLineOnly || forceQuotes) {\n for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.\n i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \");\n }\n if (!hasLineBreak && !hasFoldableLine) {\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n__name(chooseScalarStyle, \"chooseScalarStyle\");\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function() {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"' + string + '\"' : \"'\" + string + \"'\";\n }\n }\n var indent = state.indent * Math.max(1, level);\n var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;\n function testAmbiguity(string2) {\n return testImplicitResolving(state, string2);\n }\n __name(testAmbiguity, \"testAmbiguity\");\n switch (chooseScalarStyle(\n string,\n singleLineOnly,\n state.indent,\n lineWidth,\n testAmbiguity,\n state.quotingType,\n state.forceQuotes && !iskey,\n inblock\n )) {\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return \"|\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return \">\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception(\"impossible error: invalid scalar style\");\n }\n })();\n}\n__name(writeScalar, \"writeScalar\");\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : \"\";\n var clip = string[string.length - 1] === \"\\n\";\n var keep = clip && (string[string.length - 2] === \"\\n\" || string === \"\\n\");\n var chomp = keep ? \"+\" : clip ? \"\" : \"-\";\n return indentIndicator + chomp + \"\\n\";\n}\n__name(blockHeader, \"blockHeader\");\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === \"\\n\" ? string.slice(0, -1) : string;\n}\n__name(dropEndingNewline, \"dropEndingNewline\");\nfunction foldString(string, width) {\n var lineRe = /(\\n+)([^\\n]*)/g;\n var result = (function() {\n var nextLF = string.indexOf(\"\\n\");\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n })();\n var prevMoreIndented = string[0] === \"\\n\" || string[0] === \" \";\n var moreIndented;\n var match;\n while (match = lineRe.exec(string)) {\n var prefix = match[1], line = match[2];\n moreIndented = line[0] === \" \";\n result += prefix + (!prevMoreIndented && !moreIndented && line !== \"\" ? \"\\n\" : \"\") + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n return result;\n}\n__name(foldString, \"foldString\");\nfunction foldLine(line, width) {\n if (line === \"\" || line[0] === \" \") return line;\n var breakRe = / [^ ]/g;\n var match;\n var start = 0, end, curr = 0, next = 0;\n var result = \"\";\n while (match = breakRe.exec(line)) {\n next = match.index;\n if (next - start > width) {\n end = curr > start ? curr : next;\n result += \"\\n\" + line.slice(start, end);\n start = end + 1;\n }\n curr = next;\n }\n result += \"\\n\";\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + \"\\n\" + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n return result.slice(1);\n}\n__name(foldLine, \"foldLine\");\nfunction escapeString(string) {\n var result = \"\";\n var char = 0;\n var escapeSeq;\n for (var i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 65536) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n return result;\n}\n__name(escapeString, \"escapeString\");\nfunction writeFlowSequence(state, level, object) {\n var _result = \"\", _tag = state.tag, index, length, value;\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n if (writeNode(state, level, value, false, false) || typeof value === \"undefined\" && writeNode(state, level, null, false, false)) {\n if (_result !== \"\") _result += \",\" + (!state.condenseFlow ? \" \" : \"\");\n _result += state.dump;\n }\n }\n state.tag = _tag;\n state.dump = \"[\" + _result + \"]\";\n}\n__name(writeFlowSequence, \"writeFlowSequence\");\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = \"\", _tag = state.tag, index, length, value;\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === \"undefined\" && writeNode(state, level + 1, null, true, true, false, true)) {\n if (!compact || _result !== \"\") {\n _result += generateNextLine(state, level);\n }\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += \"-\";\n } else {\n _result += \"- \";\n }\n _result += state.dump;\n }\n }\n state.tag = _tag;\n state.dump = _result || \"[]\";\n}\n__name(writeBlockSequence, \"writeBlockSequence\");\nfunction writeFlowMapping(state, level, object) {\n var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = \"\";\n if (_result !== \"\") pairBuffer += \", \";\n if (state.condenseFlow) pairBuffer += '\"';\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n if (!writeNode(state, level, objectKey, false, false)) {\n continue;\n }\n if (state.dump.length > 1024) pairBuffer += \"? \";\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : \"\") + \":\" + (state.condenseFlow ? \"\" : \" \");\n if (!writeNode(state, level, objectValue, false, false)) {\n continue;\n }\n pairBuffer += state.dump;\n _result += pairBuffer;\n }\n state.tag = _tag;\n state.dump = \"{\" + _result + \"}\";\n}\n__name(writeFlowMapping, \"writeFlowMapping\");\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;\n if (state.sortKeys === true) {\n objectKeyList.sort();\n } else if (typeof state.sortKeys === \"function\") {\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n throw new exception(\"sortKeys must be a boolean or a function\");\n }\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = \"\";\n if (!compact || _result !== \"\") {\n pairBuffer += generateNextLine(state, level);\n }\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue;\n }\n explicitPair = state.tag !== null && state.tag !== \"?\" || state.dump && state.dump.length > 1024;\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += \"?\";\n } else {\n pairBuffer += \"? \";\n }\n }\n pairBuffer += state.dump;\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue;\n }\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += \":\";\n } else {\n pairBuffer += \": \";\n }\n pairBuffer += state.dump;\n _result += pairBuffer;\n }\n state.tag = _tag;\n state.dump = _result || \"{}\";\n}\n__name(writeBlockMapping, \"writeBlockMapping\");\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type2, style;\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type2 = typeList[index];\n if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === \"object\" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) {\n if (explicit) {\n if (type2.multi && type2.representName) {\n state.tag = type2.representName(object);\n } else {\n state.tag = type2.tag;\n }\n } else {\n state.tag = \"?\";\n }\n if (type2.represent) {\n style = state.styleMap[type2.tag] || type2.defaultStyle;\n if (_toString.call(type2.represent) === \"[object Function]\") {\n _result = type2.represent(object, style);\n } else if (_hasOwnProperty.call(type2.represent, style)) {\n _result = type2.represent[style](object, style);\n } else {\n throw new exception(\"!<\" + type2.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n state.dump = _result;\n }\n return true;\n }\n }\n return false;\n}\n__name(detectType, \"detectType\");\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n var type2 = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n if (block) {\n block = state.flowLevel < 0 || state.flowLevel > level;\n }\n var objectOrArray = type2 === \"[object Object]\" || type2 === \"[object Array]\", duplicateIndex, duplicate;\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n if (state.tag !== null && state.tag !== \"?\" || duplicate || state.indent !== 2 && level > 0) {\n compact = false;\n }\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = \"*ref_\" + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type2 === \"[object Object]\") {\n if (block && Object.keys(state.dump).length !== 0) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n }\n }\n } else if (type2 === \"[object Array]\") {\n if (block && state.dump.length !== 0) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n }\n }\n } else if (type2 === \"[object String]\") {\n if (state.tag !== \"?\") {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type2 === \"[object Undefined]\") {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception(\"unacceptable kind of an object to dump \" + type2);\n }\n if (state.tag !== null && state.tag !== \"?\") {\n tagStr = encodeURI(\n state.tag[0] === \"!\" ? state.tag.slice(1) : state.tag\n ).replace(/!/g, \"%21\");\n if (state.tag[0] === \"!\") {\n tagStr = \"!\" + tagStr;\n } else if (tagStr.slice(0, 18) === \"tag:yaml.org,2002:\") {\n tagStr = \"!!\" + tagStr.slice(18);\n } else {\n tagStr = \"!<\" + tagStr + \">\";\n }\n state.dump = tagStr + \" \" + state.dump;\n }\n }\n return true;\n}\n__name(writeNode, \"writeNode\");\nfunction getDuplicateReferences(object, state) {\n var objects = [], duplicatesIndexes = [], index, length;\n inspectNode(object, objects, duplicatesIndexes);\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n__name(getDuplicateReferences, \"getDuplicateReferences\");\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList, index, length;\n if (object !== null && typeof object === \"object\") {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n__name(inspectNode, \"inspectNode\");\nfunction dump$1(input, options) {\n options = options || {};\n var state = new State(options);\n if (!state.noRefs) getDuplicateReferences(input, state);\n var value = input;\n if (state.replacer) {\n value = state.replacer.call({ \"\": value }, \"\", value);\n }\n if (writeNode(state, 0, value, true, true)) return state.dump + \"\\n\";\n return \"\";\n}\n__name(dump$1, \"dump$1\");\nvar dump_1 = dump$1;\nvar dumper = {\n dump: dump_1\n};\nfunction renamed(from, to) {\n return function() {\n throw new Error(\"Function yaml.\" + from + \" is removed in js-yaml 4. Use yaml.\" + to + \" instead, which is now safe by default.\");\n };\n}\n__name(renamed, \"renamed\");\nvar JSON_SCHEMA = json;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar safeLoad = renamed(\"safeLoad\", \"load\");\nvar safeLoadAll = renamed(\"safeLoadAll\", \"loadAll\");\nvar safeDump = renamed(\"safeDump\", \"dump\");\n\nexport {\n JSON_SCHEMA,\n load\n};\n/*! Bundled license information:\n\njs-yaml/dist/js-yaml.mjs:\n (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)\n*/\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/lineWithOffset.ts\nvar markerOffsets = {\n aggregation: 17.25,\n extension: 17.25,\n composition: 17.25,\n dependency: 6,\n lollipop: 13.5,\n arrow_point: 4\n //arrow_cross: 24,\n};\nvar markerOffsets2 = {\n arrow_point: 9,\n arrow_cross: 12.5,\n arrow_circle: 12.5\n};\nfunction calculateDeltaAndAngle(point1, point2) {\n if (point1 === void 0 || point2 === void 0) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n point1 = pointTransformer(point1);\n point2 = pointTransformer(point2);\n const [x1, y1] = [point1.x, point1.y];\n const [x2, y2] = [point2.x, point2.y];\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY };\n}\n__name(calculateDeltaAndAngle, \"calculateDeltaAndAngle\");\nvar pointTransformer = /* @__PURE__ */ __name((data) => {\n if (Array.isArray(data)) {\n return { x: data[0], y: data[1] };\n }\n return data;\n}, \"pointTransformer\");\nvar getLineFunctionsWithOffset = /* @__PURE__ */ __name((edge) => {\n return {\n x: /* @__PURE__ */ __name(function(d, i, data) {\n let offset = 0;\n const DIRECTION = pointTransformer(data[0]).x < pointTransformer(data[data.length - 1]).x ? \"left\" : \"right\";\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaX } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n }\n const differenceToEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceInYEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceToStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const differenceInYStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];\n const extraRoom = 1;\n if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInYEnd < endMarkerHeight) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === \"right\" ? -1 : 1;\n offset -= adjustment;\n }\n if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInYStart < startMarkerHeight) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === \"right\" ? -1 : 1;\n offset += adjustment;\n }\n return pointTransformer(d).x + offset;\n }, \"x\"),\n y: /* @__PURE__ */ __name(function(d, i, data) {\n let offset = 0;\n const DIRECTION = pointTransformer(data[0]).y < pointTransformer(data[data.length - 1]).y ? \"down\" : \"up\";\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaY } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n }\n const differenceToEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceInXEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceToStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const differenceInXStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];\n const extraRoom = 1;\n if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInXEnd < endMarkerHeight) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === \"up\" ? -1 : 1;\n offset -= adjustment;\n }\n if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInXStart < startMarkerHeight) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === \"up\" ? -1 : 1;\n offset += adjustment;\n }\n return pointTransformer(d).y + offset;\n }, \"y\")\n };\n}, \"getLineFunctionsWithOffset\");\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"calculateDeltaAndAngle\", () => {\n it(\"should calculate the angle and deltas between two points\", () => {\n expect(calculateDeltaAndAngle([0, 0], [0, 1])).toStrictEqual({\n angle: 1.5707963267948966,\n deltaX: 0,\n deltaY: 1\n });\n expect(calculateDeltaAndAngle([1, 0], [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, { x: 1, y: 0 })).toStrictEqual({\n angle: NaN,\n deltaX: 0,\n deltaY: 0\n });\n });\n it(\"should calculate the angle and deltas if one point in undefined\", () => {\n expect(calculateDeltaAndAngle(void 0, [0, 1])).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0\n });\n expect(calculateDeltaAndAngle([0, 1], void 0)).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0\n });\n });\n });\n}\n\nexport {\n markerOffsets,\n markerOffsets2,\n getLineFunctionsWithOffset\n};\n","import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils/subGraphTitleMargins.ts\nvar getSubGraphTitleMargins = /* @__PURE__ */ __name(({\n flowchart\n}) => {\n const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;\n const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;\n const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;\n return {\n subGraphTitleTopMargin,\n subGraphTitleBottomMargin,\n subGraphTitleTotalMargin\n };\n}, \"getSubGraphTitleMargins\");\n\nexport {\n getSubGraphTitleMargins\n};\n","import {\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts\nvar solidStateFill = /* @__PURE__ */ __name((color) => {\n const { handDrawnSeed } = getConfig();\n return {\n fill: color,\n hachureAngle: 120,\n // angle of hachure,\n hachureGap: 4,\n fillWeight: 2,\n roughness: 0.7,\n stroke: color,\n seed: handDrawnSeed\n };\n}, \"solidStateFill\");\nvar compileStyles = /* @__PURE__ */ __name((node) => {\n const stylesMap = styles2Map([\n ...node.cssCompiledStyles || [],\n ...node.cssStyles || [],\n ...node.labelStyle || []\n ]);\n return { stylesMap, stylesArray: [...stylesMap] };\n}, \"compileStyles\");\nvar styles2Map = /* @__PURE__ */ __name((styles) => {\n const styleMap = /* @__PURE__ */ new Map();\n styles.forEach((style) => {\n const [key, value] = style.split(\":\");\n styleMap.set(key.trim(), value?.trim());\n });\n return styleMap;\n}, \"styles2Map\");\nvar isLabelStyle = /* @__PURE__ */ __name((key) => {\n return key === \"color\" || key === \"font-size\" || key === \"font-family\" || key === \"font-weight\" || key === \"font-style\" || key === \"text-decoration\" || key === \"text-align\" || key === \"text-transform\" || key === \"line-height\" || key === \"letter-spacing\" || key === \"word-spacing\" || key === \"text-shadow\" || key === \"text-overflow\" || key === \"white-space\" || key === \"word-wrap\" || key === \"word-break\" || key === \"overflow-wrap\" || key === \"hyphens\";\n}, \"isLabelStyle\");\nvar styles2String = /* @__PURE__ */ __name((node) => {\n const { stylesArray } = compileStyles(node);\n const labelStyles = [];\n const nodeStyles = [];\n const borderStyles = [];\n const backgroundStyles = [];\n stylesArray.forEach((style) => {\n const key = style[0];\n if (isLabelStyle(key)) {\n labelStyles.push(style.join(\":\") + \" !important\");\n } else {\n nodeStyles.push(style.join(\":\") + \" !important\");\n if (key.includes(\"stroke\")) {\n borderStyles.push(style.join(\":\") + \" !important\");\n }\n if (key === \"fill\") {\n backgroundStyles.push(style.join(\":\") + \" !important\");\n }\n }\n });\n return {\n labelStyles: labelStyles.join(\";\"),\n nodeStyles: nodeStyles.join(\";\"),\n stylesArray,\n borderStyles,\n backgroundStyles\n };\n}, \"styles2String\");\nvar userNodeOverrides = /* @__PURE__ */ __name((node, options) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const result = Object.assign(\n {\n roughness: 0.7,\n fill: stylesMap.get(\"fill\") || mainBkg,\n fillStyle: \"hachure\",\n // solid fill\n fillWeight: 4,\n hachureGap: 5.2,\n stroke: stylesMap.get(\"stroke\") || nodeBorder,\n seed: handDrawnSeed,\n strokeWidth: stylesMap.get(\"stroke-width\")?.replace(\"px\", \"\") || 1.3,\n fillLineDash: [0, 0],\n strokeLineDash: getStrokeDashArray(stylesMap.get(\"stroke-dasharray\"))\n },\n options\n );\n return result;\n}, \"userNodeOverrides\");\nvar getStrokeDashArray = /* @__PURE__ */ __name((strokeDasharrayStyle) => {\n if (!strokeDasharrayStyle) {\n return [0, 0];\n }\n const dashArray = strokeDasharrayStyle.trim().split(/\\s+/).map(Number);\n if (dashArray.length === 1) {\n const val = isNaN(dashArray[0]) ? 0 : dashArray[0];\n return [val, val];\n }\n const first = isNaN(dashArray[0]) ? 0 : dashArray[0];\n const second = isNaN(dashArray[1]) ? 0 : dashArray[1];\n return [first, second];\n}, \"getStrokeDashArray\");\n\nexport {\n solidStateFill,\n compileStyles,\n isLabelStyle,\n styles2String,\n userNodeOverrides\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLANK_URL = exports.relativeFirstCharacters = exports.whitespaceEscapeCharsRegex = exports.urlSchemeRegex = exports.ctrlCharactersRegex = exports.htmlCtrlEntityRegex = exports.htmlEntitiesRegex = exports.invalidProtocolRegex = void 0;\nexports.invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nexports.htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nexports.htmlCtrlEntityRegex = /&(newline|tab);/gi;\nexports.ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nexports.urlSchemeRegex = /^.+(:|:)/gim;\nexports.whitespaceEscapeCharsRegex = /(\\\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;\nexports.relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = void 0;\nvar constants_1 = require(\"./constants\");\nfunction isRelativeUrlWithoutProtocol(url) {\n return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;\n}\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, \"\");\n return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction isValidUrl(url) {\n return URL.canParse(url);\n}\nfunction decodeURI(uri) {\n try {\n return decodeURIComponent(uri);\n }\n catch (e) {\n // Ignoring error\n // It is possible that the URI contains a `%` not associated\n // with URI/URL-encoding.\n return uri;\n }\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return constants_1.BLANK_URL;\n }\n var charsToDecode;\n var decodedUrl = decodeURI(url.trim());\n do {\n decodedUrl = decodeHtmlCharacters(decodedUrl)\n .replace(constants_1.htmlCtrlEntityRegex, \"\")\n .replace(constants_1.ctrlCharactersRegex, \"\")\n .replace(constants_1.whitespaceEscapeCharsRegex, \"\")\n .trim();\n decodedUrl = decodeURI(decodedUrl);\n charsToDecode =\n decodedUrl.match(constants_1.ctrlCharactersRegex) ||\n decodedUrl.match(constants_1.htmlEntitiesRegex) ||\n decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||\n decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);\n } while (charsToDecode && charsToDecode.length > 0);\n var sanitizedUrl = decodedUrl;\n if (!sanitizedUrl) {\n return constants_1.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n // Remove any leading whitespace before checking the URL scheme\n var trimmedUrl = sanitizedUrl.trimStart();\n var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();\n if (constants_1.invalidProtocolRegex.test(urlScheme)) {\n return constants_1.BLANK_URL;\n }\n var backSanitized = trimmedUrl.replace(/\\\\/g, \"/\");\n // Handle special cases for mailto: and custom deep-link protocols\n if (urlScheme === \"mailto:\" || urlScheme.includes(\"://\")) {\n return backSanitized;\n }\n // For http and https URLs, perform additional validation\n if (urlScheme === \"http:\" || urlScheme === \"https:\") {\n if (!isValidUrl(backSanitized)) {\n return constants_1.BLANK_URL;\n }\n var url_1 = new URL(backSanitized);\n url_1.protocol = url_1.protocol.toLowerCase();\n url_1.hostname = url_1.hostname.toLowerCase();\n return url_1.toString();\n }\n return backSanitized;\n}\nexports.sanitizeUrl = sanitizeUrl;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import {\n assignWithDepth_default,\n common_default,\n detectType,\n directiveRegex,\n sanitizeDirective\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/utils.ts\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n select\n} from \"d3\";\nimport memoize from \"lodash-es/memoize.js\";\nimport merge from \"lodash-es/merge.js\";\nvar ZERO_WIDTH_SPACE = \"\\u200B\";\nvar d3CurveTypes = {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n};\nvar directiveWithoutOpen = /\\s*(?:(\\w+)(?=:):|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nvar detectInit = /* @__PURE__ */ __name(function(text, config) {\n const inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n let results = {};\n if (Array.isArray(inits)) {\n const args = inits.map((init) => init.args);\n sanitizeDirective(args);\n results = assignWithDepth_default(results, [...args]);\n } else {\n results = inits.args;\n }\n if (!results) {\n return;\n }\n let type = detectType(text, config);\n const prop = \"config\";\n if (results[prop] !== void 0) {\n if (type === \"flowchart-v2\") {\n type = \"flowchart\";\n }\n results[type] = results[prop];\n delete results[prop];\n }\n return results;\n}, \"detectInit\");\nvar detectDirective = /* @__PURE__ */ __name(function(text, type = null) {\n try {\n const commentWithoutDirectives = new RegExp(\n `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\n`,\n \"ig\"\n );\n text = text.trim().replace(commentWithoutDirectives, \"\").replace(/'/gm, '\"');\n log.debug(\n `Detecting diagram directive${type !== null ? \" type:\" + type : \"\"} based on the text:${text}`\n );\n let match;\n const result = [];\n while ((match = directiveRegex.exec(text)) !== null) {\n if (match.index === directiveRegex.lastIndex) {\n directiveRegex.lastIndex++;\n }\n if (match && !type || type && match[1]?.match(type) || type && match[2]?.match(type)) {\n const type2 = match[1] ? match[1] : match[2];\n const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({ type: type2, args });\n }\n }\n if (result.length === 0) {\n return { type: text, args: null };\n }\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n log.error(\n `ERROR: ${error.message} - Unable to parse directive type: '${type}' based on the text: '${text}'`\n );\n return { type: void 0, args: null };\n }\n}, \"detectDirective\");\nvar removeDirectives = /* @__PURE__ */ __name(function(text) {\n return text.replace(directiveRegex, \"\");\n}, \"removeDirectives\");\nvar isSubstringInArray = /* @__PURE__ */ __name(function(str, arr) {\n for (const [i, element] of arr.entries()) {\n if (element.match(str)) {\n return i;\n }\n }\n return -1;\n}, \"isSubstringInArray\");\nfunction interpolateToCurve(interpolate, defaultCurve) {\n if (!interpolate) {\n return defaultCurve;\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n return d3CurveTypes[curveName] ?? defaultCurve;\n}\n__name(interpolateToCurve, \"interpolateToCurve\");\nfunction formatUrl(linkStr, config) {\n const url = linkStr.trim();\n if (!url) {\n return void 0;\n }\n if (config.securityLevel !== \"loose\") {\n return sanitizeUrl(url);\n }\n return url;\n}\n__name(formatUrl, \"formatUrl\");\nvar runFunc = /* @__PURE__ */ __name((functionName, ...params) => {\n const arrPaths = functionName.split(\".\");\n const len = arrPaths.length - 1;\n const fnName = arrPaths[len];\n let obj = window;\n for (let i = 0; i < len; i++) {\n obj = obj[arrPaths[i]];\n if (!obj) {\n log.error(`Function name: ${functionName} not found in window`);\n return;\n }\n }\n obj[fnName](...params);\n}, \"runFunc\");\nfunction distance(p1, p2) {\n if (!p1 || !p2) {\n return 0;\n }\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n__name(distance, \"distance\");\nfunction traverseEdge(points) {\n let prevPoint;\n let totalDistance = 0;\n points.forEach((point) => {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n });\n const remainingDistance = totalDistance / 2;\n return calculatePoint(points, remainingDistance);\n}\n__name(traverseEdge, \"traverseEdge\");\nfunction calcLabelPosition(points) {\n if (points.length === 1) {\n return points[0];\n }\n return traverseEdge(points);\n}\n__name(calcLabelPosition, \"calcLabelPosition\");\nvar roundNumber = /* @__PURE__ */ __name((num, precision = 2) => {\n const factor = Math.pow(10, precision);\n return Math.round(num * factor) / factor;\n}, \"roundNumber\");\nvar calculatePoint = /* @__PURE__ */ __name((points, distanceToTraverse) => {\n let prevPoint = void 0;\n let remainingDistance = distanceToTraverse;\n for (const point of points) {\n if (prevPoint) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance === 0) {\n return prevPoint;\n }\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n return prevPoint;\n }\n if (distanceRatio >= 1) {\n return { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n return {\n x: roundNumber((1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, 5),\n y: roundNumber((1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, 5)\n };\n }\n }\n }\n prevPoint = point;\n }\n throw new Error(\"Could not find a suitable point for the given distance\");\n}, \"calculatePoint\");\nvar calcCardinalityPosition = /* @__PURE__ */ __name((isRelationTypePresent, points, initialPosition) => {\n log.info(`our points ${JSON.stringify(points)}`);\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n const distanceToCardinalityPoint = 25;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = isRelationTypePresent ? 10 : 5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n}, \"calcCardinalityPosition\");\nfunction calcTerminalLabelPosition(terminalMarkerSize, position, _points) {\n const points = structuredClone(_points);\n log.info(\"our points\", points);\n if (position !== \"start_left\" && position !== \"start_right\") {\n points.reverse();\n }\n const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = 10 + terminalMarkerSize * 0.5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n if (position === \"start_left\") {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n } else if (position === \"end_right\") {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n } else if (position === \"end_left\") {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n } else {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n }\n return cardinalityPosition;\n}\n__name(calcTerminalLabelPosition, \"calcTerminalLabelPosition\");\nfunction getStylesFromArray(arr) {\n let style = \"\";\n let labelStyle = \"\";\n for (const element of arr) {\n if (element !== void 0) {\n if (element.startsWith(\"color:\") || element.startsWith(\"text-align:\")) {\n labelStyle = labelStyle + element + \";\";\n } else {\n style = style + element + \";\";\n }\n }\n }\n return { style, labelStyle };\n}\n__name(getStylesFromArray, \"getStylesFromArray\");\nvar cnt = 0;\nvar generateId = /* @__PURE__ */ __name(() => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n}, \"generateId\");\nfunction makeRandomHex(length) {\n let result = \"\";\n const characters = \"0123456789abcdef\";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n__name(makeRandomHex, \"makeRandomHex\");\nvar random = /* @__PURE__ */ __name((options) => {\n return makeRandomHex(options.length);\n}, \"random\");\nvar getTextObj = /* @__PURE__ */ __name(function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n anchor: \"start\",\n style: \"#666\",\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: void 0,\n text: \"\"\n };\n}, \"getTextObj\");\nvar drawSimpleText = /* @__PURE__ */ __name(function(elem, textData) {\n const nText = textData.text.replace(common_default.lineBreakRegex, \" \");\n const [, _fontSizePx] = parseFontSize(textData.fontSize);\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.style(\"text-anchor\", textData.anchor);\n textElem.style(\"font-family\", textData.fontFamily);\n textElem.style(\"font-size\", _fontSizePx);\n textElem.style(\"font-weight\", textData.fontWeight);\n textElem.attr(\"fill\", textData.fill);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.attr(\"fill\", textData.fill);\n span.text(nText);\n return textElem;\n}, \"drawSimpleText\");\nvar wrapLabel = memoize(\n (label, maxWidth, config) => {\n if (!label) {\n return label;\n }\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", joinWith: \"
    \" },\n config\n );\n if (common_default.lineBreakRegex.test(label)) {\n return label;\n }\n const words = label.split(\" \").filter(Boolean);\n const completedLines = [];\n let nextLine = \"\";\n words.forEach((word, index) => {\n const wordLength = calculateTextWidth(`${word} `, config);\n const nextLineLength = calculateTextWidth(nextLine, config);\n if (wordLength > maxWidth) {\n const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, \"-\", config);\n completedLines.push(nextLine, ...hyphenatedStrings);\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(\" \");\n }\n const currentWord = index + 1;\n const isLastWord = currentWord === words.length;\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter((line) => line !== \"\").join(config.joinWith);\n },\n (label, maxWidth, config) => `${label}${maxWidth}${config.fontSize}${config.fontWeight}${config.fontFamily}${config.joinWith}`\n);\nvar breakString = memoize(\n (word, maxWidth, hyphenCharacter = \"-\", config) => {\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", margin: 0 },\n config\n );\n const characters = [...word];\n const lines = [];\n let currentLine = \"\";\n characters.forEach((character, index) => {\n const nextLine = `${currentLine}${character}`;\n const lineWidth = calculateTextWidth(nextLine, config);\n if (lineWidth >= maxWidth) {\n const currentCharacter = index + 1;\n const isLastLine = characters.length === currentCharacter;\n const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = \"\";\n } else {\n currentLine = nextLine;\n }\n });\n return { hyphenatedStrings: lines, remainingWord: currentLine };\n },\n (word, maxWidth, hyphenCharacter = \"-\", config) => `${word}${maxWidth}${hyphenCharacter}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\nfunction calculateTextHeight(text, config) {\n return calculateTextDimensions(text, config).height;\n}\n__name(calculateTextHeight, \"calculateTextHeight\");\nfunction calculateTextWidth(text, config) {\n return calculateTextDimensions(text, config).width;\n}\n__name(calculateTextWidth, \"calculateTextWidth\");\nvar calculateTextDimensions = memoize(\n (text, config) => {\n const { fontSize = 12, fontFamily = \"Arial\", fontWeight = 400 } = config;\n if (!text) {\n return { width: 0, height: 0 };\n }\n const [, _fontSizePx] = parseFontSize(fontSize);\n const fontFamilies = [\"sans-serif\", fontFamily];\n const lines = text.split(common_default.lineBreakRegex);\n const dims = [];\n const body = select(\"body\");\n if (!body.remove) {\n return { width: 0, height: 0, lineHeight: 0 };\n }\n const g = body.append(\"svg\");\n for (const fontFamily2 of fontFamilies) {\n let cHeight = 0;\n const dim = { width: 0, height: 0, lineHeight: 0 };\n for (const line of lines) {\n const textObj = getTextObj();\n textObj.text = line || ZERO_WIDTH_SPACE;\n const textElem = drawSimpleText(g, textObj).style(\"font-size\", _fontSizePx).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily2);\n const bBox = (textElem._groups || textElem)[0][0].getBBox();\n if (bBox.width === 0 && bBox.height === 0) {\n throw new Error(\"svg element not in render tree\");\n }\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cHeight = Math.round(bBox.height);\n dim.height += cHeight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cHeight));\n }\n dims.push(dim);\n }\n g.remove();\n const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;\n return dims[index];\n },\n (text, config) => `${text}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\nvar InitIDGenerator = class {\n constructor(deterministic = false, seed) {\n this.count = 0;\n this.count = seed ? seed.length : 0;\n this.next = deterministic ? () => this.count++ : () => Date.now();\n }\n static {\n __name(this, \"InitIDGenerator\");\n }\n};\nvar decoder;\nvar entityDecode = /* @__PURE__ */ __name(function(html) {\n decoder = decoder || document.createElement(\"div\");\n html = escape(html).replace(/%26/g, \"&\").replace(/%23/g, \"#\").replace(/%3B/g, \";\");\n decoder.innerHTML = html;\n return unescape(decoder.textContent);\n}, \"entityDecode\");\nfunction isDetailedError(error) {\n return \"str\" in error;\n}\n__name(isDetailedError, \"isDetailedError\");\nvar insertTitle = /* @__PURE__ */ __name((parent, cssClass, titleTopMargin, title) => {\n if (!title) {\n return;\n }\n const bounds = parent.node()?.getBBox();\n if (!bounds) {\n return;\n }\n parent.append(\"text\").text(title).attr(\"text-anchor\", \"middle\").attr(\"x\", bounds.x + bounds.width / 2).attr(\"y\", -titleTopMargin).attr(\"class\", cssClass);\n}, \"insertTitle\");\nvar parseFontSize = /* @__PURE__ */ __name((fontSize) => {\n if (typeof fontSize === \"number\") {\n return [fontSize, fontSize + \"px\"];\n }\n const fontSizeNumber = parseInt(fontSize ?? \"\", 10);\n if (Number.isNaN(fontSizeNumber)) {\n return [void 0, void 0];\n } else if (fontSize === String(fontSizeNumber)) {\n return [fontSizeNumber, fontSize + \"px\"];\n } else {\n return [fontSizeNumber, fontSize];\n }\n}, \"parseFontSize\");\nfunction cleanAndMerge(defaultData, data) {\n return merge({}, defaultData, data);\n}\n__name(cleanAndMerge, \"cleanAndMerge\");\nvar utils_default = {\n assignWithDepth: assignWithDepth_default,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n calculateTextDimensions,\n cleanAndMerge,\n detectInit,\n detectDirective,\n isSubstringInArray,\n interpolateToCurve,\n calcLabelPosition,\n calcCardinalityPosition,\n calcTerminalLabelPosition,\n formatUrl,\n getStylesFromArray,\n generateId,\n random,\n runFunc,\n entityDecode,\n insertTitle,\n isLabelCoordinateInPath,\n parseFontSize,\n InitIDGenerator\n};\nvar encodeEntities = /* @__PURE__ */ __name(function(text) {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, function(s) {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return \"\\uFB02\\xB0\\xB0\" + innerTxt + \"\\xB6\\xDF\";\n } else {\n return \"\\uFB02\\xB0\" + innerTxt + \"\\xB6\\xDF\";\n }\n });\n return txt;\n}, \"encodeEntities\");\nvar decodeEntities = /* @__PURE__ */ __name(function(text) {\n return text.replace(/fl°°/g, \"&#\").replace(/fl°/g, \"&\").replace(/¶ß/g, \";\");\n}, \"decodeEntities\");\nvar getEdgeId = /* @__PURE__ */ __name((from, to, {\n counter = 0,\n prefix,\n suffix\n}, id) => {\n if (id) {\n return id;\n }\n return `${prefix ? `${prefix}_` : \"\"}${from}_${to}_${counter}${suffix ? `_${suffix}` : \"\"}`;\n}, \"getEdgeId\");\nfunction handleUndefinedAttr(attrValue) {\n return attrValue ?? null;\n}\n__name(handleUndefinedAttr, \"handleUndefinedAttr\");\nfunction isLabelCoordinateInPath(point, dAttr) {\n const roundedX = Math.round(point.x);\n const roundedY = Math.round(point.y);\n const sanitizedD = dAttr.replace(\n /(\\d+\\.\\d+)/g,\n (match) => Math.round(parseFloat(match)).toString()\n );\n return sanitizedD.includes(roundedX.toString()) || sanitizedD.includes(roundedY.toString());\n}\n__name(isLabelCoordinateInPath, \"isLabelCoordinateInPath\");\n\nexport {\n ZERO_WIDTH_SPACE,\n removeDirectives,\n interpolateToCurve,\n getStylesFromArray,\n generateId,\n random,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n isDetailedError,\n parseFontSize,\n cleanAndMerge,\n utils_default,\n encodeEntities,\n decodeEntities,\n getEdgeId,\n handleUndefinedAttr\n};\n","/** Default values for dimensions */\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/** Default values for transformations */\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/** Default values for all optional IconifyIcon properties */\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/** Default values for all properties used in ExtendedIconifyIcon */\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\nexport { defaultExtendedIconProps, defaultIconDimensions, defaultIconProps, defaultIconTransformations };","import { defaultIconTransformations } from \"../icon/defaults.js\";\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\nexport { defaultIconCustomisations, defaultIconSizeCustomisations };","/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nexport { matchIconName, stringToIcon, validateIconName };","/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\nexport { mergeIconTransformations };","import { defaultExtendedIconProps, defaultIconTransformations } from \"./defaults.js\";\nimport { mergeIconTransformations } from \"./transformations.js\";\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\nexport { mergeIconData };","/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\nexport { getIconsTree };","import { mergeIconData } from \"../icon/merge.js\";\nimport { getIconsTree } from \"./tree.js\";\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n/**\n* Get data for icon\n*/\nfunction getIconData(data, name) {\n\tif (data.icons[name]) return internalGetIconData(data, name, []);\n\tconst tree = getIconsTree(data, [name])[name];\n\treturn tree ? internalGetIconData(data, name, tree) : null;\n}\n\nexport { getIconData, internalGetIconData };","/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nexport { calculateSize };","function splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"\" + defs + \"\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nexport { mergeDefsAndContent, splitSVGDefs, wrapSVGContent };","import { defaultIconProps } from \"../icon/defaults.js\";\nimport { defaultIconCustomisations } from \"../customisations/defaults.js\";\nimport { calculateSize } from \"./size.js\";\nimport { wrapSVGContent } from \"./defs.js\";\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"\", \"\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\nexport { iconToSVG, isUnsetKeyword };","/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* Counters\n*/\nconst counters = /* @__PURE__ */ new Map();\n/**\n* Get unique new ID\n*/\nfunction nextID(id) {\n\tid = id.replace(/[0-9]+$/, \"\") || \"a\";\n\tconst count = counters.get(id) || 0;\n\tcounters.set(id, count + 1);\n\treturn count ? `${id}${count}` : id;\n}\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = nextID(id);\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n/**\n* Clear ID cache\n*/\nfunction clearIDCache() {\n\tcounters.clear();\n}\n\nexport { clearIDCache, replaceIDs };","/**\n* Generate \n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"\" + body + \"\";\n}\n\nexport { iconToHTML };","/**\n * marked v16.4.2 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function G(l){T=l}var E={exec:()=>null};function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return!!new RegExp(\"(?<=1)(?/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},Re=/^(?:[ \\t]*(?:\\n|$))+/,Te=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,we=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,F=/(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),ye=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Pe=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Se=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),$e=d(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,F).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/|$))/,_e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|\\\\n*|$)|\\\\n*|$)|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Le=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:I,html:_e,lheading:oe,list:$e,newline:Re,paragraph:ae,table:E,text:Pe},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Me={...K,lheading:ye,table:re,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},ze={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ee=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\`+)[^`]+\\k(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",be?\"(?`+)[^`]+\\k(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,De=d(ce,\"u\").replace(/punct/g,D).getRegex(),He=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ze=d(he,\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=d(he,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,Be).replace(/punct/g,pe).getRegex(),Ne=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Fe=d(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),je=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ue=d(\"^comment|^|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^|^\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,Ke=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),de=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),We=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",de).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:E,anyPunctuation:Fe,autolink:je,blockSkip:ve,br:le,code:Ee,del:E,emStrongLDelim:De,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ae,link:Ke,nolink:ke,punctuation:Ce,reflink:de,reflinkSearch:We,tag:Ue,text:Ie,url:E},Xe={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\\":\">\",'\"':\""\",\"'\":\"'\"},ge=l=>Ve[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,a)=>{let o=!1,p=s;for(;--p>=0&&a[p]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function me(l,e,t,n,r){let i=e.href,s=e.title||null,a=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Ye(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ye(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],p;for(p=0;p1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let p=!1,u=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(u+=h+`\n`,e=e.substring(h.length+1),p=!0),!p){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),u+=Z+`\n`,e=e.substring(Z.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(a=!0));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(c),O&&(Y=O[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:u,task:!!O,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=u}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p=0;pg.type===\"space\"),c=u.length>0&&u.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}if(i.loose)for(let p=0;p({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[p]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,p=s,u=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){p+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){u+=o;continue}if(p-=o,p>0)continue;o=Math.min(o,o+p+u);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(u=Math.min(u,g))}),u<1/0&&u>=0&&(p=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'
    '+(n?i:w(i,!0))+`
    \n`:\"
    \"+(n?i:w(i,!0))+`
    \n`}blockquote({tokens:e}){return`
    \n${this.parser.parse(e)}
    \n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)}\n`}hr(e){return`
    \n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a\n`+r+\"\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • \n`}checkbox({checked:e}){return\"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    \n`}table(e){let t=\"\",n=\"\";for(let i=0;i${r}
    `),`
    ` and ``. Use `scope` on ``\n background: null, // ``. Use CSS `background-image` instead\n bgColor: null, // `` and table elements. Use CSS `background-color` instead\n border: number, // ``. Use CSS `border-width` instead,\n borderColor: null, // `
    `. Use CSS `border-color` instead,\n bottomMargin: number, // ``\n cellPadding: null, // `
    `\n cellSpacing: null, // `
    `\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // ``\n clear: null, // `
    `. Use CSS `clear` instead\n code: null, // ``\n codeBase: null, // ``\n codeType: null, // ``\n color: null, // `` and `
    `. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // ``\n event: null, // ` -> \n result = result.replace(\n /]*src=[\"']([^\"']+)[\"'][^>]*><\\/script>/gi,\n (match, src) => {\n const fileName = src.split('/').pop() || src;\n const jsContent = relatedFiles[fileName] || relatedFiles[src];\n if (jsContent && !jsContent.startsWith('data:')) {\n return ``;\n }\n return match; // Keep original if file not found\n }\n );\n\n // Inline images: -> \n result = result.replace(\n /]*)src=[\"']([^\"']+)[\"']([^>]*)>/gi,\n (match, before, src, after) => {\n // Skip if already a data URL or external URL\n if (src.startsWith('data:') || src.startsWith('http://') || src.startsWith('https://')) {\n return match;\n }\n const fileName = src.split('/').pop() || src;\n const imageDataUrl = relatedFiles[src] || relatedFiles[fileName] || relatedFiles[`./${src}`];\n if (imageDataUrl && imageDataUrl.startsWith('data:')) {\n return ``;\n }\n return match; // Keep original if file not found\n }\n );\n\n // Also handle CSS background-image: url() references\n result = result.replace(\n /url\\([\"']?([^\"')]+)[\"']?\\)/gi,\n (match, url) => {\n // Skip if already a data URL or external URL\n if (url.startsWith('data:') || url.startsWith('http://') || url.startsWith('https://')) {\n return match;\n }\n const fileName = url.split('/').pop() || url;\n const imageDataUrl = relatedFiles[url] || relatedFiles[fileName] || relatedFiles[`./${url}`];\n if (imageDataUrl && imageDataUrl.startsWith('data:')) {\n return `url(\"${imageDataUrl}\")`;\n }\n return match;\n }\n );\n\n return result;\n}\n\nexport function HtmlPreview({\n content,\n fileName,\n relatedFiles = {},\n sessionId,\n agentId,\n filePath,\n workspacePath,\n}: HtmlPreviewProps) {\n // Determine if we should use live preview mode (with working relative links)\n const useLivePreview = Boolean(sessionId && agentId && filePath);\n\n // Build the live preview URL\n const livePreviewUrl = useMemo(() => {\n if (!useLivePreview) return null;\n // Include workspace query param for historical workspaces\n const baseUrl = `/workspace-preview/${sessionId}/${agentId}/${filePath}`;\n if (workspacePath) {\n return `${baseUrl}?workspace=${encodeURIComponent(workspacePath)}`;\n }\n return baseUrl;\n }, [useLivePreview, sessionId, agentId, filePath, workspacePath]);\n\n // Prepare the HTML content with inlined CSS/JS (only used in srcDoc mode)\n const preparedContent = useMemo(() => {\n if (useLivePreview) return ''; // Not needed for live preview\n\n let processedContent = content;\n\n // Inline related CSS and JS files\n if (Object.keys(relatedFiles).length > 0) {\n processedContent = inlineRelatedFiles(processedContent, relatedFiles);\n }\n\n // If content already has full HTML structure, use as-is\n if (processedContent.includes('\n\n\n \n \n \n\n\n${processedContent}\n\n`;\n }, [content, relatedFiles, useLivePreview]);\n\n return (\n
    \n {/* Header */}\n
    \n \n HTML Preview\n - {fileName}\n {useLivePreview && (\n (Live - links work)\n )}\n
    \n\n {/* Preview iframe - use src for live preview, srcDoc for inline */}\n
    \n {useLivePreview ? (\n \n ) : (\n \n )}\n
    \n
    \n );\n}\n\nexport default HtmlPreview;\n","/**\n * SVG Preview Component\n *\n * Renders SVG content in a sandboxed iframe with no script execution.\n */\n\nimport { useMemo } from 'react';\nimport { Palette } from 'lucide-react';\n\ninterface SvgPreviewProps {\n content: string;\n fileName: string;\n}\n\nexport function SvgPreview({ content, fileName }: SvgPreviewProps) {\n // Wrap SVG in a minimal HTML document for proper rendering\n const htmlContent = useMemo(() => {\n return `\n\n\n\n \n \n\n\n${content}\n\n`;\n }, [content]);\n\n return (\n
    \n {/* Header */}\n
    \n \n SVG Preview\n - {fileName}\n
    \n\n {/* Preview iframe - no scripts allowed for SVG */}\n \n
    \n );\n}\n\nexport default SvgPreview;\n","/**\n * Image Preview Component\n *\n * Displays images with zoom capability.\n * Supports PNG, JPG, GIF, WebP formats.\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport { Image as ImageIcon, ZoomIn, ZoomOut, RotateCw } from 'lucide-react';\n\ninterface ImagePreviewProps {\n content: string; // Base64 encoded image data or data URL\n fileName: string;\n mimeType?: string;\n}\n\nexport function ImagePreview({ content, fileName, mimeType }: ImagePreviewProps) {\n const [zoom, setZoom] = useState(100);\n const [rotation, setRotation] = useState(0);\n const [loadError, setLoadError] = useState(null);\n\n // Create image source URL\n const imageSrc = useMemo(() => {\n if (!content) {\n if (import.meta.env.DEV) {\n console.warn('ImagePreview: No content provided');\n }\n return '';\n }\n\n // If content is already a data URL, use it directly\n if (content.startsWith('data:')) {\n return content;\n }\n\n // Validate base64 format before constructing data URL\n // Remove whitespace first\n const cleanContent = content.replace(/\\s/g, '');\n\n // Check if it looks like base64 (only contains valid chars)\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(cleanContent)) {\n console.error('ImagePreview: Content does not look like valid base64:', {\n contentLength: content.length,\n firstChars: content.substring(0, 50),\n });\n return '';\n }\n\n // Otherwise, assume it's base64 and construct data URL\n const type = mimeType || 'image/png';\n return `data:${type};base64,${cleanContent}`;\n }, [content, mimeType]);\n\n const handleImageError = () => {\n console.error('ImagePreview: Image failed to load', {\n contentLength: content?.length,\n mimeType,\n });\n setLoadError('Failed to load image');\n };\n\n const handleZoomIn = useCallback(() => {\n setZoom((prev) => Math.min(prev + 25, 300));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setZoom((prev) => Math.max(prev - 25, 25));\n }, []);\n\n const handleRotate = useCallback(() => {\n setRotation((prev) => (prev + 90) % 360);\n }, []);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Image Preview\n - {fileName}\n
    \n\n {/* Controls */}\n
    \n \n \n \n {zoom}%\n \n \n \n \n \n \n
    \n
    \n\n {/* Image container */}\n
    \n {loadError ? (\n
    \n \n

    {loadError}

    \n

    Content length: {content?.length || 0}

    \n
    \n ) : imageSrc ? (\n \n ) : (\n
    \n \n

    No image content

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default ImagePreview;\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n\n// src/defaults.ts\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = { exec: () => null };\nfunction edit(regex, opt = \"\") {\n let source = typeof regex === \"string\" ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === \"string\" ? val : val.source;\n valSource = valSource.replace(other.caret, \"$1\");\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nvar other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /|$))/;\nvar html = edit(\n \"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|\\\\n*|$)|\\\\n*|$)|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\n \"i\"\n).replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\nvar gfmTable = edit(\n \"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"\n).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n ...blockNormal,\n html: edit(\n `^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`\n ).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\n \"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\n \"gu\"\n).replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\n \"^comment|^|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^|^\"\n).replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n _backpedal: noopTest,\n // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\nvar inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n};\nvar getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n if (encode) {\n if (other.escapeTest.test(html2)) {\n return html2.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html2)) {\n return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html2;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, \"%\");\n } catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n if (escaped) {\n return \"|\";\n } else {\n return \" |\";\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push(\"\");\n }\n }\n for (; i < cells.length; i++) {\n cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n }\n return cells;\n}\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return \"\";\n }\n let suffLen = 0;\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n const href = link2.href;\n const title = link2.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n lexer2.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n raw,\n href,\n title,\n text,\n tokens: lexer2.inlineTokens(text)\n };\n lexer2.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text.split(\"\\n\").map((node) => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n options;\n rules;\n // set by the lexer\n lexer;\n // set by the lexer\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: \"space\",\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n return {\n type: \"code\",\n raw: cap[0],\n codeBlockStyle: \"indented\",\n text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n return {\n type: \"code\",\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, \"#\");\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n text = trimmed.trim();\n }\n }\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: \"hr\",\n raw: rtrim(cap[0], \"\\n\")\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n let raw = \"\";\n let text = \"\";\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join(\"\\n\");\n const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n text = text ? `${text}\n${currentText}` : currentText;\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"code\") {\n break;\n } else if (lastToken?.type === \"blockquote\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === \"list\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n continue;\n }\n }\n return {\n type: \"blockquote\",\n raw,\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list2 = {\n type: \"list\",\n raw: \"\",\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : \"\",\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : \"[*+-]\";\n }\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n while (src) {\n let endEarly = false;\n let raw = \"\";\n let itemContents = \"\";\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, (t) => \" \".repeat(3 * t.length));\n let nextLine = src.split(\"\\n\", 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar);\n indent = indent > 4 ? 1 : indent;\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n raw += nextLine + \"\\n\";\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n while (src) {\n const rawLine = src.split(\"\\n\", 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \" \");\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \" \");\n }\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n } else {\n if (blankLine) {\n break;\n }\n if (line.replace(this.rules.other.tabCharGlobal, \" \").search(this.rules.other.nonSpaceChar) >= 4) {\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += \"\\n\" + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n blankLine = true;\n }\n raw += rawLine + \"\\n\";\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list2.loose) {\n if (endsWithBlankLine) {\n list2.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== \"[ ] \";\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n }\n }\n list2.items.push({\n type: \"list_item\",\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list2.raw += raw;\n }\n const lastItem = list2.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n return;\n }\n list2.raw = list2.raw.trimEnd();\n for (let i = 0; i < list2.items.length; i++) {\n this.lexer.state.top = false;\n list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n if (!list2.loose) {\n const spacers = list2.items[i].tokens.filter((t) => t.type === \"space\");\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t) => this.rules.other.anyLine.test(t.raw));\n list2.loose = hasMultipleLineBreaks;\n }\n }\n if (list2.loose) {\n for (let i = 0; i < list2.items.length; i++) {\n list2.items[i].loose = true;\n }\n }\n return list2;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: \"html\",\n block: true,\n raw: cap[0],\n pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n return {\n type: \"def\",\n tag: tag2,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n const item = {\n type: \"table\",\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push(\"right\");\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push(\"center\");\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push(\"left\");\n } else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i]\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i]\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n return {\n type: \"paragraph\",\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: \"escape\",\n raw: cap[0],\n text: cap[1]\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: \"html\",\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n return;\n }\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n const lastParenIndex = findClosingBracket(cap[2], \"()\");\n if (lastParenIndex === -2) {\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = \"\";\n }\n }\n let href = cap[2];\n let title = \"\";\n if (this.options.pedantic) {\n const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n if (link2) {\n href = link2[1];\n title = link2[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : \"\";\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n const link2 = links[linkString.toLowerCase()];\n if (!link2) {\n const text = cap[0].charAt(0);\n return {\n type: \"text\",\n raw: text,\n text\n };\n }\n return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = \"\") {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n const nextChar = match[1] || match[2] || \"\";\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue;\n rLength = [...rDelim].length;\n if (match[3] || match[4]) {\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue;\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0) continue;\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n if (Math.min(lLength, rLength) % 2) {\n const text2 = raw.slice(1, -1);\n return {\n type: \"em\",\n raw,\n text: text2,\n tokens: this.lexer.inlineTokens(text2)\n };\n }\n const text = raw.slice(2, -2);\n return {\n type: \"strong\",\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: \"codespan\",\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: \"br\",\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: \"del\",\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[1];\n href = \"mailto:\" + text;\n } else {\n text = cap[1];\n href = text;\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[0];\n href = \"mailto:\" + text;\n } else {\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === \"www.\") {\n href = \"http://\" + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n escaped\n };\n }\n }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options2) {\n this.tokens = [];\n this.tokens.links = /* @__PURE__ */ Object.create(null);\n this.options = options2 || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, \"\\n\");\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, \" \").replace(other.spaceLine, \"\");\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== void 0) {\n lastToken.raw += \"\\n\";\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let maskedSrc = src;\n let match = null;\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = \"\";\n while (src) {\n if (!keepPrevChar) {\n prevChar = \"\";\n }\n keepPrevChar = false;\n let token;\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === \"text\" && lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== \"_\") {\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n options;\n parser;\n // set by the parser\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(token) {\n return \"\";\n }\n code({ text, lang, escaped }) {\n const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n if (!langString) {\n return \"
    \" + (escaped ? code : escape2(code, true)) + \"
    \\n\";\n }\n return '
    ' + (escaped ? code : escape2(code, true)) + \"
    \\n\";\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `
    \n${body}
    \n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `${this.parser.parseInline(tokens)}\n`;\n }\n hr(token) {\n return \"
    \\n\";\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = \"\";\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? \"ol\" : \"ul\";\n const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n return \"<\" + type + startAttr + \">\\n\" + body + \"\\n\";\n }\n listitem(item) {\n let itemBody = \"\";\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === \"paragraph\") {\n item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: \"text\",\n raw: checkbox + \" \",\n text: checkbox + \" \",\n escaped: true\n });\n }\n } else {\n itemBody += checkbox + \" \";\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `
  • ${itemBody}
  • \n`;\n }\n checkbox({ checked }) {\n return \"';\n }\n paragraph({ tokens }) {\n return `

    ${this.parser.parseInline(tokens)}

    \n`;\n }\n table(token) {\n let header = \"\";\n let cell = \"\";\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = \"\";\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = \"\";\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body) body = `
    ${body}`;\n return \"
    \\n\\n\" + header + \"\\n\" + body + \"
    \\n\";\n }\n tablerow({ text }) {\n return `
    \n\n`+t+`\n`+r+`
    \n`}tablerow({text:e}){return`\n${e}\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`\n`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${w(e,!0)}`}br(e){return\"
    \"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='\"+r+\"\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`\"${n}\"`;return\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],p=i[a];S.passThroughHooks.has(s)?i[a]=u=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,u);return p.call(i,g)})();let c=o.call(i,u);return p.call(i,c)}:i[a]=(...u)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,u);return g===!1&&(g=await p.apply(i,u)),g})();let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,u=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(u):u;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let p=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"

    An error occurred:

    \"+w(n.message+\"\",!0)+\"
    \";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(l,e){return _.parse(l,e)}k.options=k.setOptions=function(l){return _.setOptions(l),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...l){return _.use(...l),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(l,e){return _.walkTokens(l,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;var Zt=k.options,Gt=k.setOptions,Nt=k.use,Ft=k.walkTokens,jt=k.parseInline,Qt=k,Ut=b.parse,Kt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,Kt as lexer,k as marked,Zt as options,Qt as parse,jt as parseInline,Ut as parser,Gt as setOptions,Nt as use,Ft as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","export function dedent(templ) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n var strings = Array.from(typeof templ === 'string' ? [templ] : templ);\n strings[strings.length - 1] = strings[strings.length - 1].replace(/\\r?\\n([\\t ]*)$/, '');\n var indentLengths = strings.reduce(function (arr, str) {\n var matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n if (matches) {\n return arr.concat(matches.map(function (match) { var _a, _b; return (_b = (_a = match.match(/[\\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }));\n }\n return arr;\n }, []);\n if (indentLengths.length) {\n var pattern_1 = new RegExp(\"\\n[\\t ]{\" + Math.min.apply(Math, indentLengths) + \"}\", 'g');\n strings = strings.map(function (str) { return str.replace(pattern_1, '\\n'); });\n }\n strings[0] = strings[0].replace(/^\\r?\\n/, '');\n var string = strings[0];\n values.forEach(function (value, i) {\n var endentations = string.match(/(?:^|\\n)( *)$/);\n var endentation = endentations ? endentations[1] : '';\n var indentedValue = value;\n if (typeof value === 'string' && value.includes('\\n')) {\n indentedValue = String(value)\n .split('\\n')\n .map(function (str, i) {\n return i === 0 ? str : \"\" + endentation + str;\n })\n .join('\\n');\n }\n string += indentedValue + strings[i + 1];\n });\n return string;\n}\nexport default dedent;\n//# sourceMappingURL=index.js.map","import {\n decodeEntities\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n getConfig,\n hasKatex,\n renderKatexSanitized,\n sanitizeText\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/icons.ts\nimport { getIconData, iconToHTML, iconToSVG, replaceIDs, stringToIcon } from \"@iconify/utils\";\nvar unknownIcon = {\n body: '?',\n height: 80,\n width: 80\n};\nvar iconsStore = /* @__PURE__ */ new Map();\nvar loaderStore = /* @__PURE__ */ new Map();\nvar registerIconPacks = /* @__PURE__ */ __name((iconLoaders) => {\n for (const iconLoader of iconLoaders) {\n if (!iconLoader.name) {\n throw new Error(\n 'Invalid icon loader. Must have a \"name\" property with non-empty string value.'\n );\n }\n log.debug(\"Registering icon pack:\", iconLoader.name);\n if (\"loader\" in iconLoader) {\n loaderStore.set(iconLoader.name, iconLoader.loader);\n } else if (\"icons\" in iconLoader) {\n iconsStore.set(iconLoader.name, iconLoader.icons);\n } else {\n log.error(\"Invalid icon loader:\", iconLoader);\n throw new Error('Invalid icon loader. Must have either \"icons\" or \"loader\" property.');\n }\n }\n}, \"registerIconPacks\");\nvar getRegisteredIconData = /* @__PURE__ */ __name(async (iconName, fallbackPrefix) => {\n const data = stringToIcon(iconName, true, fallbackPrefix !== void 0);\n if (!data) {\n throw new Error(`Invalid icon name: ${iconName}`);\n }\n const prefix = data.prefix || fallbackPrefix;\n if (!prefix) {\n throw new Error(`Icon name must contain a prefix: ${iconName}`);\n }\n let icons = iconsStore.get(prefix);\n if (!icons) {\n const loader = loaderStore.get(prefix);\n if (!loader) {\n throw new Error(`Icon set not found: ${data.prefix}`);\n }\n try {\n const loaded = await loader();\n icons = { ...loaded, prefix };\n iconsStore.set(prefix, icons);\n } catch (e) {\n log.error(e);\n throw new Error(`Failed to load icon set: ${data.prefix}`);\n }\n }\n const iconData = getIconData(icons, data.name);\n if (!iconData) {\n throw new Error(`Icon not found: ${iconName}`);\n }\n return iconData;\n}, \"getRegisteredIconData\");\nvar isIconAvailable = /* @__PURE__ */ __name(async (iconName) => {\n try {\n await getRegisteredIconData(iconName);\n return true;\n } catch {\n return false;\n }\n}, \"isIconAvailable\");\nvar getIconSVG = /* @__PURE__ */ __name(async (iconName, customisations, extraAttributes) => {\n let iconData;\n try {\n iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);\n } catch (e) {\n log.error(e);\n iconData = unknownIcon;\n }\n const renderData = iconToSVG(iconData, customisations);\n const svg = iconToHTML(replaceIDs(renderData.body), {\n ...renderData.attributes,\n ...extraAttributes\n });\n return sanitizeText(svg, getConfig());\n}, \"getIconSVG\");\n\n// src/rendering-util/createText.ts\nimport { select } from \"d3\";\n\n// src/rendering-util/handle-markdown-text.ts\nimport { marked } from \"marked\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown, { markdownAutoWrap }) {\n const withoutBR = markdown.replace(//g, \"\\n\");\n const withoutMultipleNewlines = withoutBR.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n if (markdownAutoWrap === false) {\n return withoutExtraSpaces.replace(/ /g, \" \");\n }\n return withoutExtraSpaces;\n}\n__name(preprocessMarkdown, \"preprocessMarkdown\");\nfunction markdownToLines(markdown, config = {}) {\n const preprocessedMarkdown = preprocessMarkdown(markdown, config);\n const nodes = marked.lexer(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.text.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n word = word.replace(/'/g, `'`);\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"em\") {\n node.tokens.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n } else if (node.type === \"html\") {\n lines[currentLine].push({ content: node.text, type: \"normal\" });\n }\n }\n __name(processNode, \"processNode\");\n nodes.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.tokens?.forEach((contentNode) => {\n processNode(contentNode);\n });\n } else if (treeNode.type === \"html\") {\n lines[currentLine].push({ content: treeNode.text, type: \"normal\" });\n } else {\n lines[currentLine].push({ content: treeNode.raw, type: \"normal\" });\n }\n });\n return lines;\n}\n__name(markdownToLines, \"markdownToLines\");\nfunction markdownToHTML(markdown, { markdownAutoWrap } = {}) {\n const nodes = marked.lexer(markdown);\n function output(node) {\n if (node.type === \"text\") {\n if (markdownAutoWrap === false) {\n return node.text.replace(/\\n */g, \"
    \").replace(/ /g, \" \");\n }\n return node.text.replace(/\\n */g, \"
    \");\n } else if (node.type === \"strong\") {\n return `${node.tokens?.map(output).join(\"\")}`;\n } else if (node.type === \"em\") {\n return `${node.tokens?.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `

    ${node.tokens?.map(output).join(\"\")}

    `;\n } else if (node.type === \"space\") {\n return \"\";\n } else if (node.type === \"html\") {\n return `${node.text}`;\n } else if (node.type === \"escape\") {\n return node.text;\n }\n log.warn(`Unsupported markdown: ${node.type}`);\n return node.raw;\n }\n __name(output, \"output\");\n return nodes.map(output).join(\"\");\n}\n__name(markdownToHTML, \"markdownToHTML\");\n\n// src/rendering-util/splitText.ts\nfunction splitTextToChars(text) {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\n__name(splitTextToChars, \"splitTextToChars\");\nfunction splitWordToFitWidth(checkFit, word) {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\n__name(splitWordToFitWidth, \"splitWordToFitWidth\");\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(\"\"), type },\n { content: \"\", type }\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(\"\"), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(\"\"), type },\n { content: remainingChars.join(\"\"), type }\n ];\n}\n__name(splitWordToFitWidthRecursion, \"splitWordToFitWidthRecursion\");\nfunction splitLineToFitWidth(line, checkFit) {\n if (line.some(({ content }) => content.includes(\"\\n\"))) {\n throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\n__name(splitLineToFitWidth, \"splitLineToFitWidth\");\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n if (words.length === 0) {\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = \"\";\n if (words[0].content === \" \") {\n joiner = \" \";\n words.shift();\n }\n const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n const lineWithNextWord = [...newLine];\n if (joiner !== \"\") {\n lineWithNextWord.push({ content: joiner, type: \"normal\" });\n }\n lineWithNextWord.push(nextWord);\n if (checkFit(lineWithNextWord)) {\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n if (newLine.length > 0) {\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\n__name(splitLineToFitWidthRecursion, \"splitLineToFitWidthRecursion\");\n\n// src/rendering-util/createText.ts\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nasync function addHtmlSpan(element, node, width, classes, addBackground = false, config = getConfig()) {\n const fo = element.append(\"foreignObject\");\n fo.attr(\"width\", `${10 * width}px`);\n fo.attr(\"height\", `${10 * width}px`);\n const div = fo.append(\"xhtml:div\");\n const sanitizedLabel = hasKatex(node.label) ? await renderKatexSanitized(node.label.replace(common_default.lineBreakRegex, \"\\n\"), config) : sanitizeText(node.label, config);\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const span = div.append(\"span\");\n span.html(sanitizedLabel);\n applyStyle(span, node.labelStyle);\n span.attr(\"class\", `${labelClass} ${classes}`);\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"line-height\", \"1.5\");\n div.style(\"max-width\", width + \"px\");\n div.style(\"text-align\", \"center\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n return fo.node();\n}\n__name(addHtmlSpan, \"addHtmlSpan\");\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\n__name(createTspan, \"createTspan\");\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\n__name(computeWidthOfText, \"computeWidthOfText\");\nfunction computeDimensionOfText(parentNode, lineHeight, text) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, [{ content: text, type: \"normal\" }]);\n const textDimension = testSpan.node()?.getBoundingClientRect();\n if (textDimension) {\n testElement.remove();\n }\n return textDimension;\n}\n__name(computeDimensionOfText, \"computeDimensionOfText\");\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\").attr(\"style\", \"stroke: none\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n for (const line of structuredText) {\n const checkWidth = /* @__PURE__ */ __name((line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width, \"checkWidth\");\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", bbox.x - padding).attr(\"y\", bbox.y - padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\n__name(createFormattedText, \"createFormattedText\");\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"em\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\n__name(updateTextContentAndStyles, \"updateTextContentAndStyles\");\nasync function replaceIconSubstring(text, config = {}) {\n const pendingReplacements = [];\n text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, (fullMatch, prefix, iconName) => {\n pendingReplacements.push(\n (async () => {\n const registeredIconName = `${prefix}:${iconName}`;\n if (await isIconAvailable(registeredIconName)) {\n return await getIconSVG(registeredIconName, void 0, { class: \"label-icon\" });\n } else {\n return ``;\n }\n })()\n );\n return fullMatch;\n });\n const replacements = await Promise.all(pendingReplacements);\n return text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, () => replacements.shift() ?? \"\");\n}\n__name(replaceIconSubstring, \"replaceIconSubstring\");\nvar createText = /* @__PURE__ */ __name(async (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false\n} = {}, config) => {\n log.debug(\n \"XYZ createText\",\n text,\n style,\n isTitle,\n classes,\n useHtmlLabels,\n isNode,\n \"addSvgBackground: \",\n addSvgBackground\n );\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text, config);\n const decodedReplacedText = await replaceIconSubstring(decodeEntities(htmlText), config);\n const inputForKatex = text.replace(/\\\\\\\\/g, \"\\\\\");\n const node = {\n isNode,\n label: hasKatex(text) ? inputForKatex : decodedReplacedText,\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n const vertexNode = await addHtmlSpan(el, node, width, classes, addSvgBackground, config);\n return vertexNode;\n } else {\n const sanitizeBR = text.replace(//g, \"
    \");\n const structuredText = markdownToLines(sanitizeBR.replace(\"
    \", \"
    \"), config);\n const svgLabel = createFormattedText(\n width,\n el,\n structuredText,\n text ? addSvgBackground : false\n );\n if (isNode) {\n if (/stroke:/.exec(style)) {\n style = style.replace(\"stroke:\", \"lineColor:\");\n }\n const nodeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/color:/g, \"fill:\");\n select(svgLabel).attr(\"style\", nodeLabelTextStyle);\n } else {\n const edgeLabelRectStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/background:/g, \"fill:\");\n select(svgLabel).select(\"rect\").attr(\"style\", edgeLabelRectStyle.replace(/background:/g, \"fill:\"));\n const edgeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, \"\").replace(/stroke-width:[^;]+;?/g, \"\").replace(/fill:[^;]+;?/g, \"\").replace(/color:/g, \"fill:\");\n select(svgLabel).select(\"text\").attr(\"style\", edgeLabelTextStyle);\n }\n return svgLabel;\n }\n}, \"createText\");\n\nexport {\n unknownIcon,\n registerIconPacks,\n getIconSVG,\n computeDimensionOfText,\n replaceIconSubstring,\n createText\n};\n","function t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function e(t,e){return t[0]===e[0]&&t[1]===e[1]}function s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&\"number\"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;et.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;ei);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),t(o,s,n)}(l,c,-h)}return l}function n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),s(t,a,o,h||1)}class o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class h extends o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:\"fillSketch\",ops:this.renderLines(r,e)}}}class r extends o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class i{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t{const h=a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t{const o=a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;tn%2?t+s:t+e));a.push({key:\"C\",data:t}),e=t[4],s=t[5];break}case\"Q\":a.push({key:\"Q\",data:[...r]}),e=r[2],s=r[3];break;case\"q\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"Q\",data:t}),e=t[2],s=t[3];break}case\"A\":a.push({key:\"A\",data:[...r]}),e=r[5],s=r[6];break;case\"a\":e+=r[5],s+=r[6],a.push({key:\"A\",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case\"H\":a.push({key:\"H\",data:[...r]}),e=r[0];break;case\"h\":e+=r[0],a.push({key:\"H\",data:[e]});break;case\"V\":a.push({key:\"V\",data:[...r]}),s=r[0];break;case\"v\":s+=r[0],a.push({key:\"V\",data:[s]});break;case\"S\":a.push({key:\"S\",data:[...r]}),e=r[2],s=r[3];break;case\"s\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"S\",data:t}),e=t[2],s=t[3];break}case\"T\":a.push({key:\"T\",data:[...r]}),e=r[0],s=r[1];break;case\"t\":e+=r[0],s+=r[1],a.push({key:\"T\",data:[e,s]});break;case\"Z\":case\"z\":a.push({key:\"Z\",data:[]}),e=n,s=o}return a}function m(t){const e=[];let s=\"\",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case\"M\":e.push({key:\"M\",data:[...l]}),[n,o]=l,[a,h]=l;break;case\"C\":e.push({key:\"C\",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case\"L\":e.push({key:\"L\",data:[...l]}),[n,o]=l;break;case\"H\":n=l[0],e.push({key:\"L\",data:[n,o]});break;case\"V\":o=l[0],e.push({key:\"L\",data:[n,o]});break;case\"S\":{let t=0,a=0;\"C\"===s||\"S\"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:\"C\",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case\"T\":{const[t,a]=l;let h=0,c=0;\"Q\"===s||\"T\"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:\"C\",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case\"Q\":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:\"C\",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case\"A\":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:\"C\",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:\"C\",data:t})})),n=i,o=c}break}case\"Z\":e.push({key:\"Z\",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),td&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e2){const o=[];for(let e=0;e2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:\"lineTo\",data:[c,l]},{op:\"lineTo\",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:\"path\",ops:k}}function _(t,e){const s=m(y(b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case\"M\":a=[h[0],h[1]],o=[h[0],h[1]];break;case\"L\":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case\"C\":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case\"Z\":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:\"path\",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:\"move\",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:\"move\",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:\"move\",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o3){const a=[],h=1-s.curveTightness;o.push({op:\"move\",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;ni&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s0?X(n,0,n.length,s):n}const tt=\"none\";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:\"#000\",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:\"hachure\",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d(\"line\",[v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];\"solid\"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d(\"rectangle\",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=T(s,n,a),i=D(t,e,a,r);if(a.fill)if(\"solid\"===a.fillStyle){const s=D(t,e,a,r).opset;s.type=\"fillPath\",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d(\"ellipse\",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape=\"circle\",o}linearPath(t,e){const s=this._o(e);return this._d(\"linearPath\",[S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if(\"solid\"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=A(t,e,s,n,o,a,!0,!1,h);r.type=\"fillPath\",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d(\"arc\",c,i)}curve(t,e){const s=this._o(e),n=[],o=L(t,s);if(s.fill&&s.fill!==tt)if(\"solid\"===s.fillStyle){const e=L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t=\"number\"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d(\"curve\",n,s)}polygon(t,e){const s=this._o(e),n=[],o=S(t,!0,s);return s.fill&&(\"solid\"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d(\"polygon\",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d(\"path\",n,s);t=(t||\"\").replace(/\\n/g,\" \").replace(/(-\\s)/g,\"-\").replace(\"/(ss)/g\",\" \");const o=s.fill&&\"transparent\"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=m(y(b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case\"M\":c(),h=[e[0],e[1]],a.push(h);break;case\"L\":i(),a.push([e[0],e[1]]);break;case\"C\":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case\"Z\":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if(\"solid\"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(S(t,!1,s))})):n.push(i)),this._d(\"path\",n,s)}opsToPath(t,e){let s=\"\";for(const n of t.ops){const t=\"number\"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case\"move\":s+=`M${t[0]} ${t[1]} `;break;case\"bcurveTo\":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case\"lineTo\":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case\"path\":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case\"fillPath\":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case\"fillSketch\":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||\"move\"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext(\"2d\"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case\"path\":n.save(),n.strokeStyle=\"none\"===s.stroke?\"transparent\":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case\"fillPath\":{n.save(),n.fillStyle=s.fill||\"\";const e=\"curve\"===t.shape||\"polygon\"===t.shape||\"path\"===t.shape?\"evenodd\":\"nonzero\";this._drawToContext(n,a,o,e),n.restore();break}case\"fillSketch\":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||\"\",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n=\"nonzero\"){t.beginPath();for(const n of e.ops){const e=\"number\"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case\"move\":t.moveTo(e[0],e[1]);break;case\"bcurveTo\":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case\"lineTo\":t.lineTo(e[0],e[1])}}\"fillPath\"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt=\"http://www.w3.org/2000/svg\";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,\"g\"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case\"path\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",s.stroke),e.setAttribute(\"stroke-width\",s.strokeWidth+\"\"),e.setAttribute(\"fill\",\"none\"),s.strokeLineDash&&e.setAttribute(\"stroke-dasharray\",s.strokeLineDash.join(\" \").trim()),s.strokeLineDashOffset&&e.setAttribute(\"stroke-dashoffset\",`${s.strokeLineDashOffset}`);break;case\"fillPath\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",\"none\"),e.setAttribute(\"stroke-width\",\"0\"),e.setAttribute(\"fill\",s.fill||\"\"),\"curve\"!==t.shape&&\"polygon\"!==t.shape||e.setAttribute(\"fill-rule\",\"evenodd\");break;case\"fillSketch\":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,\"path\");return o.setAttribute(\"d\",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute(\"stroke\",s.fill||\"\"),o.setAttribute(\"stroke-width\",n+\"\"),o.setAttribute(\"fill\",\"none\"),s.fillLineDash&&o.setAttribute(\"stroke-dasharray\",s.fillLineDash.join(\" \").trim()),s.fillLineDashOffset&&o.setAttribute(\"stroke-dashoffset\",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};export{at as default};\n","import {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n compileStyles,\n solidStateFill,\n styles2String,\n userNodeOverrides\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n createText,\n getIconSVG\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n calculateTextWidth,\n decodeEntities,\n handleUndefinedAttr,\n parseFontSize\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n defaultConfig_default,\n evaluate,\n getConfig,\n getConfig2,\n hasKatex,\n parseGenericTypes,\n renderKatexSanitized,\n sanitizeText,\n sanitizeText2\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/util.ts\nimport { select } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);\n if (!_classes) {\n cssClasses = \"node default\";\n } else {\n cssClasses = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", handleUndefinedAttr(node.labelStyle));\n let label;\n if (node.label === void 0) {\n label = \"\";\n } else {\n label = typeof node.label === \"string\" ? node.label : node.label[0];\n }\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: node.width || getConfig2().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: \"markdown-node-label\",\n style: node.labelStyle,\n addSvgBackground: !!node.icon || !!node.img\n });\n let bbox = text2.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n if (useHtmlLabels) {\n const div = text2.children[0];\n const dv = select(text2);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = label.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = getConfig2().fontSize ? getConfig2().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const [parsedBodyFontSize = defaultConfig_default.fontSize] = parseFontSize(bodyFontSize);\n const width = parsedBodyFontSize * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label: labelEl };\n}, \"labelHelper\");\nvar insertLabel = /* @__PURE__ */ __name(async (parent, label, options) => {\n const useHtmlLabels = options.useHtmlLabels || evaluate(getConfig2()?.flowchart?.htmlLabels);\n const labelEl = parent.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", options.labelStyle || \"\");\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: options.width || getConfig2()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img\n });\n let bbox = text2.getBBox();\n const halfPadding = options.padding / 2;\n if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {\n const div = text2.children[0];\n const dv = select(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (options.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n}, \"insertLabel\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nvar getNodeClasses = /* @__PURE__ */ __name((node, extra) => (node.look === \"handDrawn\" ? \"rough-node\" : \"node\") + \" \" + node.cssClasses + \" \" + (extra || \"\"), \"getNodeClasses\");\nfunction createPathFromPoints(points) {\n const pointStrings = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${p.x},${p.y}`);\n pointStrings.push(\"Z\");\n return pointStrings.join(\" \");\n}\n__name(createPathFromPoints, \"createPathFromPoints\");\nfunction generateFullSineWavePoints(x1, y1, x2, y2, amplitude, numCycles) {\n const points = [];\n const steps = 50;\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n const frequency = 2 * Math.PI / cycleLength;\n const midY = y1 + deltaY / 2;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = x1 + t * deltaX;\n const y = midY + amplitude * Math.sin(frequency * (x - x1));\n points.push({ x, y });\n }\n return points;\n}\n__name(generateFullSineWavePoints, \"generateFullSineWavePoints\");\nfunction generateCirclePoints(centerX, centerY, radius, numPoints, startAngle, endAngle) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints, \"generateCirclePoints\");\n\n// src/rendering-util/rendering-elements/clusters.js\nimport { select as select3 } from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point) => {\n var x = node.x;\n var y = node.y;\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/rendering-util/rendering-elements/createLabel.js\nimport { select as select2 } from \"d3\";\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\n__name(applyStyle, \"applyStyle\");\nasync function addHtmlLabel(node) {\n const fo = select2(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const config = getConfig2();\n let label = node.label;\n if (node.label && hasKatex(node.label)) {\n label = await renderKatexSanitized(node.label.replace(common_default.lineBreakRegex, \"\\n\"), config);\n }\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n const labelSpan = '\" + label + \"\";\n div.html(sanitizeText(labelSpan, config));\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"padding-right\", \"1px\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\n__name(addHtmlLabel, \"addHtmlLabel\");\nvar createLabel = /* @__PURE__ */ __name(async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig2().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
    \");\n log.info(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style ? style.replace(\"fill:\", \"color:\") : style\n };\n let vertexNode = await addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/rendering-util/rendering-elements/shapes/roundedRectPath.ts\nvar createRoundedRectPathD = /* @__PURE__ */ __name((x, y, totalWidth, totalHeight, radius) => [\n \"M\",\n x + radius,\n y,\n // Move to the first point\n \"H\",\n x + totalWidth - radius,\n // Draw horizontal line to the beginning of the right corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius,\n // Draw arc to the right top corner\n \"V\",\n y + totalHeight - radius,\n // Draw vertical line down to the beginning of the right bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight,\n // Draw arc to the right bottom corner\n \"H\",\n x + radius,\n // Draw horizontal line to the beginning of the left bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius,\n // Draw arc to the left bottom corner\n \"V\",\n y + radius,\n // Draw vertical line up to the beginning of the left top corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y,\n // Draw arc to the left top corner\n \"Z\"\n // Close the path\n].join(\" \"), \"createRoundedRectPathD\");\n\n// src/rendering-util/rendering-elements/clusters.js\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true\n });\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"rect\");\nvar noteGroup = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n}, \"noteGroup\");\nvar roundedWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n let innerRect = shapeSvg.append(\"rect\");\n const text2 = label.node().appendChild(await createLabel_default(node.label, node.labelStyle, void 0, true));\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n let rect2;\n if (node.look === \"handDrawn\") {\n const isAlt = node.cssClasses.includes(\"statediagram-cluster-alt\");\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = node.rx || node.ry ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n }) : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? \"hachure\" : \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"outer\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", x).attr(\"y\", innerY).attr(\"width\", width).attr(\"height\", innerHeight);\n }\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (evaluate(siteConfig.flowchart.htmlLabels) ? 0 : 3)})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"roundedWithTitle\");\nvar kanbanSection = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n let bbox = text2.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text2.children[0];\n const dv = select3(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 4,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"kanbanSection\");\nvar divider = /* @__PURE__ */ __name((parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const padding = 0 * node.padding;\n const width = node.width + padding;\n node.diff = -node.padding;\n const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: \"lightgrey\",\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"divider\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n }\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = 0;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: {} };\n}, \"divider\");\nvar squareRect = rect;\nvar shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection\n};\nvar clusterElems = /* @__PURE__ */ new Map();\nvar insertCluster = /* @__PURE__ */ __name(async (elem, node) => {\n const shape = node.shape || \"rect\";\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n}, \"insertCluster\");\nvar clear = /* @__PURE__ */ __name(() => {\n clusterElems = /* @__PURE__ */ new Map();\n}, \"clear\");\n\n// src/rendering-util/rendering-elements/intersect/intersect-node.js\nfunction intersectNode(node, point) {\n return node.intersect(point);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/rendering-util/rendering-elements/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point.x;\n var py = cy - point.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/rendering-util/rendering-elements/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point) {\n return intersect_ellipse_default(node, rx, rx, point);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/rendering-util/rendering-elements/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n {\n const a1 = p2.y - p1.y;\n const b1 = p1.x - p2.x;\n const c1 = p2.x * p1.y - p1.x * p2.y;\n const r3 = a1 * q1.x + b1 * q1.y + c1;\n const r4 = a1 * q2.x + b1 * q2.y + c1;\n const epsilon = 1e-6;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n const a2 = q2.y - q1.y;\n const b2 = q1.x - q2.x;\n const c2 = q2.x * q1.y - q1.x * q2.y;\n const r1 = a2 * p1.x + b2 * p1.y + c2;\n const r2 = a2 * p2.x + b2 * p2.y + c2;\n if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n return;\n }\n const denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n const offset = Math.abs(denom / 2);\n let num = b1 * c2 - b2 * c1;\n const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n }\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/rendering-util/rendering-elements/intersect/intersect-polygon.js\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n let intersections = [];\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let intersect = intersect_line_default(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\nvar intersect_polygon_default = intersectPolygon;\n\n// src/rendering-util/rendering-elements/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/rendering-util/rendering-elements/shapes/anchor.ts\nimport rough2 from \"roughjs\";\nfunction anchor(parent, node) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const classes = getNodeClasses(node);\n let cssClasses = classes;\n if (!classes) {\n cssClasses = \"anchor\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const radius = 1;\n const { cssStyles } = node;\n const rc = rough2.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"black\", stroke: \"none\", fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const roughNode = rc.circle(0, 0, radius * 2, options);\n const circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"anchor\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, circleElem);\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(anchor, \"anchor\");\n\n// src/rendering-util/rendering-elements/shapes/bowTieRect.ts\nimport rough3 from \"roughjs\";\nfunction generateArcPoints(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints, \"generateArcPoints\");\nasync function bowTieRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding + 20;\n const h = bbox.height + node.padding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const { cssStyles } = node;\n const points = [\n { x: w / 2, y: -h / 2 },\n { x: -w / 2, y: -h / 2 },\n ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n { x: w / 2, y: h / 2 },\n ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true)\n ];\n const rc = rough3.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const bowTieRectPath = createPathFromPoints(points);\n const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, \":first-child\");\n bowTieRectShape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n bowTieRectShape.attr(\"transform\", `translate(${rx / 2}, 0)`);\n updateNodeBounds(node, bowTieRectShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(bowTieRect, \"bowTieRect\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nimport rough4 from \"roughjs\";\n\n// src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nasync function card(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const padding = 12;\n const w = bbox.width + node.padding + padding;\n const left = 0;\n const right = w;\n const top = -h;\n const bottom = 0;\n const points = [\n { x: left + padding, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n { x: left, y: top + padding },\n { x: left + padding, y: top }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough4.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(card, \"card\");\n\n// src/rendering-util/rendering-elements/shapes/choice.ts\nimport rough5 from \"roughjs\";\nfunction choice(parent, node) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const s = Math.max(28, node.width ?? 0);\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const rc = rough5.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = 28;\n node.height = 28;\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(choice, \"choice\");\n\n// src/rendering-util/rendering-elements/shapes/circle.ts\nimport rough6 from \"roughjs\";\nasync function circle(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const padding = options?.padding ?? halfPadding;\n const radius = bbox.width / 2 + padding;\n let circleElem;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough6.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options2);\n circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg.insert(\"circle\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"r\", radius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleElem);\n node.calcIntersect = function(bounds, point) {\n const radius2 = bounds.width / 2;\n return intersect_default.circle(bounds, radius2, point);\n };\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(circle, \"circle\");\n\n// src/rendering-util/rendering-elements/shapes/crossedCircle.ts\nimport rough7 from \"roughjs\";\nfunction createLine(r) {\n const xAxis45 = Math.cos(Math.PI / 4);\n const yAxis45 = Math.sin(Math.PI / 4);\n const lineLength = r * 2;\n const pointQ1 = { x: lineLength / 2 * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 };\n const pointQ4 = { x: lineLength / 2 * xAxis45, y: -(lineLength / 2) * yAxis45 };\n return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n__name(createLine, \"createLine\");\nfunction crossedCircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n const rc = rough7.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n const crossedCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n crossedCircle2.insert(() => lineNode);\n if (cssStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, crossedCircle2);\n node.intersect = function(point) {\n log.info(\"crossedCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(crossedCircle, \"crossedCircle\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts\nimport rough8 from \"roughjs\";\nfunction generateCirclePoints2(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints2, \"generateCirclePoints\");\nasync function curlyBraceLeft(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints2(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints2(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints2(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints2(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2, y: h / 2 + radius }\n ];\n const rc = rough8.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceLeftPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceLeftPath.replace(\"Z\", \"\");\n const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceLeftShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceLeftShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceLeftShape.insert(() => curlyBraceLeftNode, \":first-child\");\n curlyBraceLeftShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceLeftShape.attr(\"transform\", `translate(${radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceLeftShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceLeft, \"curlyBraceLeft\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts\nimport rough9 from \"roughjs\";\nfunction generateCirclePoints3(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateCirclePoints3, \"generateCirclePoints\");\nasync function curlyBraceRight(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90),\n { x: w / 2, y: h / 2 + radius },\n { x: -w / 2, y: h / 2 + radius }\n ];\n const rc = rough9.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceRightPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceRightPath.replace(\"Z\", \"\");\n const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceRightShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceRightShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceRightShape.insert(() => curlyBraceRightNode, \":first-child\");\n curlyBraceRightShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceRightShape.attr(\"transform\", `translate(${-radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceRightShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceRight, \"curlyBraceRight\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraces.ts\nimport rough10 from \"roughjs\";\nfunction generateCirclePoints4(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints4, \"generateCirclePoints\");\nasync function curlyBraces(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const leftCurlyBracePoints = [\n ...generateCirclePoints4(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rightCurlyBracePoints = [\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints4(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rc = rough10.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n const newLeftCurlyBracePath = leftCurlyBracePath.replace(\"Z\", \"\");\n const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n const newRightCurlyBracePath = rightCurlyBracePath.replace(\"Z\", \"\");\n const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBracesShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBracesShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBracesShape.insert(() => leftCurlyBraceNode, \":first-child\");\n curlyBracesShape.insert(() => rightCurlyBraceNode, \":first-child\");\n curlyBracesShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBracesShape.attr(\"transform\", `translate(${radius - radius / 4}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBracesShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraces, \"curlyBraces\");\n\n// src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts\nimport rough11 from \"roughjs\";\nasync function curvedTrapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80, minHeight = 20;\n const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough11.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const totalWidth = w, totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n const points = [\n { x: rw, y: 0 },\n { x: tw, y: 0 },\n { x: 0, y: totalHeight / 2 },\n { x: tw, y: totalHeight },\n { x: rw, y: totalHeight },\n ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curvedTrapezoid, \"curvedTrapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/cylinder.ts\nimport rough12 from \"roughjs\";\nvar createCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function cylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + node.padding, node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0);\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough12.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(cylinder, \"cylinder\");\n\n// src/rendering-util/rendering-elements/shapes/dividedRect.ts\nimport rough13 from \"roughjs\";\nasync function dividedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const rectOffset = h * 0.2;\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n const { cssStyles } = node;\n const rc = rough13.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pts = [\n { x, y: y + rectOffset },\n { x: -x, y: y + rectOffset },\n { x: -x, y: -y },\n { x, y: -y },\n { x, y },\n { x: -x, y },\n { x: -x, y: y + rectOffset }\n ];\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n const polygon = shapeSvg.insert(() => poly, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(dividedRectangle, \"dividedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/doubleCircle.ts\nimport rough14 from \"roughjs\";\nasync function doublecircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n let circleGroup;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough14.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n circleGroup.attr(\"class\", handleUndefinedAttr(node.cssClasses)).attr(\"style\", handleUndefinedAttr(cssStyles));\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\", \":first-child\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n outerCircle.attr(\"class\", \"outer-circle\").attr(\"style\", nodeStyles).attr(\"r\", outerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n innerCircle.attr(\"class\", \"inner-circle\").attr(\"style\", nodeStyles).attr(\"r\", innerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleGroup);\n node.intersect = function(point) {\n log.info(\"DoubleCircle intersect\", node, outerRadius, point);\n return intersect_default.circle(node, outerRadius, point);\n };\n return shapeSvg;\n}\n__name(doublecircle, \"doublecircle\");\n\n// src/rendering-util/rendering-elements/shapes/filledCircle.ts\nimport rough15 from \"roughjs\";\nfunction filledCircle(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n const rc = rough15.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const filledCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n filledCircle2.selectAll(\"path\").attr(\"style\", `fill: ${nodeBorder} !important;`);\n if (cssStyles && cssStyles.length > 0 && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, filledCircle2);\n node.intersect = function(point) {\n log.info(\"filledCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(filledCircle, \"filledCircle\");\n\n// src/rendering-util/rendering-elements/shapes/flippedTriangle.ts\nimport rough16 from \"roughjs\";\nasync function flippedTriangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: -h },\n { x: tw, y: -h },\n { x: tw / 2, y: 0 }\n ];\n const { cssStyles } = node;\n const rc = rough16.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const flippedTriangle2 = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, flippedTriangle2);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(flippedTriangle, \"flippedTriangle\");\n\n// src/rendering-util/rendering-elements/shapes/forkJoin.ts\nimport rough17 from \"roughjs\";\nfunction forkJoin(parent, node, { dir, config: { state: state2, themeVariables } }) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n if (dir === \"LR\") {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n const x = -1 * width / 2;\n const y = -1 * height / 2;\n const rc = rough17.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.rectangle(x, y, width, height, options);\n const shape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, shape);\n const padding = state2?.padding ?? 0;\n if (node.width && node.height) {\n node.width += padding / 2 || 0;\n node.height += padding / 2 || 0;\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(forkJoin, \"forkJoin\");\n\n// src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts\nimport rough18 from \"roughjs\";\nasync function halfRoundedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80, minHeight = 50;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough18.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n { x: -w / 2, y: h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { radius, point });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(halfRoundedRectangle, \"halfRoundedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/hexagon.ts\nimport rough19 from \"roughjs\";\nasync function hexagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + (node.padding ?? 0);\n const w = bbox.width + (node.padding ?? 0) * 2.5;\n const { cssStyles } = node;\n const rc = rough19.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let halfWidth = w / 2;\n const m = halfWidth / 6;\n halfWidth = halfWidth + m;\n const halfHeight = h / 2;\n const fixedLength = halfHeight / 2;\n const deducedWidth = halfWidth - fixedLength;\n const points = [\n { x: -deducedWidth, y: -halfHeight },\n { x: 0, y: -halfHeight },\n { x: deducedWidth, y: -halfHeight },\n { x: halfWidth, y: 0 },\n { x: deducedWidth, y: halfHeight },\n { x: 0, y: halfHeight },\n { x: -deducedWidth, y: halfHeight },\n { x: -halfWidth, y: 0 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(hexagon, \"hexagon\");\n\n// src/rendering-util/rendering-elements/shapes/hourglass.ts\nimport rough20 from \"roughjs\";\nasync function hourglass(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough20.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: 0, y: h },\n { x: w, y: h }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { points });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(hourglass, \"hourglass\");\n\n// src/rendering-util/rendering-elements/shapes/icon.ts\nimport rough21 from \"roughjs\";\nasync function icon(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const topLabel = node.pos === \"t\";\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough21.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: \"none\", fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const iconNode = rc.rectangle(x, y, width, height, options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(icon, \"icon\");\n\n// src/rendering-util/rendering-elements/shapes/iconCircle.ts\nimport rough22 from \"roughjs\";\nasync function iconCircle(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n const topLabel = node.pos === \"t\";\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const rc = rough22.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconElem = shapeSvg.append(\"g\");\n if (node.icon) {\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n }\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconCircle, \"iconCircle\");\n\n// src/rendering-util/rendering-elements/shapes/iconRounded.ts\nimport rough23 from \"roughjs\";\nasync function iconRounded(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough23.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\").attr(\"class\", \"icon-shape2\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconRounded, \"iconRounded\");\n\n// src/rendering-util/rendering-elements/shapes/iconSquare.ts\nimport rough24 from \"roughjs\";\nasync function iconSquare(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough24.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconSquare, \"iconSquare\");\n\n// src/rendering-util/rendering-elements/shapes/imageSquare.ts\nimport rough25 from \"roughjs\";\nasync function imageSquare(parent, node, { config: { flowchart } }) {\n const img = new Image();\n img.src = node?.img ?? \"\";\n await img.decode();\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace(\"px\", \"\"));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace(\"px\", \"\"));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n const imageRawWidth = Math.max(\n node.label ? defaultWidth ?? 0 : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n const imageWidth = node.constraint === \"on\" ? node?.assetHeight ? node.assetHeight * node.imageAspectRatio : imageRawWidth : imageRawWidth;\n const imageHeight = node.constraint === \"on\" ? imageWidth / node.imageAspectRatio : node?.assetHeight ?? imageNaturalHeight;\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"image-shape default\");\n const topLabel = node.pos === \"t\";\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough25.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"none\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => imageNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.img) {\n const image = shapeSvg.append(\"image\");\n image.attr(\"href\", node.img);\n image.attr(\"width\", imageWidth);\n image.attr(\"height\", imageHeight);\n image.attr(\"preserveAspectRatio\", \"none\");\n image.attr(\n \"transform\",\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 : imageHeight / 2 - bbox.height / 2 + labelPadding / 2})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(imageSquare, \"imageSquare\");\n\n// src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts\nimport rough26 from \"roughjs\";\nasync function inv_trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: -3 * h / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough26.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(inv_trapezoid, \"inv_trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/drawRect.ts\nimport rough27 from \"roughjs\";\nasync function drawRect(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n let rect2;\n let { rx, ry } = node;\n const { cssStyles } = node;\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n if (node.look === \"handDrawn\") {\n const rc = rough27.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"rx\", handleUndefinedAttr(rx)).attr(\"ry\", handleUndefinedAttr(ry)).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n }\n updateNodeBounds(node, rect2);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(drawRect, \"drawRect\");\n\n// src/rendering-util/rendering-elements/shapes/labelRect.ts\nasync function labelRect(parent, node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"label\");\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(labelRect, \"labelRect\");\n\n// src/rendering-util/rendering-elements/shapes/leanLeft.ts\nimport rough28 from \"roughjs\";\nasync function lean_left(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: -(3 * h) / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough28.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_left, \"lean_left\");\n\n// src/rendering-util/rendering-elements/shapes/leanRight.ts\nimport rough29 from \"roughjs\";\nasync function lean_right(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough29.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_right, \"lean_right\");\n\n// src/rendering-util/rendering-elements/shapes/lightningBolt.ts\nimport rough30 from \"roughjs\";\nfunction lightningBolt(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const width = Math.max(35, node?.width ?? 0);\n const height = Math.max(35, node?.height ?? 0);\n const gap = 7;\n const points = [\n { x: width, y: 0 },\n { x: 0, y: height + gap / 2 },\n { x: width - 2 * gap, y: height + gap / 2 },\n { x: 0, y: 2 * height },\n { x: width, y: height - gap / 2 },\n { x: 2 * gap, y: height - gap / 2 }\n ];\n const rc = rough30.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n const lightningBolt2 = shapeSvg.insert(() => lineNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n lightningBolt2.attr(\"transform\", `translate(-${width / 2},${-height})`);\n updateNodeBounds(node, lightningBolt2);\n node.intersect = function(point) {\n log.info(\"lightningBolt intersect\", node, point);\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(lightningBolt, \"lightningBolt\");\n\n// src/rendering-util/rendering-elements/shapes/linedCylinder.ts\nimport rough31 from \"roughjs\";\nvar createCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function linedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0);\n const outerOffset = h * 0.1;\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough31.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD2(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n const innerLineEl = shapeSvg.insert(() => innerLine, \":first-child\");\n innerLineEl.attr(\"class\", \"line\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(linedCylinder, \"linedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts\nimport rough32 from \"roughjs\";\nasync function linedWaveEdgedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough32.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2, y: -finalH / 2 },\n { x: -w / 2, y: finalH / 2 * 1.1 },\n { x: -w / 2, y: -finalH / 2 }\n ];\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const waveEdgeRect = shapeSvg.insert(() => poly, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) + w / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(linedWaveEdgedRect, \"linedWaveEdgedRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiRect.ts\nimport rough33 from \"roughjs\";\nasync function multiRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough33.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y },\n { x, y }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, { ...options, fill: \"none\" });\n const multiRect2 = shapeSvg.insert(() => innerNode, \":first-child\");\n multiRect2.insert(() => outerNode, \":first-child\");\n multiRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, multiRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiRect, \"multiRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts\nimport rough34 from \"roughjs\";\nasync function multiWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const x = -w / 2;\n const y = -finalH / 2;\n const rectOffset = 5;\n const { cssStyles } = node;\n const wavePoints = generateFullSineWavePoints(\n x - rectOffset,\n y + finalH + rectOffset,\n x + w - rectOffset,\n y + finalH + rectOffset,\n waveAmplitude,\n 0.8\n );\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + finalH + rectOffset },\n ...wavePoints,\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y },\n { x, y }\n ];\n const rc = rough34.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, options);\n const shape = shapeSvg.insert(() => outerNode, \":first-child\");\n shape.insert(() => innerNode);\n shape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n shape.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, shape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiWaveEdgedRectangle, \"multiWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/note.ts\nimport rough35 from \"roughjs\";\nasync function note(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart?.htmlLabels !== false;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const { cssStyles } = node;\n const rc = rough35.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => noteShapeNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(note, \"note\");\n\n// src/rendering-util/rendering-elements/shapes/question.ts\nimport rough36 from \"roughjs\";\nvar createDecisionBoxPathD = /* @__PURE__ */ __name((x, y, size) => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createDecisionBoxPathD\");\nasync function question(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const adjustment = 0.5;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough36.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n polygon.attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.calcIntersect = function(bounds, point) {\n const s2 = bounds.width;\n const points2 = [\n { x: s2 / 2, y: 0 },\n { x: s2, y: -s2 / 2 },\n { x: s2 / 2, y: -s2 },\n { x: 0, y: -s2 / 2 }\n ];\n const res = intersect_default.polygon(bounds, points2, point);\n return { x: res.x - 0.5, y: res.y - 0.5 };\n };\n node.intersect = function(point) {\n return this.calcIntersect(node, point);\n };\n return shapeSvg;\n}\n__name(question, \"question\");\n\n// src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts\nimport rough37 from \"roughjs\";\nasync function rect_left_inv_arrow(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n const points = [\n { x: x + notch, y },\n { x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y }\n ];\n const { cssStyles } = node;\n const rc = rough37.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-notch / 2},0)`);\n label.attr(\n \"transform\",\n `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(rect_left_inv_arrow, \"rect_left_inv_arrow\");\n\n// src/rendering-util/rendering-elements/shapes/rectWithTitle.ts\nimport { select as select4 } from \"d3\";\nimport rough38 from \"roughjs\";\nasync function rectWithTitle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.cssClasses;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const g = shapeSvg.insert(\"g\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", nodeStyles);\n const description = node.description;\n const title = node.label;\n const text2 = label.node().appendChild(await createLabel_default(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {\n const div2 = text2.children[0];\n const dv2 = select4(text2);\n bbox = div2.getBoundingClientRect();\n dv2.attr(\"width\", bbox.width);\n dv2.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", description);\n const textRows = description || [];\n const titleBox = text2.getBBox();\n const descr = label.node().appendChild(\n await createLabel_default(\n textRows.join ? textRows.join(\"
    \") : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n const div = descr.children[0];\n const dv = select4(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n const halfPadding = (node.padding || 0) / 2;\n select4(descr).attr(\n \"transform\",\n \"translate( \" + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select4(text2).attr(\n \"transform\",\n \"translate( \" + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect2;\n let innerLine;\n if (node.look === \"handDrawn\") {\n const rc = rough38.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n innerLine = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughLine;\n }, \":first-child\");\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n } else {\n rect2 = g.insert(\"rect\", \":first-child\");\n innerLine = g.insert(\"line\");\n rect2.attr(\"class\", \"outer title-state\").attr(\"style\", nodeStyles).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + (node.padding || 0)).attr(\"height\", bbox.height + (node.padding || 0));\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(rectWithTitle, \"rectWithTitle\");\n\n// src/rendering-util/rendering-elements/shapes/roundedRect.ts\nimport rough39 from \"roughjs\";\nfunction generateArcPoints2(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints2, \"generateArcPoints\");\nasync function roundedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const labelPaddingX = node?.padding ?? 0;\n const labelPaddingY = node?.padding ?? 0;\n const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2;\n const radius = node.radius || 5;\n const taper = node.taper || 5;\n const { cssStyles } = node;\n const rc = rough39.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.stroke) {\n options.stroke = node.stroke;\n }\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n // Top edge (left to right)\n { x: -w / 2 + taper, y: -h / 2 },\n // Top-left corner start (1)\n { x: w / 2 - taper, y: -h / 2 },\n // Top-right corner start (2)\n ...generateArcPoints2(w / 2 - taper, -h / 2, w / 2, -h / 2 + taper, radius, radius, true),\n // Top-left arc (2 to 3)\n // Right edge (top to bottom)\n { x: w / 2, y: -h / 2 + taper },\n // Top-right taper point (3)\n { x: w / 2, y: h / 2 - taper },\n // Bottom-right taper point (4)\n ...generateArcPoints2(w / 2, h / 2 - taper, w / 2 - taper, h / 2, radius, radius, true),\n // Top-left arc (4 to 5)\n // Bottom edge (right to left)\n { x: w / 2 - taper, y: h / 2 },\n // Bottom-right corner start (5)\n { x: -w / 2 + taper, y: h / 2 },\n // Bottom-left corner start (6)\n ...generateArcPoints2(-w / 2 + taper, h / 2, -w / 2, h / 2 - taper, radius, radius, true),\n // Top-left arc (4 to 5)\n // Left edge (bottom to top)\n { x: -w / 2, y: h / 2 - taper },\n // Bottom-left taper point (7)\n { x: -w / 2, y: -h / 2 + taper },\n // Top-left taper point (8)\n ...generateArcPoints2(-w / 2, -h / 2 + taper, -w / 2 + taper, -h / 2, radius, radius, true)\n // Top-left arc (4 to 5)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(roundedRect, \"roundedRect\");\n\n// src/rendering-util/rendering-elements/shapes/shadedProcess.ts\nimport rough40 from \"roughjs\";\nasync function shadedProcess(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = node?.padding ?? 0;\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const { cssStyles } = node;\n const rc = rough40.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x: x + w + 8, y },\n { x: x + w + 8, y: y + h },\n { x: x - 8, y: y + h },\n { x: x - 8, y },\n { x, y },\n { x, y: y + h }\n ];\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(shadedProcess, \"shadedProcess\");\n\n// src/rendering-util/rendering-elements/shapes/slopedRect.ts\nimport rough41 from \"roughjs\";\nasync function slopedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough41.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(0, ${h / 4})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(slopedRect, \"slopedRect\");\n\n// src/rendering-util/rendering-elements/shapes/squareRect.ts\nasync function squareRect2(parent, node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: \"\",\n labelPaddingX: node.labelPaddingX ?? (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(squareRect2, \"squareRect\");\n\n// src/rendering-util/rendering-elements/shapes/stadium.ts\nimport rough42 from \"roughjs\";\nasync function stadium(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough42.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 + radius, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(stadium, \"stadium\");\n\n// src/rendering-util/rendering-elements/shapes/state.ts\nasync function state(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"flowchart-node\"\n };\n return drawRect(parent, node, options);\n}\n__name(state, \"state\");\n\n// src/rendering-util/rendering-elements/shapes/stateEnd.ts\nimport rough43 from \"roughjs\";\nfunction stateEnd(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const rc = rough43.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.circle(0, 0, 14, {\n ...options,\n stroke: lineColor,\n strokeWidth: 2\n });\n const innerFill = stateBorder ?? nodeBorder;\n const roughInnerNode = rc.circle(0, 0, 5, {\n ...options,\n fill: innerFill,\n stroke: innerFill,\n strokeWidth: 2,\n fillStyle: \"solid\"\n });\n const circle2 = shapeSvg.insert(() => roughNode, \":first-child\");\n circle2.insert(() => roughInnerNode);\n if (cssStyles) {\n circle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n circle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateEnd, \"stateEnd\");\n\n// src/rendering-util/rendering-elements/shapes/stateStart.ts\nimport rough44 from \"roughjs\";\nfunction stateStart(parent, node, { config: { themeVariables } }) {\n const { lineColor } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let circle2;\n if (node.look === \"handDrawn\") {\n const rc = rough44.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle2 = shapeSvg.insert(() => roughNode);\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n } else {\n circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateStart, \"stateStart\");\n\n// src/rendering-util/rendering-elements/shapes/subroutine.ts\nimport rough45 from \"roughjs\";\nasync function subroutine(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n if (node.look === \"handDrawn\") {\n const rc = rough45.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n shapeSvg.insert(() => l1, \":first-child\");\n shapeSvg.insert(() => l2, \":first-child\");\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n const { cssStyles } = node;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect2);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(subroutine, \"subroutine\");\n\n// src/rendering-util/rendering-elements/shapes/taggedRect.ts\nimport rough46 from \"roughjs\";\nasync function taggedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const tagWidth = 0.2 * h;\n const tagHeight = 0.2 * h;\n const { cssStyles } = node;\n const rc = rough46.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const rectPoints = [\n { x: x - tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x - tagWidth / 2, y: y + h }\n ];\n const tagPoints = [\n { x: x + w - tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h - tagHeight }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: \"solid\" });\n const taggedRect2 = shapeSvg.insert(() => tagNode, \":first-child\");\n taggedRect2.insert(() => rectNode, \":first-child\");\n taggedRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, taggedRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedRect, \"taggedRect\");\n\n// src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts\nimport rough47 from \"roughjs\";\nasync function taggedWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const tagWidth = 0.2 * w;\n const tagHeight = 0.2 * h;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough47.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 }\n ];\n const x = -w / 2 + w / 2 * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n const tagPoints = [\n { x: x + w - tagWidth, y: (y + h) * 1.4 },\n { x: x + w, y: y + h - tagHeight },\n { x: x + w, y: (y + h) * 0.9 },\n ...generateFullSineWavePoints(\n x + w,\n (y + h) * 1.3,\n x + w - tagWidth,\n (y + h) * 1.5,\n -h * 0.03,\n 0.5\n )\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: \"solid\"\n });\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, \":first-child\");\n waveEdgeRect.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedWaveEdgedRectangle, \"taggedWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/text.ts\nasync function text(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0);\n const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"text\").attr(\"style\", nodeStyles).attr(\"rx\", 0).attr(\"ry\", 0).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(text, \"text\");\n\n// src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts\nimport rough48 from \"roughjs\";\nvar createCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return `M${x},${y}\n a${rx},${ry} 0,0,1 ${0},${-height}\n l${width},${0}\n a${rx},${ry} 0,0,1 ${0},${height}\n M${width},${-height}\n a${rx},${ry} 0,0,0 ${0},${height}\n l${-width},${0}`;\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y}`,\n `M${x + width},${y}`,\n `a${rx},${ry} 0,0,0 ${0},${-height}`,\n `l${-width},0`,\n `a${rx},${ry} 0,0,0 ${0},${height}`,\n `l${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function tiltedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label, halfPadding } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const labelPadding = node.look === \"neo\" ? halfPadding * 2 : halfPadding;\n const h = bbox.height + labelPadding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const w = bbox.width + rx + labelPadding;\n const { cssStyles } = node;\n let cylinder2;\n if (node.look === \"handDrawn\") {\n const rc = rough48.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD3(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD3(0, 0, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD3(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n }\n cylinder2.attr(\"label-offset-x\", rx);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${h / 2} )`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, cylinder2);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n if (ry != 0 && (Math.abs(y) < (node.height ?? 0) / 2 || Math.abs(y) == (node.height ?? 0) / 2 && Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx)) {\n let x = rx * rx * (1 - y * y / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(Math.abs(x));\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n pos.x += x;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(tiltedCylinder, \"tiltedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoid.ts\nimport rough49 from \"roughjs\";\nasync function trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough49.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(trapezoid, \"trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts\nimport rough50 from \"roughjs\";\nasync function trapezoidalPentagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60, minHeight = 20;\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough50.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 * 0.8, y: -h / 2 },\n { x: w / 2 * 0.8, y: -h / 2 },\n { x: w / 2, y: -h / 2 * 0.6 },\n { x: w / 2, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n { x: -w / 2, y: -h / 2 * 0.6 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(trapezoidalPentagon, \"trapezoidalPentagon\");\n\n// src/rendering-util/rendering-elements/shapes/triangle.ts\nimport rough51 from \"roughjs\";\nasync function triangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const useHtmlLabels = evaluate(getConfig2().flowchart?.htmlLabels);\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: tw, y: 0 },\n { x: tw / 2, y: -h }\n ];\n const { cssStyles } = node;\n const rc = rough51.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(triangle, \"triangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts\nimport rough52 from \"roughjs\";\nasync function waveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 8;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n const rc = rough52.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - extraW, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - extraW,\n finalH / 2,\n w / 2 + extraW,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + extraW, y: -finalH / 2 },\n { x: -w / 2 - extraW, y: -finalH / 2 }\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveEdgedRectangle, \"waveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveRectangle.ts\nimport rough53 from \"roughjs\";\nasync function waveRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 100;\n const minHeight = 50;\n const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const aspectRatio = baseWidth / baseHeight;\n let w = baseWidth;\n let h = baseHeight;\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n const rc = rough53.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: finalH / 2 },\n ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n { x: w / 2, y: -finalH / 2 },\n ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1)\n ];\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n const waveRect = shapeSvg.insert(() => waveRectNode, \":first-child\");\n waveRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, waveRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveRectangle, \"waveRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/windowPane.ts\nimport rough54 from \"roughjs\";\nasync function windowPane(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough54.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y - rectOffset },\n { x: x - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - rectOffset }\n ];\n const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n M${x - rectOffset},${y} L${x + w},${y}\n M${x},${y - rectOffset} L${x},${y + h}`;\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const no = rc.path(path, options);\n const windowPane2 = shapeSvg.insert(() => no, \":first-child\");\n windowPane2.attr(\"transform\", `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n windowPane2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, windowPane2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(windowPane, \"windowPane\");\n\n// src/rendering-util/rendering-elements/shapes/erBox.ts\nimport rough55 from \"roughjs\";\nimport { select as select5 } from \"d3\";\nasync function erBox(parent, node) {\n const entityNode = node;\n if (entityNode.alias) {\n node.label = entityNode.alias;\n }\n if (node.look === \"handDrawn\") {\n const { themeVariables: themeVariables2 } = getConfig();\n const { background } = themeVariables2;\n const backgroundNode = {\n ...node,\n id: node.id + \"-background\",\n look: \"default\",\n cssStyles: [\"stroke: none\", `fill: ${background}`]\n };\n await erBox(parent, backgroundNode);\n }\n const config = getConfig();\n node.useHtmlLabels = config.htmlLabels;\n let PADDING = config.er?.diagramPadding ?? 10;\n let TEXT_PADDING = config.er?.entityPadding ?? 6;\n const { cssStyles } = node;\n const { labelStyles, nodeStyles } = styles2String(node);\n if (entityNode.attributes.length === 0 && node.label) {\n const options2 = {\n rx: 0,\n ry: 0,\n labelPaddingX: PADDING,\n labelPaddingY: PADDING * 1.5,\n classes: \"\"\n };\n if (calculateTextWidth(node.label, config) + options2.labelPaddingX * 2 < config.er.minEntityWidth) {\n node.width = config.er.minEntityWidth;\n }\n const shapeSvg2 = await drawRect(parent, node, options2);\n if (!evaluate(config.htmlLabels)) {\n const textElement = shapeSvg2.select(\"text\");\n const bbox = textElement.node()?.getBBox();\n textElement.attr(\"transform\", `translate(${-bbox.width / 2}, 0)`);\n }\n return shapeSvg2;\n }\n if (!config.htmlLabels) {\n PADDING *= 1.25;\n TEXT_PADDING *= 1.25;\n }\n let cssClasses = getNodeClasses(node);\n if (!cssClasses) {\n cssClasses = \"node default\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const nameBBox = await addText(shapeSvg, node.label ?? \"\", config, 0, 0, [\"name\"], labelStyles);\n nameBBox.height += TEXT_PADDING;\n let yOffset = 0;\n const yOffsets = [];\n const rows = [];\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeysWidth = 0;\n let maxCommentWidth = 0;\n let keysPresent = true;\n let commentPresent = true;\n for (const attribute of entityNode.attributes) {\n const typeBBox = await addText(\n shapeSvg,\n attribute.type,\n config,\n 0,\n yOffset,\n [\"attribute-type\"],\n labelStyles\n );\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n const nameBBox2 = await addText(\n shapeSvg,\n attribute.name,\n config,\n 0,\n yOffset,\n [\"attribute-name\"],\n labelStyles\n );\n maxNameWidth = Math.max(maxNameWidth, nameBBox2.width + PADDING);\n const keysBBox = await addText(\n shapeSvg,\n attribute.keys.join(),\n config,\n 0,\n yOffset,\n [\"attribute-keys\"],\n labelStyles\n );\n maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n const commentBBox = await addText(\n shapeSvg,\n attribute.comment,\n config,\n 0,\n yOffset,\n [\"attribute-comment\"],\n labelStyles\n );\n maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n const rowHeight = Math.max(typeBBox.height, nameBBox2.height, keysBBox.height, commentBBox.height) + TEXT_PADDING;\n rows.push({ yOffset, rowHeight });\n yOffset += rowHeight;\n }\n let totalWidthSections = 4;\n if (maxKeysWidth <= PADDING) {\n keysPresent = false;\n maxKeysWidth = 0;\n totalWidthSections--;\n }\n if (maxCommentWidth <= PADDING) {\n commentPresent = false;\n maxCommentWidth = 0;\n totalWidthSections--;\n }\n const shapeBBox = shapeSvg.node().getBBox();\n if (nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) > 0) {\n const difference = nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n maxTypeWidth += difference / totalWidthSections;\n maxNameWidth += difference / totalWidthSections;\n if (maxKeysWidth > 0) {\n maxKeysWidth += difference / totalWidthSections;\n }\n if (maxCommentWidth > 0) {\n maxCommentWidth += difference / totalWidthSections;\n }\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n const rc = rough55.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let totalShapeBBoxHeight = 0;\n if (rows.length > 0) {\n totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n }\n const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n const x = -w / 2;\n const y = -h / 2;\n shapeSvg.selectAll(\"g:not(:first-child)\").each((_, i, nodes) => {\n const text2 = select5(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n if (text2.attr(\"class\").includes(\"attribute-name\")) {\n translateX += maxTypeWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-keys\")) {\n translateX += maxTypeWidth + maxNameWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-comment\")) {\n translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n }\n }\n }\n text2.attr(\n \"transform\",\n `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n );\n });\n shapeSvg.select(\".name\").attr(\"transform\", \"translate(\" + -nameBBox.width / 2 + \", \" + (y + TEXT_PADDING / 2) + \")\");\n const roughRect = rc.rectangle(x, y, w, h, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\").attr(\"style\", cssStyles.join(\"\"));\n const { themeVariables } = getConfig();\n const { rowEven, rowOdd, nodeBorder } = themeVariables;\n yOffsets.push(0);\n for (const [i, row] of rows.entries()) {\n const contentRowIndex = i + 1;\n const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n const roughRect2 = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n ...options,\n fill: isEven ? rowEven : rowOdd,\n stroke: nodeBorder\n });\n shapeSvg.insert(() => roughRect2, \"g.label\").attr(\"style\", cssStyles.join(\"\")).attr(\"class\", `row-rect-${isEven ? \"even\" : \"odd\"}`);\n }\n let roughLine = rc.line(x, nameBBox.height + y, w + x, nameBBox.height + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n roughLine = rc.line(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n if (keysPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n if (commentPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n for (const yOffset2 of yOffsets) {\n roughLine = rc.line(\n x,\n nameBBox.height + y + yOffset2,\n w + x,\n nameBBox.height + y + yOffset2,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n updateNodeBounds(node, rect2);\n if (nodeStyles && node.look !== \"handDrawn\") {\n const allStyle = nodeStyles.split(\";\");\n const strokeStyles = allStyle?.filter((e) => {\n return e.includes(\"stroke\");\n })?.map((s) => `${s}`).join(\"; \");\n shapeSvg.selectAll(\"path\").attr(\"style\", strokeStyles ?? \"\");\n shapeSvg.selectAll(\".row-rect-even path\").attr(\"style\", nodeStyles);\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(erBox, \"erBox\");\nasync function addText(shapeSvg, labelText, config, translateX = 0, translateY = 0, classes = [], style = \"\") {\n const label = shapeSvg.insert(\"g\").attr(\"class\", `label ${classes.join(\" \")}`).attr(\"transform\", `translate(${translateX}, ${translateY})`).attr(\"style\", style);\n if (labelText !== parseGenericTypes(labelText)) {\n labelText = parseGenericTypes(labelText);\n labelText = labelText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n const text2 = label.node().appendChild(\n await createText(\n label,\n labelText,\n {\n width: calculateTextWidth(labelText, config) + 100,\n style,\n useHtmlLabels: config.htmlLabels\n },\n config\n )\n );\n if (labelText.includes(\"<\") || labelText.includes(\">\")) {\n let child = text2.children[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n while (child.childNodes[0]) {\n child = child.childNodes[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n }\n let bbox = text2.getBBox();\n if (evaluate(config.htmlLabels)) {\n const div = text2.children[0];\n div.style.textAlign = \"start\";\n const dv = select5(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n return bbox;\n}\n__name(addText, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nimport { select as select7 } from \"d3\";\nimport rough56 from \"roughjs\";\n\n// src/diagrams/class/shapeUtil.ts\nimport { select as select6 } from \"d3\";\nasync function textHelper(parent, node, config, useHtmlLabels, GAP = config.class.padding ?? 12) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId || node.id);\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n annotationGroup = shapeSvg.insert(\"g\").attr(\"class\", \"annotation-group text\");\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText2(annotationGroup, { text: `\\xAB${annotation}\\xBB` }, 0);\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n labelGroup = shapeSvg.insert(\"g\").attr(\"class\", \"label-group text\");\n await addText2(labelGroup, node, 0, [\"font-weight: bolder\"]);\n const labelGroupBBox = labelGroup.node().getBBox();\n labelGroupHeight = labelGroupBBox.height;\n membersGroup = shapeSvg.insert(\"g\").attr(\"class\", \"members-group text\");\n let yOffset = 0;\n for (const member of node.members) {\n const height = await addText2(membersGroup, member, yOffset, [member.parseClassifier()]);\n yOffset += height + TEXT_PADDING;\n }\n membersGroupHeight = membersGroup.node().getBBox().height;\n if (membersGroupHeight <= 0) {\n membersGroupHeight = GAP / 2;\n }\n methodsGroup = shapeSvg.insert(\"g\").attr(\"class\", \"methods-group text\");\n let methodsYOffset = 0;\n for (const method of node.methods) {\n const height = await addText2(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n let bbox = shapeSvg.node().getBBox();\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroup.attr(\"transform\", `translate(${-annotationGroupBBox.width / 2})`);\n }\n labelGroup.attr(\"transform\", `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n bbox = shapeSvg.node().getBBox();\n membersGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n );\n bbox = shapeSvg.node().getBBox();\n methodsGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n );\n bbox = shapeSvg.node().getBBox();\n return { shapeSvg, bbox };\n}\n__name(textHelper, \"textHelper\");\nasync function addText2(parentGroup, node, yOffset, styles = []) {\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", styles.join(\"; \"));\n const config = getConfig();\n let useHtmlLabels = \"useHtmlLabels\" in node ? node.useHtmlLabels : evaluate(config.htmlLabels) ?? true;\n let textContent = \"\";\n if (\"text\" in node) {\n textContent = node.text;\n } else {\n textContent = node.label;\n }\n if (!useHtmlLabels && textContent.startsWith(\"\\\\\")) {\n textContent = textContent.substring(1);\n }\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels\n },\n config\n );\n let bbox;\n let numberOfLines = 1;\n if (!useHtmlLabels) {\n if (styles.includes(\"font-weight: bolder\")) {\n select6(text2).selectAll(\"tspan\").attr(\"font-weight\", \"\");\n }\n numberOfLines = text2.children.length;\n const textChild = text2.children[0];\n if (text2.textContent === \"\" || text2.textContent.includes(\">\")) {\n textChild.textContent = textContent[0] + textContent.substring(1).replaceAll(\">\", \">\").replaceAll(\"<\", \"<\").trim();\n const preserveSpace = textContent[1] === \" \";\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + \" \" + textChild.textContent.substring(1);\n }\n }\n if (textChild.textContent === \"undefined\") {\n textChild.textContent = \"\";\n }\n bbox = text2.getBBox();\n } else {\n const div = text2.children[0];\n const dv = select6(text2);\n numberOfLines = div.innerHTML.split(\"
    \").length;\n if (div.innerHTML.includes(\"\")) {\n numberOfLines += div.innerHTML.split(\"\").length - 1;\n }\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = textContent.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", \"translate(0,\" + (-bbox.height / (2 * numberOfLines) + yOffset) + \")\");\n return bbox.height;\n}\n__name(addText2, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nasync function classBox(parent, node) {\n const config = getConfig2();\n const PADDING = config.class.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n const classNode = node;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.cssStyles = classNode.styles || \"\";\n const styles = classNode.styles?.join(\";\") || nodeStyles || \"\";\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll(\"!important\", \"\").split(\";\");\n }\n const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config.class?.hideEmptyMembersBox;\n const rc = rough56.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const w = bbox.width;\n let h = bbox.height;\n if (classNode.members.length === 0 && classNode.methods.length === 0) {\n h += GAP;\n } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n h += GAP * 2;\n }\n const x = -w / 2;\n const y = -h / 2;\n const roughRect = rc.rectangle(\n x - PADDING,\n y - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0),\n w + 2 * PADDING,\n h + 2 * PADDING + (renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0),\n options\n );\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n const rectBBox = rect2.node().getBBox();\n shapeSvg.selectAll(\".text\").each((_, i, nodes) => {\n const text2 = select7(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateY = parseFloat(translate[2]);\n }\n }\n let newTranslateY = translateY + y + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0);\n if (!useHtmlLabels) {\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (text2.attr(\"class\").includes(\"label-group\") || text2.attr(\"class\").includes(\"annotation-group\")) {\n newTranslateX = -text2.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll(\"text\").each(function(_2, i2, nodes2) {\n if (window.getComputedStyle(nodes2[i2]).textAnchor === \"middle\") {\n newTranslateX = 0;\n }\n });\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY})`);\n });\n const annotationGroupHeight = shapeSvg.select(\".annotation-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight = shapeSvg.select(\".label-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight = shapeSvg.select(\".members-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (classNode.look !== \"handDrawn\") {\n shapeSvg.selectAll(\"path\").attr(\"style\", styles);\n }\n rect2.select(\":nth-child(2)\").attr(\"style\", styles);\n shapeSvg.selectAll(\".divider\").select(\"path\").attr(\"style\", styles);\n if (node.labelStyle) {\n shapeSvg.selectAll(\"span\").attr(\"style\", node.labelStyle);\n } else {\n shapeSvg.selectAll(\"span\").attr(\"style\", styles);\n }\n if (!useHtmlLabels) {\n const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n const match = colorRegex.exec(styles);\n if (match) {\n const colorStyle = match[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n } else if (labelStyles) {\n const match2 = colorRegex.exec(labelStyles);\n if (match2) {\n const colorStyle = match2[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n }\n }\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(classBox, \"classBox\");\n\n// src/rendering-util/rendering-elements/shapes/requirementBox.ts\nimport rough57 from \"roughjs\";\nimport { select as select8 } from \"d3\";\nasync function requirementBox(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const requirementNode = node;\n const elementNode = node;\n const padding = 20;\n const gap = 20;\n const isRequirementNode = \"verifyMethod\" in node;\n const classes = getNodeClasses(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId ?? node.id);\n let typeHeight;\n if (isRequirementNode) {\n typeHeight = await addText3(\n shapeSvg,\n `<<${requirementNode.type}>>`,\n 0,\n node.labelStyle\n );\n } else {\n typeHeight = await addText3(shapeSvg, \"<<Element>>\", 0, node.labelStyle);\n }\n let accumulativeHeight = typeHeight;\n const nameHeight = await addText3(\n shapeSvg,\n requirementNode.name,\n accumulativeHeight,\n node.labelStyle + \"; font-weight: bold;\"\n );\n accumulativeHeight += nameHeight + gap;\n if (isRequirementNode) {\n const idHeight = await addText3(\n shapeSvg,\n `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += idHeight;\n const textHeight = await addText3(\n shapeSvg,\n `${requirementNode.text ? `Text: ${requirementNode.text}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += textHeight;\n const riskHeight = await addText3(\n shapeSvg,\n `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += riskHeight;\n await addText3(\n shapeSvg,\n `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n } else {\n const typeHeight2 = await addText3(\n shapeSvg,\n `${elementNode.type ? `Type: ${elementNode.type}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += typeHeight2;\n await addText3(\n shapeSvg,\n `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n }\n const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rc = rough57.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n shapeSvg.selectAll(\".label\").each((_, i, nodes) => {\n const text2 = select8(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n }\n }\n const newTranslateY = translateY - totalHeight / 2;\n let newTranslateX = x + padding / 2;\n if (i === 0 || i === 1) {\n newTranslateX = translateX;\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY + padding})`);\n });\n if (accumulativeHeight > typeHeight + nameHeight + gap) {\n const roughLine = rc.line(\n x,\n y + typeHeight + nameHeight + gap,\n x + totalWidth,\n y + typeHeight + nameHeight + gap,\n options\n );\n const dividerLine = shapeSvg.insert(() => roughLine);\n dividerLine.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(requirementBox, \"requirementBox\");\nasync function addText3(parentGroup, inputText, yOffset, style = \"\") {\n if (inputText === \"\") {\n return 0;\n }\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", style);\n const config = getConfig2();\n const useHtmlLabels = config.htmlLabels ?? true;\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(inputText)),\n {\n width: calculateTextWidth(inputText, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels,\n style\n },\n config\n );\n let bbox;\n if (!useHtmlLabels) {\n const textChild = text2.children[0];\n for (const child of textChild.children) {\n child.textContent = child.textContent.replaceAll(\">\", \">\").replaceAll(\"<\", \"<\");\n if (style) {\n child.setAttribute(\"style\", style);\n }\n }\n bbox = text2.getBBox();\n bbox.height += 6;\n } else {\n const div = text2.children[0];\n const dv = select8(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n return bbox.height;\n}\n__name(addText3, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/kanbanItem.ts\nimport rough58 from \"roughjs\";\nvar colorFromPriority = /* @__PURE__ */ __name((priority) => {\n switch (priority) {\n case \"Very High\":\n return \"red\";\n case \"High\":\n return \"orange\";\n case \"Medium\":\n return null;\n // no stroke\n case \"Low\":\n return \"blue\";\n case \"Very Low\":\n return \"lightblue\";\n }\n}, \"colorFromPriority\");\nasync function kanbanItem(parent, kanbanNode, { config }) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || \"\";\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n const {\n shapeSvg,\n bbox,\n label: labelElTitle\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n let ticketUrl = \"\";\n let link;\n if (\"ticket\" in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace(\"#TICKET#\", kanbanNode.ticket);\n link = shapeSvg.insert(\"svg:a\", \":first-child\").attr(\"class\", \"kanban-ticket-link\").attr(\"xlink:href\", ticketUrl).attr(\"target\", \"_blank\");\n }\n const options = {\n useHtmlLabels: kanbanNode.useHtmlLabels,\n labelStyle: kanbanNode.labelStyle || \"\",\n width: kanbanNode.width,\n img: kanbanNode.img,\n padding: kanbanNode.padding || 8,\n centerLabel: false\n };\n let labelEl, bbox2;\n if (link) {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n link,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n } else {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n shapeSvg,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n }\n const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n shapeSvg,\n \"assigned\" in kanbanNode && kanbanNode.assigned || \"\",\n options\n );\n kanbanNode.width = orgWidth;\n const labelPaddingY = 10;\n const totalWidth = kanbanNode?.width || 0;\n const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n const totalHeight = Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n labelElTitle.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj - bbox.height / 2) + \")\"\n );\n labelEl.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n labelElAssigned.attr(\n \"transform\",\n \"translate(\" + (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n let rect2;\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n if (kanbanNode.look === \"handDrawn\") {\n const rc = rough58.svg(shapeSvg);\n const options2 = userNodeOverrides(kanbanNode, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", cssStyles ? cssStyles : null);\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container __APA__\").attr(\"style\", nodeStyles).attr(\"rx\", rx ?? 5).attr(\"ry\", ry ?? 5).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n const priority = \"priority\" in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append(\"line\");\n const lineX = x + 2;\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line.attr(\"x1\", lineX).attr(\"y1\", y1).attr(\"x2\", lineX).attr(\"y2\", y2).attr(\"stroke-width\", \"4\").attr(\"stroke\", colorFromPriority(priority));\n }\n }\n updateNodeBounds(kanbanNode, rect2);\n kanbanNode.height = totalHeight;\n kanbanNode.intersect = function(point) {\n return intersect_default.rect(kanbanNode, point);\n };\n return shapeSvg;\n}\n__name(kanbanItem, \"kanbanItem\");\n\n// src/rendering-util/rendering-elements/shapes/bang.ts\nimport rough59 from \"roughjs\";\nasync function bang(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 10 * halfPadding;\n const h = bbox.height + 8 * halfPadding;\n const r = 0.15 * w;\n const { cssStyles } = node;\n const minWidth = bbox.width + 20;\n const minHeight = bbox.height + 20;\n const effectiveWidth = Math.max(w, minWidth);\n const effectiveHeight = Math.max(h, minHeight);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n let bangElem;\n const path = `M0 0 \n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough59.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n bangElem = shapeSvg.insert(() => roughNode, \":first-child\");\n bangElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n bangElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n bangElem.attr(\"transform\", `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n updateNodeBounds(node, bangElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Bang intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(bang, \"bang\");\n\n// src/rendering-util/rendering-elements/shapes/cloud.ts\nimport rough60 from \"roughjs\";\nasync function cloud(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 2 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n const { cssStyles } = node;\n let cloudElem;\n const path = `M0 0 \n a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough60.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n cloudElem = shapeSvg.insert(() => roughNode, \":first-child\");\n cloudElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n cloudElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n cloudElem.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, cloudElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Cloud intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(cloud, \"cloud\");\n\n// src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts\nasync function defaultMindmapNode(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 8 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const rd = 5;\n const rectPath = `\n M${-w / 2} ${h / 2 - rd}\n v${-h + 2 * rd}\n q0,-${rd} ${rd},-${rd}\n h${w - 2 * rd}\n q${rd},0 ${rd},${rd}\n v${h - 2 * rd}\n q0,${rd} -${rd},${rd}\n h${-w + 2 * rd}\n q-${rd},0 -${rd},-${rd}\n Z\n `;\n const bg = shapeSvg.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + node.type).attr(\"style\", nodeStyles).attr(\"d\", rectPath);\n shapeSvg.append(\"line\").attr(\"class\", \"node-line-\").attr(\"x1\", -w / 2).attr(\"y1\", h / 2).attr(\"x2\", w / 2).attr(\"y2\", h / 2);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n shapeSvg.append(() => label.node());\n updateNodeBounds(node, bg);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(defaultMindmapNode, \"defaultMindmapNode\");\n\n// src/rendering-util/rendering-elements/shapes/mindmapCircle.ts\nasync function mindmapCircle(parent, node) {\n const options = {\n padding: node.padding ?? 0\n };\n return circle(parent, node, options);\n}\n__name(mindmapCircle, \"mindmapCircle\");\n\n// src/rendering-util/rendering-elements/shapes.ts\nvar shapesDefs = [\n {\n semanticName: \"Process\",\n name: \"Rectangle\",\n shortName: \"rect\",\n description: \"Standard process shape\",\n aliases: [\"proc\", \"process\", \"rectangle\"],\n internalAliases: [\"squareRect\"],\n handler: squareRect2\n },\n {\n semanticName: \"Event\",\n name: \"Rounded Rectangle\",\n shortName: \"rounded\",\n description: \"Represents an event\",\n aliases: [\"event\"],\n internalAliases: [\"roundedRect\"],\n handler: roundedRect\n },\n {\n semanticName: \"Terminal Point\",\n name: \"Stadium\",\n shortName: \"stadium\",\n description: \"Terminal point\",\n aliases: [\"terminal\", \"pill\"],\n handler: stadium\n },\n {\n semanticName: \"Subprocess\",\n name: \"Framed Rectangle\",\n shortName: \"fr-rect\",\n description: \"Subprocess\",\n aliases: [\"subprocess\", \"subproc\", \"framed-rectangle\", \"subroutine\"],\n handler: subroutine\n },\n {\n semanticName: \"Database\",\n name: \"Cylinder\",\n shortName: \"cyl\",\n description: \"Database storage\",\n aliases: [\"db\", \"database\", \"cylinder\"],\n handler: cylinder\n },\n {\n semanticName: \"Start\",\n name: \"Circle\",\n shortName: \"circle\",\n description: \"Starting point\",\n aliases: [\"circ\"],\n handler: circle\n },\n {\n semanticName: \"Bang\",\n name: \"Bang\",\n shortName: \"bang\",\n description: \"Bang\",\n aliases: [\"bang\"],\n handler: bang\n },\n {\n semanticName: \"Cloud\",\n name: \"Cloud\",\n shortName: \"cloud\",\n description: \"cloud\",\n aliases: [\"cloud\"],\n handler: cloud\n },\n {\n semanticName: \"Decision\",\n name: \"Diamond\",\n shortName: \"diam\",\n description: \"Decision-making step\",\n aliases: [\"decision\", \"diamond\", \"question\"],\n handler: question\n },\n {\n semanticName: \"Prepare Conditional\",\n name: \"Hexagon\",\n shortName: \"hex\",\n description: \"Preparation or condition step\",\n aliases: [\"hexagon\", \"prepare\"],\n handler: hexagon\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Right\",\n shortName: \"lean-r\",\n description: \"Represents input or output\",\n aliases: [\"lean-right\", \"in-out\"],\n internalAliases: [\"lean_right\"],\n handler: lean_right\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Left\",\n shortName: \"lean-l\",\n description: \"Represents output or input\",\n aliases: [\"lean-left\", \"out-in\"],\n internalAliases: [\"lean_left\"],\n handler: lean_left\n },\n {\n semanticName: \"Priority Action\",\n name: \"Trapezoid Base Bottom\",\n shortName: \"trap-b\",\n description: \"Priority action\",\n aliases: [\"priority\", \"trapezoid-bottom\", \"trapezoid\"],\n handler: trapezoid\n },\n {\n semanticName: \"Manual Operation\",\n name: \"Trapezoid Base Top\",\n shortName: \"trap-t\",\n description: \"Represents a manual task\",\n aliases: [\"manual\", \"trapezoid-top\", \"inv-trapezoid\"],\n internalAliases: [\"inv_trapezoid\"],\n handler: inv_trapezoid\n },\n {\n semanticName: \"Stop\",\n name: \"Double Circle\",\n shortName: \"dbl-circ\",\n description: \"Represents a stop point\",\n aliases: [\"double-circle\"],\n internalAliases: [\"doublecircle\"],\n handler: doublecircle\n },\n {\n semanticName: \"Text Block\",\n name: \"Text Block\",\n shortName: \"text\",\n description: \"Text block\",\n handler: text\n },\n {\n semanticName: \"Card\",\n name: \"Notched Rectangle\",\n shortName: \"notch-rect\",\n description: \"Represents a card\",\n aliases: [\"card\", \"notched-rectangle\"],\n handler: card\n },\n {\n semanticName: \"Lined/Shaded Process\",\n name: \"Lined Rectangle\",\n shortName: \"lin-rect\",\n description: \"Lined process shape\",\n aliases: [\"lined-rectangle\", \"lined-process\", \"lin-proc\", \"shaded-process\"],\n handler: shadedProcess\n },\n {\n semanticName: \"Start\",\n name: \"Small Circle\",\n shortName: \"sm-circ\",\n description: \"Small starting point\",\n aliases: [\"start\", \"small-circle\"],\n internalAliases: [\"stateStart\"],\n handler: stateStart\n },\n {\n semanticName: \"Stop\",\n name: \"Framed Circle\",\n shortName: \"fr-circ\",\n description: \"Stop point\",\n aliases: [\"stop\", \"framed-circle\"],\n internalAliases: [\"stateEnd\"],\n handler: stateEnd\n },\n {\n semanticName: \"Fork/Join\",\n name: \"Filled Rectangle\",\n shortName: \"fork\",\n description: \"Fork or join in process flow\",\n aliases: [\"join\"],\n internalAliases: [\"forkJoin\"],\n handler: forkJoin\n },\n {\n semanticName: \"Collate\",\n name: \"Hourglass\",\n shortName: \"hourglass\",\n description: \"Represents a collate operation\",\n aliases: [\"hourglass\", \"collate\"],\n handler: hourglass\n },\n {\n semanticName: \"Comment\",\n name: \"Curly Brace\",\n shortName: \"brace\",\n description: \"Adds a comment\",\n aliases: [\"comment\", \"brace-l\"],\n handler: curlyBraceLeft\n },\n {\n semanticName: \"Comment Right\",\n name: \"Curly Brace\",\n shortName: \"brace-r\",\n description: \"Adds a comment\",\n handler: curlyBraceRight\n },\n {\n semanticName: \"Comment with braces on both sides\",\n name: \"Curly Braces\",\n shortName: \"braces\",\n description: \"Adds a comment\",\n handler: curlyBraces\n },\n {\n semanticName: \"Com Link\",\n name: \"Lightning Bolt\",\n shortName: \"bolt\",\n description: \"Communication link\",\n aliases: [\"com-link\", \"lightning-bolt\"],\n handler: lightningBolt\n },\n {\n semanticName: \"Document\",\n name: \"Document\",\n shortName: \"doc\",\n description: \"Represents a document\",\n aliases: [\"doc\", \"document\"],\n handler: waveEdgedRectangle\n },\n {\n semanticName: \"Delay\",\n name: \"Half-Rounded Rectangle\",\n shortName: \"delay\",\n description: \"Represents a delay\",\n aliases: [\"half-rounded-rectangle\"],\n handler: halfRoundedRectangle\n },\n {\n semanticName: \"Direct Access Storage\",\n name: \"Horizontal Cylinder\",\n shortName: \"h-cyl\",\n description: \"Direct access storage\",\n aliases: [\"das\", \"horizontal-cylinder\"],\n handler: tiltedCylinder\n },\n {\n semanticName: \"Disk Storage\",\n name: \"Lined Cylinder\",\n shortName: \"lin-cyl\",\n description: \"Disk storage\",\n aliases: [\"disk\", \"lined-cylinder\"],\n handler: linedCylinder\n },\n {\n semanticName: \"Display\",\n name: \"Curved Trapezoid\",\n shortName: \"curv-trap\",\n description: \"Represents a display\",\n aliases: [\"curved-trapezoid\", \"display\"],\n handler: curvedTrapezoid\n },\n {\n semanticName: \"Divided Process\",\n name: \"Divided Rectangle\",\n shortName: \"div-rect\",\n description: \"Divided process shape\",\n aliases: [\"div-proc\", \"divided-rectangle\", \"divided-process\"],\n handler: dividedRectangle\n },\n {\n semanticName: \"Extract\",\n name: \"Triangle\",\n shortName: \"tri\",\n description: \"Extraction process\",\n aliases: [\"extract\", \"triangle\"],\n handler: triangle\n },\n {\n semanticName: \"Internal Storage\",\n name: \"Window Pane\",\n shortName: \"win-pane\",\n description: \"Internal storage\",\n aliases: [\"internal-storage\", \"window-pane\"],\n handler: windowPane\n },\n {\n semanticName: \"Junction\",\n name: \"Filled Circle\",\n shortName: \"f-circ\",\n description: \"Junction point\",\n aliases: [\"junction\", \"filled-circle\"],\n handler: filledCircle\n },\n {\n semanticName: \"Loop Limit\",\n name: \"Trapezoidal Pentagon\",\n shortName: \"notch-pent\",\n description: \"Loop limit step\",\n aliases: [\"loop-limit\", \"notched-pentagon\"],\n handler: trapezoidalPentagon\n },\n {\n semanticName: \"Manual File\",\n name: \"Flipped Triangle\",\n shortName: \"flip-tri\",\n description: \"Manual file operation\",\n aliases: [\"manual-file\", \"flipped-triangle\"],\n handler: flippedTriangle\n },\n {\n semanticName: \"Manual Input\",\n name: \"Sloped Rectangle\",\n shortName: \"sl-rect\",\n description: \"Manual input step\",\n aliases: [\"manual-input\", \"sloped-rectangle\"],\n handler: slopedRect\n },\n {\n semanticName: \"Multi-Document\",\n name: \"Stacked Document\",\n shortName: \"docs\",\n description: \"Multiple documents\",\n aliases: [\"documents\", \"st-doc\", \"stacked-document\"],\n handler: multiWaveEdgedRectangle\n },\n {\n semanticName: \"Multi-Process\",\n name: \"Stacked Rectangle\",\n shortName: \"st-rect\",\n description: \"Multiple processes\",\n aliases: [\"procs\", \"processes\", \"stacked-rectangle\"],\n handler: multiRect\n },\n {\n semanticName: \"Stored Data\",\n name: \"Bow Tie Rectangle\",\n shortName: \"bow-rect\",\n description: \"Stored data\",\n aliases: [\"stored-data\", \"bow-tie-rectangle\"],\n handler: bowTieRect\n },\n {\n semanticName: \"Summary\",\n name: \"Crossed Circle\",\n shortName: \"cross-circ\",\n description: \"Summary\",\n aliases: [\"summary\", \"crossed-circle\"],\n handler: crossedCircle\n },\n {\n semanticName: \"Tagged Document\",\n name: \"Tagged Document\",\n shortName: \"tag-doc\",\n description: \"Tagged document\",\n aliases: [\"tag-doc\", \"tagged-document\"],\n handler: taggedWaveEdgedRectangle\n },\n {\n semanticName: \"Tagged Process\",\n name: \"Tagged Rectangle\",\n shortName: \"tag-rect\",\n description: \"Tagged process\",\n aliases: [\"tagged-rectangle\", \"tag-proc\", \"tagged-process\"],\n handler: taggedRect\n },\n {\n semanticName: \"Paper Tape\",\n name: \"Flag\",\n shortName: \"flag\",\n description: \"Paper tape\",\n aliases: [\"paper-tape\"],\n handler: waveRectangle\n },\n {\n semanticName: \"Odd\",\n name: \"Odd\",\n shortName: \"odd\",\n description: \"Odd shape\",\n internalAliases: [\"rect_left_inv_arrow\"],\n handler: rect_left_inv_arrow\n },\n {\n semanticName: \"Lined Document\",\n name: \"Lined Document\",\n shortName: \"lin-doc\",\n description: \"Lined document\",\n aliases: [\"lined-document\"],\n handler: linedWaveEdgedRect\n }\n];\nvar generateShapeMap = /* @__PURE__ */ __name(() => {\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n // Rectangles\n rectWithTitle,\n labelRect,\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n // Kanban diagram\n kanbanItem,\n //Mindmap diagram\n mindmapCircle,\n defaultMindmapNode,\n // class diagram\n classBox,\n // er diagram\n erBox,\n // Requirement diagram\n requirementBox\n };\n const entries = [\n ...Object.entries(undocumentedShapes),\n ...shapesDefs.flatMap((shape) => {\n const aliases = [\n shape.shortName,\n ...\"aliases\" in shape ? shape.aliases : [],\n ...\"internalAliases\" in shape ? shape.internalAliases : []\n ];\n return aliases.map((alias) => [alias, shape.handler]);\n })\n ];\n return Object.fromEntries(entries);\n}, \"generateShapeMap\");\nvar shapes2 = generateShapeMap();\nfunction isValidShape(shape) {\n return shape in shapes2;\n}\n__name(isValidShape, \"isValidShape\");\n\n// src/rendering-util/rendering-elements/nodes.ts\nvar nodeElems = /* @__PURE__ */ new Map();\nasync function insertNode(elem, node, renderOptions) {\n let newEl;\n let el;\n if (node.shape === \"rect\") {\n if (node.rx && node.ry) {\n node.shape = \"roundedRect\";\n } else {\n node.shape = \"squareRect\";\n }\n }\n const shapeHandler = node.shape ? shapes2[node.shape] : void 0;\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n if (node.link) {\n let target;\n if (renderOptions.config.securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n nodeElems.set(node.id, newEl);\n if (node.haveCallback) {\n newEl.attr(\"class\", newEl.attr(\"class\") + \" clickable\");\n }\n return newEl;\n}\n__name(insertNode, \"insertNode\");\nvar setNodeElem = /* @__PURE__ */ __name((elem, node) => {\n nodeElems.set(node.id, elem);\n}, \"setNodeElem\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n nodeElems.clear();\n}, \"clear\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems.get(node.id);\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\nexport {\n labelHelper,\n updateNodeBounds,\n createLabel_default,\n isValidShape,\n insertCluster,\n clear,\n insertNode,\n setNodeElem,\n clear2,\n positionNode\n};\n","import {\n getLineFunctionsWithOffset,\n markerOffsets,\n markerOffsets2\n} from \"./chunk-HN2XXSSU.mjs\";\nimport {\n createLabel_default\n} from \"./chunk-JZLCHNYA.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-CVBHYZKI.mjs\";\nimport {\n isLabelStyle,\n styles2String\n} from \"./chunk-ATLVNIR6.mjs\";\nimport {\n createText\n} from \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n evaluate,\n getConfig2 as getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/edges.js\nimport {\n curveBasis,\n curveLinear,\n curveCardinal,\n curveBumpX,\n curveBumpY,\n curveCatmullRom,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n line,\n select\n} from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/edgeMarker.ts\nvar addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id, diagramType, strokeColor) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, \"start\", edge.arrowTypeStart, url, id, diagramType, strokeColor);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, \"end\", edge.arrowTypeEnd, url, id, diagramType, strokeColor);\n }\n}, \"addEdgeMarkers\");\nvar arrowTypesMap = {\n arrow_cross: { type: \"cross\", fill: false },\n arrow_point: { type: \"point\", fill: true },\n arrow_barb: { type: \"barb\", fill: true },\n arrow_circle: { type: \"circle\", fill: false },\n aggregation: { type: \"aggregation\", fill: false },\n extension: { type: \"extension\", fill: false },\n composition: { type: \"composition\", fill: true },\n dependency: { type: \"dependency\", fill: true },\n lollipop: { type: \"lollipop\", fill: false },\n only_one: { type: \"onlyOne\", fill: false },\n zero_or_one: { type: \"zeroOrOne\", fill: false },\n one_or_more: { type: \"oneOrMore\", fill: false },\n zero_or_more: { type: \"zeroOrMore\", fill: false },\n requirement_arrow: { type: \"requirement_arrow\", fill: false },\n requirement_contains: { type: \"requirement_contains\", fill: false }\n};\nvar addEdgeMarker = /* @__PURE__ */ __name((svgPath, position, arrowType, url, id, diagramType, strokeColor) => {\n const arrowTypeInfo = arrowTypesMap[arrowType];\n if (!arrowTypeInfo) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return;\n }\n const endMarkerType = arrowTypeInfo.type;\n const suffix = position === \"start\" ? \"Start\" : \"End\";\n const originalMarkerId = `${id}_${diagramType}-${endMarkerType}${suffix}`;\n if (strokeColor && strokeColor.trim() !== \"\") {\n const colorId = strokeColor.replace(/[^\\dA-Za-z]/g, \"_\");\n const coloredMarkerId = `${originalMarkerId}_${colorId}`;\n if (!document.getElementById(coloredMarkerId)) {\n const originalMarker = document.getElementById(originalMarkerId);\n if (originalMarker) {\n const coloredMarker = originalMarker.cloneNode(true);\n coloredMarker.id = coloredMarkerId;\n const paths = coloredMarker.querySelectorAll(\"path, circle, line\");\n paths.forEach((path) => {\n path.setAttribute(\"stroke\", strokeColor);\n if (arrowTypeInfo.fill) {\n path.setAttribute(\"fill\", strokeColor);\n }\n });\n originalMarker.parentNode?.appendChild(coloredMarker);\n }\n }\n svgPath.attr(`marker-${position}`, `url(${url}#${coloredMarkerId})`);\n } else {\n svgPath.attr(`marker-${position}`, `url(${url}#${originalMarkerId})`);\n }\n}, \"addEdgeMarker\");\n\n// src/rendering-util/rendering-elements/edges.js\nvar edgeLabels = /* @__PURE__ */ new Map();\nvar terminalLabels = /* @__PURE__ */ new Map();\nvar clear = /* @__PURE__ */ __name(() => {\n edgeLabels.clear();\n terminalLabels.clear();\n}, \"clear\");\nvar getLabelStyles = /* @__PURE__ */ __name((styleArray) => {\n let styles = styleArray ? styleArray.reduce((acc, style) => acc + \";\" + style, \"\") : \"\";\n return styles;\n}, \"getLabelStyles\");\nvar insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => {\n let useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n const { labelStyles } = styles2String(edge);\n edge.labelStyle = labelStyles;\n const labelElement = await createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true,\n isNode: false\n });\n log.info(\"abc82\", edge, edge.labelType);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\").attr(\"data-id\", edge.id);\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels.set(edge.id, edgeLabel);\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = await createLabel_default(\n edge.startLabelLeft,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = await createLabel_default(\n edge.startLabelRight,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = await createLabel_default(edge.endLabelLeft, getLabelStyles(edge.labelStyle));\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = await createLabel_default(edge.endLabelRight, getLabelStyles(edge.labelStyle));\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n}, \"insertEdgeLabel\");\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\n__name(setTerminalWidth, \"setTerminalWidth\");\nvar positionEdgeLabel = /* @__PURE__ */ __name((edge, paths) => {\n log.debug(\"Moving label abc88 \", edge.id, edge.label, edgeLabels.get(edge.id), paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}, \"positionEdgeLabel\");\nvar outsideNode = /* @__PURE__ */ __name((node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n return dx >= w || dy >= h;\n}, \"outsideNode\");\nvar intersection = /* @__PURE__ */ __name((node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.debug(`abc89 top/bottom calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n}, \"intersection\");\nvar cutPathAtIntersect = /* @__PURE__ */ __name((_points, boundaryNode) => {\n log.warn(\"abc88 cutPathAtIntersect\", _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n log.info(\"abc88 checking point\", point2, boundaryNode);\n if (!outsideNode(boundaryNode, point2) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point2);\n log.debug(\"abc88 inside\", point2, lastPointOutside, inter);\n log.debug(\"abc88 intersection\", inter, boundaryNode);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn(\"abc88 no intersect\", inter, points);\n }\n isInside = true;\n } else {\n log.warn(\"abc88 outside\", point2, lastPointOutside);\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n log.debug(\"returning points\", points);\n return points;\n}, \"cutPathAtIntersect\");\nfunction extractCornerPoints(points) {\n const cornerPoints = [];\n const cornerPointPositions = [];\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n if (prev.x === curr.x && curr.y === next.y && Math.abs(curr.x - next.x) > 5 && Math.abs(curr.y - prev.y) > 5) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n } else if (prev.y === curr.y && curr.x === next.x && Math.abs(curr.x - prev.x) > 5 && Math.abs(curr.y - next.y) > 5) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n }\n }\n return { cornerPoints, cornerPointPositions };\n}\n__name(extractCornerPoints, \"extractCornerPoints\");\nvar findAdjacentPoint = /* @__PURE__ */ __name(function(pointA, pointB, distance) {\n const xDiff = pointB.x - pointA.x;\n const yDiff = pointB.y - pointA.y;\n const length = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n const ratio = distance / length;\n return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff };\n}, \"findAdjacentPoint\");\nvar fixCorners = /* @__PURE__ */ __name(function(lineData) {\n const { cornerPointPositions } = extractCornerPoints(lineData);\n const newLineData = [];\n for (let i = 0; i < lineData.length; i++) {\n if (cornerPointPositions.includes(i)) {\n const prevPoint = lineData[i - 1];\n const nextPoint = lineData[i + 1];\n const cornerPoint = lineData[i];\n const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5);\n const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5);\n const xDiff = newNextPoint.x - newPrevPoint.x;\n const yDiff = newNextPoint.y - newPrevPoint.y;\n newLineData.push(newPrevPoint);\n const a = Math.sqrt(2) * 2;\n let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y };\n if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) {\n log.debug(\n \"Corner point fixing\",\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n const r = 5;\n if (cornerPoint.x === newPrevPoint.x) {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - r + a : newPrevPoint.x + r - a,\n y: yDiff < 0 ? newPrevPoint.y - a : newPrevPoint.y + a\n };\n } else {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - a : newPrevPoint.x + a,\n y: yDiff < 0 ? newPrevPoint.y - r + a : newPrevPoint.y + r - a\n };\n }\n } else {\n log.debug(\n \"Corner point skipping fixing\",\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n }\n newLineData.push(newCornerPoint, newNextPoint);\n } else {\n newLineData.push(lineData[i]);\n }\n }\n return newLineData;\n}, \"fixCorners\");\nvar generateDashArray = /* @__PURE__ */ __name((len, oValueS, oValueE) => {\n const middleLength = len - oValueS - oValueE;\n const dashLength = 2;\n const gapLength = 2;\n const dashGapPairLength = dashLength + gapLength;\n const numberOfPairs = Math.floor(middleLength / dashGapPairLength);\n const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(\" \");\n const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`;\n return dashArray;\n}, \"generateDashArray\");\nvar insertEdge = /* @__PURE__ */ __name(function(elem, edge, clusterDb, diagramType, startNode, endNode, id, skipIntersect = false) {\n const { handDrawnSeed } = getConfig();\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = startNode;\n var head = endNode;\n const edgeClassStyles = [];\n for (const key in edge.cssCompiledStyles) {\n if (isLabelStyle(key)) {\n continue;\n }\n edgeClassStyles.push(edge.cssCompiledStyles[key]);\n }\n log.debug(\"UIO intersect check\", edge.points, head.x, tail.x);\n if (head.intersect && tail.intersect && !skipIntersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.debug(\n \"Last point UIO\",\n edge.start,\n \"-->\",\n edge.end,\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n const pointsStr = btoa(JSON.stringify(points));\n if (edge.toCluster) {\n log.info(\"to cluster abc88\", clusterDb.get(edge.toCluster));\n points = cutPathAtIntersect(edge.points, clusterDb.get(edge.toCluster).node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.debug(\n \"from cluster abc88\",\n clusterDb.get(edge.fromCluster),\n JSON.stringify(points, null, 2)\n );\n points = cutPathAtIntersect(points.reverse(), clusterDb.get(edge.fromCluster).node).reverse();\n pointsHasChanged = true;\n }\n let lineData = points.filter((p) => !Number.isNaN(p.y));\n lineData = fixCorners(lineData);\n let curve = curveBasis;\n curve = curveLinear;\n switch (edge.curve) {\n case \"linear\":\n curve = curveLinear;\n break;\n case \"basis\":\n curve = curveBasis;\n break;\n case \"cardinal\":\n curve = curveCardinal;\n break;\n case \"bumpX\":\n curve = curveBumpX;\n break;\n case \"bumpY\":\n curve = curveBumpY;\n break;\n case \"catmullRom\":\n curve = curveCatmullRom;\n break;\n case \"monotoneX\":\n curve = curveMonotoneX;\n break;\n case \"monotoneY\":\n curve = curveMonotoneY;\n break;\n case \"natural\":\n curve = curveNatural;\n break;\n case \"step\":\n curve = curveStep;\n break;\n case \"stepAfter\":\n curve = curveStepAfter;\n break;\n case \"stepBefore\":\n curve = curveStepBefore;\n break;\n default:\n curve = curveBasis;\n }\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-invisible\";\n break;\n default:\n strokeClasses = \"edge-thickness-normal\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n default:\n strokeClasses += \" edge-pattern-solid\";\n }\n let svgPath;\n let linePath = edge.curve === \"rounded\" ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) : lineFunction(lineData);\n const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];\n let strokeColor = edgeStyles.find((style) => style?.startsWith(\"stroke:\"));\n let animatedEdge = false;\n if (edge.look === \"handDrawn\") {\n const rc = rough.svg(elem);\n Object.assign([], lineData);\n const svgPathNode = rc.path(linePath, {\n roughness: 0.3,\n seed: handDrawnSeed\n });\n strokeClasses += \" transition\";\n svgPath = select(svgPathNode).select(\"path\").attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edgeStyles ? edgeStyles.reduce((acc, style) => acc + \";\" + style, \"\") : \"\");\n let d = svgPath.attr(\"d\");\n svgPath.attr(\"d\", d);\n elem.node().appendChild(svgPath.node());\n } else {\n const stylesFromClasses = edgeClassStyles.join(\";\");\n const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + \";\", \"\") : \"\";\n let animationClass = \"\";\n if (edge.animate) {\n animationClass = \" edge-animation-fast\";\n }\n if (edge.animation) {\n animationClass = \" edge-animation-\" + edge.animation;\n }\n const pathStyle = (stylesFromClasses ? stylesFromClasses + \";\" + styles + \";\" : styles) + \";\" + (edgeStyles ? edgeStyles.reduce((acc, style) => acc + \";\" + style, \"\") : \"\");\n svgPath = elem.append(\"path\").attr(\"d\", linePath).attr(\"id\", edge.id).attr(\n \"class\",\n \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\") + (animationClass ?? \"\")\n ).attr(\"style\", pathStyle);\n strokeColor = pathStyle.match(/stroke:([^;]+)/)?.[1];\n animatedEdge = edge.animate === true || !!edge.animation || stylesFromClasses.includes(\"animation\");\n const pathNode = svgPath.node();\n const len = typeof pathNode.getTotalLength === \"function\" ? pathNode.getTotalLength() : 0;\n const oValueS = markerOffsets2[edge.arrowTypeStart] || 0;\n const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0;\n if (edge.look === \"neo\" && !animatedEdge) {\n const dashArray = edge.pattern === \"dotted\" || edge.pattern === \"dashed\" ? generateDashArray(len, oValueS, oValueE) : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`;\n const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`;\n svgPath.attr(\"style\", mOffset + svgPath.attr(\"style\"));\n }\n }\n svgPath.attr(\"data-edge\", true);\n svgPath.attr(\"data-et\", \"edge\");\n svgPath.attr(\"data-id\", edge.id);\n svgPath.attr(\"data-points\", pointsStr);\n if (edge.showPoints) {\n lineData.forEach((point3) => {\n elem.append(\"circle\").style(\"stroke\", \"red\").style(\"fill\", \"red\").attr(\"r\", 1).attr(\"cx\", point3.x).attr(\"cy\", point3.y);\n });\n }\n let url = \"\";\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\").replace(/\\)/g, \"\\\\)\");\n }\n log.info(\"arrowTypeStart\", edge.arrowTypeStart);\n log.info(\"arrowTypeEnd\", edge.arrowTypeEnd);\n addEdgeMarkers(svgPath, edge, url, id, diagramType, strokeColor);\n const midIndex = Math.floor(points.length / 2);\n const point2 = points[midIndex];\n if (!utils_default.isLabelCoordinateInPath(point2, svgPath.attr(\"d\"))) {\n pointsHasChanged = true;\n }\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n}, \"insertEdge\");\nfunction generateRoundedPath(points, radius) {\n if (points.length < 2) {\n return \"\";\n }\n let path = \"\";\n const size = points.length;\n const epsilon = 1e-5;\n for (let i = 0; i < size; i++) {\n const currPoint = points[i];\n const prevPoint = points[i - 1];\n const nextPoint = points[i + 1];\n if (i === 0) {\n path += `M${currPoint.x},${currPoint.y}`;\n } else if (i === size - 1) {\n path += `L${currPoint.x},${currPoint.y}`;\n } else {\n const dx1 = currPoint.x - prevPoint.x;\n const dy1 = currPoint.y - prevPoint.y;\n const dx2 = nextPoint.x - currPoint.x;\n const dy2 = nextPoint.y - currPoint.y;\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n if (len1 < epsilon || len2 < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n const dot = nx1 * nx2 + ny1 * ny2;\n const clampedDot = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clampedDot);\n if (angle < epsilon || Math.abs(Math.PI - angle) < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n const startX = currPoint.x - nx1 * cutLen;\n const startY = currPoint.y - ny1 * cutLen;\n const endX = currPoint.x + nx2 * cutLen;\n const endY = currPoint.y + ny2 * cutLen;\n path += `L${startX},${startY}`;\n path += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`;\n }\n }\n return path;\n}\n__name(generateRoundedPath, \"generateRoundedPath\");\nfunction calculateDeltaAndAngle(point1, point2) {\n if (!point1 || !point2) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n const deltaX = point2.x - point1.x;\n const deltaY = point2.y - point1.y;\n const angle = Math.atan2(deltaY, deltaX);\n return { angle, deltaX, deltaY };\n}\n__name(calculateDeltaAndAngle, \"calculateDeltaAndAngle\");\nfunction applyMarkerOffsetsToPoints(points, edge) {\n const newPoints = points.map((point2) => ({ ...point2 }));\n if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) {\n const offsetValue = markerOffsets[edge.arrowTypeStart];\n const point1 = points[0];\n const point2 = points[1];\n const { angle } = calculateDeltaAndAngle(point1, point2);\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n newPoints[0].x = point1.x + offsetX;\n newPoints[0].y = point1.y + offsetY;\n }\n const n = points.length;\n if (n >= 2 && markerOffsets[edge.arrowTypeEnd]) {\n const offsetValue = markerOffsets[edge.arrowTypeEnd];\n const point1 = points[n - 1];\n const point2 = points[n - 2];\n const { angle } = calculateDeltaAndAngle(point2, point1);\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n newPoints[n - 1].x = point1.x - offsetX;\n newPoints[n - 1].y = point1.y - offsetY;\n }\n return newPoints;\n}\n__name(applyMarkerOffsetsToPoints, \"applyMarkerOffsetsToPoints\");\n\n// src/rendering-util/rendering-elements/markers.js\nvar insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n}, \"insertMarkers\");\nvar extension = /* @__PURE__ */ __name((elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n}, \"extension\");\nvar composition = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"composition\");\nvar aggregation = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n}, \"aggregation\");\nvar dependency = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 6).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n}, \"dependency\");\nvar lollipop = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopEnd\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n}, \"lollipop\");\nvar point = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 4.5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"point\");\nvar circle = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n}, \"circle\");\nvar cross = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n}, \"cross\");\nvar barb = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"barb\");\nvar only_one = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-onlyOneStart\").attr(\"class\", \"marker onlyOne \" + type).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M9,0 L9,18 M15,0 L15,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-onlyOneEnd\").attr(\"class\", \"marker onlyOne \" + type).attr(\"refX\", 18).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M3,0 L3,18 M9,0 L9,18\");\n}, \"only_one\");\nvar zero_or_one = /* @__PURE__ */ __name((elem, type, id) => {\n const startMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrOneStart\").attr(\"class\", \"marker zeroOrOne \" + type).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n startMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 21).attr(\"cy\", 9).attr(\"r\", 6);\n startMarker.append(\"path\").attr(\"d\", \"M9,0 L9,18\");\n const endMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrOneEnd\").attr(\"class\", \"marker zeroOrOne \" + type).attr(\"refX\", 30).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n endMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 9).attr(\"r\", 6);\n endMarker.append(\"path\").attr(\"d\", \"M21,0 L21,18\");\n}, \"zero_or_one\");\nvar one_or_more = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-oneOrMoreStart\").attr(\"class\", \"marker oneOrMore \" + type).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-oneOrMoreEnd\").attr(\"class\", \"marker oneOrMore \" + type).attr(\"refX\", 27).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18\");\n}, \"one_or_more\");\nvar zero_or_more = /* @__PURE__ */ __name((elem, type, id) => {\n const startMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrMoreStart\").attr(\"class\", \"marker zeroOrMore \" + type).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n startMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 48).attr(\"cy\", 18).attr(\"r\", 6);\n startMarker.append(\"path\").attr(\"d\", \"M0,18 Q18,0 36,18 Q18,36 0,18\");\n const endMarker = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-zeroOrMoreEnd\").attr(\"class\", \"marker zeroOrMore \" + type).attr(\"refX\", 39).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n endMarker.append(\"circle\").attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 18).attr(\"r\", 6);\n endMarker.append(\"path\").attr(\"d\", \"M21,18 Q39,0 57,18 Q39,36 21,18\");\n}, \"zero_or_more\");\nvar requirement_arrow = /* @__PURE__ */ __name((elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-requirement_arrowEnd\").attr(\"refX\", 20).attr(\"refY\", 10).attr(\"markerWidth\", 20).attr(\"markerHeight\", 20).attr(\"orient\", \"auto\").append(\"path\").attr(\n \"d\",\n `M0,0\n L20,10\n M20,10\n L0,20`\n );\n}, \"requirement_arrow\");\nvar requirement_contains = /* @__PURE__ */ __name((elem, type, id) => {\n const containsNode = elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-requirement_containsStart\").attr(\"refX\", 0).attr(\"refY\", 10).attr(\"markerWidth\", 20).attr(\"markerHeight\", 20).attr(\"orient\", \"auto\").append(\"g\");\n containsNode.append(\"circle\").attr(\"cx\", 10).attr(\"cy\", 10).attr(\"r\", 9).attr(\"fill\", \"none\");\n containsNode.append(\"line\").attr(\"x1\", 1).attr(\"x2\", 19).attr(\"y1\", 10).attr(\"y2\", 10);\n containsNode.append(\"line\").attr(\"y1\", 1).attr(\"y2\", 19).attr(\"x1\", 10).attr(\"x2\", 10);\n}, \"requirement_contains\");\nvar markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb,\n only_one,\n zero_or_one,\n one_or_more,\n zero_or_more,\n requirement_arrow,\n requirement_contains\n};\nvar markers_default = insertMarkers;\n\nexport {\n clear,\n insertEdgeLabel,\n positionEdgeLabel,\n insertEdge,\n markers_default\n};\n","import {\n insertEdge,\n insertEdgeLabel,\n markers_default,\n positionEdgeLabel\n} from \"./chunk-QXUST7PY.mjs\";\nimport {\n insertCluster,\n insertNode,\n labelHelper\n} from \"./chunk-JZLCHNYA.mjs\";\nimport {\n interpolateToCurve\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n getConfig\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/internals.ts\nvar internalHelpers = {\n common: common_default,\n getConfig,\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers: markers_default,\n insertNode,\n interpolateToCurve,\n labelHelper,\n log,\n positionEdgeLabel\n};\n\n// src/rendering-util/render.ts\nvar layoutAlgorithms = {};\nvar registerLayoutLoaders = /* @__PURE__ */ __name((loaders) => {\n for (const loader of loaders) {\n layoutAlgorithms[loader.name] = loader;\n }\n}, \"registerLayoutLoaders\");\nvar registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {\n registerLayoutLoaders([\n {\n name: \"dagre\",\n loader: /* @__PURE__ */ __name(async () => await import(\"./dagre-6UL2VRFP.mjs\"), \"loader\")\n },\n ...true ? [\n {\n name: \"cose-bilkent\",\n loader: /* @__PURE__ */ __name(async () => await import(\"./cose-bilkent-S5V4N54A.mjs\"), \"loader\")\n }\n ] : []\n ]);\n}, \"registerDefaultLayoutLoaders\");\nregisterDefaultLayoutLoaders();\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg) => {\n if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) {\n throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`);\n }\n const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm];\n const layoutRenderer = await layoutDefinition.loader();\n return layoutRenderer.render(data4Layout, svg, internalHelpers, {\n algorithm: layoutDefinition.algorithm\n });\n}, \"render\");\nvar getRegisteredLayoutAlgorithm = /* @__PURE__ */ __name((algorithm = \"\", { fallback = \"dagre\" } = {}) => {\n if (algorithm in layoutAlgorithms) {\n return algorithm;\n }\n if (fallback in layoutAlgorithms) {\n log.warn(`Layout algorithm ${algorithm} is not registered. Using ${fallback} as fallback.`);\n return fallback;\n }\n throw new Error(`Both layout algorithms ${algorithm} and ${fallback} are not registered.`);\n}, \"getRegisteredLayoutAlgorithm\");\n\nexport {\n registerLayoutLoaders,\n render,\n getRegisteredLayoutAlgorithm\n};\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import {\n package_default\n} from \"./chunks/mermaid.core/chunk-XAJISQIX.mjs\";\nimport {\n selectSvgElement\n} from \"./chunks/mermaid.core/chunk-EXTU4WIE.mjs\";\nimport {\n JSON_SCHEMA,\n load\n} from \"./chunks/mermaid.core/chunk-MI3HLSF2.mjs\";\nimport {\n registerLayoutLoaders\n} from \"./chunks/mermaid.core/chunk-N4CR4FBY.mjs\";\nimport \"./chunks/mermaid.core/chunk-QXUST7PY.mjs\";\nimport \"./chunks/mermaid.core/chunk-HN2XXSSU.mjs\";\nimport \"./chunks/mermaid.core/chunk-JZLCHNYA.mjs\";\nimport \"./chunks/mermaid.core/chunk-CVBHYZKI.mjs\";\nimport \"./chunks/mermaid.core/chunk-ATLVNIR6.mjs\";\nimport {\n registerIconPacks\n} from \"./chunks/mermaid.core/chunk-JA3XYJ7Z.mjs\";\nimport {\n cleanAndMerge,\n decodeEntities,\n encodeEntities,\n isDetailedError,\n removeDirectives,\n utils_default\n} from \"./chunks/mermaid.core/chunk-S3R3BYOJ.mjs\";\nimport {\n UnknownDiagramError,\n addDirective,\n assignWithDepth_default,\n configureSvgSize,\n defaultConfig,\n detectType,\n detectors,\n evaluate,\n frontMatterRegex,\n getConfig,\n getDiagram,\n getDiagramLoader,\n getSiteConfig,\n registerDiagram,\n registerLazyLoadedDiagrams,\n reset,\n saveConfigFromInitialize,\n setConfig,\n setSiteConfig,\n styles_default,\n themes_default,\n updateSiteConfig\n} from \"./chunks/mermaid.core/chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log,\n setLogLevel\n} from \"./chunks/mermaid.core/chunk-AGHRB4JF.mjs\";\n\n// src/mermaid.ts\nimport { dedent } from \"ts-dedent\";\n\n// src/diagrams/c4/c4Detector.ts\nvar id = \"c4\";\nvar detector = /* @__PURE__ */ __name((txt) => {\n return /^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);\n}, \"detector\");\nvar loader = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/c4Diagram-YG6GDRKO.mjs\");\n return { id, diagram: diagram2 };\n}, \"loader\");\nvar plugin = {\n id,\n detector,\n loader\n};\nvar c4Detector_default = plugin;\n\n// src/diagrams/flowchart/flowDetector.ts\nvar id2 = \"flowchart\";\nvar detector2 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.flowchart?.defaultRenderer === \"dagre-wrapper\" || config?.flowchart?.defaultRenderer === \"elk\") {\n return false;\n }\n return /^\\s*graph/.test(txt);\n}, \"detector\");\nvar loader2 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id2, diagram: diagram2 };\n}, \"loader\");\nvar plugin2 = {\n id: id2,\n detector: detector2,\n loader: loader2\n};\nvar flowDetector_default = plugin2;\n\n// src/diagrams/flowchart/flowDetector-v2.ts\nvar id3 = \"flowchart-v2\";\nvar detector3 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.flowchart?.defaultRenderer === \"dagre-d3\") {\n return false;\n }\n if (config?.flowchart?.defaultRenderer === \"elk\") {\n config.layout = \"elk\";\n }\n if (/^\\s*graph/.test(txt) && config?.flowchart?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*flowchart/.test(txt);\n}, \"detector\");\nvar loader3 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id3, diagram: diagram2 };\n}, \"loader\");\nvar plugin3 = {\n id: id3,\n detector: detector3,\n loader: loader3\n};\nvar flowDetector_v2_default = plugin3;\n\n// src/diagrams/er/erDetector.ts\nvar id4 = \"er\";\nvar detector4 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*erDiagram/.test(txt);\n}, \"detector\");\nvar loader4 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs\");\n return { id: id4, diagram: diagram2 };\n}, \"loader\");\nvar plugin4 = {\n id: id4,\n detector: detector4,\n loader: loader4\n};\nvar erDetector_default = plugin4;\n\n// src/diagrams/git/gitGraphDetector.ts\nvar id5 = \"gitGraph\";\nvar detector5 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*gitGraph/.test(txt);\n}, \"detector\");\nvar loader5 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs\");\n return { id: id5, diagram: diagram2 };\n}, \"loader\");\nvar plugin5 = {\n id: id5,\n detector: detector5,\n loader: loader5\n};\nvar gitGraphDetector_default = plugin5;\n\n// src/diagrams/gantt/ganttDetector.ts\nvar id6 = \"gantt\";\nvar detector6 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*gantt/.test(txt);\n}, \"detector\");\nvar loader6 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/ganttDiagram-JELNMOA3.mjs\");\n return { id: id6, diagram: diagram2 };\n}, \"loader\");\nvar plugin6 = {\n id: id6,\n detector: detector6,\n loader: loader6\n};\nvar ganttDetector_default = plugin6;\n\n// src/diagrams/info/infoDetector.ts\nvar id7 = \"info\";\nvar detector7 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*info/.test(txt);\n}, \"detector\");\nvar loader7 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/infoDiagram-WHAUD3N6.mjs\");\n return { id: id7, diagram: diagram2 };\n}, \"loader\");\nvar info = {\n id: id7,\n detector: detector7,\n loader: loader7\n};\n\n// src/diagrams/pie/pieDetector.ts\nvar id8 = \"pie\";\nvar detector8 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*pie/.test(txt);\n}, \"detector\");\nvar loader8 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/pieDiagram-ADFJNKIX.mjs\");\n return { id: id8, diagram: diagram2 };\n}, \"loader\");\nvar pie = {\n id: id8,\n detector: detector8,\n loader: loader8\n};\n\n// src/diagrams/quadrant-chart/quadrantDetector.ts\nvar id9 = \"quadrantChart\";\nvar detector9 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*quadrantChart/.test(txt);\n}, \"detector\");\nvar loader9 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/quadrantDiagram-AYHSOK5B.mjs\");\n return { id: id9, diagram: diagram2 };\n}, \"loader\");\nvar plugin7 = {\n id: id9,\n detector: detector9,\n loader: loader9\n};\nvar quadrantDetector_default = plugin7;\n\n// src/diagrams/xychart/xychartDetector.ts\nvar id10 = \"xychart\";\nvar detector10 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*xychart(-beta)?/.test(txt);\n}, \"detector\");\nvar loader10 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/xychartDiagram-PRI3JC2R.mjs\");\n return { id: id10, diagram: diagram2 };\n}, \"loader\");\nvar plugin8 = {\n id: id10,\n detector: detector10,\n loader: loader10\n};\nvar xychartDetector_default = plugin8;\n\n// src/diagrams/requirement/requirementDetector.ts\nvar id11 = \"requirement\";\nvar detector11 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*requirement(Diagram)?/.test(txt);\n}, \"detector\");\nvar loader11 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/requirementDiagram-UZGBJVZJ.mjs\");\n return { id: id11, diagram: diagram2 };\n}, \"loader\");\nvar plugin9 = {\n id: id11,\n detector: detector11,\n loader: loader11\n};\nvar requirementDetector_default = plugin9;\n\n// src/diagrams/sequence/sequenceDetector.ts\nvar id12 = \"sequence\";\nvar detector12 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*sequenceDiagram/.test(txt);\n}, \"detector\");\nvar loader12 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/sequenceDiagram-WL72ISMW.mjs\");\n return { id: id12, diagram: diagram2 };\n}, \"loader\");\nvar plugin10 = {\n id: id12,\n detector: detector12,\n loader: loader12\n};\nvar sequenceDetector_default = plugin10;\n\n// src/diagrams/class/classDetector.ts\nvar id13 = \"class\";\nvar detector13 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.class?.defaultRenderer === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*classDiagram/.test(txt);\n}, \"detector\");\nvar loader13 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/classDiagram-2ON5EDUG.mjs\");\n return { id: id13, diagram: diagram2 };\n}, \"loader\");\nvar plugin11 = {\n id: id13,\n detector: detector13,\n loader: loader13\n};\nvar classDetector_default = plugin11;\n\n// src/diagrams/class/classDetector-V2.ts\nvar id14 = \"classDiagram\";\nvar detector14 = /* @__PURE__ */ __name((txt, config) => {\n if (/^\\s*classDiagram/.test(txt) && config?.class?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*classDiagram-v2/.test(txt);\n}, \"detector\");\nvar loader14 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs\");\n return { id: id14, diagram: diagram2 };\n}, \"loader\");\nvar plugin12 = {\n id: id14,\n detector: detector14,\n loader: loader14\n};\nvar classDetector_V2_default = plugin12;\n\n// src/diagrams/state/stateDetector.ts\nvar id15 = \"state\";\nvar detector15 = /* @__PURE__ */ __name((txt, config) => {\n if (config?.state?.defaultRenderer === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*stateDiagram/.test(txt);\n}, \"detector\");\nvar loader15 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs\");\n return { id: id15, diagram: diagram2 };\n}, \"loader\");\nvar plugin13 = {\n id: id15,\n detector: detector15,\n loader: loader15\n};\nvar stateDetector_default = plugin13;\n\n// src/diagrams/state/stateDetector-V2.ts\nvar id16 = \"stateDiagram\";\nvar detector16 = /* @__PURE__ */ __name((txt, config) => {\n if (/^\\s*stateDiagram-v2/.test(txt)) {\n return true;\n }\n if (/^\\s*stateDiagram/.test(txt) && config?.state?.defaultRenderer === \"dagre-wrapper\") {\n return true;\n }\n return false;\n}, \"detector\");\nvar loader16 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs\");\n return { id: id16, diagram: diagram2 };\n}, \"loader\");\nvar plugin14 = {\n id: id16,\n detector: detector16,\n loader: loader16\n};\nvar stateDetector_V2_default = plugin14;\n\n// src/diagrams/user-journey/journeyDetector.ts\nvar id17 = \"journey\";\nvar detector17 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*journey/.test(txt);\n}, \"detector\");\nvar loader17 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/journeyDiagram-XKPGCS4Q.mjs\");\n return { id: id17, diagram: diagram2 };\n}, \"loader\");\nvar plugin15 = {\n id: id17,\n detector: detector17,\n loader: loader17\n};\nvar journeyDetector_default = plugin15;\n\n// src/diagrams/error/errorRenderer.ts\nvar draw = /* @__PURE__ */ __name((_text, id28, version) => {\n log.debug(\"rendering svg for syntax error\\n\");\n const svg = selectSvgElement(id28);\n const g = svg.append(\"g\");\n svg.attr(\"viewBox\", \"0 0 2412 512\");\n configureSvgSize(svg, 100, 512, true);\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z\"\n );\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1440).attr(\"y\", 250).attr(\"font-size\", \"150px\").style(\"text-anchor\", \"middle\").text(\"Syntax error in text\");\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1250).attr(\"y\", 400).attr(\"font-size\", \"100px\").style(\"text-anchor\", \"middle\").text(`mermaid version ${version}`);\n}, \"draw\");\nvar renderer = { draw };\nvar errorRenderer_default = renderer;\n\n// src/diagrams/error/errorDiagram.ts\nvar diagram = {\n db: {},\n renderer,\n parser: {\n parse: /* @__PURE__ */ __name(() => {\n return;\n }, \"parse\")\n }\n};\nvar errorDiagram_default = diagram;\n\n// src/diagrams/flowchart/elk/detector.ts\nvar id18 = \"flowchart-elk\";\nvar detector18 = /* @__PURE__ */ __name((txt, config = {}) => {\n if (\n // If diagram explicitly states flowchart-elk\n /^\\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk\n /^\\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === \"elk\"\n ) {\n config.layout = \"elk\";\n return true;\n }\n return false;\n}, \"detector\");\nvar loader18 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/flowDiagram-NV44I4VS.mjs\");\n return { id: id18, diagram: diagram2 };\n}, \"loader\");\nvar plugin16 = {\n id: id18,\n detector: detector18,\n loader: loader18\n};\nvar detector_default = plugin16;\n\n// src/diagrams/timeline/detector.ts\nvar id19 = \"timeline\";\nvar detector19 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*timeline/.test(txt);\n}, \"detector\");\nvar loader19 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/timeline-definition-IT6M3QCI.mjs\");\n return { id: id19, diagram: diagram2 };\n}, \"loader\");\nvar plugin17 = {\n id: id19,\n detector: detector19,\n loader: loader19\n};\nvar detector_default2 = plugin17;\n\n// src/diagrams/mindmap/detector.ts\nvar id20 = \"mindmap\";\nvar detector20 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*mindmap/.test(txt);\n}, \"detector\");\nvar loader20 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/mindmap-definition-VGOIOE7T.mjs\");\n return { id: id20, diagram: diagram2 };\n}, \"loader\");\nvar plugin18 = {\n id: id20,\n detector: detector20,\n loader: loader20\n};\nvar detector_default3 = plugin18;\n\n// src/diagrams/kanban/detector.ts\nvar id21 = \"kanban\";\nvar detector21 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*kanban/.test(txt);\n}, \"detector\");\nvar loader21 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/kanban-definition-3W4ZIXB7.mjs\");\n return { id: id21, diagram: diagram2 };\n}, \"loader\");\nvar plugin19 = {\n id: id21,\n detector: detector21,\n loader: loader21\n};\nvar detector_default4 = plugin19;\n\n// src/diagrams/sankey/sankeyDetector.ts\nvar id22 = \"sankey\";\nvar detector22 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*sankey(-beta)?/.test(txt);\n}, \"detector\");\nvar loader22 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/sankeyDiagram-TZEHDZUN.mjs\");\n return { id: id22, diagram: diagram2 };\n}, \"loader\");\nvar plugin20 = {\n id: id22,\n detector: detector22,\n loader: loader22\n};\nvar sankeyDetector_default = plugin20;\n\n// src/diagrams/packet/detector.ts\nvar id23 = \"packet\";\nvar detector23 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*packet(-beta)?/.test(txt);\n}, \"detector\");\nvar loader23 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-S2PKOQOG.mjs\");\n return { id: id23, diagram: diagram2 };\n}, \"loader\");\nvar packet = {\n id: id23,\n detector: detector23,\n loader: loader23\n};\n\n// src/diagrams/radar/detector.ts\nvar id24 = \"radar\";\nvar detector24 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*radar-beta/.test(txt);\n}, \"detector\");\nvar loader24 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-QEK2KX5R.mjs\");\n return { id: id24, diagram: diagram2 };\n}, \"loader\");\nvar radar = {\n id: id24,\n detector: detector24,\n loader: loader24\n};\n\n// src/diagrams/block/blockDetector.ts\nvar id25 = \"block\";\nvar detector25 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*block(-beta)?/.test(txt);\n}, \"detector\");\nvar loader25 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/blockDiagram-VD42YOAC.mjs\");\n return { id: id25, diagram: diagram2 };\n}, \"loader\");\nvar plugin21 = {\n id: id25,\n detector: detector25,\n loader: loader25\n};\nvar blockDetector_default = plugin21;\n\n// src/diagrams/architecture/architectureDetector.ts\nvar id26 = \"architecture\";\nvar detector26 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*architecture/.test(txt);\n}, \"detector\");\nvar loader26 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/architectureDiagram-VXUJARFQ.mjs\");\n return { id: id26, diagram: diagram2 };\n}, \"loader\");\nvar architecture = {\n id: id26,\n detector: detector26,\n loader: loader26\n};\nvar architectureDetector_default = architecture;\n\n// src/diagrams/treemap/detector.ts\nvar id27 = \"treemap\";\nvar detector27 = /* @__PURE__ */ __name((txt) => {\n return /^\\s*treemap/.test(txt);\n}, \"detector\");\nvar loader27 = /* @__PURE__ */ __name(async () => {\n const { diagram: diagram2 } = await import(\"./chunks/mermaid.core/diagram-PSM6KHXK.mjs\");\n return { id: id27, diagram: diagram2 };\n}, \"loader\");\nvar treemap = {\n id: id27,\n detector: detector27,\n loader: loader27\n};\n\n// src/diagram-api/diagram-orchestration.ts\nvar hasLoadedDiagrams = false;\nvar addDiagrams = /* @__PURE__ */ __name(() => {\n if (hasLoadedDiagrams) {\n return;\n }\n hasLoadedDiagrams = true;\n registerDiagram(\"error\", errorDiagram_default, (text) => {\n return text.toLowerCase().trim() === \"error\";\n });\n registerDiagram(\n \"---\",\n // --- diagram type may appear if YAML front-matter is not parsed correctly\n {\n db: {\n clear: /* @__PURE__ */ __name(() => {\n }, \"clear\")\n },\n styles: {},\n // should never be used\n renderer: {\n draw: /* @__PURE__ */ __name(() => {\n }, \"draw\")\n },\n parser: {\n parse: /* @__PURE__ */ __name(() => {\n throw new Error(\n \"Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks\"\n );\n }, \"parse\")\n },\n init: /* @__PURE__ */ __name(() => null, \"init\")\n // no op\n },\n (text) => {\n return text.toLowerCase().trimStart().startsWith(\"---\");\n }\n );\n if (true) {\n registerLazyLoadedDiagrams(detector_default, detector_default3, architectureDetector_default);\n }\n registerLazyLoadedDiagrams(\n c4Detector_default,\n detector_default4,\n classDetector_V2_default,\n classDetector_default,\n erDetector_default,\n ganttDetector_default,\n info,\n pie,\n requirementDetector_default,\n sequenceDetector_default,\n flowDetector_v2_default,\n flowDetector_default,\n detector_default2,\n gitGraphDetector_default,\n stateDetector_V2_default,\n stateDetector_default,\n journeyDetector_default,\n quadrantDetector_default,\n sankeyDetector_default,\n packet,\n xychartDetector_default,\n blockDetector_default,\n radar,\n treemap\n );\n}, \"addDiagrams\");\n\n// src/diagram-api/loadDiagram.ts\nvar loadRegisteredDiagrams = /* @__PURE__ */ __name(async () => {\n log.debug(`Loading registered diagrams`);\n const results = await Promise.allSettled(\n Object.entries(detectors).map(async ([key, { detector: detector28, loader: loader28 }]) => {\n if (!loader28) {\n return;\n }\n try {\n getDiagram(key);\n } catch {\n try {\n const { diagram: diagram2, id: id28 } = await loader28();\n registerDiagram(id28, diagram2, detector28);\n } catch (err) {\n log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);\n delete detectors[key];\n throw err;\n }\n }\n })\n );\n const failed = results.filter((result) => result.status === \"rejected\");\n if (failed.length > 0) {\n log.error(`Failed to load ${failed.length} external diagrams`);\n for (const res of failed) {\n log.error(res);\n }\n throw new Error(`Failed to load ${failed.length} external diagrams`);\n }\n}, \"loadRegisteredDiagrams\");\n\n// src/mermaidAPI.ts\nimport { select } from \"d3\";\nimport { compile, serialize, stringify } from \"stylis\";\nimport DOMPurify from \"dompurify\";\nimport isEmpty from \"lodash-es/isEmpty.js\";\n\n// src/accessibility.ts\nvar SVG_ROLE = \"graphics-document document\";\nfunction setA11yDiagramInfo(svg, diagramType) {\n svg.attr(\"role\", SVG_ROLE);\n if (diagramType !== \"\") {\n svg.attr(\"aria-roledescription\", diagramType);\n }\n}\n__name(setA11yDiagramInfo, \"setA11yDiagramInfo\");\nfunction addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {\n if (svg.insert === void 0) {\n return;\n }\n if (a11yDesc) {\n const descId = `chart-desc-${baseId}`;\n svg.attr(\"aria-describedby\", descId);\n svg.insert(\"desc\", \":first-child\").attr(\"id\", descId).text(a11yDesc);\n }\n if (a11yTitle) {\n const titleId = `chart-title-${baseId}`;\n svg.attr(\"aria-labelledby\", titleId);\n svg.insert(\"title\", \":first-child\").attr(\"id\", titleId).text(a11yTitle);\n }\n}\n__name(addSVGa11yTitleDescription, \"addSVGa11yTitleDescription\");\n\n// src/Diagram.ts\nvar Diagram = class _Diagram {\n constructor(type, text, db, parser, renderer2) {\n this.type = type;\n this.text = text;\n this.db = db;\n this.parser = parser;\n this.renderer = renderer2;\n }\n static {\n __name(this, \"Diagram\");\n }\n static async fromText(text, metadata = {}) {\n const config = getConfig();\n const type = detectType(text, config);\n text = encodeEntities(text) + \"\\n\";\n try {\n getDiagram(type);\n } catch {\n const loader28 = getDiagramLoader(type);\n if (!loader28) {\n throw new UnknownDiagramError(`Diagram ${type} not found.`);\n }\n const { id: id28, diagram: diagram2 } = await loader28();\n registerDiagram(id28, diagram2);\n }\n const { db, parser, renderer: renderer2, init: init2 } = getDiagram(type);\n if (parser.parser) {\n parser.parser.yy = db;\n }\n db.clear?.();\n init2?.(config);\n if (metadata.title) {\n db.setDiagramTitle?.(metadata.title);\n }\n await parser.parse(text);\n return new _Diagram(type, text, db, parser, renderer2);\n }\n async render(id28, version) {\n await this.renderer.draw(this.text, id28, version, this);\n }\n getParser() {\n return this.parser;\n }\n getType() {\n return this.type;\n }\n};\n\n// src/interactionDb.ts\nvar interactionFunctions = [];\nvar attachFunctions = /* @__PURE__ */ __name(() => {\n interactionFunctions.forEach((f) => {\n f();\n });\n interactionFunctions = [];\n}, \"attachFunctions\");\n\n// src/diagram-api/comments.ts\nvar cleanupComments = /* @__PURE__ */ __name((text) => {\n return text.replace(/^\\s*%%(?!{)[^\\n]+\\n?/gm, \"\").trimStart();\n}, \"cleanupComments\");\n\n// src/diagram-api/frontmatter.ts\nfunction extractFrontMatter(text) {\n const matches = text.match(frontMatterRegex);\n if (!matches) {\n return {\n text,\n metadata: {}\n };\n }\n let parsed = load(matches[1], {\n // To support config, we need JSON schema.\n // https://www.yaml.org/spec/1.2/spec.html#id2803231\n schema: JSON_SCHEMA\n }) ?? {};\n parsed = typeof parsed === \"object\" && !Array.isArray(parsed) ? parsed : {};\n const metadata = {};\n if (parsed.displayMode) {\n metadata.displayMode = parsed.displayMode.toString();\n }\n if (parsed.title) {\n metadata.title = parsed.title.toString();\n }\n if (parsed.config) {\n metadata.config = parsed.config;\n }\n return {\n text: text.slice(matches[0].length),\n metadata\n };\n}\n__name(extractFrontMatter, \"extractFrontMatter\");\n\n// src/preprocess.ts\nvar cleanupText = /* @__PURE__ */ __name((code) => {\n return code.replace(/\\r\\n?/g, \"\\n\").replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => \"<\" + tag + attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\") + \">\"\n );\n}, \"cleanupText\");\nvar processFrontmatter = /* @__PURE__ */ __name((code) => {\n const { text, metadata } = extractFrontMatter(code);\n const { displayMode, title, config = {} } = metadata;\n if (displayMode) {\n if (!config.gantt) {\n config.gantt = {};\n }\n config.gantt.displayMode = displayMode;\n }\n return { title, config, text };\n}, \"processFrontmatter\");\nvar processDirectives = /* @__PURE__ */ __name((code) => {\n const initDirective = utils_default.detectInit(code) ?? {};\n const wrapDirectives = utils_default.detectDirective(code, \"wrap\");\n if (Array.isArray(wrapDirectives)) {\n initDirective.wrap = wrapDirectives.some(({ type }) => type === \"wrap\");\n } else if (wrapDirectives?.type === \"wrap\") {\n initDirective.wrap = true;\n }\n return {\n text: removeDirectives(code),\n directive: initDirective\n };\n}, \"processDirectives\");\nfunction preprocessDiagram(code) {\n const cleanedCode = cleanupText(code);\n const frontMatterResult = processFrontmatter(cleanedCode);\n const directiveResult = processDirectives(frontMatterResult.text);\n const config = cleanAndMerge(frontMatterResult.config, directiveResult.directive);\n code = cleanupComments(directiveResult.text);\n return {\n code,\n title: frontMatterResult.title,\n config\n };\n}\n__name(preprocessDiagram, \"preprocessDiagram\");\n\n// src/utils/base64.ts\nfunction toBase64(str) {\n const utf8Bytes = new TextEncoder().encode(str);\n const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join(\"\");\n return btoa(utf8Str);\n}\n__name(toBase64, \"toBase64\");\n\n// src/mermaidAPI.ts\nvar MAX_TEXTLENGTH = 5e4;\nvar MAX_TEXTLENGTH_EXCEEDED_MSG = \"graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa\";\nvar SECURITY_LVL_SANDBOX = \"sandbox\";\nvar SECURITY_LVL_LOOSE = \"loose\";\nvar XMLNS_SVG_STD = \"http://www.w3.org/2000/svg\";\nvar XMLNS_XLINK_STD = \"http://www.w3.org/1999/xlink\";\nvar XMLNS_XHTML_STD = \"http://www.w3.org/1999/xhtml\";\nvar IFRAME_WIDTH = \"100%\";\nvar IFRAME_HEIGHT = \"100%\";\nvar IFRAME_STYLES = \"border:0;margin:0;\";\nvar IFRAME_BODY_STYLE = \"margin:0\";\nvar IFRAME_SANDBOX_OPTS = \"allow-top-navigation-by-user-activation allow-popups\";\nvar IFRAME_NOT_SUPPORTED_MSG = 'The \"iframe\" tag is not supported by your browser.';\nvar DOMPURIFY_TAGS = [\"foreignobject\"];\nvar DOMPURIFY_ATTR = [\"dominant-baseline\"];\nfunction processAndSetConfigs(text) {\n const processed = preprocessDiagram(text);\n reset();\n addDirective(processed.config ?? {});\n return processed;\n}\n__name(processAndSetConfigs, \"processAndSetConfigs\");\nasync function parse(text, parseOptions) {\n addDiagrams();\n try {\n const { code, config } = processAndSetConfigs(text);\n const diagram2 = await getDiagramFromText(code);\n return { diagramType: diagram2.type, config };\n } catch (error) {\n if (parseOptions?.suppressErrors) {\n return false;\n }\n throw error;\n }\n}\n__name(parse, \"parse\");\nvar cssImportantStyles = /* @__PURE__ */ __name((cssClass, element, cssClasses = []) => {\n return `\n.${cssClass} ${element} { ${cssClasses.join(\" !important; \")} !important; }`;\n}, \"cssImportantStyles\");\nvar createCssStyles = /* @__PURE__ */ __name((config, classDefs = /* @__PURE__ */ new Map()) => {\n let cssStyles = \"\";\n if (config.themeCSS !== void 0) {\n cssStyles += `\n${config.themeCSS}`;\n }\n if (config.fontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-font-family: ${config.fontFamily}}`;\n }\n if (config.altFontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-alt-font-family: ${config.altFontFamily}}`;\n }\n if (classDefs instanceof Map) {\n const htmlLabels = config.htmlLabels ?? config.flowchart?.htmlLabels;\n const cssHtmlElements = [\"> *\", \"span\"];\n const cssShapeElements = [\"rect\", \"polygon\", \"ellipse\", \"circle\", \"path\"];\n const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;\n classDefs.forEach((styleClassDef) => {\n if (!isEmpty(styleClassDef.styles)) {\n cssElements.forEach((cssElement) => {\n cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);\n });\n }\n if (!isEmpty(styleClassDef.textStyles)) {\n cssStyles += cssImportantStyles(\n styleClassDef.id,\n \"tspan\",\n (styleClassDef?.textStyles || []).map((s) => s.replace(\"color\", \"fill\"))\n );\n }\n });\n }\n return cssStyles;\n}, \"createCssStyles\");\nvar createUserStyles = /* @__PURE__ */ __name((config, graphType, classDefs, svgId) => {\n const userCSSstyles = createCssStyles(config, classDefs);\n const allStyles = styles_default(graphType, userCSSstyles, config.themeVariables);\n return serialize(compile(`${svgId}{${allStyles}}`), stringify);\n}, \"createUserStyles\");\nvar cleanUpSvgCode = /* @__PURE__ */ __name((svgCode = \"\", inSandboxMode, useArrowMarkerUrls) => {\n let cleanedUpSvg = svgCode;\n if (!useArrowMarkerUrls && !inSandboxMode) {\n cleanedUpSvg = cleanedUpSvg.replace(\n /marker-end=\"url\\([\\d+./:=?A-Za-z-]*?#/g,\n 'marker-end=\"url(#'\n );\n }\n cleanedUpSvg = decodeEntities(cleanedUpSvg);\n cleanedUpSvg = cleanedUpSvg.replace(/
    /g, \"
    \");\n return cleanedUpSvg;\n}, \"cleanUpSvgCode\");\nvar putIntoIFrame = /* @__PURE__ */ __name((svgCode = \"\", svgElement) => {\n const height = svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + \"px\" : IFRAME_HEIGHT;\n const base64encodedSrc = toBase64(`${svgCode}`);\n return ``;\n}, \"putIntoIFrame\");\nvar appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id28, enclosingDivId, divStyle, svgXlink) => {\n const enclosingDiv = parentRoot.append(\"div\");\n enclosingDiv.attr(\"id\", enclosingDivId);\n if (divStyle) {\n enclosingDiv.attr(\"style\", divStyle);\n }\n const svgNode = enclosingDiv.append(\"svg\").attr(\"id\", id28).attr(\"width\", \"100%\").attr(\"xmlns\", XMLNS_SVG_STD);\n if (svgXlink) {\n svgNode.attr(\"xmlns:xlink\", svgXlink);\n }\n svgNode.append(\"g\");\n return parentRoot;\n}, \"appendDivSvgG\");\nfunction sandboxedIframe(parentNode, iFrameId) {\n return parentNode.append(\"iframe\").attr(\"id\", iFrameId).attr(\"style\", \"width: 100%; height: 100%;\").attr(\"sandbox\", \"\");\n}\n__name(sandboxedIframe, \"sandboxedIframe\");\nvar removeExistingElements = /* @__PURE__ */ __name((doc, id28, divId, iFrameId) => {\n doc.getElementById(id28)?.remove();\n doc.getElementById(divId)?.remove();\n doc.getElementById(iFrameId)?.remove();\n}, \"removeExistingElements\");\nvar render = /* @__PURE__ */ __name(async function(id28, text, svgContainingElement) {\n addDiagrams();\n const processed = processAndSetConfigs(text);\n text = processed.code;\n const config = getConfig();\n log.debug(config);\n if (text.length > (config?.maxTextSize ?? MAX_TEXTLENGTH)) {\n text = MAX_TEXTLENGTH_EXCEEDED_MSG;\n }\n const idSelector = \"#\" + id28;\n const iFrameID = \"i\" + id28;\n const iFrameID_selector = \"#\" + iFrameID;\n const enclosingDivID = \"d\" + id28;\n const enclosingDivID_selector = \"#\" + enclosingDivID;\n const removeTempElements = /* @__PURE__ */ __name(() => {\n const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;\n const node = select(tmpElementSelector).node();\n if (node && \"remove\" in node) {\n node.remove();\n }\n }, \"removeTempElements\");\n let root = select(\"body\");\n const isSandboxed = config.securityLevel === SECURITY_LVL_SANDBOX;\n const isLooseSecurityLevel = config.securityLevel === SECURITY_LVL_LOOSE;\n const fontFamily = config.fontFamily;\n if (svgContainingElement !== void 0) {\n if (svgContainingElement) {\n svgContainingElement.innerHTML = \"\";\n }\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(svgContainingElement), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(svgContainingElement);\n }\n appendDivSvgG(root, id28, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);\n } else {\n removeExistingElements(document, id28, enclosingDivID, iFrameID);\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(\"body\"), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(\"body\");\n }\n appendDivSvgG(root, id28, enclosingDivID);\n }\n let diag;\n let parseEncounteredException;\n try {\n diag = await Diagram.fromText(text, { title: processed.title });\n } catch (error) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n throw error;\n }\n diag = await Diagram.fromText(\"error\");\n parseEncounteredException = error;\n }\n const element = root.select(enclosingDivID_selector).node();\n const diagramType = diag.type;\n const svg = element.firstChild;\n const firstChild = svg.firstChild;\n const diagramClassDefs = diag.renderer.getClasses?.(text, diag);\n const rules = createUserStyles(config, diagramType, diagramClassDefs, idSelector);\n const style1 = document.createElement(\"style\");\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild);\n try {\n await diag.renderer.draw(text, id28, package_default.version, diag);\n } catch (e) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n } else {\n errorRenderer_default.draw(text, id28, package_default.version);\n }\n throw e;\n }\n const svgNode = root.select(`${enclosingDivID_selector} svg`);\n const a11yTitle = diag.db.getAccTitle?.();\n const a11yDescr = diag.db.getAccDescription?.();\n addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);\n root.select(`[id=\"${id28}\"]`).selectAll(\"foreignobject > *\").attr(\"xmlns\", XMLNS_XHTML_STD);\n let svgCode = root.select(enclosingDivID_selector).node().innerHTML;\n log.debug(\"config.arrowMarkerAbsolute\", config.arrowMarkerAbsolute);\n svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config.arrowMarkerAbsolute));\n if (isSandboxed) {\n const svgEl = root.select(enclosingDivID_selector + \" svg\").node();\n svgCode = putIntoIFrame(svgCode, svgEl);\n } else if (!isLooseSecurityLevel) {\n svgCode = DOMPurify.sanitize(svgCode, {\n ADD_TAGS: DOMPURIFY_TAGS,\n ADD_ATTR: DOMPURIFY_ATTR,\n HTML_INTEGRATION_POINTS: { foreignobject: true }\n });\n }\n attachFunctions();\n if (parseEncounteredException) {\n throw parseEncounteredException;\n }\n removeTempElements();\n return {\n diagramType,\n svg: svgCode,\n bindFunctions: diag.db.bindFunctions\n };\n}, \"render\");\nfunction initialize(userOptions = {}) {\n const options = assignWithDepth_default({}, userOptions);\n if (options?.fontFamily && !options.themeVariables?.fontFamily) {\n if (!options.themeVariables) {\n options.themeVariables = {};\n }\n options.themeVariables.fontFamily = options.fontFamily;\n }\n saveConfigFromInitialize(options);\n if (options?.theme && options.theme in themes_default) {\n options.themeVariables = themes_default[options.theme].getThemeVariables(\n options.themeVariables\n );\n } else if (options) {\n options.themeVariables = themes_default.default.getThemeVariables(options.themeVariables);\n }\n const config = typeof options === \"object\" ? setSiteConfig(options) : getSiteConfig();\n setLogLevel(config.logLevel);\n addDiagrams();\n}\n__name(initialize, \"initialize\");\nvar getDiagramFromText = /* @__PURE__ */ __name((text, metadata = {}) => {\n const { code } = preprocessDiagram(text);\n return Diagram.fromText(code, metadata);\n}, \"getDiagramFromText\");\nfunction addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr) {\n setA11yDiagramInfo(svgNode, diagramType);\n addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr(\"id\"));\n}\n__name(addA11yInfo, \"addA11yInfo\");\nvar mermaidAPI = Object.freeze({\n render,\n parse,\n getDiagramFromText,\n initialize,\n getConfig,\n setConfig,\n getSiteConfig,\n updateSiteConfig,\n reset: /* @__PURE__ */ __name(() => {\n reset();\n }, \"reset\"),\n globalReset: /* @__PURE__ */ __name(() => {\n reset(defaultConfig);\n }, \"globalReset\"),\n defaultConfig\n});\nsetLogLevel(getConfig().logLevel);\nreset(getConfig());\n\n// src/mermaid.ts\nvar handleError = /* @__PURE__ */ __name((error, errors, parseError) => {\n log.warn(error);\n if (isDetailedError(error)) {\n if (parseError) {\n parseError(error.str, error.hash);\n }\n errors.push({ ...error, message: error.str, error });\n } else {\n if (parseError) {\n parseError(error);\n }\n if (error instanceof Error) {\n errors.push({\n str: error.message,\n message: error.message,\n hash: error.name,\n error\n });\n }\n }\n}, \"handleError\");\nvar run = /* @__PURE__ */ __name(async function(options = {\n querySelector: \".mermaid\"\n}) {\n try {\n await runThrowsErrors(options);\n } catch (e) {\n if (isDetailedError(e)) {\n log.error(e.str);\n }\n if (mermaid.parseError) {\n mermaid.parseError(e);\n }\n if (!options.suppressErrors) {\n log.error(\"Use the suppressErrors option to suppress these errors\");\n throw e;\n }\n }\n}, \"run\");\nvar runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes } = {\n querySelector: \".mermaid\"\n}) {\n const conf = mermaidAPI.getConfig();\n log.debug(`${!postRenderCallback ? \"No \" : \"\"}Callback function found`);\n let nodesToProcess;\n if (nodes) {\n nodesToProcess = nodes;\n } else if (querySelector) {\n nodesToProcess = document.querySelectorAll(querySelector);\n } else {\n throw new Error(\"Nodes and querySelector are both undefined\");\n }\n log.debug(`Found ${nodesToProcess.length} diagrams`);\n if (conf?.startOnLoad !== void 0) {\n log.debug(\"Start On Load: \" + conf?.startOnLoad);\n mermaidAPI.updateSiteConfig({ startOnLoad: conf?.startOnLoad });\n }\n const idGenerator = new utils_default.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n let txt;\n const errors = [];\n for (const element of Array.from(nodesToProcess)) {\n log.info(\"Rendering diagram: \" + element.id);\n if (element.getAttribute(\"data-processed\")) {\n continue;\n }\n element.setAttribute(\"data-processed\", \"true\");\n const id28 = `mermaid-${idGenerator.next()}`;\n txt = element.innerHTML;\n txt = dedent(utils_default.entityDecode(txt)).trim().replace(//gi, \"
    \");\n const init2 = utils_default.detectInit(txt);\n if (init2) {\n log.debug(\"Detected early reinit: \", init2);\n }\n try {\n const { svg, bindFunctions } = await render2(id28, txt, element);\n element.innerHTML = svg;\n if (postRenderCallback) {\n await postRenderCallback(id28);\n }\n if (bindFunctions) {\n bindFunctions(element);\n }\n } catch (error) {\n handleError(error, errors, mermaid.parseError);\n }\n }\n if (errors.length > 0) {\n throw errors[0];\n }\n}, \"runThrowsErrors\");\nvar initialize2 = /* @__PURE__ */ __name(function(config) {\n mermaidAPI.initialize(config);\n}, \"initialize\");\nvar init = /* @__PURE__ */ __name(async function(config, nodes, callback) {\n log.warn(\"mermaid.init is deprecated. Please use run instead.\");\n if (config) {\n initialize2(config);\n }\n const runOptions = { postRenderCallback: callback, querySelector: \".mermaid\" };\n if (typeof nodes === \"string\") {\n runOptions.querySelector = nodes;\n } else if (nodes) {\n if (nodes instanceof HTMLElement) {\n runOptions.nodes = [nodes];\n } else {\n runOptions.nodes = nodes;\n }\n }\n await run(runOptions);\n}, \"init\");\nvar registerExternalDiagrams = /* @__PURE__ */ __name(async (diagrams, {\n lazyLoad = true\n} = {}) => {\n addDiagrams();\n registerLazyLoadedDiagrams(...diagrams);\n if (lazyLoad === false) {\n await loadRegisteredDiagrams();\n }\n}, \"registerExternalDiagrams\");\nvar contentLoaded = /* @__PURE__ */ __name(function() {\n if (mermaid.startOnLoad) {\n const { startOnLoad } = mermaidAPI.getConfig();\n if (startOnLoad) {\n mermaid.run().catch((err) => log.error(\"Mermaid failed to initialize\", err));\n }\n }\n}, \"contentLoaded\");\nif (typeof document !== \"undefined\") {\n window.addEventListener(\"load\", contentLoaded, false);\n}\nvar setParseErrorHandler = /* @__PURE__ */ __name(function(parseErrorHandler) {\n mermaid.parseError = parseErrorHandler;\n}, \"setParseErrorHandler\");\nvar executionQueue = [];\nvar executionQueueRunning = false;\nvar executeQueue = /* @__PURE__ */ __name(async () => {\n if (executionQueueRunning) {\n return;\n }\n executionQueueRunning = true;\n while (executionQueue.length > 0) {\n const f = executionQueue.shift();\n if (f) {\n try {\n await f();\n } catch (e) {\n log.error(\"Error executing queue\", e);\n }\n }\n }\n executionQueueRunning = false;\n}, \"executeQueue\");\nvar parse2 = /* @__PURE__ */ __name(async (text, parseOptions) => {\n return new Promise((resolve, reject) => {\n const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {\n mermaidAPI.parse(text, parseOptions).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n log.error(\"Error parsing\", e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n }), \"performCall\");\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n}, \"parse\");\nvar render2 = /* @__PURE__ */ __name((id28, text, container) => {\n return new Promise((resolve, reject) => {\n const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {\n mermaidAPI.render(id28, text, container).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n log.error(\"Error parsing\", e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n }), \"performCall\");\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n}, \"render\");\nvar getRegisteredDiagramsMetadata = /* @__PURE__ */ __name(() => {\n return Object.keys(detectors).map((id28) => ({\n id: id28\n }));\n}, \"getRegisteredDiagramsMetadata\");\nvar mermaid = {\n startOnLoad: true,\n mermaidAPI,\n parse: parse2,\n render: render2,\n init,\n run,\n registerExternalDiagrams,\n registerLayoutLoaders,\n initialize: initialize2,\n parseError: void 0,\n contentLoaded,\n setParseErrorHandler,\n detectType,\n registerIconPacks,\n getRegisteredDiagramsMetadata\n};\nvar mermaid_default = mermaid;\nexport {\n mermaid_default as default\n};\n/*! Check if previously processed */\n/*!\n * Wait for document loaded before starting the execution\n */\n","/**\n * Mermaid Preview Component\n *\n * Renders Mermaid diagrams (flowcharts, sequence diagrams, etc.)\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport { GitBranch, AlertCircle, Loader2 } from 'lucide-react';\nimport mermaid from 'mermaid';\n\ninterface MermaidPreviewProps {\n content: string;\n fileName: string;\n}\n\n// Initialize mermaid with dark theme\nmermaid.initialize({\n startOnLoad: false,\n theme: 'dark',\n themeVariables: {\n primaryColor: '#7dcfff',\n primaryTextColor: '#c0caf5',\n primaryBorderColor: '#3b4261',\n lineColor: '#7dcfff',\n secondaryColor: '#bb9af7',\n tertiaryColor: '#292e42',\n background: '#1a1b26',\n mainBkg: '#292e42',\n nodeBorder: '#3b4261',\n clusterBkg: '#24283b',\n titleColor: '#c0caf5',\n edgeLabelBackground: '#24283b',\n },\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n});\n\nexport function MermaidPreview({ content, fileName }: MermaidPreviewProps) {\n const containerRef = useRef(null);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n async function renderDiagram() {\n if (!containerRef.current) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n // Clear previous content\n containerRef.current.innerHTML = '';\n\n // Generate unique ID for this diagram\n const id = `mermaid-${Date.now()}`;\n\n // Render the diagram\n const { svg } = await mermaid.render(id, content);\n\n // Insert the rendered SVG\n if (containerRef.current) {\n containerRef.current.innerHTML = svg;\n }\n } catch (err) {\n console.error('Mermaid rendering error:', err);\n setError(err instanceof Error ? err.message : 'Failed to render diagram');\n } finally {\n setIsLoading(false);\n }\n }\n\n renderDiagram();\n }, [content]);\n\n return (\n
    \n {/* Header */}\n
    \n \n Mermaid Diagram\n - {fileName}\n
    \n\n {/* Diagram container */}\n
    \n {isLoading && (\n
    \n \n Rendering diagram...\n
    \n )}\n\n {error && (\n
    \n \n Failed to render diagram\n {error}\n
    \n              {content}\n            
    \n
    \n )}\n\n \n
    \n
    \n );\n}\n\nexport default MermaidPreview;\n","// Current version.\nexport var VERSION = '1.13.7';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","var isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n","\"use strict\";\nvar es5 = require(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n typeof global !== \"undefined\" ? global :\n this !== undefined ? this : null;\n\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return typeof value === \"function\" ||\n typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function FakeConstructor() {}\n FakeConstructor.prototype = obj;\n var l = 8;\n while (l--) new FakeConstructor();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction isError(obj) {\n return obj !== null &&\n typeof obj === \"object\" &&\n typeof obj.message === \"string\" &&\n typeof obj.name === \"string\";\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n }\n return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n return Array.from(v);\n } : function(v) {\n var ret = [];\n var it = v[Symbol.iterator]();\n var itResult;\n while (!((itResult = it.next()).done)) {\n ret.push(itResult.value);\n }\n return ret;\n };\n\n asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n return ArrayFrom(v);\n }\n return null;\n };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\";\n\nfunction env(key) {\n return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n if (typeof Promise === \"function\") {\n try {\n var promise = new Promise(function(){});\n if ({}.toString.call(promise) === \"[object Promise]\") {\n return Promise;\n }\n } catch (e) {}\n }\n}\n\nfunction domainBind(self, cb) {\n return self.bind(cb);\n}\n\nvar ret = {\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n asArray: asArray,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n isError: isError,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n typeof chrome.loadTimes === \"function\",\n isNode: isNode,\n hasEnvVariables: hasEnvVariables,\n env: env,\n global: globalObject,\n getNativePromise: getNativePromise,\n domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n var version = process.versions.node.split(\".\").map(Number);\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n","\"use strict\";\nvar util = require(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n typeof NativePromise.resolve === \"function\") {\n var nativePromise = NativePromise.resolve();\n schedule = function(fn) {\n nativePromise.then(fn);\n };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n (window.navigator.standalone || window.cordova))) {\n schedule = (function() {\n var div = document.createElement(\"div\");\n var opts = {attributes: true};\n var toggleScheduled = false;\n var div2 = document.createElement(\"div\");\n var o2 = new MutationObserver(function() {\n div.classList.toggle(\"foo\");\n toggleScheduled = false;\n });\n o2.observe(div2, opts);\n\n var scheduleToggle = function() {\n if (toggleScheduled) return;\n toggleScheduled = true;\n div2.classList.toggle(\"foo\");\n };\n\n return function schedule(fn) {\n var o = new MutationObserver(function() {\n o.disconnect();\n fn();\n });\n o.observe(div, opts);\n scheduleToggle();\n };\n })();\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n","\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n","\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule\");\nvar Queue = require(\"./queue\");\nvar util = require(\"./util\");\n\nfunction Async() {\n this._customScheduler = false;\n this._isTickUsed = false;\n this._lateQueue = new Queue(16);\n this._normalQueue = new Queue(16);\n this._haveDrainedQueues = false;\n this._trampolineEnabled = true;\n var self = this;\n this.drainQueues = function () {\n self._drainQueues();\n };\n this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n var prev = this._schedule;\n this._schedule = fn;\n this._customScheduler = true;\n return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n if (util.hasDevTools) {\n this._trampolineEnabled = false;\n }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n if (isNode) {\n process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n \"\\n\");\n process.exit(2);\n } else {\n this.throwLater(e);\n }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n if (arguments.length === 1) {\n arg = fn;\n fn = function () { throw arg; };\n }\n if (typeof setTimeout !== \"undefined\") {\n setTimeout(function() {\n fn(arg);\n }, 0);\n } else try {\n this._schedule(function() {\n fn(arg);\n });\n } catch (e) {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n this._lateQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n this._normalQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n this._normalQueue._pushOne(promise);\n this._queueTick();\n}\n\nif (!util.hasDevTools) {\n Async.prototype.invokeLater = AsyncInvokeLater;\n Async.prototype.invoke = AsyncInvoke;\n Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n Async.prototype.invokeLater = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvokeLater.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n setTimeout(function() {\n fn.call(receiver, arg);\n }, 100);\n });\n }\n };\n\n Async.prototype.invoke = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvoke.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n fn.call(receiver, arg);\n });\n }\n };\n\n Async.prototype.settlePromises = function(promise) {\n if (this._trampolineEnabled) {\n AsyncSettlePromises.call(this, promise);\n } else {\n this._schedule(function() {\n promise._settlePromises();\n });\n }\n };\n}\n\nAsync.prototype._drainQueue = function(queue) {\n while (queue.length() > 0) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n continue;\n }\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n};\n\nAsync.prototype._drainQueues = function () {\n this._drainQueue(this._normalQueue);\n this._reset();\n this._haveDrainedQueues = true;\n this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n","\"use strict\";\nvar es5 = require(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n value: errorTypes,\n writable: false,\n enumerable: false,\n configurable: false\n });\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) return obj;\n var then = getThen(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfill,\n ret._reject,\n undefined,\n ret,\n null\n );\n return ret;\n }\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction doGetThen(obj) {\n return obj.then;\n}\n\nfunction getThen(obj) {\n try {\n return doGetThen(obj);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n try {\n return hasProp.call(obj, \"_promise0\");\n } catch (e) {\n return false;\n }\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x, resolve, reject);\n synchronous = false;\n\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolve(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function reject(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection, Proxyable) {\nvar util = require(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n if (values instanceof Promise) {\n promise._propagateFrom(values, 3);\n }\n promise._setOnCancel(this);\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n var bitField = values._bitField;\n ;\n this._values = values;\n\n if (((bitField & 50397184) === 0)) {\n this._promise._setAsyncGuaranteed();\n return values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n } else if (((bitField & 33554432) !== 0)) {\n values = values._value();\n } else if (((bitField & 16777216) !== 0)) {\n return this._reject(values._reason());\n } else {\n return this._cancel();\n }\n }\n values = util.asArray(values);\n if (values === null) {\n var err = apiRejection(\n \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n this._promise._rejectCallback(err, false);\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var result = this._promise;\n var isResolved = false;\n var bitField = null;\n for (var i = 0; i < len; ++i) {\n var maybePromise = tryConvertToPromise(values[i], result);\n\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n bitField = maybePromise._bitField;\n } else {\n bitField = null;\n }\n\n if (isResolved) {\n if (bitField !== null) {\n maybePromise.suppressUnhandledRejections();\n }\n } else if (bitField !== null) {\n if (((bitField & 50397184) === 0)) {\n maybePromise._proxy(this, i);\n this._values[i] = maybePromise;\n } else if (((bitField & 33554432) !== 0)) {\n isResolved = this._promiseFulfilled(maybePromise._value(), i);\n } else if (((bitField & 16777216) !== 0)) {\n isResolved = this._promiseRejected(maybePromise._reason(), i);\n } else {\n isResolved = this._promiseCancelled(i);\n }\n } else {\n isResolved = this._promiseFulfilled(maybePromise, i);\n }\n }\n if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n if (this._isResolved() || !this._promise._isCancellable()) return;\n this._values = null;\n this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n this._cancel();\n return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n this._totalResolved++;\n this._reject(reason);\n return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n if (this._isResolved()) return;\n var values = this._values;\n this._cancel();\n if (values instanceof Promise) {\n values.cancel();\n } else {\n for (var i = 0; i < values.length; ++i) {\n if (values[i] instanceof Promise) {\n values[i].cancel();\n }\n }\n }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (this._trace !== undefined) {\n this._trace._promiseCreated = null;\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (this._trace !== undefined) {\n var trace = contextStack.pop();\n var ret = trace._promiseCreated;\n trace._promiseCreated = null;\n return ret;\n }\n return null;\n};\n\nfunction createContext() {\n if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n var Promise_pushContext = Promise.prototype._pushContext;\n var Promise_popContext = Promise.prototype._popContext;\n var Promise_PeekContext = Promise._peekContext;\n var Promise_peekContext = Promise.prototype._peekContext;\n var Promise_promiseCreated = Promise.prototype._promiseCreated;\n Context.deactivateLongStackTraces = function() {\n Promise.prototype._pushContext = Promise_pushContext;\n Promise.prototype._popContext = Promise_popContext;\n Promise._peekContext = Promise_PeekContext;\n Promise.prototype._peekContext = Promise_peekContext;\n Promise.prototype._promiseCreated = Promise_promiseCreated;\n longStackTraces = false;\n };\n longStackTraces = true;\n Promise.prototype._pushContext = Context.prototype._pushContext;\n Promise.prototype._popContext = Context.prototype._popContext;\n Promise._peekContext = Promise.prototype._peekContext = peekContext;\n Promise.prototype._promiseCreated = function() {\n var ctx = this._peekContext();\n if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n };\n};\nreturn Context;\n};\n","\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = require(\"./errors\").Warning;\nvar util = require(\"./util\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n (false ||\n util.env(\"BLUEBIRD_DEBUG\") ||\n util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n var target = this._target();\n target._bitField = ((target._bitField & (~1048576)) |\n 524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 524288) !== 0) return;\n this._setRejectionIsUnhandled();\n async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._settledValue();\n this._setUnhandledRejectionIsNotified();\n fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~1048576);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var domain = getDomain();\n possiblyUnhandledRejection =\n typeof fn === \"function\" ? (domain === null ?\n fn : util.domainBind(domain, fn))\n : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var domain = getDomain();\n unhandledRejectionHandled =\n typeof fn === \"function\" ? (domain === null ?\n fn : util.domainBind(domain, fn))\n : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (!config.longStackTraces && longStackTracesIsSupported()) {\n var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n config.longStackTraces = true;\n disableLongStackTraces = function() {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n Context.deactivateLongStackTraces();\n async.enableTrampoline();\n config.longStackTraces = false;\n };\n Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n Context.activateLongStackTraces();\n async.disableTrampolineIfNecessary();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n try {\n if (typeof CustomEvent === \"function\") {\n var event = new CustomEvent(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = new CustomEvent(name.toLowerCase(), {\n detail: event,\n cancelable: true\n });\n return !util.global.dispatchEvent(domEvent);\n };\n } else if (typeof Event === \"function\") {\n var event = new Event(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = new Event(name.toLowerCase(), {\n cancelable: true\n });\n domEvent.detail = event;\n return !util.global.dispatchEvent(domEvent);\n };\n } else {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n util.global.dispatchEvent(event);\n return function(name, event) {\n var domEvent = document.createEvent(\"CustomEvent\");\n domEvent.initCustomEvent(name.toLowerCase(), false, true,\n event);\n return !util.global.dispatchEvent(domEvent);\n };\n }\n } catch (e) {}\n return function() {\n return false;\n };\n})();\n\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function() {\n return process.emit.apply(process, arguments);\n };\n } else {\n if (!util.global) {\n return function() {\n return false;\n };\n }\n return function(name) {\n var methodName = \"on\" + name.toLowerCase();\n var method = util.global[methodName];\n if (!method) return false;\n method.apply(util.global, [].slice.call(arguments, 1));\n return true;\n };\n }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n promiseCreated: generatePromiseLifecycleEventObject,\n promiseFulfilled: generatePromiseLifecycleEventObject,\n promiseRejected: generatePromiseLifecycleEventObject,\n promiseResolved: generatePromiseLifecycleEventObject,\n promiseCancelled: generatePromiseLifecycleEventObject,\n promiseChained: function(name, promise, child) {\n return {promise: promise, child: child};\n },\n warning: function(name, warning) {\n return {warning: warning};\n },\n unhandledRejection: function (name, reason, promise) {\n return {reason: reason, promise: promise};\n },\n rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent.apply(null, arguments);\n } catch (e) {\n async.throwLater(e);\n globalEventFired = true;\n }\n\n var domEventFired = false;\n try {\n domEventFired = fireDomEvent(name,\n eventToObjectGenerator[name].apply(null, arguments));\n } catch (e) {\n async.throwLater(e);\n domEventFired = true;\n }\n\n return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n opts = Object(opts);\n if (\"longStackTraces\" in opts) {\n if (opts.longStackTraces) {\n Promise.longStackTraces();\n } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n disableLongStackTraces();\n }\n }\n if (\"warnings\" in opts) {\n var warningsOption = opts.warnings;\n config.warnings = !!warningsOption;\n wForgottenReturn = config.warnings;\n\n if (util.isObject(warningsOption)) {\n if (\"wForgottenReturn\" in warningsOption) {\n wForgottenReturn = !!warningsOption.wForgottenReturn;\n }\n }\n }\n if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n if (async.haveItemsQueued()) {\n throw new Error(\n \"cannot enable cancellation after promises are in use\");\n }\n Promise.prototype._clearCancellationData =\n cancellationClearCancellationData;\n Promise.prototype._propagateFrom = cancellationPropagateFrom;\n Promise.prototype._onCancel = cancellationOnCancel;\n Promise.prototype._setOnCancel = cancellationSetOnCancel;\n Promise.prototype._attachCancellationCallback =\n cancellationAttachCancellationCallback;\n Promise.prototype._execute = cancellationExecute;\n propagateFromFunction = cancellationPropagateFrom;\n config.cancellation = true;\n }\n if (\"monitoring\" in opts) {\n if (opts.monitoring && !config.monitoring) {\n config.monitoring = true;\n Promise.prototype._fireEvent = activeFireEvent;\n } else if (!opts.monitoring && config.monitoring) {\n config.monitoring = false;\n Promise.prototype._fireEvent = defaultFireEvent;\n }\n }\n return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n try {\n executor(resolve, reject);\n } catch (e) {\n return e;\n }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n ;\n ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n var promise = this;\n try {\n executor(resolve, reject, function(onCancel) {\n if (typeof onCancel !== \"function\") {\n throw new TypeError(\"onCancel must be a function, got: \" +\n util.toString(onCancel));\n }\n promise._attachCancellationCallback(onCancel);\n });\n } catch (e) {\n return e;\n }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n if (!this._isCancellable()) return this;\n\n var previousOnCancel = this._onCancel();\n if (previousOnCancel !== undefined) {\n if (util.isArray(previousOnCancel)) {\n previousOnCancel.push(onCancel);\n } else {\n this._setOnCancel([previousOnCancel, onCancel]);\n }\n } else {\n this._setOnCancel(onCancel);\n }\n}\n\nfunction cancellationOnCancel() {\n return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n this._cancellationParent = undefined;\n this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n if ((flags & 1) !== 0) {\n this._cancellationParent = parent;\n var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n if (branchesRemainingToCancel === undefined) {\n branchesRemainingToCancel = 0;\n }\n parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n }\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n if (canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n parent) {\n if (returnValue === undefined && promiseCreated !== null &&\n wForgottenReturn) {\n if (parent !== undefined && parent._returnedNonUndefined()) return;\n if ((promise._bitField & 65535) === 0) return;\n\n if (name) name = name + \" \";\n var handlerLine = \"\";\n var creatorLine = \"\";\n if (promiseCreated._trace) {\n var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n var stack = cleanStack(traceLines);\n for (var i = stack.length - 1; i >= 0; --i) {\n var line = stack[i];\n if (!nodeFramePattern.test(line)) {\n var lineMatches = line.match(parseLinePattern);\n if (lineMatches) {\n handlerLine = \"at \" + lineMatches[1] +\n \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n }\n break;\n }\n }\n\n if (stack.length > 0) {\n var firstUserLine = stack[0];\n for (var i = 0; i < traceLines.length; ++i) {\n\n if (traceLines[i] === firstUserLine) {\n if (i > 0) {\n creatorLine = \"\\n\" + traceLines[i - 1];\n }\n break;\n }\n }\n\n }\n }\n var msg = \"a promise was created in a \" + name +\n \"handler \" + handlerLine + \"but was not returned from it, \" +\n \"see http://goo.gl/rRqMUw\" +\n creatorLine;\n promise._warn(msg, true, promiseCreated);\n }\n}\n\nfunction deprecated(name, replacement) {\n var message = name +\n \" is deprecated and will be removed in a future version.\";\n if (replacement) message += \" Use \" + replacement + \" instead.\";\n return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n if (!config.warnings) return;\n var warning = new Warning(message);\n var ctx;\n if (shouldUseOwnTrace) {\n promise._attachExtraTrace(warning);\n } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n\n if (!activeFireEvent(\"warning\", warning)) {\n formatAndLogError(warning, \"\", true);\n }\n}\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = \" (No stack trace)\" === line ||\n stackFramePattern.test(line);\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0 && error.name != \"SyntaxError\") {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nfunction parseStackAndMessage(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n if (typeof console !== \"undefined\") {\n var message;\n if (util.isObject(error)) {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof printWarning === \"function\") {\n printWarning(message, isSoft);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n if (name === \"unhandledRejection\") {\n if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n formatAndLogError(reason, \"Unhandled rejection \");\n }\n } else {\n activeFireEvent(name, promise);\n }\n}\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj && typeof obj.toString === \"function\"\n ? obj.toString() : util.toString(obj);\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n if (!longStackTracesIsSupported()) return;\n var firstStackLines = firstLineError.stack.split(\"\\n\");\n var lastStackLines = lastLineError.stack.split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n this._promisesCreated = 0;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit += 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit += 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit -= 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit += 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit -= 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n printWarning = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n printWarning = function(message, isSoft) {\n var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n console.warn(color + message + \"\\u001b[0m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n printWarning = function(message, isSoft) {\n console.warn(\"%c\" + message,\n isSoft ? \"color: darkorange\" : \"color: red\");\n };\n }\n}\n\nvar config = {\n warnings: warnings,\n longStackTraces: false,\n cancellation: false,\n monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n longStackTraces: function() {\n return config.longStackTraces;\n },\n warnings: function() {\n return config.warnings;\n },\n cancellation: function() {\n return config.cancellation;\n },\n monitoring: function() {\n return config.monitoring;\n },\n propagateFromFunction: function() {\n return propagateFromFunction;\n },\n boundValueFunction: function() {\n return boundValueFunction;\n },\n checkForgottenReturns: checkForgottenReturns,\n setBounds: setBounds,\n warn: warn,\n deprecated: deprecated,\n CapturedTrace: CapturedTrace,\n fireDomEvent: fireDomEvent,\n fireGlobalEvent: fireGlobalEvent\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise) {\nvar util = require(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n this.promise = promise;\n this.type = type;\n this.handler = handler;\n this.called = false;\n this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n if (ctx.cancelPromise != null) {\n if (arguments.length > 1) {\n ctx.cancelPromise._reject(reason);\n } else {\n ctx.cancelPromise._cancel();\n }\n ctx.cancelPromise = null;\n return true;\n }\n return false;\n}\n\nfunction succeed() {\n return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n if (checkCancel(this, reason)) return;\n errorObj.e = reason;\n return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n if (!this.called) {\n this.called = true;\n var ret = this.isFinallyHandler()\n ? handler.call(promise._boundValue())\n : handler.call(promise._boundValue(), reasonOrValue);\n if (ret !== undefined) {\n promise._setReturnedNonUndefined();\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n if (this.cancelPromise != null) {\n if (maybePromise._isCancelled()) {\n var reason =\n new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n errorObj.e = reason;\n return errorObj;\n } else if (maybePromise.isPending()) {\n maybePromise._attachCancellationCallback(\n new FinallyHandlerCancelReaction(this));\n }\n }\n return maybePromise._then(\n succeed, fail, undefined, this, undefined);\n }\n }\n }\n\n if (promise.isRejected()) {\n checkCancel(this);\n errorObj.e = reasonOrValue;\n return errorObj;\n } else {\n checkCancel(this);\n return reasonOrValue;\n }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n if (typeof handler !== \"function\") return this.then();\n return this._then(success,\n fail,\n undefined,\n new PassThroughHandlerContext(this, type, handler),\n undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThrough(handler,\n 0,\n finallyHandler,\n finallyHandler);\n};\n\nPromise.prototype.tap = function (handler) {\n return this._passThrough(handler, 1, finallyHandler);\n};\n\nreturn PassThroughHandlerContext;\n};\n","\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util\");\nvar getKeys = require(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n return function(e) {\n var boundTo = promise._boundValue();\n predicateLoop: for (var i = 0; i < instances.length; ++i) {\n var item = instances[i];\n\n if (item === Error ||\n (item != null && item.prototype instanceof Error)) {\n if (e instanceof item) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (typeof item === \"function\") {\n var matchesPredicate = tryCatch(item).call(boundTo, e);\n if (matchesPredicate === errorObj) {\n return matchesPredicate;\n } else if (matchesPredicate) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (util.isObject(e)) {\n var keys = getKeys(item);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n if (item[key] != e[key]) {\n continue predicateLoop;\n }\n }\n return tryCatch(cb).call(boundTo, e);\n }\n }\n return NEXT_FILTER;\n };\n}\n\nreturn catchFilter;\n};\n","\"use strict\";\nvar util = require(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = require(\"./es5\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n return function(err, value) {\n if (promise === null) return;\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (!multiArgs) {\n promise._fulfill(value);\n } else {\n var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n promise._fulfill(args);\n }\n promise = null;\n };\n}\n\nmodule.exports = nodebackForPromise;\n","\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.method\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value;\n if (arguments.length > 1) {\n debug.deprecated(\"calling Promise.try with more than 1 argument\");\n var arg = arguments[1];\n var ctx = arguments[2];\n value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n : tryCatch(fn).call(ctx, arg);\n } else {\n value = tryCatch(fn)();\n }\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.try\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (((this._bitField & 50397184) === 0)) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n if (!calledBind) {\n calledBind = true;\n Promise.prototype._propagateFrom = debug.propagateFromFunction();\n Promise.prototype._boundValue = debug.boundValueFunction();\n }\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, undefined, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, undefined, ret, context);\n ret._setOnCancel(maybePromise);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 2097152;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~2097152);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n return Promise.resolve(value).bind(thisArg);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n var promise = this;\n var child = promise;\n while (promise._isCancellable()) {\n if (!promise._cancelBy(child)) {\n if (child._isFollowing()) {\n child._followee().cancel();\n } else {\n child._cancelBranched();\n }\n break;\n }\n\n var parent = promise._cancellationParent;\n if (parent == null || !parent._isCancellable()) {\n if (promise._isFollowing()) {\n promise._followee().cancel();\n } else {\n promise._cancelBranched();\n }\n break;\n } else {\n if (promise._isFollowing()) promise._followee().cancel();\n promise._setWillBeCancelled();\n child = promise;\n promise = parent;\n }\n }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n return this._branchesRemainingToCancel === undefined ||\n this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n if (canceller === this) {\n this._branchesRemainingToCancel = 0;\n this._invokeOnCancel();\n return true;\n } else {\n this._branchHasCancelled();\n if (this._enoughBranchesHaveCancelled()) {\n this._invokeOnCancel();\n return true;\n }\n }\n return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n if (this._enoughBranchesHaveCancelled()) {\n this._cancel();\n }\n};\n\nPromise.prototype._cancel = function() {\n if (!this._isCancellable()) return;\n this._setCancelled();\n async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n if (util.isArray(onCancelCallback)) {\n for (var i = 0; i < onCancelCallback.length; ++i) {\n this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n }\n } else if (onCancelCallback !== undefined) {\n if (typeof onCancelCallback === \"function\") {\n if (!internalOnly) {\n var e = tryCatch(onCancelCallback).call(this._boundValue());\n if (e === errorObj) {\n this._attachExtraTrace(e.e);\n async.throwLater(e.e);\n }\n }\n } else {\n onCancelCallback._resultCancelled(this);\n }\n }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n var onCancelCallback = this._onCancel();\n this._unsetOnCancel();\n async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n if (this._isCancellable()) {\n this._doInvokeOnCancel(this._onCancel(), true);\n this._unsetOnCancel();\n }\n};\n\nPromise.prototype._resultCancelled = function() {\n this.cancel();\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n return this.value;\n}\nfunction thrower() {\n throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n return this._then(\n thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n if (arguments.length <= 1) {\n return this._then(\n undefined, thrower, undefined, {reason: reason}, undefined);\n } else {\n var _reason = arguments[1];\n var handler = function() {throw _reason;};\n return this.caught(reason, handler);\n }\n};\n\nPromise.prototype.catchReturn = function (value) {\n if (arguments.length <= 1) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n undefined, returner, undefined, {value: value}, undefined);\n } else {\n var _value = arguments[1];\n if (_value instanceof Promise) _value.suppressUnhandledRejections();\n var handler = function() {return _value;};\n return this.caught(value, handler);\n }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValueField = promise._isFateSealed()\n ? promise._settledValue() : undefined;\n }\n else {\n this._bitField = 0;\n this._settledValueField = undefined;\n }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n target._unsetRejectionIsUnhandled();\n return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n getDomain) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n var thenCallback = function(i) {\n return new Function(\"value\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = value; \\n\\\n holder.checkFulfillment(this); \\n\\\n \".replace(/Index/g, i));\n };\n\n var promiseSetter = function(i) {\n return new Function(\"promise\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = promise; \\n\\\n \".replace(/Index/g, i));\n };\n\n var generateHolderClass = function(total) {\n var props = new Array(total);\n for (var i = 0; i < props.length; ++i) {\n props[i] = \"this.p\" + (i+1);\n }\n var assignment = props.join(\" = \") + \" = null;\";\n var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n return \" \\n\\\n promise = \" + prop + \"; \\n\\\n if (promise instanceof Promise) { \\n\\\n promise.cancel(); \\n\\\n } \\n\\\n \";\n }).join(\"\\n\");\n var passedArguments = props.join(\", \");\n var name = \"Holder$\" + total;\n\n\n var code = \"return function(tryCatch, errorObj, Promise, async) { \\n\\\n 'use strict'; \\n\\\n function [TheName](fn) { \\n\\\n [TheProperties] \\n\\\n this.fn = fn; \\n\\\n this.asyncNeeded = true; \\n\\\n this.now = 0; \\n\\\n } \\n\\\n \\n\\\n [TheName].prototype._callFunction = function(promise) { \\n\\\n promise._pushContext(); \\n\\\n var ret = tryCatch(this.fn)([ThePassedArguments]); \\n\\\n promise._popContext(); \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(ret.e, false); \\n\\\n } else { \\n\\\n promise._resolveCallback(ret); \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype.checkFulfillment = function(promise) { \\n\\\n var now = ++this.now; \\n\\\n if (now === [TheTotal]) { \\n\\\n if (this.asyncNeeded) { \\n\\\n async.invoke(this._callFunction, this, promise); \\n\\\n } else { \\n\\\n this._callFunction(promise); \\n\\\n } \\n\\\n \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype._resultCancelled = function() { \\n\\\n [CancellationCode] \\n\\\n }; \\n\\\n \\n\\\n return [TheName]; \\n\\\n }(tryCatch, errorObj, Promise, async); \\n\\\n \";\n\n code = code.replace(/\\[TheName\\]/g, name)\n .replace(/\\[TheTotal\\]/g, total)\n .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n .replace(/\\[TheProperties\\]/g, assignment)\n .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n (tryCatch, errorObj, Promise, async);\n };\n\n var holderClasses = [];\n var thenCallbacks = [];\n var promiseSetters = [];\n\n for (var i = 0; i < 8; ++i) {\n holderClasses.push(generateHolderClass(i + 1));\n thenCallbacks.push(thenCallback(i + 1));\n promiseSetters.push(promiseSetter(i + 1));\n }\n\n reject = function (reason) {\n this._reject(reason);\n };\n}}\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (!false) {\n if (last <= 8 && canEvaluate) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var HolderClass = holderClasses[last - 1];\n var holder = new HolderClass(fn);\n var callbacks = thenCallbacks;\n\n for (var i = 0; i < last; ++i) {\n var maybePromise = tryConvertToPromise(arguments[i], ret);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n maybePromise._then(callbacks[i], reject,\n undefined, ret, holder);\n promiseSetters[i](maybePromise, holder);\n holder.asyncNeeded = false;\n } else if (((bitField & 33554432) !== 0)) {\n callbacks[i].call(ret,\n maybePromise._value(), holder);\n } else if (((bitField & 16777216) !== 0)) {\n ret._reject(maybePromise._reason());\n } else {\n ret._cancel();\n }\n } else {\n callbacks[i].call(ret, maybePromise, holder);\n }\n }\n\n if (!ret._isFateSealed()) {\n if (holder.asyncNeeded) {\n var domain = getDomain();\n if (domain !== null) {\n holder.fn = util.domainBind(domain, holder.fn);\n }\n }\n ret._setAsyncGuaranteed();\n ret._setOnCancel(holder);\n }\n return ret;\n }\n }\n }\n var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];};\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var domain = getDomain();\n this._callback = domain === null ? fn : util.domainBind(domain, fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = [];\n async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n\n if (index < 0) {\n index = (index * -1) - 1;\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return true;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return false;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var promise = this._promise;\n var callback = this._callback;\n var receiver = promise._boundValue();\n promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n promise\n );\n if (ret === errorObj) {\n this._reject(ret.e);\n return true;\n }\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n if (limit >= 1) this._inFlight++;\n values[index] = maybePromise;\n maybePromise._proxy(this, (index + 1) * -1);\n return false;\n } else if (((bitField & 33554432) !== 0)) {\n ret = maybePromise._value();\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(maybePromise._reason());\n return true;\n } else {\n this._cancel();\n return true;\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n return true;\n }\n return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n\n var limit = 0;\n if (options !== undefined) {\n if (typeof options === \"object\" && options !== null) {\n if (typeof options.concurrency !== \"number\") {\n return Promise.reject(\n new TypeError(\"'concurrency' must be a number but it is \" +\n util.classString(options.concurrency)));\n }\n limit = options.concurrency;\n } else {\n return Promise.reject(new TypeError(\n \"options argument must be an object but it is \" +\n util.classString(options)));\n }\n }\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n return map(promises, fn, options, _filter);\n};\n\n\n};\n","\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n return new Function(\"ensureMethod\", \" \\n\\\n return function(obj) { \\n\\\n 'use strict' \\n\\\n var len = this.length; \\n\\\n ensureMethod(obj, 'methodName'); \\n\\\n switch(len) { \\n\\\n case 1: return obj.methodName(this[0]); \\n\\\n case 2: return obj.methodName(this[0], this[1]); \\n\\\n case 3: return obj.methodName(this[0], this[1], this[2]); \\n\\\n case 0: return obj.methodName(); \\n\\\n default: \\n\\\n return obj.methodName.apply(obj, this); \\n\\\n } \\n\\\n }; \\n\\\n \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n return new Function(\"obj\", \" \\n\\\n 'use strict'; \\n\\\n return obj.propertyName; \\n\\\n \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n var ret = cache[name];\n if (typeof ret !== \"function\") {\n if (!isIdentifier(name)) {\n return null;\n }\n ret = compiler(name);\n cache[name] = ret;\n cache[\" size\"]++;\n if (cache[\" size\"] > 512) {\n var keys = Object.keys(cache);\n for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n cache[\" size\"] = keys.length - 256;\n }\n }\n return ret;\n};\n\ngetMethodCaller = function(name) {\n return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n if (!false) {\n if (canEvaluate) {\n var maybeCaller = getMethodCaller(methodName);\n if (maybeCaller !== null) {\n return this._then(\n maybeCaller, undefined, undefined, args, undefined);\n }\n }\n }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n","\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext, INTERNAL, debug) {\n var util = require(\"./util\");\n var TypeError = require(\"./errors\").TypeError;\n var inherits = require(\"./util\").inherits;\n var errorObj = util.errorObj;\n var tryCatch = util.tryCatch;\n var NULL = {};\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = new Promise(INTERNAL);\n function iterator() {\n if (i >= len) return ret._fulfill();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret;\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return NULL;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== NULL\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n function ResourceList(length) {\n this.length = length;\n this.promise = null;\n this[length-1] = null;\n }\n\n ResourceList.prototype._resultCancelled = function() {\n var len = this.length;\n for (var i = 0; i < len; ++i) {\n var item = this[i];\n if (item instanceof Promise) {\n item.cancel();\n }\n }\n };\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var input;\n var spreadArgs = true;\n if (len === 2 && Array.isArray(arguments[0])) {\n input = arguments[0];\n len = input.length;\n spreadArgs = false;\n } else {\n input = arguments;\n len--;\n }\n var resources = new ResourceList(len);\n for (var i = 0; i < len; ++i) {\n var resource = input[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var reflectedResources = new Array(resources.length);\n for (var i = 0; i < reflectedResources.length; ++i) {\n reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n }\n\n var resultPromise = Promise.all(reflectedResources)\n .then(function(inspections) {\n for (var i = 0; i < inspections.length; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n errorObj.e = inspection.error();\n return errorObj;\n } else if (!inspection.isFulfilled()) {\n resultPromise.cancel();\n return;\n }\n inspections[i] = inspection.value();\n }\n promise._pushContext();\n\n fn = tryCatch(fn);\n var ret = spreadArgs\n ? fn.apply(undefined, inspections) : fn(inspections);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret, promiseCreated, \"Promise.using\", promise);\n return ret;\n });\n\n var promise = resultPromise.lastly(function() {\n var inspection = new Promise.PromiseInspection(resultPromise);\n return dispose(resources, inspection);\n });\n resources.promise = promise;\n promise._setOnCancel(resources);\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 131072;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 131072) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~131072);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = require(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle) {\n this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n var ret;\n var handle;\n if (value !== undefined) {\n ret = Promise.resolve(value)\n ._then(afterValue, null, null, ms, undefined);\n if (debug.cancellation() && value instanceof Promise) {\n ret._setOnCancel(value);\n }\n } else {\n ret = new Promise(INTERNAL);\n handle = setTimeout(function() { ret._fulfill(); }, +ms);\n if (debug.cancellation()) {\n ret._setOnCancel(new HandleWrapper(handle));\n }\n ret._captureStackTrace();\n }\n ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n var err;\n if (typeof message !== \"string\") {\n if (message instanceof Error) {\n err = message;\n } else {\n err = new TimeoutError(\"operation timed out\");\n }\n } else {\n err = new TimeoutError(message);\n }\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._reject(err);\n\n if (parent != null) {\n parent.cancel();\n }\n};\n\nfunction successClear(value) {\n clearTimeout(this.handle);\n return value;\n}\n\nfunction failureClear(reason) {\n clearTimeout(this.handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret, parent;\n\n var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n if (ret.isPending()) {\n afterTimeout(ret, message, parent);\n }\n }, ms));\n\n if (debug.cancellation()) {\n parent = this.then();\n ret = parent._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n ret._setOnCancel(handleWrapper);\n } else {\n ret = this._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n }\n\n return ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise,\n Proxyable,\n debug) {\nvar errors = require(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n if (debug.cancellation()) {\n var internal = new Promise(INTERNAL);\n var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n this._promise = internal.lastly(function() {\n return _finallyPromise;\n });\n internal._captureStackTrace();\n internal._setOnCancel(this);\n } else {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n }\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n this._yieldedPromise = null;\n this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n this._promise = this._generator = null;\n if (debug.cancellation() && this._finallyPromise !== null) {\n this._finallyPromise._fulfill();\n this._finallyPromise = null;\n }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n if (this._isResolved()) return;\n var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n var result;\n if (!implementsReturn) {\n var reason = new Promise.CancellationError(\n \"generator .return() sentinel\");\n Promise.coroutine.returnSentinel = reason;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n reason);\n this._promise._popContext();\n } else {\n this._promise._pushContext();\n result = tryCatch(this._generator[\"return\"]).call(this._generator,\n undefined);\n this._promise._popContext();\n }\n this._cancellationPhase = true;\n this._yieldedPromise = null;\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n this._yieldedPromise = null;\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n this._yieldedPromise = null;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n if (this._yieldedPromise instanceof Promise) {\n var promise = this._yieldedPromise;\n this._yieldedPromise = null;\n promise.cancel();\n }\n};\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n var promise = this._promise;\n if (result === errorObj) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._rejectCallback(result.e, false);\n }\n }\n\n var value = result.value;\n if (result.done === true) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._resolveCallback(value);\n }\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._promiseRejected(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", value) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n this._yieldedPromise = maybePromise;\n maybePromise._proxy(this, null);\n } else if (((bitField & 33554432) !== 0)) {\n Promise._async.invoke(\n this._promiseFulfilled, this, maybePromise._value()\n );\n } else if (((bitField & 16777216) !== 0)) {\n Promise._async.invoke(\n this._promiseRejected, this, maybePromise._reason()\n );\n } else {\n this._promiseCancelled();\n }\n }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n var ret = spawn.promise();\n spawn._generator = generator;\n spawn._promiseFulfilled(undefined);\n return ret;\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var newReason = new Error(reason + \"\");\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util\");\nvar nodebackForPromise = require(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n var ret = [likelyArgumentCount];\n var min = Math.max(0, likelyArgumentCount - 1 - 3);\n for(var i = likelyArgumentCount - 1; i >= min; --i) {\n ret.push(i);\n }\n for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n ret.push(i);\n }\n return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n return util.filledRange(\n Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n if (typeof fn.length === \"number\") {\n return Math.max(Math.min(fn.length, 1023 + 1), 0);\n }\n return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n function generateCallForArgumentCount(count) {\n var args = argumentSequence(count).join(\", \");\n var comma = count > 0 ? \", \" : \"\";\n var ret;\n if (shouldProxyThis) {\n ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n } else {\n ret = receiver === undefined\n ? \"ret = callback({{args}}, nodeback); break;\\n\"\n : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n }\n return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n }\n\n function generateArgumentSwitchCase() {\n var ret = \"\";\n for (var i = 0; i < argumentOrder.length; ++i) {\n ret += \"case \" + argumentOrder[i] +\":\" +\n generateCallForArgumentCount(argumentOrder[i]);\n }\n\n ret += \" \\n\\\n default: \\n\\\n var args = new Array(len + 1); \\n\\\n var i = 0; \\n\\\n for (var i = 0; i < len; ++i) { \\n\\\n args[i] = arguments[i]; \\n\\\n } \\n\\\n args[i] = nodeback; \\n\\\n [CodeForCall] \\n\\\n break; \\n\\\n \".replace(\"[CodeForCall]\", (shouldProxyThis\n ? \"ret = callback.apply(this, args);\\n\"\n : \"ret = callback.apply(receiver, args);\\n\"));\n return ret;\n }\n\n var getFunctionCode = typeof callback === \"string\"\n ? (\"this != null ? this['\"+callback+\"'] : fn\")\n : \"fn\";\n var body = \"'use strict'; \\n\\\n var ret = function (Parameters) { \\n\\\n 'use strict'; \\n\\\n var len = arguments.length; \\n\\\n var promise = new Promise(INTERNAL); \\n\\\n promise._captureStackTrace(); \\n\\\n var nodeback = nodebackForPromise(promise, \" + multiArgs + \"); \\n\\\n var ret; \\n\\\n var callback = tryCatch([GetFunctionCode]); \\n\\\n switch(len) { \\n\\\n [CodeForSwitchCase] \\n\\\n } \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n } \\n\\\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \\n\\\n return promise; \\n\\\n }; \\n\\\n notEnumerableProp(ret, '__isPromisified__', true); \\n\\\n return ret; \\n\\\n \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n .replace(\"[GetFunctionCode]\", getFunctionCode);\n body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n return new Function(\"Promise\",\n \"fn\",\n \"receiver\",\n \"withAppended\",\n \"maybeWrapAsError\",\n \"nodebackForPromise\",\n \"tryCatch\",\n \"errorObj\",\n \"notEnumerableProp\",\n \"INTERNAL\",\n body)(\n Promise,\n fn,\n receiver,\n withAppended,\n maybeWrapAsError,\n nodebackForPromise,\n util.tryCatch,\n util.errorObj,\n util.notEnumerableProp,\n INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise, multiArgs);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n if (promisifier === makeNodePromisified) {\n obj[promisifiedKey] =\n makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n } else {\n var promisified = promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key,\n fn, suffix, multiArgs);\n });\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n obj[promisifiedKey] = promisified;\n }\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n return makeNodePromisified(callback, receiver, undefined,\n callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n if (isPromisified(fn)) {\n return fn;\n }\n options = Object(options);\n var receiver = options.context === undefined ? THIS : options.context;\n var multiArgs = !!options.multiArgs;\n var ret = promisify(fn, receiver, multiArgs);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n options = Object(options);\n var multiArgs = !!options.multiArgs;\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier,\n multiArgs);\n promisifyAll(value, suffix, filter, promisifier, multiArgs);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n","\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n var index = 0;\n var size = 0;\n\n function extractEntry(value, key) {\n this[index] = value;\n this[index + size] = key;\n index++;\n }\n\n return function mapToEntries(map) {\n size = map.size;\n index = 0;\n var ret = new Array(map.size * 2);\n map.forEach(extractEntry, ret);\n return ret;\n };\n})();\n\nvar entriesToMap = function(entries) {\n var ret = new Es6Map();\n var length = entries.length / 2 | 0;\n for (var i = 0; i < length; ++i) {\n var key = entries[length + i];\n var value = entries[i];\n ret.set(key, value);\n }\n return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n var isMap = false;\n var entries;\n if (Es6Map !== undefined && obj instanceof Es6Map) {\n entries = mapToEntries(obj);\n isMap = true;\n } else {\n var keys = es5.keys(obj);\n var len = keys.length;\n entries = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n entries[i] = obj[key];\n entries[i + len] = key;\n }\n }\n this.constructor$(entries);\n this._isMap = isMap;\n this._init$(undefined, -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val;\n if (this._isMap) {\n val = entriesToMap(this._values);\n } else {\n val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n }\n this._resolve(val);\n return true;\n }\n return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 2);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n","\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else {\n promises = util.asArray(promises);\n if (promises === null)\n return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 3);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n this.constructor$(promises);\n var domain = getDomain();\n this._fn = domain === null ? fn : util.domainBind(domain, fn);\n if (initialValue !== undefined) {\n initialValue = Promise.resolve(initialValue);\n initialValue._attachCancellationCallback(this);\n }\n this._initialValue = initialValue;\n this._currentCancellable = null;\n if(_each === INTERNAL) {\n this._eachValues = Array(this._length);\n } else if (_each === 0) {\n this._eachValues = null;\n } else {\n this._eachValues = undefined;\n }\n this._promise._captureStackTrace();\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n if (this._eachValues !== undefined && \n this._eachValues !== null && \n accum !== INTERNAL) {\n this._eachValues.push(accum);\n }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n if (this._eachValues !== null) {\n this._eachValues.push(value);\n }\n return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n this._resolve(this._eachValues !== undefined ? this._eachValues\n : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n this._promise._resolveCallback(value);\n this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n if (sender === this._initialValue) return this._cancel();\n if (this._isResolved()) return;\n this._resultCancelled$();\n if (this._currentCancellable instanceof Promise) {\n this._currentCancellable.cancel();\n }\n if (this._initialValue instanceof Promise) {\n this._initialValue.cancel();\n }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n this._values = values;\n var value;\n var i;\n var length = values.length;\n if (this._initialValue !== undefined) {\n value = this._initialValue;\n i = 0;\n } else {\n value = Promise.resolve(values[0]);\n i = 1;\n }\n\n this._currentCancellable = value;\n\n if (!value.isRejected()) {\n for (; i < length; ++i) {\n var ctx = {\n accum: null,\n value: values[i],\n index: i,\n length: length,\n array: this\n };\n value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n }\n }\n\n if (this._eachValues !== undefined) {\n value = value\n ._then(this._eachComplete, undefined, undefined, this, undefined);\n }\n value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n if (this.isFulfilled()) {\n array._resolve(valueOrReason);\n } else {\n array._reject(valueOrReason);\n }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nfunction gotAccum(accum) {\n this.accum = accum;\n this.array._gotAccum(accum);\n var value = tryConvertToPromise(this.value, this.array._promise);\n if (value instanceof Promise) {\n this.array._currentCancellable = value;\n return value._then(gotValue, undefined, undefined, this, undefined);\n } else {\n return gotValue.call(this, value);\n }\n}\n\nfunction gotValue(value) {\n var array = this.array;\n var promise = array._promise;\n var fn = tryCatch(array._fn);\n promise._pushContext();\n var ret;\n if (array._eachValues !== undefined) {\n ret = fn.call(promise._boundValue(), value, this.index, this.length);\n } else {\n ret = fn.call(promise._boundValue(),\n this.accum, value, this.index, this.length);\n }\n if (ret instanceof Promise) {\n array._currentCancellable = ret;\n }\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n promise\n );\n return ret;\n}\n};\n","\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 33554432;\n ret._settledValueField = value;\n return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 16777216;\n ret._settledValueField = reason;\n return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n debug.deprecated(\".settle()\", \".reflect()\");\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return Promise.settle(this);\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util\");\nvar RangeError = require(\"./errors\").RangeError;\nvar AggregateError = require(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n return true;\n }\n return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n if (this._values instanceof Promise || this._values == null) {\n return this._cancel();\n }\n this._addRejected(CANCELLATION);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n if (this._values[i] !== CANCELLATION) {\n e.push(this._values[i]);\n }\n }\n if (e.length > 0) {\n this._reject(e);\n } else {\n this._cancel();\n }\n return true;\n }\n return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(1);\n ret.setUnwrap();\n ret.init();\n return promise;\n}\n\nPromise.any = function (promises) {\n return any(promises);\n};\n\nPromise.prototype.any = function () {\n return any(this);\n};\n\n};\n","\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = require(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n getDomain = function() {\n var ret = process.domain;\n if (ret === undefined) ret = null;\n return ret;\n };\n} else {\n getDomain = function() {\n return null;\n };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = require(\"./es5\");\nvar Async = require(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = require(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = require(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n require(\"./promise_array\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection, Proxyable);\nvar Context = require(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = require(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n require(\"./finally\")(Promise, tryConvertToPromise);\nvar catchFilter = require(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = require(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n if (typeof executor !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n }\n if (self.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n}\n\nfunction Promise(executor) {\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n if (executor !== INTERNAL) {\n check(this, executor);\n this._resolveFromExecutor(executor);\n }\n this._promiseCreated();\n this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return apiRejection(\"expecting an object but got \" +\n \"A catch statement predicate \" + util.classString(item));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n return this.then(undefined, catchFilter(catchInstances, fn, this));\n }\n return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflectHandler,\n reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n if (debug.warnings() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n var promise =\n this._then(didFulfill, didReject, undefined, undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n if (arguments.length > 0) {\n this._warn(\".all() was passed arguments but it does not take any\");\n }\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n : false;\n var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true);\n }\n if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._setFulfilled();\n ret._rejectionHandler0 = obj;\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n _, receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n var target = this._target();\n var bitField = target._bitField;\n\n if (!haveInternalData) {\n promise._propagateFrom(this, 3);\n promise._captureStackTrace();\n if (receiver === undefined &&\n ((this._bitField & 2097152) !== 0)) {\n if (!((bitField & 50397184) === 0)) {\n receiver = this._boundValue();\n } else {\n receiver = target === this ? undefined : this._boundTo;\n }\n }\n this._fireEvent(\"promiseChained\", this, promise);\n }\n\n var domain = getDomain();\n if (!((bitField & 50397184) === 0)) {\n var handler, value, settler = target._settlePromiseCtx;\n if (((bitField & 33554432) !== 0)) {\n value = target._rejectionHandler0;\n handler = didFulfill;\n } else if (((bitField & 16777216) !== 0)) {\n value = target._fulfillmentHandler0;\n handler = didReject;\n target._unsetRejectionIsUnhandled();\n } else {\n settler = target._settlePromiseLateCancellationObserver;\n value = new CancellationError(\"late cancellation observer\");\n target._attachExtraTrace(value);\n handler = didReject;\n }\n\n async.invoke(settler, target, {\n handler: domain === null ? handler\n : (typeof handler === \"function\" &&\n util.domainBind(domain, handler)),\n promise: promise,\n receiver: receiver,\n value: value\n });\n } else {\n target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n }\n\n return promise;\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -65536) |\n (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 33554432;\n this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 16777216;\n this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 67108864;\n this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n this._bitField = this._bitField | 65536;\n this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n if (async.hasCustomScheduler()) return;\n this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0 ? this._receiver0 : this[\n index * 4 - 4 + 3];\n if (ret === UNDEFINED_BINDING) {\n return undefined;\n } else if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return this[\n index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n var bitField = follower._bitField;\n var fulfill = follower._fulfillmentHandler0;\n var reject = follower._rejectionHandler0;\n var promise = follower._promise0;\n var receiver = follower._receiverAt(0);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n promise,\n receiver,\n domain\n) {\n var index = this._length();\n\n if (index >= 65535 - 4) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n this._receiver0 = receiver;\n if (typeof fulfill === \"function\") {\n this._fulfillmentHandler0 =\n domain === null ? fulfill : util.domainBind(domain, fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 =\n domain === null ? reject : util.domainBind(domain, reject);\n }\n } else {\n var base = index * 4 - 4;\n this[base + 2] = promise;\n this[base + 3] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n domain === null ? fulfill : util.domainBind(domain, fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n domain === null ? reject : util.domainBind(domain, reject);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (((this._bitField & 117506048) !== 0)) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n var promise = maybePromise._target();\n\n if (promise === this) {\n this._reject(makeSelfResolutionError());\n return;\n }\n\n var bitField = promise._bitField;\n if (((bitField & 50397184) === 0)) {\n var len = this._length();\n if (len > 0) promise._migrateCallback0(this);\n for (var i = 1; i < len; ++i) {\n promise._migrateCallbackAt(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(promise);\n } else if (((bitField & 33554432) !== 0)) {\n this._fulfill(promise._value());\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(promise._reason());\n } else {\n var reason = new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n this._reject(reason);\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n var message = \"a promise was rejected with a non-error: \" +\n util.classString(reason);\n this._warn(message, true);\n }\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = this._execute(executor, function(value) {\n promise._resolveCallback(value);\n }, function (reason) {\n promise._rejectCallback(reason, synchronous);\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined) {\n promise._rejectCallback(r, true);\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n var bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY) {\n if (!value || typeof value.length !== \"number\") {\n x = errorObj;\n x.e = new TypeError(\"cannot .spread() a non-array: \" +\n util.classString(value));\n } else {\n x = tryCatch(handler).apply(this._boundValue(), value);\n }\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n var promiseCreated = promise._popContext();\n bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n\n if (x === NEXT_FILTER) {\n promise._reject(value);\n } else if (x === errorObj) {\n promise._rejectCallback(x.e, false);\n } else {\n debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n var isPromise = promise instanceof Promise;\n var bitField = this._bitField;\n var asyncGuaranteed = ((bitField & 134217728) !== 0);\n if (((bitField & 65536) !== 0)) {\n if (isPromise) promise._invokeInternalOnCancel();\n\n if (receiver instanceof PassThroughHandlerContext &&\n receiver.isFinallyHandler()) {\n receiver.cancelPromise = promise;\n if (tryCatch(handler).call(receiver, value) === errorObj) {\n promise._reject(errorObj.e);\n }\n } else if (handler === reflectHandler) {\n promise._fulfill(reflectHandler.call(receiver));\n } else if (receiver instanceof Proxyable) {\n receiver._promiseCancelled(promise);\n } else if (isPromise || promise instanceof PromiseArray) {\n promise._cancel();\n } else {\n receiver.cancel();\n }\n } else if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof Proxyable) {\n if (!receiver._isResolved()) {\n if (((bitField & 33554432) !== 0)) {\n receiver._promiseFulfilled(value, promise);\n } else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n if (((bitField & 33554432) !== 0)) {\n promise._fulfill(value);\n } else {\n promise._reject(value);\n }\n }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n var handler = ctx.handler;\n var promise = ctx.promise;\n var receiver = ctx.receiver;\n var value = ctx.value;\n if (typeof handler === \"function\") {\n if (!(promise instanceof Promise)) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (promise instanceof Promise) {\n promise._reject(value);\n }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n var promise = this._promise0;\n var receiver = this._receiverAt(0);\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n var base = index * 4 - 4;\n this[base + 2] =\n this[base + 3] =\n this[base + 0] =\n this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._reject(err);\n }\n this._setFulfilled();\n this._rejectionHandler0 = value;\n\n if ((bitField & 65535) > 0) {\n if (((bitField & 134217728) !== 0)) {\n this._settlePromises();\n } else {\n async.settlePromises(this);\n }\n }\n};\n\nPromise.prototype._reject = function (reason) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n this._setRejected();\n this._fulfillmentHandler0 = reason;\n\n if (this._isFinal()) {\n return async.fatalError(reason, util.isNode);\n }\n\n if ((bitField & 65535) > 0) {\n async.settlePromises(this);\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n for (var i = 1; i < len; i++) {\n var handler = this._fulfillmentHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, value);\n }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n for (var i = 1; i < len; i++) {\n var handler = this._rejectionHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, reason);\n }\n};\n\nPromise.prototype._settlePromises = function () {\n var bitField = this._bitField;\n var len = (bitField & 65535);\n\n if (len > 0) {\n if (((bitField & 16842752) !== 0)) {\n var reason = this._fulfillmentHandler0;\n this._settlePromise0(this._rejectionHandler0, reason, bitField);\n this._rejectPromises(len, reason);\n } else {\n var value = this._rejectionHandler0;\n this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n this._fulfillPromises(len, value);\n }\n this._setLength(0);\n }\n this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n var bitField = this._bitField;\n if (((bitField & 33554432) !== 0)) {\n return this._rejectionHandler0;\n } else if (((bitField & 16777216) !== 0)) {\n return this._fulfillmentHandler0;\n }\n};\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n debug.deprecated(\"Promise.defer\", \"new Promise\");\n var promise = new Promise(INTERNAL);\n return {\n promise: promise,\n resolve: deferResolve,\n reject: deferReject\n };\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\nrequire(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n debug);\nrequire(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\nrequire(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\nrequire(\"./direct_resolve\")(Promise);\nrequire(\"./synchronous_inspection\")(Promise);\nrequire(\"./join\")(\n Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.4.7\";\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./call_get.js')(Promise);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\nrequire('./timers.js')(Promise, INTERNAL, debug);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\nrequire('./nodeify.js')(Promise);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./settle.js')(Promise, PromiseArray, debug);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./filter.js')(Promise, INTERNAL);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./any.js')(Promise);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n debug.setBounds(Async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n","var _ = require(\"underscore\");\nvar bluebird = require(\"bluebird/js/release/promise\")();\n\nexports.defer = defer;\nexports.when = bluebird.resolve;\nexports.resolve = bluebird.resolve;\nexports.all = bluebird.all;\nexports.props = bluebird.props;\nexports.reject = bluebird.reject;\nexports.promisify = bluebird.promisify;\nexports.mapSeries = bluebird.mapSeries;\nexports.attempt = bluebird.attempt;\n\nexports.nfcall = function(func) {\n var args = Array.prototype.slice.call(arguments, 1);\n var promisedFunc = bluebird.promisify(func);\n return promisedFunc.apply(null, args);\n};\n\nbluebird.prototype.fail = bluebird.prototype.caught;\n\nbluebird.prototype.also = function(func) {\n return this.then(function(value) {\n var returnValue = _.extend({}, value, func(value));\n return bluebird.props(returnValue);\n });\n};\n\nfunction defer() {\n var resolve;\n var reject;\n var promise = new bluebird.Promise(function(resolveArg, rejectArg) {\n resolve = resolveArg;\n reject = rejectArg;\n });\n\n return {\n resolve: resolve,\n reject: reject,\n promise: promise\n };\n}\n","var _ = require(\"underscore\");\n\nvar types = exports.types = {\n document: \"document\",\n paragraph: \"paragraph\",\n run: \"run\",\n text: \"text\",\n tab: \"tab\",\n checkbox: \"checkbox\",\n hyperlink: \"hyperlink\",\n noteReference: \"noteReference\",\n image: \"image\",\n note: \"note\",\n commentReference: \"commentReference\",\n comment: \"comment\",\n table: \"table\",\n tableRow: \"tableRow\",\n tableCell: \"tableCell\",\n \"break\": \"break\",\n bookmarkStart: \"bookmarkStart\"\n};\n\nfunction Document(children, options) {\n options = options || {};\n return {\n type: types.document,\n children: children,\n notes: options.notes || new Notes({}),\n comments: options.comments || []\n };\n}\n\nfunction Paragraph(children, properties) {\n properties = properties || {};\n var indent = properties.indent || {};\n return {\n type: types.paragraph,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null,\n numbering: properties.numbering || null,\n alignment: properties.alignment || null,\n indent: {\n start: indent.start || null,\n end: indent.end || null,\n firstLine: indent.firstLine || null,\n hanging: indent.hanging || null\n }\n };\n}\n\nfunction Run(children, properties) {\n properties = properties || {};\n return {\n type: types.run,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null,\n isBold: !!properties.isBold,\n isUnderline: !!properties.isUnderline,\n isItalic: !!properties.isItalic,\n isStrikethrough: !!properties.isStrikethrough,\n isAllCaps: !!properties.isAllCaps,\n isSmallCaps: !!properties.isSmallCaps,\n verticalAlignment: properties.verticalAlignment || verticalAlignment.baseline,\n font: properties.font || null,\n fontSize: properties.fontSize || null,\n highlight: properties.highlight || null\n };\n}\n\nvar verticalAlignment = {\n baseline: \"baseline\",\n superscript: \"superscript\",\n subscript: \"subscript\"\n};\n\nfunction Text(value) {\n return {\n type: types.text,\n value: value\n };\n}\n\nfunction Tab() {\n return {\n type: types.tab\n };\n}\n\nfunction Checkbox(options) {\n return {\n type: types.checkbox,\n checked: options.checked\n };\n}\n\nfunction Hyperlink(children, options) {\n return {\n type: types.hyperlink,\n children: children,\n href: options.href,\n anchor: options.anchor,\n targetFrame: options.targetFrame\n };\n}\n\nfunction NoteReference(options) {\n return {\n type: types.noteReference,\n noteType: options.noteType,\n noteId: options.noteId\n };\n}\n\nfunction Notes(notes) {\n this._notes = _.indexBy(notes, function(note) {\n return noteKey(note.noteType, note.noteId);\n });\n}\n\nNotes.prototype.resolve = function(reference) {\n return this.findNoteByKey(noteKey(reference.noteType, reference.noteId));\n};\n\nNotes.prototype.findNoteByKey = function(key) {\n return this._notes[key] || null;\n};\n\nfunction Note(options) {\n return {\n type: types.note,\n noteType: options.noteType,\n noteId: options.noteId,\n body: options.body\n };\n}\n\nfunction commentReference(options) {\n return {\n type: types.commentReference,\n commentId: options.commentId\n };\n}\n\nfunction comment(options) {\n return {\n type: types.comment,\n commentId: options.commentId,\n body: options.body,\n authorName: options.authorName,\n authorInitials: options.authorInitials\n };\n}\n\nfunction noteKey(noteType, id) {\n return noteType + \"-\" + id;\n}\n\nfunction Image(options) {\n return {\n type: types.image,\n // `read` is retained for backwards compatibility, but other read\n // methods should be preferred.\n read: function(encoding) {\n if (encoding) {\n return options.readImage(encoding);\n } else {\n return options.readImage().then(function(arrayBuffer) {\n return Buffer.from(arrayBuffer);\n });\n }\n },\n readAsArrayBuffer: function() {\n return options.readImage();\n },\n readAsBase64String: function() {\n return options.readImage(\"base64\");\n },\n readAsBuffer: function() {\n return options.readImage().then(function(arrayBuffer) {\n return Buffer.from(arrayBuffer);\n });\n },\n altText: options.altText,\n contentType: options.contentType\n };\n}\n\nfunction Table(children, properties) {\n properties = properties || {};\n return {\n type: types.table,\n children: children,\n styleId: properties.styleId || null,\n styleName: properties.styleName || null\n };\n}\n\nfunction TableRow(children, options) {\n options = options || {};\n return {\n type: types.tableRow,\n children: children,\n isHeader: options.isHeader || false\n };\n}\n\nfunction TableCell(children, options) {\n options = options || {};\n return {\n type: types.tableCell,\n children: children,\n colSpan: options.colSpan == null ? 1 : options.colSpan,\n rowSpan: options.rowSpan == null ? 1 : options.rowSpan\n };\n}\n\nfunction Break(breakType) {\n return {\n type: types[\"break\"],\n breakType: breakType\n };\n}\n\nfunction BookmarkStart(options) {\n return {\n type: types.bookmarkStart,\n name: options.name\n };\n}\n\nexports.document = exports.Document = Document;\nexports.paragraph = exports.Paragraph = Paragraph;\nexports.run = exports.Run = Run;\nexports.text = exports.Text = Text;\nexports.tab = exports.Tab = Tab;\nexports.checkbox = exports.Checkbox = Checkbox;\nexports.Hyperlink = Hyperlink;\nexports.noteReference = exports.NoteReference = NoteReference;\nexports.Notes = Notes;\nexports.Note = Note;\nexports.commentReference = commentReference;\nexports.comment = comment;\nexports.Image = Image;\nexports.Table = Table;\nexports.TableRow = TableRow;\nexports.TableCell = TableCell;\nexports.lineBreak = Break(\"line\");\nexports.pageBreak = Break(\"page\");\nexports.columnBreak = Break(\"column\");\nexports.BookmarkStart = BookmarkStart;\n\nexports.verticalAlignment = verticalAlignment;\n","var _ = require(\"underscore\");\n\n\nexports.Result = Result;\nexports.success = success;\nexports.warning = warning;\nexports.error = error;\n\n\nfunction Result(value, messages) {\n this.value = value;\n this.messages = messages || [];\n}\n\nResult.prototype.map = function(func) {\n return new Result(func(this.value), this.messages);\n};\n\nResult.prototype.flatMap = function(func) {\n var funcResult = func(this.value);\n return new Result(funcResult.value, combineMessages([this, funcResult]));\n};\n\nResult.prototype.flatMapThen = function(func) {\n var that = this;\n return func(this.value).then(function(otherResult) {\n return new Result(otherResult.value, combineMessages([that, otherResult]));\n });\n};\n\nResult.combine = function(results) {\n var values = _.flatten(_.pluck(results, \"value\"));\n var messages = combineMessages(results);\n return new Result(values, messages);\n};\n\nfunction success(value) {\n return new Result(value, []);\n}\n\nfunction warning(message) {\n return {\n type: \"warning\",\n message: message\n };\n}\n\nfunction error(exception) {\n return {\n type: \"error\",\n message: exception.message,\n error: exception\n };\n}\n\nfunction combineMessages(results) {\n var messages = [];\n _.flatten(_.pluck(results, \"messages\"), true).forEach(function(message) {\n if (!containsMessage(messages, message)) {\n messages.push(message);\n }\n });\n return messages;\n}\n\nfunction containsMessage(messages, message) {\n return _.find(messages, isSameMessage.bind(null, message)) !== undefined;\n}\n\nfunction isSameMessage(first, second) {\n return first.type === second.type && first.message === second.message;\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t\t// Update ownerDocument for each node being inserted\n\t\tvar targetDoc = parent.ownerDocument || parent;\n\t\t_updateOwnerDocument(newFirst, targetDoc);\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Recursively updates the ownerDocument property for a node and all its descendants\n * @param {Node} node\n * @param {Document} newOwnerDocument\n * @private\n */\nfunction _updateOwnerDocument(node, newOwnerDocument) {\n\tif (node.ownerDocument === newOwnerDocument) {\n\t\treturn;\n\t}\n\t\n\tnode.ownerDocument = newOwnerDocument;\n\t\n\t// Update attributes if this is an element\n\tif (node.nodeType === ELEMENT_NODE && node.attributes) {\n\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\tvar attr = node.attributes.item(i);\n\t\t\tif (attr) {\n\t\t\t\tattr.ownerDocument = newOwnerDocument;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Recursively update child nodes\n\tvar child = node.firstChild;\n\twhile (child) {\n\t\t_updateOwnerDocument(child, newOwnerDocument);\n\t\tchild = child.nextSibling;\n\t}\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\t\n\t// Update ownerDocument for the new child and all its descendants\n\tvar targetDoc = parentNode.ownerDocument || parentNode;\n\t_updateOwnerDocument(newChild, targetDoc);\n\t\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\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\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\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\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\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\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//' + this.newline;\n };\n\n XMLStringWriter.prototype.declaration = function(node, level) {\n var r;\n r = this.space(level);\n r += '';\n r += this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.docType = function(node, level) {\n var child, i, len, r, ref;\n level || (level = 0);\n r = this.space(level);\n r += ' 0) {\n r += ' [';\n r += this.newline;\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += (function() {\n switch (false) {\n case !(child instanceof XMLDTDAttList):\n return this.dtdAttList(child, level + 1);\n case !(child instanceof XMLDTDElement):\n return this.dtdElement(child, level + 1);\n case !(child instanceof XMLDTDEntity):\n return this.dtdEntity(child, level + 1);\n case !(child instanceof XMLDTDNotation):\n return this.dtdNotation(child, level + 1);\n case !(child instanceof XMLCData):\n return this.cdata(child, level + 1);\n case !(child instanceof XMLComment):\n return this.comment(child, level + 1);\n case !(child instanceof XMLProcessingInstruction):\n return this.processingInstruction(child, level + 1);\n default:\n throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n }\n }).call(this);\n }\n r += ']';\n }\n r += this.spacebeforeslash + '>';\n r += this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.element = function(node, level) {\n var att, child, i, j, len, len1, name, r, ref, ref1, ref2, space, textispresentwasset;\n level || (level = 0);\n textispresentwasset = false;\n if (this.textispresent) {\n this.newline = '';\n this.pretty = false;\n } else {\n this.newline = this.newlinedefault;\n this.pretty = this.prettydefault;\n }\n space = this.space(level);\n r = '';\n r += space + '<' + node.name;\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att);\n }\n if (node.children.length === 0 || node.children.every(function(e) {\n return e.value === '';\n })) {\n if (this.allowEmpty) {\n r += '>' + this.newline;\n } else {\n r += this.spacebeforeslash + '/>' + this.newline;\n }\n } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n r += '>';\n r += node.children[0].value;\n r += '' + this.newline;\n } else {\n if (this.dontprettytextnodes) {\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n if (child.value != null) {\n this.textispresent++;\n textispresentwasset = true;\n break;\n }\n }\n }\n if (this.textispresent) {\n this.newline = '';\n this.pretty = false;\n space = this.space(level);\n }\n r += '>' + this.newline;\n ref2 = node.children;\n for (j = 0, len1 = ref2.length; j < len1; j++) {\n child = ref2[j];\n r += (function() {\n switch (false) {\n case !(child instanceof XMLCData):\n return this.cdata(child, level + 1);\n case !(child instanceof XMLComment):\n return this.comment(child, level + 1);\n case !(child instanceof XMLElement):\n return this.element(child, level + 1);\n case !(child instanceof XMLRaw):\n return this.raw(child, level + 1);\n case !(child instanceof XMLText):\n return this.text(child, level + 1);\n case !(child instanceof XMLProcessingInstruction):\n return this.processingInstruction(child, level + 1);\n case !(child instanceof XMLDummy):\n return '';\n default:\n throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n }\n }).call(this);\n }\n if (textispresentwasset) {\n this.textispresent--;\n }\n if (!this.textispresent) {\n this.newline = this.newlinedefault;\n this.pretty = this.prettydefault;\n }\n r += space + '' + this.newline;\n }\n return r;\n };\n\n XMLStringWriter.prototype.processingInstruction = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.raw = function(node, level) {\n return this.space(level) + node.value + this.newline;\n };\n\n XMLStringWriter.prototype.text = function(node, level) {\n return this.space(level) + node.value + this.newline;\n };\n\n XMLStringWriter.prototype.dtdAttList = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.dtdElement = function(node, level) {\n return this.space(level) + '' + this.newline;\n };\n\n XMLStringWriter.prototype.dtdEntity = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.dtdNotation = function(node, level) {\n var r;\n r = this.space(level) + '' + this.newline;\n return r;\n };\n\n XMLStringWriter.prototype.openNode = function(node, level) {\n var att, name, r, ref;\n level || (level = 0);\n if (node instanceof XMLElement) {\n r = this.space(level) + '<' + node.name;\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att);\n }\n r += (node.children ? '>' : '/>') + this.newline;\n return r;\n } else {\n r = this.space(level) + '') + this.newline;\n return r;\n }\n };\n\n XMLStringWriter.prototype.closeNode = function(node, level) {\n level || (level = 0);\n switch (false) {\n case !(node instanceof XMLElement):\n return this.space(level) + '' + this.newline;\n case !(node instanceof XMLDocType):\n return this.space(level) + ']>' + this.newline;\n }\n };\n\n return XMLStringWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isPlainObject = require('./Utility').isPlainObject;\n\n XMLNode = require('./XMLNode');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocument = (function(superClass) {\n extend(XMLDocument, superClass);\n\n function XMLDocument(options) {\n XMLDocument.__super__.constructor.call(this, null);\n this.name = \"?xml\";\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.stringify = new XMLStringifier(options);\n this.isDocument = true;\n }\n\n XMLDocument.prototype.end = function(writer) {\n var writerOptions;\n if (!writer) {\n writer = this.options.writer;\n } else if (isPlainObject(writer)) {\n writerOptions = writer;\n writer = this.options.writer.set(writerOptions);\n }\n return writer.document(this);\n };\n\n XMLDocument.prototype.toString = function(options) {\n return this.options.writer.set(options).document(this);\n };\n\n return XMLDocument;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n XMLElement = require('./XMLElement');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocumentCB = (function() {\n function XMLDocumentCB(options, onData, onEnd) {\n var writerOptions;\n this.name = \"?xml\";\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter(options);\n } else if (isPlainObject(options.writer)) {\n writerOptions = options.writer;\n options.writer = new XMLStringWriter(writerOptions);\n }\n this.options = options;\n this.writer = options.writer;\n this.stringify = new XMLStringifier(options);\n this.onDataCallback = onData || function() {};\n this.onEndCallback = onEnd || function() {};\n this.currentNode = null;\n this.currentLevel = -1;\n this.openTags = {};\n this.documentStarted = false;\n this.documentCompleted = false;\n this.root = null;\n }\n\n XMLDocumentCB.prototype.node = function(name, attributes, text) {\n var ref1, ref2;\n if (name == null) {\n throw new Error(\"Missing node name.\");\n }\n if (this.root && this.currentLevel === -1) {\n throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n }\n this.openCurrent();\n name = getValue(name);\n if (attributes === null && (text == null)) {\n ref1 = [{}, null], attributes = ref1[0], text = ref1[1];\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n }\n this.currentNode = new XMLElement(this, name, attributes);\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n if (text != null) {\n this.text(text);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.element = function(name, attributes, text) {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.dtdElement.apply(this, arguments);\n } else {\n return this.node(name, attributes, text);\n }\n };\n\n XMLDocumentCB.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (!this.currentNode || this.currentNode.children) {\n throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n }\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (!this.options.skipNullAttributes || (value != null)) {\n this.currentNode.attributes[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.text = function(value) {\n var node;\n this.openCurrent();\n node = new XMLText(this, value);\n this.onData(this.writer.text(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.cdata = function(value) {\n var node;\n this.openCurrent();\n node = new XMLCData(this, value);\n this.onData(this.writer.cdata(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.comment = function(value) {\n var node;\n this.openCurrent();\n node = new XMLComment(this, value);\n this.onData(this.writer.comment(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.raw = function(value) {\n var node;\n this.openCurrent();\n node = new XMLRaw(this, value);\n this.onData(this.writer.raw(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, len, node;\n this.openCurrent();\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n node = new XMLProcessingInstruction(this, target, value);\n this.onData(this.writer.processingInstruction(node, this.currentLevel + 1), this.currentLevel + 1);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n var node;\n this.openCurrent();\n if (this.documentStarted) {\n throw new Error(\"declaration() must be the first node.\");\n }\n node = new XMLDeclaration(this, version, encoding, standalone);\n this.onData(this.writer.declaration(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n this.openCurrent();\n if (root == null) {\n throw new Error(\"Missing root node name.\");\n }\n if (this.root) {\n throw new Error(\"dtd() must come before the root node.\");\n }\n this.currentNode = new XMLDocType(this, pubID, sysID);\n this.currentNode.rootNodeName = root;\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n return this;\n };\n\n XMLDocumentCB.prototype.dtdElement = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDElement(this, name, value);\n this.onData(this.writer.dtdElement(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var node;\n this.openCurrent();\n node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.onData(this.writer.dtdAttList(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.entity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, false, name, value);\n this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.pEntity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, true, name, value);\n this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.notation = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDNotation(this, name, value);\n this.onData(this.writer.dtdNotation(node, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.up = function() {\n if (this.currentLevel < 0) {\n throw new Error(\"The document node has no parent.\");\n }\n if (this.currentNode) {\n if (this.currentNode.children) {\n this.closeNode(this.currentNode);\n } else {\n this.openNode(this.currentNode);\n }\n this.currentNode = null;\n } else {\n this.closeNode(this.openTags[this.currentLevel]);\n }\n delete this.openTags[this.currentLevel];\n this.currentLevel--;\n return this;\n };\n\n XMLDocumentCB.prototype.end = function() {\n while (this.currentLevel >= 0) {\n this.up();\n }\n return this.onEnd();\n };\n\n XMLDocumentCB.prototype.openCurrent = function() {\n if (this.currentNode) {\n this.currentNode.children = true;\n return this.openNode(this.currentNode);\n }\n };\n\n XMLDocumentCB.prototype.openNode = function(node) {\n if (!node.isOpen) {\n if (!this.root && this.currentLevel === 0 && node instanceof XMLElement) {\n this.root = node;\n }\n this.onData(this.writer.openNode(node, this.currentLevel), this.currentLevel);\n return node.isOpen = true;\n }\n };\n\n XMLDocumentCB.prototype.closeNode = function(node) {\n if (!node.isClosed) {\n this.onData(this.writer.closeNode(node, this.currentLevel), this.currentLevel);\n return node.isClosed = true;\n }\n };\n\n XMLDocumentCB.prototype.onData = function(chunk, level) {\n this.documentStarted = true;\n return this.onDataCallback(chunk, level + 1);\n };\n\n XMLDocumentCB.prototype.onEnd = function() {\n this.documentCompleted = true;\n return this.onEndCallback();\n };\n\n XMLDocumentCB.prototype.debugInfo = function(name) {\n if (name == null) {\n return \"\";\n } else {\n return \"node: <\" + name + \">\";\n }\n };\n\n XMLDocumentCB.prototype.ele = function() {\n return this.element.apply(this, arguments);\n };\n\n XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n return this.doctype(root, pubID, sysID);\n };\n\n XMLDocumentCB.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLDocumentCB.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.att = function() {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.a = function() {\n if (this.currentNode && this.currentNode instanceof XMLDocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocumentCB.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocumentCB.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n return XMLDocumentCB;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStreamWriter, XMLText, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLElement = require('./XMLElement');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDummy = require('./XMLDummy');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLWriterBase = require('./XMLWriterBase');\n\n module.exports = XMLStreamWriter = (function(superClass) {\n extend(XMLStreamWriter, superClass);\n\n function XMLStreamWriter(stream, options) {\n XMLStreamWriter.__super__.constructor.call(this, options);\n this.stream = stream;\n }\n\n XMLStreamWriter.prototype.document = function(doc) {\n var child, i, j, len, len1, ref, ref1, results;\n ref = doc.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n child.isLastRootNode = false;\n }\n doc.children[doc.children.length - 1].isLastRootNode = true;\n ref1 = doc.children;\n results = [];\n for (j = 0, len1 = ref1.length; j < len1; j++) {\n child = ref1[j];\n if (child instanceof XMLDummy) {\n continue;\n }\n switch (false) {\n case !(child instanceof XMLDeclaration):\n results.push(this.declaration(child));\n break;\n case !(child instanceof XMLDocType):\n results.push(this.docType(child));\n break;\n case !(child instanceof XMLComment):\n results.push(this.comment(child));\n break;\n case !(child instanceof XMLProcessingInstruction):\n results.push(this.processingInstruction(child));\n break;\n default:\n results.push(this.element(child));\n }\n }\n return results;\n };\n\n XMLStreamWriter.prototype.attribute = function(att) {\n return this.stream.write(' ' + att.name + '=\"' + att.value + '\"');\n };\n\n XMLStreamWriter.prototype.cdata = function(node, level) {\n return this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.comment = function(node, level) {\n return this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.declaration = function(node, level) {\n this.stream.write(this.space(level));\n this.stream.write('');\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.docType = function(node, level) {\n var child, i, len, ref;\n level || (level = 0);\n this.stream.write(this.space(level));\n this.stream.write(' 0) {\n this.stream.write(' [');\n this.stream.write(this.endline(node));\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n switch (false) {\n case !(child instanceof XMLDTDAttList):\n this.dtdAttList(child, level + 1);\n break;\n case !(child instanceof XMLDTDElement):\n this.dtdElement(child, level + 1);\n break;\n case !(child instanceof XMLDTDEntity):\n this.dtdEntity(child, level + 1);\n break;\n case !(child instanceof XMLDTDNotation):\n this.dtdNotation(child, level + 1);\n break;\n case !(child instanceof XMLCData):\n this.cdata(child, level + 1);\n break;\n case !(child instanceof XMLComment):\n this.comment(child, level + 1);\n break;\n case !(child instanceof XMLProcessingInstruction):\n this.processingInstruction(child, level + 1);\n break;\n default:\n throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n }\n }\n this.stream.write(']');\n }\n this.stream.write(this.spacebeforeslash + '>');\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.element = function(node, level) {\n var att, child, i, len, name, ref, ref1, space;\n level || (level = 0);\n space = this.space(level);\n this.stream.write(space + '<' + node.name);\n ref = node.attributes;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n this.attribute(att);\n }\n if (node.children.length === 0 || node.children.every(function(e) {\n return e.value === '';\n })) {\n if (this.allowEmpty) {\n this.stream.write('>');\n } else {\n this.stream.write(this.spacebeforeslash + '/>');\n }\n } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n this.stream.write('>');\n this.stream.write(node.children[0].value);\n this.stream.write('');\n } else {\n this.stream.write('>' + this.newline);\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n switch (false) {\n case !(child instanceof XMLCData):\n this.cdata(child, level + 1);\n break;\n case !(child instanceof XMLComment):\n this.comment(child, level + 1);\n break;\n case !(child instanceof XMLElement):\n this.element(child, level + 1);\n break;\n case !(child instanceof XMLRaw):\n this.raw(child, level + 1);\n break;\n case !(child instanceof XMLText):\n this.text(child, level + 1);\n break;\n case !(child instanceof XMLProcessingInstruction):\n this.processingInstruction(child, level + 1);\n break;\n case !(child instanceof XMLDummy):\n '';\n break;\n default:\n throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n }\n }\n this.stream.write(space + '');\n }\n return this.stream.write(this.endline(node));\n };\n\n XMLStreamWriter.prototype.processingInstruction = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.raw = function(node, level) {\n return this.stream.write(this.space(level) + node.value + this.endline(node));\n };\n\n XMLStreamWriter.prototype.text = function(node, level) {\n return this.stream.write(this.space(level) + node.value + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdAttList = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdElement = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdEntity = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.dtdNotation = function(node, level) {\n this.stream.write(this.space(level) + '' + this.endline(node));\n };\n\n XMLStreamWriter.prototype.endline = function(node) {\n if (!node.isLastRootNode) {\n return this.newline;\n } else {\n return '';\n }\n };\n\n return XMLStreamWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n XMLDocument = require('./XMLDocument');\n\n XMLDocumentCB = require('./XMLDocumentCB');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n XMLStreamWriter = require('./XMLStreamWriter');\n\n module.exports.create = function(name, xmldec, doctype, options) {\n var doc, root;\n if (name == null) {\n throw new Error(\"Root element needs a name.\");\n }\n options = assign({}, xmldec, doctype, options);\n doc = new XMLDocument(options);\n root = doc.element(name);\n if (!options.headless) {\n doc.declaration(options);\n if ((options.pubID != null) || (options.sysID != null)) {\n doc.doctype(options);\n }\n }\n return root;\n };\n\n module.exports.begin = function(options, onData, onEnd) {\n var ref1;\n if (isFunction(options)) {\n ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n options = {};\n }\n if (onData) {\n return new XMLDocumentCB(options, onData, onEnd);\n } else {\n return new XMLDocument(options);\n }\n };\n\n module.exports.stringWriter = function(options) {\n return new XMLStringWriter(options);\n };\n\n module.exports.streamWriter = function(stream, options) {\n return new XMLStreamWriter(stream, options);\n };\n\n}).call(this);\n","var _ = require(\"underscore\");\nvar xmlbuilder = require(\"xmlbuilder\");\n\n\nexports.writeString = writeString;\n\n\nfunction writeString(root, namespaces) {\n var uriToPrefix = _.invert(namespaces);\n \n var nodeWriters = {\n element: writeElement,\n text: writeTextNode\n };\n\n function writeNode(builder, node) {\n return nodeWriters[node.type](builder, node);\n }\n\n function writeElement(builder, element) {\n var elementBuilder = builder.element(mapElementName(element.name), element.attributes);\n element.children.forEach(function(child) {\n writeNode(elementBuilder, child);\n });\n }\n \n function mapElementName(name) {\n var longFormMatch = /^\\{(.*)\\}(.*)$/.exec(name);\n if (longFormMatch) {\n var prefix = uriToPrefix[longFormMatch[1]];\n return prefix + (prefix === \"\" ? \"\" : \":\") + longFormMatch[2];\n } else {\n return name;\n }\n }\n \n function writeDocument(root) {\n var builder = xmlbuilder\n .create(mapElementName(root.name), {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: true\n });\n \n _.forEach(namespaces, function(uri, prefix) {\n var key = \"xmlns\" + (prefix === \"\" ? \"\" : \":\" + prefix);\n builder.attribute(key, uri);\n });\n \n root.children.forEach(function(child) {\n writeNode(builder, child);\n });\n return builder.end();\n }\n\n return writeDocument(root);\n}\n\nfunction writeTextNode(builder, node) {\n builder.text(node.value);\n}\n","var nodes = require(\"./nodes\");\n\nexports.Element = nodes.Element;\nexports.element = nodes.element;\nexports.emptyElement = nodes.emptyElement;\nexports.text = nodes.text;\nexports.readString = require(\"./reader\").readString;\nexports.writeString = require(\"./writer\").writeString;\n","var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\n\nexports.read = read;\nexports.readXmlFromZipFile = readXmlFromZipFile;\n\nvar xmlNamespaceMap = {\n // Transitional format\n \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\": \"w\",\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\": \"r\",\n \"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\": \"wp\",\n \"http://schemas.openxmlformats.org/drawingml/2006/main\": \"a\",\n \"http://schemas.openxmlformats.org/drawingml/2006/picture\": \"pic\",\n\n // Strict format\n \"http://purl.oclc.org/ooxml/wordprocessingml/main\": \"w\",\n \"http://purl.oclc.org/ooxml/officeDocument/relationships\": \"r\",\n \"http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing\": \"wp\",\n \"http://purl.oclc.org/ooxml/drawingml/main\": \"a\",\n \"http://purl.oclc.org/ooxml/drawingml/picture\": \"pic\",\n\n // Common\n \"http://schemas.openxmlformats.org/package/2006/content-types\": \"content-types\",\n \"http://schemas.openxmlformats.org/package/2006/relationships\": \"relationships\",\n \"http://schemas.openxmlformats.org/markup-compatibility/2006\": \"mc\",\n \"urn:schemas-microsoft-com:vml\": \"v\",\n \"urn:schemas-microsoft-com:office:word\": \"office-word\",\n\n // [MS-DOCX]: Word Extensions to the Office Open XML (.docx) File Format\n // https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b839fe1f-e1ca-4fa6-8c26-5954d0abbccd\n \"http://schemas.microsoft.com/office/word/2010/wordml\": \"wordml\"\n};\n\n\nfunction read(xmlString) {\n return xml.readString(xmlString, xmlNamespaceMap)\n .then(function(document) {\n return collapseAlternateContent(document)[0];\n });\n}\n\n\nfunction readXmlFromZipFile(docxFile, path) {\n if (docxFile.exists(path)) {\n return docxFile.read(path, \"utf-8\")\n .then(stripUtf8Bom)\n .then(read);\n } else {\n return promises.resolve(null);\n }\n}\n\n\nfunction stripUtf8Bom(xmlString) {\n return xmlString.replace(/^\\uFEFF/g, '');\n}\n\n\nfunction collapseAlternateContent(node) {\n if (node.type === \"element\") {\n if (node.name === \"mc:AlternateContent\") {\n return node.firstOrEmpty(\"mc:Fallback\").children;\n } else {\n node.children = _.flatten(node.children.map(collapseAlternateContent, true));\n return [node];\n }\n } else {\n return [node];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dingbats = [\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"33\", \"Unicode hex\": \"21\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"8704\", \"Unicode hex\": \"2200\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"35\", \"Unicode hex\": \"23\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"8707\", \"Unicode hex\": \"2203\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"37\", \"Unicode hex\": \"25\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"38\", \"Unicode hex\": \"26\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"8717\", \"Unicode hex\": \"220D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"40\", \"Unicode hex\": \"28\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"41\", \"Unicode hex\": \"29\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"42\", \"Unicode hex\": \"2A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"43\", \"Unicode hex\": \"2B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"44\", \"Unicode hex\": \"2C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"8722\", \"Unicode hex\": \"2212\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"46\", \"Unicode hex\": \"2E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"47\", \"Unicode hex\": \"2F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"48\", \"Unicode hex\": \"30\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"49\", \"Unicode hex\": \"31\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"50\", \"Unicode hex\": \"32\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"51\", \"Unicode hex\": \"33\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"52\", \"Unicode hex\": \"34\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"53\", \"Unicode hex\": \"35\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"54\", \"Unicode hex\": \"36\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"55\", \"Unicode hex\": \"37\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"56\", \"Unicode hex\": \"38\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"57\", \"Unicode hex\": \"39\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"58\", \"Unicode hex\": \"3A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"59\", \"Unicode hex\": \"3B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"60\", \"Unicode hex\": \"3C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"61\", \"Unicode hex\": \"3D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"62\", \"Unicode hex\": \"3E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"63\", \"Unicode hex\": \"3F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"8773\", \"Unicode hex\": \"2245\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"913\", \"Unicode hex\": \"391\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"914\", \"Unicode hex\": \"392\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"935\", \"Unicode hex\": \"3A7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"916\", \"Unicode hex\": \"394\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"917\", \"Unicode hex\": \"395\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"934\", \"Unicode hex\": \"3A6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"915\", \"Unicode hex\": \"393\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"919\", \"Unicode hex\": \"397\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"921\", \"Unicode hex\": \"399\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"977\", \"Unicode hex\": \"3D1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"922\", \"Unicode hex\": \"39A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"923\", \"Unicode hex\": \"39B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"924\", \"Unicode hex\": \"39C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"925\", \"Unicode hex\": \"39D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"927\", \"Unicode hex\": \"39F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"928\", \"Unicode hex\": \"3A0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"920\", \"Unicode hex\": \"398\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"929\", \"Unicode hex\": \"3A1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"931\", \"Unicode hex\": \"3A3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"932\", \"Unicode hex\": \"3A4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"933\", \"Unicode hex\": \"3A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"962\", \"Unicode hex\": \"3C2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"937\", \"Unicode hex\": \"3A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"926\", \"Unicode hex\": \"39E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"936\", \"Unicode hex\": \"3A8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"918\", \"Unicode hex\": \"396\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"91\", \"Unicode hex\": \"5B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"8756\", \"Unicode hex\": \"2234\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"93\", \"Unicode hex\": \"5D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"8869\", \"Unicode hex\": \"22A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"95\", \"Unicode hex\": \"5F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"8254\", \"Unicode hex\": \"203E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"945\", \"Unicode hex\": \"3B1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"946\", \"Unicode hex\": \"3B2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"967\", \"Unicode hex\": \"3C7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"948\", \"Unicode hex\": \"3B4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"949\", \"Unicode hex\": \"3B5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"966\", \"Unicode hex\": \"3C6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"947\", \"Unicode hex\": \"3B3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"951\", \"Unicode hex\": \"3B7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"953\", \"Unicode hex\": \"3B9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"981\", \"Unicode hex\": \"3D5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"954\", \"Unicode hex\": \"3BA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"955\", \"Unicode hex\": \"3BB\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"956\", \"Unicode hex\": \"3BC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"957\", \"Unicode hex\": \"3BD\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"959\", \"Unicode hex\": \"3BF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"960\", \"Unicode hex\": \"3C0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"952\", \"Unicode hex\": \"3B8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"961\", \"Unicode hex\": \"3C1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"963\", \"Unicode hex\": \"3C3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"964\", \"Unicode hex\": \"3C4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"965\", \"Unicode hex\": \"3C5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"982\", \"Unicode hex\": \"3D6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"969\", \"Unicode hex\": \"3C9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"958\", \"Unicode hex\": \"3BE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"968\", \"Unicode hex\": \"3C8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"950\", \"Unicode hex\": \"3B6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"123\", \"Unicode hex\": \"7B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"124\", \"Unicode hex\": \"7C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"125\", \"Unicode hex\": \"7D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"126\", \"Unicode hex\": \"7E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"8364\", \"Unicode hex\": \"20AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"978\", \"Unicode hex\": \"3D2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"8242\", \"Unicode hex\": \"2032\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"8804\", \"Unicode hex\": \"2264\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"8260\", \"Unicode hex\": \"2044\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"8734\", \"Unicode hex\": \"221E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"402\", \"Unicode hex\": \"192\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9827\", \"Unicode hex\": \"2663\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9830\", \"Unicode hex\": \"2666\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"9829\", \"Unicode hex\": \"2665\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"9824\", \"Unicode hex\": \"2660\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"8596\", \"Unicode hex\": \"2194\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"8592\", \"Unicode hex\": \"2190\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"8593\", \"Unicode hex\": \"2191\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"8594\", \"Unicode hex\": \"2192\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"8595\", \"Unicode hex\": \"2193\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"176\", \"Unicode hex\": \"B0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"177\", \"Unicode hex\": \"B1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"8243\", \"Unicode hex\": \"2033\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"8805\", \"Unicode hex\": \"2265\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"215\", \"Unicode hex\": \"D7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"8733\", \"Unicode hex\": \"221D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"8706\", \"Unicode hex\": \"2202\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"247\", \"Unicode hex\": \"F7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"8800\", \"Unicode hex\": \"2260\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"8801\", \"Unicode hex\": \"2261\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"8776\", \"Unicode hex\": \"2248\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"8230\", \"Unicode hex\": \"2026\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"9135\", \"Unicode hex\": \"23AF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"8629\", \"Unicode hex\": \"21B5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"8501\", \"Unicode hex\": \"2135\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"8465\", \"Unicode hex\": \"2111\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"8476\", \"Unicode hex\": \"211C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"8472\", \"Unicode hex\": \"2118\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"8855\", \"Unicode hex\": \"2297\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"8853\", \"Unicode hex\": \"2295\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"8709\", \"Unicode hex\": \"2205\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"8745\", \"Unicode hex\": \"2229\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"8746\", \"Unicode hex\": \"222A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"8835\", \"Unicode hex\": \"2283\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"8839\", \"Unicode hex\": \"2287\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"8836\", \"Unicode hex\": \"2284\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"8834\", \"Unicode hex\": \"2282\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"8838\", \"Unicode hex\": \"2286\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"8712\", \"Unicode hex\": \"2208\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"8713\", \"Unicode hex\": \"2209\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"8736\", \"Unicode hex\": \"2220\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"8711\", \"Unicode hex\": \"2207\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"8719\", \"Unicode hex\": \"220F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8730\", \"Unicode hex\": \"221A\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"172\", \"Unicode hex\": \"AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"8743\", \"Unicode hex\": \"2227\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"8744\", \"Unicode hex\": \"2228\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"8660\", \"Unicode hex\": \"21D4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"8656\", \"Unicode hex\": \"21D0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"8657\", \"Unicode hex\": \"21D1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"8658\", \"Unicode hex\": \"21D2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"8659\", \"Unicode hex\": \"21D3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"12296\", \"Unicode hex\": \"3008\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"8721\", \"Unicode hex\": \"2211\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"9115\", \"Unicode hex\": \"239B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"9116\", \"Unicode hex\": \"239C\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9117\", \"Unicode hex\": \"239D\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9121\", \"Unicode hex\": \"23A1\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"9122\", \"Unicode hex\": \"23A2\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"9123\", \"Unicode hex\": \"23A3\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"9127\", \"Unicode hex\": \"23A7\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"9128\", \"Unicode hex\": \"23A8\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"9129\", \"Unicode hex\": \"23A9\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"9130\", \"Unicode hex\": \"23AA\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"63743\", \"Unicode hex\": \"F8FF\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"12297\", \"Unicode hex\": \"3009\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8747\", \"Unicode hex\": \"222B\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"8992\", \"Unicode hex\": \"2320\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"9134\", \"Unicode hex\": \"23AE\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"8993\", \"Unicode hex\": \"2321\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"9118\", \"Unicode hex\": \"239E\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"9119\", \"Unicode hex\": \"239F\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"9120\", \"Unicode hex\": \"23A0\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"9124\", \"Unicode hex\": \"23A4\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"9125\", \"Unicode hex\": \"23A5\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"9126\", \"Unicode hex\": \"23A6\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"9131\", \"Unicode hex\": \"23AB\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"9132\", \"Unicode hex\": \"23AC\" },\n { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"9133\", \"Unicode hex\": \"23AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128375\", \"Unicode hex\": \"1F577\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128376\", \"Unicode hex\": \"1F578\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128370\", \"Unicode hex\": \"1F572\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128374\", \"Unicode hex\": \"1F576\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"127942\", \"Unicode hex\": \"1F3C6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"127894\", \"Unicode hex\": \"1F396\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128391\", \"Unicode hex\": \"1F587\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128488\", \"Unicode hex\": \"1F5E8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128489\", \"Unicode hex\": \"1F5E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128496\", \"Unicode hex\": \"1F5F0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128497\", \"Unicode hex\": \"1F5F1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"127798\", \"Unicode hex\": \"1F336\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"127895\", \"Unicode hex\": \"1F397\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128638\", \"Unicode hex\": \"1F67E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128636\", \"Unicode hex\": \"1F67C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128469\", \"Unicode hex\": \"1F5D5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128470\", \"Unicode hex\": \"1F5D6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128471\", \"Unicode hex\": \"1F5D7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"9204\", \"Unicode hex\": \"23F4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"9205\", \"Unicode hex\": \"23F5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"9206\", \"Unicode hex\": \"23F6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"9207\", \"Unicode hex\": \"23F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"9194\", \"Unicode hex\": \"23EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"9193\", \"Unicode hex\": \"23E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"9198\", \"Unicode hex\": \"23EE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"9197\", \"Unicode hex\": \"23ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"9208\", \"Unicode hex\": \"23F8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"9209\", \"Unicode hex\": \"23F9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"9210\", \"Unicode hex\": \"23FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128474\", \"Unicode hex\": \"1F5DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128499\", \"Unicode hex\": \"1F5F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128736\", \"Unicode hex\": \"1F6E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"127959\", \"Unicode hex\": \"1F3D7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"127960\", \"Unicode hex\": \"1F3D8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"127961\", \"Unicode hex\": \"1F3D9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"127962\", \"Unicode hex\": \"1F3DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"127964\", \"Unicode hex\": \"1F3DC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"127981\", \"Unicode hex\": \"1F3ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"127963\", \"Unicode hex\": \"1F3DB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"127968\", \"Unicode hex\": \"1F3E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"127958\", \"Unicode hex\": \"1F3D6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"127965\", \"Unicode hex\": \"1F3DD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128739\", \"Unicode hex\": \"1F6E3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128269\", \"Unicode hex\": \"1F50D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"127956\", \"Unicode hex\": \"1F3D4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128065\", \"Unicode hex\": \"1F441\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128066\", \"Unicode hex\": \"1F442\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127966\", \"Unicode hex\": \"1F3DE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"127957\", \"Unicode hex\": \"1F3D5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"128740\", \"Unicode hex\": \"1F6E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127967\", \"Unicode hex\": \"1F3DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"128755\", \"Unicode hex\": \"1F6F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128364\", \"Unicode hex\": \"1F56C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"128363\", \"Unicode hex\": \"1F56B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128360\", \"Unicode hex\": \"1F568\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"128264\", \"Unicode hex\": \"1F508\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"127892\", \"Unicode hex\": \"1F394\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"127893\", \"Unicode hex\": \"1F395\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128492\", \"Unicode hex\": \"1F5EC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128637\", \"Unicode hex\": \"1F67D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"128493\", \"Unicode hex\": \"1F5ED\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128490\", \"Unicode hex\": \"1F5EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128491\", \"Unicode hex\": \"1F5EB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"11156\", \"Unicode hex\": \"2B94\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"10004\", \"Unicode hex\": \"2714\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128690\", \"Unicode hex\": \"1F6B2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"11036\", \"Unicode hex\": \"2B1C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128737\", \"Unicode hex\": \"1F6E1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128230\", \"Unicode hex\": \"1F4E6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128753\", \"Unicode hex\": \"1F6F1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"11035\", \"Unicode hex\": \"2B1B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128657\", \"Unicode hex\": \"1F691\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"128712\", \"Unicode hex\": \"1F6C8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128745\", \"Unicode hex\": \"1F6E9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128752\", \"Unicode hex\": \"1F6F0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"128968\", \"Unicode hex\": \"1F7C8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128372\", \"Unicode hex\": \"1F574\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"11044\", \"Unicode hex\": \"2B24\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128741\", \"Unicode hex\": \"1F6E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128660\", \"Unicode hex\": \"1F694\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"128472\", \"Unicode hex\": \"1F5D8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"128473\", \"Unicode hex\": \"1F5D9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"10067\", \"Unicode hex\": \"2753\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"128754\", \"Unicode hex\": \"1F6F2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"128647\", \"Unicode hex\": \"1F687\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"128653\", \"Unicode hex\": \"1F68D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9971\", \"Unicode hex\": \"26F3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"8854\", \"Unicode hex\": \"2296\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"128685\", \"Unicode hex\": \"1F6AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"128494\", \"Unicode hex\": \"1F5EE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128495\", \"Unicode hex\": \"1F5EF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128498\", \"Unicode hex\": \"1F5F2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128697\", \"Unicode hex\": \"1F6B9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"128698\", \"Unicode hex\": \"1F6BA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"128713\", \"Unicode hex\": \"1F6C9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"128714\", \"Unicode hex\": \"1F6CA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"128700\", \"Unicode hex\": \"1F6BC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"128125\", \"Unicode hex\": \"1F47D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"127947\", \"Unicode hex\": \"1F3CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"9975\", \"Unicode hex\": \"26F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"127938\", \"Unicode hex\": \"1F3C2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"127948\", \"Unicode hex\": \"1F3CC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"127946\", \"Unicode hex\": \"1F3CA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127940\", \"Unicode hex\": \"1F3C4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"127949\", \"Unicode hex\": \"1F3CD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"127950\", \"Unicode hex\": \"1F3CE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128664\", \"Unicode hex\": \"1F698\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128480\", \"Unicode hex\": \"1F5E0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128738\", \"Unicode hex\": \"1F6E2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128176\", \"Unicode hex\": \"1F4B0\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"127991\", \"Unicode hex\": \"1F3F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128179\", \"Unicode hex\": \"1F4B3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128106\", \"Unicode hex\": \"1F46A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"128481\", \"Unicode hex\": \"1F5E1\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128482\", \"Unicode hex\": \"1F5E2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128483\", \"Unicode hex\": \"1F5E3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128388\", \"Unicode hex\": \"1F584\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128389\", \"Unicode hex\": \"1F585\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128390\", \"Unicode hex\": \"1F586\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128441\", \"Unicode hex\": \"1F5B9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"128442\", \"Unicode hex\": \"1F5BA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128443\", \"Unicode hex\": \"1F5BB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128373\", \"Unicode hex\": \"1F575\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"128368\", \"Unicode hex\": \"1F570\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128445\", \"Unicode hex\": \"1F5BD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128446\", \"Unicode hex\": \"1F5BE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128466\", \"Unicode hex\": \"1F5D2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128467\", \"Unicode hex\": \"1F5D3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128218\", \"Unicode hex\": \"1F4DA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128478\", \"Unicode hex\": \"1F5DE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128479\", \"Unicode hex\": \"1F5DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128451\", \"Unicode hex\": \"1F5C3\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128450\", \"Unicode hex\": \"1F5C2\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128444\", \"Unicode hex\": \"1F5BC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"127917\", \"Unicode hex\": \"1F3AD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"127900\", \"Unicode hex\": \"1F39C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"127896\", \"Unicode hex\": \"1F398\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"127897\", \"Unicode hex\": \"1F399\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"127911\", \"Unicode hex\": \"1F3A7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128191\", \"Unicode hex\": \"1F4BF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"127902\", \"Unicode hex\": \"1F39E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128247\", \"Unicode hex\": \"1F4F7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"127903\", \"Unicode hex\": \"1F39F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"127916\", \"Unicode hex\": \"1F3AC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128253\", \"Unicode hex\": \"1F4FD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128249\", \"Unicode hex\": \"1F4F9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128254\", \"Unicode hex\": \"1F4FE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128251\", \"Unicode hex\": \"1F4FB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"127898\", \"Unicode hex\": \"1F39A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"127899\", \"Unicode hex\": \"1F39B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128250\", \"Unicode hex\": \"1F4FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128187\", \"Unicode hex\": \"1F4BB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128421\", \"Unicode hex\": \"1F5A5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128422\", \"Unicode hex\": \"1F5A6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128423\", \"Unicode hex\": \"1F5A7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"128377\", \"Unicode hex\": \"1F579\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"127918\", \"Unicode hex\": \"1F3AE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"128379\", \"Unicode hex\": \"1F57B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128380\", \"Unicode hex\": \"1F57C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128223\", \"Unicode hex\": \"1F4DF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128385\", \"Unicode hex\": \"1F581\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128384\", \"Unicode hex\": \"1F580\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128424\", \"Unicode hex\": \"1F5A8\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128425\", \"Unicode hex\": \"1F5A9\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128447\", \"Unicode hex\": \"1F5BF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128426\", \"Unicode hex\": \"1F5AA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128476\", \"Unicode hex\": \"1F5DC\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128274\", \"Unicode hex\": \"1F512\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128275\", \"Unicode hex\": \"1F513\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128477\", \"Unicode hex\": \"1F5DD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128229\", \"Unicode hex\": \"1F4E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128228\", \"Unicode hex\": \"1F4E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128371\", \"Unicode hex\": \"1F573\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"127779\", \"Unicode hex\": \"1F323\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"127780\", \"Unicode hex\": \"1F324\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"127781\", \"Unicode hex\": \"1F325\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"127782\", \"Unicode hex\": \"1F326\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"9729\", \"Unicode hex\": \"2601\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"127784\", \"Unicode hex\": \"1F328\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"127783\", \"Unicode hex\": \"1F327\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"127785\", \"Unicode hex\": \"1F329\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"127786\", \"Unicode hex\": \"1F32A\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"127788\", \"Unicode hex\": \"1F32C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"127787\", \"Unicode hex\": \"1F32B\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"127772\", \"Unicode hex\": \"1F31C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"127777\", \"Unicode hex\": \"1F321\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128715\", \"Unicode hex\": \"1F6CB\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128719\", \"Unicode hex\": \"1F6CF\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"127869\", \"Unicode hex\": \"1F37D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"127864\", \"Unicode hex\": \"1F378\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128718\", \"Unicode hex\": \"1F6CE\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128717\", \"Unicode hex\": \"1F6CD\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9413\", \"Unicode hex\": \"24C5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9855\", \"Unicode hex\": \"267F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128710\", \"Unicode hex\": \"1F6C6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"128392\", \"Unicode hex\": \"1F588\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"127891\", \"Unicode hex\": \"1F393\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128484\", \"Unicode hex\": \"1F5E4\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128485\", \"Unicode hex\": \"1F5E5\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128486\", \"Unicode hex\": \"1F5E6\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"128487\", \"Unicode hex\": \"1F5E7\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128746\", \"Unicode hex\": \"1F6EA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128063\", \"Unicode hex\": \"1F43F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"128038\", \"Unicode hex\": \"1F426\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128031\", \"Unicode hex\": \"1F41F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128021\", \"Unicode hex\": \"1F415\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"128008\", \"Unicode hex\": \"1F408\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"128620\", \"Unicode hex\": \"1F66C\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"128622\", \"Unicode hex\": \"1F66E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"128621\", \"Unicode hex\": \"1F66D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"128623\", \"Unicode hex\": \"1F66F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128506\", \"Unicode hex\": \"1F5FA\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"127757\", \"Unicode hex\": \"1F30D\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"127759\", \"Unicode hex\": \"1F30F\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"127758\", \"Unicode hex\": \"1F30E\" },\n { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"255\", \"Dingbat hex\": \"FF\", \"Unicode dec\": \"128330\", \"Unicode hex\": \"1F54A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128393\", \"Unicode hex\": \"1F589\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"9986\", \"Unicode hex\": \"2702\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"9985\", \"Unicode hex\": \"2701\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128083\", \"Unicode hex\": \"1F453\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"128365\", \"Unicode hex\": \"1F56D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128367\", \"Unicode hex\": \"1F56F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128383\", \"Unicode hex\": \"1F57F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"9990\", \"Unicode hex\": \"2706\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128386\", \"Unicode hex\": \"1F582\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128234\", \"Unicode hex\": \"1F4EA\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128235\", \"Unicode hex\": \"1F4EB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128236\", \"Unicode hex\": \"1F4EC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128237\", \"Unicode hex\": \"1F4ED\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128448\", \"Unicode hex\": \"1F5C0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128449\", \"Unicode hex\": \"1F5C1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128462\", \"Unicode hex\": \"1F5CE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128463\", \"Unicode hex\": \"1F5CF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128464\", \"Unicode hex\": \"1F5D0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128452\", \"Unicode hex\": \"1F5C4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"8987\", \"Unicode hex\": \"231B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128430\", \"Unicode hex\": \"1F5AE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128432\", \"Unicode hex\": \"1F5B0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128434\", \"Unicode hex\": \"1F5B2\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128435\", \"Unicode hex\": \"1F5B3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128436\", \"Unicode hex\": \"1F5B4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128427\", \"Unicode hex\": \"1F5AB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128428\", \"Unicode hex\": \"1F5AC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"9991\", \"Unicode hex\": \"2707\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"9997\", \"Unicode hex\": \"270D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128398\", \"Unicode hex\": \"1F58E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"9996\", \"Unicode hex\": \"270C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128399\", \"Unicode hex\": \"1F58F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128077\", \"Unicode hex\": \"1F44D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128078\", \"Unicode hex\": \"1F44E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"9756\", \"Unicode hex\": \"261C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"9758\", \"Unicode hex\": \"261E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"9757\", \"Unicode hex\": \"261D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"9759\", \"Unicode hex\": \"261F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128400\", \"Unicode hex\": \"1F590\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"9786\", \"Unicode hex\": \"263A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128528\", \"Unicode hex\": \"1F610\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"9785\", \"Unicode hex\": \"2639\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128163\", \"Unicode hex\": \"1F4A3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128369\", \"Unicode hex\": \"1F571\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"127987\", \"Unicode hex\": \"1F3F3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127985\", \"Unicode hex\": \"1F3F1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"9992\", \"Unicode hex\": \"2708\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9788\", \"Unicode hex\": \"263C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127778\", \"Unicode hex\": \"1F322\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"10052\", \"Unicode hex\": \"2744\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128326\", \"Unicode hex\": \"1F546\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"10014\", \"Unicode hex\": \"271E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128328\", \"Unicode hex\": \"1F548\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10016\", \"Unicode hex\": \"2720\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"10017\", \"Unicode hex\": \"2721\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"9770\", \"Unicode hex\": \"262A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"9775\", \"Unicode hex\": \"262F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128329\", \"Unicode hex\": \"1F549\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"9784\", \"Unicode hex\": \"2638\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"9800\", \"Unicode hex\": \"2648\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"9801\", \"Unicode hex\": \"2649\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"9802\", \"Unicode hex\": \"264A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"9803\", \"Unicode hex\": \"264B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"9804\", \"Unicode hex\": \"264C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"9805\", \"Unicode hex\": \"264D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"9806\", \"Unicode hex\": \"264E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"9807\", \"Unicode hex\": \"264F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"9808\", \"Unicode hex\": \"2650\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"9809\", \"Unicode hex\": \"2651\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"9810\", \"Unicode hex\": \"2652\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9811\", \"Unicode hex\": \"2653\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128624\", \"Unicode hex\": \"1F670\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128629\", \"Unicode hex\": \"1F675\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9899\", \"Unicode hex\": \"26AB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128318\", \"Unicode hex\": \"1F53E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9724\", \"Unicode hex\": \"25FC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128911\", \"Unicode hex\": \"1F78F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128912\", \"Unicode hex\": \"1F790\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"10065\", \"Unicode hex\": \"2751\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"10066\", \"Unicode hex\": \"2752\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"128927\", \"Unicode hex\": \"1F79F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"10731\", \"Unicode hex\": \"29EB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9670\", \"Unicode hex\": \"25C6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10070\", \"Unicode hex\": \"2756\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"8999\", \"Unicode hex\": \"2327\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"11193\", \"Unicode hex\": \"2BB9\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"8984\", \"Unicode hex\": \"2318\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"127989\", \"Unicode hex\": \"1F3F5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"127990\", \"Unicode hex\": \"1F3F6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128630\", \"Unicode hex\": \"1F676\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128631\", \"Unicode hex\": \"1F677\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"127\", \"Dingbat hex\": \"7F\", \"Unicode dec\": \"9647\", \"Unicode hex\": \"25AF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"127243\", \"Unicode hex\": \"1F10B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"10112\", \"Unicode hex\": \"2780\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"10113\", \"Unicode hex\": \"2781\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"10114\", \"Unicode hex\": \"2782\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"10115\", \"Unicode hex\": \"2783\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10116\", \"Unicode hex\": \"2784\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"10117\", \"Unicode hex\": \"2785\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"10118\", \"Unicode hex\": \"2786\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"10119\", \"Unicode hex\": \"2787\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"10120\", \"Unicode hex\": \"2788\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"10121\", \"Unicode hex\": \"2789\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127244\", \"Unicode hex\": \"1F10C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"10122\", \"Unicode hex\": \"278A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"10123\", \"Unicode hex\": \"278B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"10124\", \"Unicode hex\": \"278C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"10125\", \"Unicode hex\": \"278D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"10126\", \"Unicode hex\": \"278E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"10127\", \"Unicode hex\": \"278F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"10128\", \"Unicode hex\": \"2790\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"10129\", \"Unicode hex\": \"2791\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"10130\", \"Unicode hex\": \"2792\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"10131\", \"Unicode hex\": \"2793\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128610\", \"Unicode hex\": \"1F662\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128608\", \"Unicode hex\": \"1F660\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"128609\", \"Unicode hex\": \"1F661\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128611\", \"Unicode hex\": \"1F663\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128606\", \"Unicode hex\": \"1F65E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128604\", \"Unicode hex\": \"1F65C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128605\", \"Unicode hex\": \"1F65D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128607\", \"Unicode hex\": \"1F65F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"8729\", \"Unicode hex\": \"2219\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"11037\", \"Unicode hex\": \"2B1D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"11096\", \"Unicode hex\": \"2B58\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128902\", \"Unicode hex\": \"1F786\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128904\", \"Unicode hex\": \"1F788\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128906\", \"Unicode hex\": \"1F78A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128907\", \"Unicode hex\": \"1F78B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128319\", \"Unicode hex\": \"1F53F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9642\", \"Unicode hex\": \"25AA\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128910\", \"Unicode hex\": \"1F78E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128961\", \"Unicode hex\": \"1F7C1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128965\", \"Unicode hex\": \"1F7C5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"9733\", \"Unicode hex\": \"2605\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128971\", \"Unicode hex\": \"1F7CB\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128975\", \"Unicode hex\": \"1F7CF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"128979\", \"Unicode hex\": \"1F7D3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"128977\", \"Unicode hex\": \"1F7D1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"11216\", \"Unicode hex\": \"2BD0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"8982\", \"Unicode hex\": \"2316\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"11214\", \"Unicode hex\": \"2BCE\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"11215\", \"Unicode hex\": \"2BCF\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"11217\", \"Unicode hex\": \"2BD1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"10026\", \"Unicode hex\": \"272A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"10032\", \"Unicode hex\": \"2730\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"128336\", \"Unicode hex\": \"1F550\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128337\", \"Unicode hex\": \"1F551\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128338\", \"Unicode hex\": \"1F552\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128339\", \"Unicode hex\": \"1F553\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128340\", \"Unicode hex\": \"1F554\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"128341\", \"Unicode hex\": \"1F555\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"128342\", \"Unicode hex\": \"1F556\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128343\", \"Unicode hex\": \"1F557\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128344\", \"Unicode hex\": \"1F558\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128345\", \"Unicode hex\": \"1F559\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128346\", \"Unicode hex\": \"1F55A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128347\", \"Unicode hex\": \"1F55B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11184\", \"Unicode hex\": \"2BB0\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11185\", \"Unicode hex\": \"2BB1\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11186\", \"Unicode hex\": \"2BB2\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"11187\", \"Unicode hex\": \"2BB3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"11188\", \"Unicode hex\": \"2BB4\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"11189\", \"Unicode hex\": \"2BB5\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11190\", \"Unicode hex\": \"2BB6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11191\", \"Unicode hex\": \"2BB7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128618\", \"Unicode hex\": \"1F66A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128619\", \"Unicode hex\": \"1F66B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128597\", \"Unicode hex\": \"1F655\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128596\", \"Unicode hex\": \"1F654\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128599\", \"Unicode hex\": \"1F657\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128598\", \"Unicode hex\": \"1F656\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128592\", \"Unicode hex\": \"1F650\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128593\", \"Unicode hex\": \"1F651\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128594\", \"Unicode hex\": \"1F652\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128595\", \"Unicode hex\": \"1F653\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"9003\", \"Unicode hex\": \"232B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8998\", \"Unicode hex\": \"2326\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"11160\", \"Unicode hex\": \"2B98\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"11162\", \"Unicode hex\": \"2B9A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"11161\", \"Unicode hex\": \"2B99\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"11163\", \"Unicode hex\": \"2B9B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"11144\", \"Unicode hex\": \"2B88\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"11146\", \"Unicode hex\": \"2B8A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"11145\", \"Unicode hex\": \"2B89\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"11147\", \"Unicode hex\": \"2B8B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129128\", \"Unicode hex\": \"1F868\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129130\", \"Unicode hex\": \"1F86A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129129\", \"Unicode hex\": \"1F869\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129131\", \"Unicode hex\": \"1F86B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129132\", \"Unicode hex\": \"1F86C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129133\", \"Unicode hex\": \"1F86D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129135\", \"Unicode hex\": \"1F86F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129134\", \"Unicode hex\": \"1F86E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129144\", \"Unicode hex\": \"1F878\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129146\", \"Unicode hex\": \"1F87A\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129145\", \"Unicode hex\": \"1F879\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129147\", \"Unicode hex\": \"1F87B\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129148\", \"Unicode hex\": \"1F87C\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129149\", \"Unicode hex\": \"1F87D\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129151\", \"Unicode hex\": \"1F87F\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129150\", \"Unicode hex\": \"1F87E\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"8678\", \"Unicode hex\": \"21E6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"8680\", \"Unicode hex\": \"21E8\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"8679\", \"Unicode hex\": \"21E7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8681\", \"Unicode hex\": \"21E9\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"11012\", \"Unicode hex\": \"2B04\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"8691\", \"Unicode hex\": \"21F3\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"11009\", \"Unicode hex\": \"2B01\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11008\", \"Unicode hex\": \"2B00\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11011\", \"Unicode hex\": \"2B03\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"11010\", \"Unicode hex\": \"2B02\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"129196\", \"Unicode hex\": \"1F8AC\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"129197\", \"Unicode hex\": \"1F8AD\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128502\", \"Unicode hex\": \"1F5F6\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"10003\", \"Unicode hex\": \"2713\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"128503\", \"Unicode hex\": \"1F5F7\" },\n { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"128505\", \"Unicode hex\": \"1F5F9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128394\", \"Unicode hex\": \"1F58A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128395\", \"Unicode hex\": \"1F58B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128396\", \"Unicode hex\": \"1F58C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128397\", \"Unicode hex\": \"1F58D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"9988\", \"Unicode hex\": \"2704\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"9984\", \"Unicode hex\": \"2700\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128382\", \"Unicode hex\": \"1F57E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128381\", \"Unicode hex\": \"1F57D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128453\", \"Unicode hex\": \"1F5C5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128454\", \"Unicode hex\": \"1F5C6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128455\", \"Unicode hex\": \"1F5C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128456\", \"Unicode hex\": \"1F5C8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128457\", \"Unicode hex\": \"1F5C9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128458\", \"Unicode hex\": \"1F5CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128459\", \"Unicode hex\": \"1F5CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128460\", \"Unicode hex\": \"1F5CC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128461\", \"Unicode hex\": \"1F5CD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128465\", \"Unicode hex\": \"1F5D1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128468\", \"Unicode hex\": \"1F5D4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128437\", \"Unicode hex\": \"1F5B5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"128438\", \"Unicode hex\": \"1F5B6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128439\", \"Unicode hex\": \"1F5B7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128440\", \"Unicode hex\": \"1F5B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128429\", \"Unicode hex\": \"1F5AD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128431\", \"Unicode hex\": \"1F5AF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128433\", \"Unicode hex\": \"1F5B1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128402\", \"Unicode hex\": \"1F592\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128403\", \"Unicode hex\": \"1F593\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128408\", \"Unicode hex\": \"1F598\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128409\", \"Unicode hex\": \"1F599\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128410\", \"Unicode hex\": \"1F59A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"128411\", \"Unicode hex\": \"1F59B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128072\", \"Unicode hex\": \"1F448\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128073\", \"Unicode hex\": \"1F449\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128412\", \"Unicode hex\": \"1F59C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"128413\", \"Unicode hex\": \"1F59D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"128414\", \"Unicode hex\": \"1F59E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"128415\", \"Unicode hex\": \"1F59F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"128416\", \"Unicode hex\": \"1F5A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128417\", \"Unicode hex\": \"1F5A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"128070\", \"Unicode hex\": \"1F446\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128071\", \"Unicode hex\": \"1F447\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128418\", \"Unicode hex\": \"1F5A2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128419\", \"Unicode hex\": \"1F5A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128401\", \"Unicode hex\": \"1F591\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128500\", \"Unicode hex\": \"1F5F4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"128504\", \"Unicode hex\": \"1F5F8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"128501\", \"Unicode hex\": \"1F5F5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9745\", \"Unicode hex\": \"2611\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"11197\", \"Unicode hex\": \"2BBD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"9746\", \"Unicode hex\": \"2612\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"11198\", \"Unicode hex\": \"2BBE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"11199\", \"Unicode hex\": \"2BBF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128711\", \"Unicode hex\": \"1F6C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"128625\", \"Unicode hex\": \"1F671\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"128628\", \"Unicode hex\": \"1F674\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128626\", \"Unicode hex\": \"1F672\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128627\", \"Unicode hex\": \"1F673\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"8253\", \"Unicode hex\": \"203D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128633\", \"Unicode hex\": \"1F679\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128634\", \"Unicode hex\": \"1F67A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"128635\", \"Unicode hex\": \"1F67B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"128614\", \"Unicode hex\": \"1F666\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128612\", \"Unicode hex\": \"1F664\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"128613\", \"Unicode hex\": \"1F665\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128615\", \"Unicode hex\": \"1F667\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128602\", \"Unicode hex\": \"1F65A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128600\", \"Unicode hex\": \"1F658\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"128601\", \"Unicode hex\": \"1F659\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128603\", \"Unicode hex\": \"1F65B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9450\", \"Unicode hex\": \"24EA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"9312\", \"Unicode hex\": \"2460\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"9313\", \"Unicode hex\": \"2461\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9314\", \"Unicode hex\": \"2462\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"9315\", \"Unicode hex\": \"2463\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9316\", \"Unicode hex\": \"2464\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"9317\", \"Unicode hex\": \"2465\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9318\", \"Unicode hex\": \"2466\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9319\", \"Unicode hex\": \"2467\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9320\", \"Unicode hex\": \"2468\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9321\", \"Unicode hex\": \"2469\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9471\", \"Unicode hex\": \"24FF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"10102\", \"Unicode hex\": \"2776\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10103\", \"Unicode hex\": \"2777\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"10104\", \"Unicode hex\": \"2778\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10105\", \"Unicode hex\": \"2779\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"10106\", \"Unicode hex\": \"277A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"10107\", \"Unicode hex\": \"277B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"10108\", \"Unicode hex\": \"277C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"10109\", \"Unicode hex\": \"277D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"10110\", \"Unicode hex\": \"277E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"10111\", \"Unicode hex\": \"277F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"9737\", \"Unicode hex\": \"2609\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"127765\", \"Unicode hex\": \"1F315\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"9789\", \"Unicode hex\": \"263D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"9790\", \"Unicode hex\": \"263E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11839\", \"Unicode hex\": \"2E3F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10013\", \"Unicode hex\": \"271D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"128327\", \"Unicode hex\": \"1F547\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"128348\", \"Unicode hex\": \"1F55C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"128349\", \"Unicode hex\": \"1F55D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"128350\", \"Unicode hex\": \"1F55E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"128351\", \"Unicode hex\": \"1F55F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"128352\", \"Unicode hex\": \"1F560\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"128353\", \"Unicode hex\": \"1F561\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"128354\", \"Unicode hex\": \"1F562\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128355\", \"Unicode hex\": \"1F563\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128356\", \"Unicode hex\": \"1F564\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128357\", \"Unicode hex\": \"1F565\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128358\", \"Unicode hex\": \"1F566\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"128359\", \"Unicode hex\": \"1F567\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128616\", \"Unicode hex\": \"1F668\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128617\", \"Unicode hex\": \"1F669\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128900\", \"Unicode hex\": \"1F784\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"10625\", \"Unicode hex\": \"2981\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"9679\", \"Unicode hex\": \"25CF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"9675\", \"Unicode hex\": \"25CB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128901\", \"Unicode hex\": \"1F785\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128903\", \"Unicode hex\": \"1F787\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128905\", \"Unicode hex\": \"1F789\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"8857\", \"Unicode hex\": \"2299\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"10687\", \"Unicode hex\": \"29BF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128908\", \"Unicode hex\": \"1F78C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128909\", \"Unicode hex\": \"1F78D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"9726\", \"Unicode hex\": \"25FE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"9632\", \"Unicode hex\": \"25A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"9633\", \"Unicode hex\": \"25A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128913\", \"Unicode hex\": \"1F791\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128914\", \"Unicode hex\": \"1F792\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128915\", \"Unicode hex\": \"1F793\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128916\", \"Unicode hex\": \"1F794\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9635\", \"Unicode hex\": \"25A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128917\", \"Unicode hex\": \"1F795\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128918\", \"Unicode hex\": \"1F796\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128919\", \"Unicode hex\": \"1F797\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128920\", \"Unicode hex\": \"1F798\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"11045\", \"Unicode hex\": \"2B25\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"9671\", \"Unicode hex\": \"25C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"128922\", \"Unicode hex\": \"1F79A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"9672\", \"Unicode hex\": \"25C8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"128923\", \"Unicode hex\": \"1F79B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128924\", \"Unicode hex\": \"1F79C\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"128925\", \"Unicode hex\": \"1F79D\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128926\", \"Unicode hex\": \"1F79E\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"11050\", \"Unicode hex\": \"2B2A\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"11047\", \"Unicode hex\": \"2B27\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128928\", \"Unicode hex\": \"1F7A0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"9686\", \"Unicode hex\": \"25D6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"9687\", \"Unicode hex\": \"25D7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"11210\", \"Unicode hex\": \"2BCA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"11211\", \"Unicode hex\": \"2BCB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"11200\", \"Unicode hex\": \"2BC0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"11201\", \"Unicode hex\": \"2BC1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"11039\", \"Unicode hex\": \"2B1F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"11202\", \"Unicode hex\": \"2BC2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"11043\", \"Unicode hex\": \"2B23\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11042\", \"Unicode hex\": \"2B22\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11203\", \"Unicode hex\": \"2BC3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11204\", \"Unicode hex\": \"2BC4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128929\", \"Unicode hex\": \"1F7A1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128930\", \"Unicode hex\": \"1F7A2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128931\", \"Unicode hex\": \"1F7A3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128932\", \"Unicode hex\": \"1F7A4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128933\", \"Unicode hex\": \"1F7A5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128934\", \"Unicode hex\": \"1F7A6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128935\", \"Unicode hex\": \"1F7A7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128936\", \"Unicode hex\": \"1F7A8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128937\", \"Unicode hex\": \"1F7A9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128938\", \"Unicode hex\": \"1F7AA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128939\", \"Unicode hex\": \"1F7AB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128940\", \"Unicode hex\": \"1F7AC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128941\", \"Unicode hex\": \"1F7AD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128942\", \"Unicode hex\": \"1F7AE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128943\", \"Unicode hex\": \"1F7AF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"128944\", \"Unicode hex\": \"1F7B0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"128945\", \"Unicode hex\": \"1F7B1\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"128946\", \"Unicode hex\": \"1F7B2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"128947\", \"Unicode hex\": \"1F7B3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"128948\", \"Unicode hex\": \"1F7B4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"128949\", \"Unicode hex\": \"1F7B5\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"128950\", \"Unicode hex\": \"1F7B6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"128951\", \"Unicode hex\": \"1F7B7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"128952\", \"Unicode hex\": \"1F7B8\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"128953\", \"Unicode hex\": \"1F7B9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"128954\", \"Unicode hex\": \"1F7BA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"128955\", \"Unicode hex\": \"1F7BB\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"128956\", \"Unicode hex\": \"1F7BC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128957\", \"Unicode hex\": \"1F7BD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128958\", \"Unicode hex\": \"1F7BE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"128959\", \"Unicode hex\": \"1F7BF\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"128960\", \"Unicode hex\": \"1F7C0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128962\", \"Unicode hex\": \"1F7C2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128964\", \"Unicode hex\": \"1F7C4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"128966\", \"Unicode hex\": \"1F7C6\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"128969\", \"Unicode hex\": \"1F7C9\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128970\", \"Unicode hex\": \"1F7CA\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"10038\", \"Unicode hex\": \"2736\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"128972\", \"Unicode hex\": \"1F7CC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128974\", \"Unicode hex\": \"1F7CE\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128976\", \"Unicode hex\": \"1F7D0\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128978\", \"Unicode hex\": \"1F7D2\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"10041\", \"Unicode hex\": \"2739\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128963\", \"Unicode hex\": \"1F7C3\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128967\", \"Unicode hex\": \"1F7C7\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128973\", \"Unicode hex\": \"1F7CD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128980\", \"Unicode hex\": \"1F7D4\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11212\", \"Unicode hex\": \"2BCC\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11213\", \"Unicode hex\": \"2BCD\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"8251\", \"Unicode hex\": \"203B\" },\n { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"8258\", \"Unicode hex\": \"2042\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"11104\", \"Unicode hex\": \"2B60\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"11106\", \"Unicode hex\": \"2B62\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"11105\", \"Unicode hex\": \"2B61\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"11107\", \"Unicode hex\": \"2B63\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"11110\", \"Unicode hex\": \"2B66\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"11111\", \"Unicode hex\": \"2B67\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"11113\", \"Unicode hex\": \"2B69\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"11112\", \"Unicode hex\": \"2B68\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"11120\", \"Unicode hex\": \"2B70\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"11122\", \"Unicode hex\": \"2B72\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"11121\", \"Unicode hex\": \"2B71\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"11123\", \"Unicode hex\": \"2B73\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"11126\", \"Unicode hex\": \"2B76\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"11128\", \"Unicode hex\": \"2B78\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"11131\", \"Unicode hex\": \"2B7B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"11133\", \"Unicode hex\": \"2B7D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"11108\", \"Unicode hex\": \"2B64\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"11109\", \"Unicode hex\": \"2B65\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"11114\", \"Unicode hex\": \"2B6A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"11116\", \"Unicode hex\": \"2B6C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"11115\", \"Unicode hex\": \"2B6B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"11117\", \"Unicode hex\": \"2B6D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"11085\", \"Unicode hex\": \"2B4D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"11168\", \"Unicode hex\": \"2BA0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"11169\", \"Unicode hex\": \"2BA1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"11170\", \"Unicode hex\": \"2BA2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"11171\", \"Unicode hex\": \"2BA3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"11172\", \"Unicode hex\": \"2BA4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"11173\", \"Unicode hex\": \"2BA5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"11174\", \"Unicode hex\": \"2BA6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"11175\", \"Unicode hex\": \"2BA7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"11152\", \"Unicode hex\": \"2B90\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"11153\", \"Unicode hex\": \"2B91\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"11154\", \"Unicode hex\": \"2B92\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"11155\", \"Unicode hex\": \"2B93\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"11136\", \"Unicode hex\": \"2B80\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"11139\", \"Unicode hex\": \"2B83\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"11134\", \"Unicode hex\": \"2B7E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"11135\", \"Unicode hex\": \"2B7F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"11140\", \"Unicode hex\": \"2B84\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"11142\", \"Unicode hex\": \"2B86\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"11141\", \"Unicode hex\": \"2B85\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"11143\", \"Unicode hex\": \"2B87\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"11151\", \"Unicode hex\": \"2B8F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"11149\", \"Unicode hex\": \"2B8D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"11150\", \"Unicode hex\": \"2B8E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"11148\", \"Unicode hex\": \"2B8C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"11118\", \"Unicode hex\": \"2B6E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"11119\", \"Unicode hex\": \"2B6F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9099\", \"Unicode hex\": \"238B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"8996\", \"Unicode hex\": \"2324\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"8963\", \"Unicode hex\": \"2303\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"8997\", \"Unicode hex\": \"2325\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"9251\", \"Unicode hex\": \"2423\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"9085\", \"Unicode hex\": \"237D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"8682\", \"Unicode hex\": \"21EA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"11192\", \"Unicode hex\": \"2BB8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"129184\", \"Unicode hex\": \"1F8A0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"129185\", \"Unicode hex\": \"1F8A1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"129186\", \"Unicode hex\": \"1F8A2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"129187\", \"Unicode hex\": \"1F8A3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"129188\", \"Unicode hex\": \"1F8A4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"129189\", \"Unicode hex\": \"1F8A5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"129190\", \"Unicode hex\": \"1F8A6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"129191\", \"Unicode hex\": \"1F8A7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"129192\", \"Unicode hex\": \"1F8A8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"129193\", \"Unicode hex\": \"1F8A9\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"129194\", \"Unicode hex\": \"1F8AA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"129195\", \"Unicode hex\": \"1F8AB\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"129104\", \"Unicode hex\": \"1F850\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"129106\", \"Unicode hex\": \"1F852\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"129105\", \"Unicode hex\": \"1F851\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"129107\", \"Unicode hex\": \"1F853\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"129108\", \"Unicode hex\": \"1F854\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"129109\", \"Unicode hex\": \"1F855\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"129111\", \"Unicode hex\": \"1F857\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"129110\", \"Unicode hex\": \"1F856\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"129112\", \"Unicode hex\": \"1F858\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"129113\", \"Unicode hex\": \"1F859\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9650\", \"Unicode hex\": \"25B2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9660\", \"Unicode hex\": \"25BC\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9651\", \"Unicode hex\": \"25B3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9661\", \"Unicode hex\": \"25BD\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9664\", \"Unicode hex\": \"25C0\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9654\", \"Unicode hex\": \"25B6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"9665\", \"Unicode hex\": \"25C1\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9655\", \"Unicode hex\": \"25B7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"9699\", \"Unicode hex\": \"25E3\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"9698\", \"Unicode hex\": \"25E2\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"9700\", \"Unicode hex\": \"25E4\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"9701\", \"Unicode hex\": \"25E5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"128896\", \"Unicode hex\": \"1F780\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128898\", \"Unicode hex\": \"1F782\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128897\", \"Unicode hex\": \"1F781\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128899\", \"Unicode hex\": \"1F783\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"11205\", \"Unicode hex\": \"2BC5\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"11206\", \"Unicode hex\": \"2BC6\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"11207\", \"Unicode hex\": \"2BC7\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11208\", \"Unicode hex\": \"2BC8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"11164\", \"Unicode hex\": \"2B9C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"11166\", \"Unicode hex\": \"2B9E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"11165\", \"Unicode hex\": \"2B9D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"11167\", \"Unicode hex\": \"2B9F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"129040\", \"Unicode hex\": \"1F810\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"129042\", \"Unicode hex\": \"1F812\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"129041\", \"Unicode hex\": \"1F811\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"129043\", \"Unicode hex\": \"1F813\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"129044\", \"Unicode hex\": \"1F814\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"129046\", \"Unicode hex\": \"1F816\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"129045\", \"Unicode hex\": \"1F815\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"129047\", \"Unicode hex\": \"1F817\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"129048\", \"Unicode hex\": \"1F818\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"129050\", \"Unicode hex\": \"1F81A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"129049\", \"Unicode hex\": \"1F819\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"129051\", \"Unicode hex\": \"1F81B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"129052\", \"Unicode hex\": \"1F81C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"129054\", \"Unicode hex\": \"1F81E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"129053\", \"Unicode hex\": \"1F81D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"129055\", \"Unicode hex\": \"1F81F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"129024\", \"Unicode hex\": \"1F800\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"129026\", \"Unicode hex\": \"1F802\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"129025\", \"Unicode hex\": \"1F801\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"129027\", \"Unicode hex\": \"1F803\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"129028\", \"Unicode hex\": \"1F804\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"129030\", \"Unicode hex\": \"1F806\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"129029\", \"Unicode hex\": \"1F805\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"129031\", \"Unicode hex\": \"1F807\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"129032\", \"Unicode hex\": \"1F808\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"129034\", \"Unicode hex\": \"1F80A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"129033\", \"Unicode hex\": \"1F809\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"129035\", \"Unicode hex\": \"1F80B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"129056\", \"Unicode hex\": \"1F820\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"129058\", \"Unicode hex\": \"1F822\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"129060\", \"Unicode hex\": \"1F824\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"129062\", \"Unicode hex\": \"1F826\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"129064\", \"Unicode hex\": \"1F828\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"129066\", \"Unicode hex\": \"1F82A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"129068\", \"Unicode hex\": \"1F82C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"129180\", \"Unicode hex\": \"1F89C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"129181\", \"Unicode hex\": \"1F89D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"129182\", \"Unicode hex\": \"1F89E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"129183\", \"Unicode hex\": \"1F89F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"129070\", \"Unicode hex\": \"1F82E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"129072\", \"Unicode hex\": \"1F830\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"129074\", \"Unicode hex\": \"1F832\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"129076\", \"Unicode hex\": \"1F834\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"129078\", \"Unicode hex\": \"1F836\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"129080\", \"Unicode hex\": \"1F838\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"129082\", \"Unicode hex\": \"1F83A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"129081\", \"Unicode hex\": \"1F839\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"129083\", \"Unicode hex\": \"1F83B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"129176\", \"Unicode hex\": \"1F898\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"129178\", \"Unicode hex\": \"1F89A\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"129177\", \"Unicode hex\": \"1F899\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"129179\", \"Unicode hex\": \"1F89B\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"129084\", \"Unicode hex\": \"1F83C\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"129086\", \"Unicode hex\": \"1F83E\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"129085\", \"Unicode hex\": \"1F83D\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"129087\", \"Unicode hex\": \"1F83F\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"129088\", \"Unicode hex\": \"1F840\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"129090\", \"Unicode hex\": \"1F842\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"129089\", \"Unicode hex\": \"1F841\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"129091\", \"Unicode hex\": \"1F843\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"129092\", \"Unicode hex\": \"1F844\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"129094\", \"Unicode hex\": \"1F846\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"129093\", \"Unicode hex\": \"1F845\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"129095\", \"Unicode hex\": \"1F847\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11176\", \"Unicode hex\": \"2BA8\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11177\", \"Unicode hex\": \"2BA9\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"11178\", \"Unicode hex\": \"2BAA\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"11179\", \"Unicode hex\": \"2BAB\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"11180\", \"Unicode hex\": \"2BAC\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"11181\", \"Unicode hex\": \"2BAD\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"11182\", \"Unicode hex\": \"2BAE\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"11183\", \"Unicode hex\": \"2BAF\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"129120\", \"Unicode hex\": \"1F860\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"129122\", \"Unicode hex\": \"1F862\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"129121\", \"Unicode hex\": \"1F861\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"129123\", \"Unicode hex\": \"1F863\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"129124\", \"Unicode hex\": \"1F864\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"129125\", \"Unicode hex\": \"1F865\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"129127\", \"Unicode hex\": \"1F867\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"129126\", \"Unicode hex\": \"1F866\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"129136\", \"Unicode hex\": \"1F870\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"129138\", \"Unicode hex\": \"1F872\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"129137\", \"Unicode hex\": \"1F871\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"129139\", \"Unicode hex\": \"1F873\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"129140\", \"Unicode hex\": \"1F874\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"129141\", \"Unicode hex\": \"1F875\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129143\", \"Unicode hex\": \"1F877\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129142\", \"Unicode hex\": \"1F876\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129152\", \"Unicode hex\": \"1F880\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129154\", \"Unicode hex\": \"1F882\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129153\", \"Unicode hex\": \"1F881\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129155\", \"Unicode hex\": \"1F883\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129156\", \"Unicode hex\": \"1F884\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129157\", \"Unicode hex\": \"1F885\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129159\", \"Unicode hex\": \"1F887\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129158\", \"Unicode hex\": \"1F886\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129168\", \"Unicode hex\": \"1F890\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129170\", \"Unicode hex\": \"1F892\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129169\", \"Unicode hex\": \"1F891\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129171\", \"Unicode hex\": \"1F893\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129172\", \"Unicode hex\": \"1F894\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129174\", \"Unicode hex\": \"1F896\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"129173\", \"Unicode hex\": \"1F895\" },\n { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"129175\", \"Unicode hex\": \"1F897\" },\n];\nexports.default = dingbats;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hex = exports.dec = exports.codePoint = void 0;\nvar dingbats_1 = __importDefault(require(\"./dingbats\"));\nvar dingbatsByCodePoint = {};\nvar fromCodePoint = String.fromCodePoint ? String.fromCodePoint : fromCodePointPolyfill;\nfor (var _i = 0, dingbats_2 = dingbats_1.default; _i < dingbats_2.length; _i++) {\n var dingbat = dingbats_2[_i];\n var codePoint_1 = parseInt(dingbat[\"Unicode dec\"], 10);\n var scalarValue = {\n codePoint: codePoint_1,\n string: fromCodePoint(codePoint_1),\n };\n dingbatsByCodePoint[dingbat[\"Typeface name\"].toUpperCase() + \"_\" + dingbat[\"Dingbat dec\"]] = scalarValue;\n}\nfunction codePoint(typeface, codePoint) {\n return dingbatsByCodePoint[typeface.toUpperCase() + \"_\" + codePoint];\n}\nexports.codePoint = codePoint;\nfunction dec(typeface, dec) {\n return codePoint(typeface, parseInt(dec, 10));\n}\nexports.dec = dec;\nfunction hex(typeface, hex) {\n return codePoint(typeface, parseInt(hex, 16));\n}\nexports.hex = hex;\nfunction fromCodePointPolyfill(codePoint) {\n if (codePoint <= 0xFFFF) {\n // BMP\n return String.fromCharCode(codePoint);\n }\n else {\n // Astral\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n var highSurrogate = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;\n var lowSurrogate = (codePoint - 0x10000) % 0x400 + 0xDC00;\n return String.fromCharCode(highSurrogate, lowSurrogate);\n }\n}\n;\n","var _ = require(\"underscore\");\n\nexports.paragraph = paragraph;\nexports.run = run;\nexports._elements = elements;\nexports._elementsOfType = elementsOfType;\nexports.getDescendantsOfType = getDescendantsOfType;\nexports.getDescendants = getDescendants;\n\nfunction paragraph(transform) {\n return elementsOfType(\"paragraph\", transform);\n}\n\nfunction run(transform) {\n return elementsOfType(\"run\", transform);\n}\n\nfunction elementsOfType(elementType, transform) {\n return elements(function(element) {\n if (element.type === elementType) {\n return transform(element);\n } else {\n return element;\n }\n });\n}\n\nfunction elements(transform) {\n return function transformElement(element) {\n if (element.children) {\n var children = _.map(element.children, transformElement);\n element = _.extend(element, {children: children});\n }\n return transform(element);\n };\n}\n\n\nfunction getDescendantsOfType(element, type) {\n return getDescendants(element).filter(function(descendant) {\n return descendant.type === type;\n });\n}\n\nfunction getDescendants(element) {\n var descendants = [];\n\n visitDescendants(element, function(descendant) {\n descendants.push(descendant);\n });\n\n return descendants;\n}\n\nfunction visitDescendants(element, visit) {\n if (element.children) {\n element.children.forEach(function(child) {\n visitDescendants(child, visit);\n visit(child);\n });\n }\n}\n","exports.uriToZipEntryName = uriToZipEntryName;\nexports.replaceFragment = replaceFragment;\n\nfunction uriToZipEntryName(base, uri) {\n if (uri.charAt(0) === \"/\") {\n return uri.substr(1);\n } else {\n // In general, we should check first and second for trailing and leading slashes,\n // but in our specific case this seems to be sufficient\n return base + \"/\" + uri;\n }\n}\n\n\nfunction replaceFragment(uri, fragment) {\n var hashIndex = uri.indexOf(\"#\");\n if (hashIndex !== -1) {\n uri = uri.substring(0, hashIndex);\n }\n return uri + \"#\" + fragment;\n}\n","exports.createBodyReader = createBodyReader;\nexports._readNumberingProperties = readNumberingProperties;\n\nvar dingbatToUnicode = require(\"dingbat-to-unicode\");\nvar _ = require(\"underscore\");\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar warning = require(\"../results\").warning;\nvar xml = require(\"../xml\");\nvar transforms = require(\"../transforms\");\nvar uris = require(\"./uris\");\n\nfunction createBodyReader(options) {\n return {\n readXmlElement: function(element) {\n return new BodyReader(options).readXmlElement(element);\n },\n readXmlElements: function(elements) {\n return new BodyReader(options).readXmlElements(elements);\n }\n };\n}\n\nfunction BodyReader(options) {\n var complexFieldStack = [];\n var currentInstrText = [];\n\n // When a paragraph is marked as deleted, its contents should be combined\n // with the following paragraph. See 17.13.5.15 del (Deleted Paragraph) of\n // ECMA-376 4th edition Part 1.\n var deletedParagraphContents = [];\n\n var relationships = options.relationships;\n var contentTypes = options.contentTypes;\n var docxFile = options.docxFile;\n var files = options.files;\n var numbering = options.numbering;\n var styles = options.styles;\n\n function readXmlElements(elements) {\n var results = elements.map(readXmlElement);\n return combineResults(results);\n }\n\n function readXmlElement(element) {\n if (element.type === \"element\") {\n var handler = xmlElementReaders[element.name];\n if (handler) {\n return handler(element);\n } else if (!Object.prototype.hasOwnProperty.call(ignoreElements, element.name)) {\n var message = warning(\"An unrecognised element was ignored: \" + element.name);\n return emptyResultWithMessages([message]);\n }\n }\n return emptyResult();\n }\n\n function readParagraphProperties(element) {\n return readParagraphStyle(element).map(function(style) {\n return {\n type: \"paragraphProperties\",\n styleId: style.styleId,\n styleName: style.name,\n alignment: element.firstOrEmpty(\"w:jc\").attributes[\"w:val\"],\n numbering: readNumberingProperties(style.styleId, element.firstOrEmpty(\"w:numPr\"), numbering),\n indent: readParagraphIndent(element.firstOrEmpty(\"w:ind\"))\n };\n });\n }\n\n function readParagraphIndent(element) {\n return {\n start: element.attributes[\"w:start\"] || element.attributes[\"w:left\"],\n end: element.attributes[\"w:end\"] || element.attributes[\"w:right\"],\n firstLine: element.attributes[\"w:firstLine\"],\n hanging: element.attributes[\"w:hanging\"]\n };\n }\n\n function readRunProperties(element) {\n return readRunStyle(element).map(function(style) {\n var fontSizeString = element.firstOrEmpty(\"w:sz\").attributes[\"w:val\"];\n // w:sz gives the font size in half points, so halve the value to get the size in points\n var fontSize = /^[0-9]+$/.test(fontSizeString) ? parseInt(fontSizeString, 10) / 2 : null;\n\n return {\n type: \"runProperties\",\n styleId: style.styleId,\n styleName: style.name,\n verticalAlignment: element.firstOrEmpty(\"w:vertAlign\").attributes[\"w:val\"],\n font: element.firstOrEmpty(\"w:rFonts\").attributes[\"w:ascii\"],\n fontSize: fontSize,\n isBold: readBooleanElement(element.first(\"w:b\")),\n isUnderline: readUnderline(element.first(\"w:u\")),\n isItalic: readBooleanElement(element.first(\"w:i\")),\n isStrikethrough: readBooleanElement(element.first(\"w:strike\")),\n isAllCaps: readBooleanElement(element.first(\"w:caps\")),\n isSmallCaps: readBooleanElement(element.first(\"w:smallCaps\")),\n highlight: readHighlightValue(element.firstOrEmpty(\"w:highlight\").attributes[\"w:val\"])\n };\n });\n }\n\n function readUnderline(element) {\n if (element) {\n var value = element.attributes[\"w:val\"];\n return value !== undefined && value !== \"false\" && value !== \"0\" && value !== \"none\";\n } else {\n return false;\n }\n }\n\n function readBooleanElement(element) {\n if (element) {\n var value = element.attributes[\"w:val\"];\n return value !== \"false\" && value !== \"0\";\n } else {\n return false;\n }\n }\n\n function readBooleanAttributeValue(value) {\n return value !== \"false\" && value !== \"0\";\n }\n\n function readHighlightValue(value) {\n if (!value || value === \"none\") {\n return null;\n } else {\n return value;\n }\n }\n\n function readParagraphStyle(element) {\n return readStyle(element, \"w:pStyle\", \"Paragraph\", styles.findParagraphStyleById);\n }\n\n function readRunStyle(element) {\n return readStyle(element, \"w:rStyle\", \"Run\", styles.findCharacterStyleById);\n }\n\n function readTableStyle(element) {\n return readStyle(element, \"w:tblStyle\", \"Table\", styles.findTableStyleById);\n }\n\n function readStyle(element, styleTagName, styleType, findStyleById) {\n var messages = [];\n var styleElement = element.first(styleTagName);\n var styleId = null;\n var name = null;\n if (styleElement) {\n styleId = styleElement.attributes[\"w:val\"];\n if (styleId) {\n var style = findStyleById(styleId);\n if (style) {\n name = style.name;\n } else {\n messages.push(undefinedStyleWarning(styleType, styleId));\n }\n }\n }\n return elementResultWithMessages({styleId: styleId, name: name}, messages);\n }\n\n function readFldChar(element) {\n var type = element.attributes[\"w:fldCharType\"];\n if (type === \"begin\") {\n complexFieldStack.push({type: \"begin\", fldChar: element});\n currentInstrText = [];\n } else if (type === \"end\") {\n var complexFieldEnd = complexFieldStack.pop();\n if (complexFieldEnd.type === \"begin\") {\n complexFieldEnd = parseCurrentInstrText(complexFieldEnd);\n }\n if (complexFieldEnd.type === \"checkbox\") {\n return elementResult(documents.checkbox({\n checked: complexFieldEnd.checked\n }));\n }\n } else if (type === \"separate\") {\n var complexFieldSeparate = complexFieldStack.pop();\n var complexField = parseCurrentInstrText(complexFieldSeparate);\n complexFieldStack.push(complexField);\n }\n return emptyResult();\n }\n\n function currentHyperlinkOptions() {\n var topHyperlink = _.last(complexFieldStack.filter(function(complexField) {\n return complexField.type === \"hyperlink\";\n }));\n return topHyperlink ? topHyperlink.options : null;\n }\n\n function parseCurrentInstrText(complexField) {\n return parseInstrText(\n currentInstrText.join(''),\n complexField.type === \"begin\"\n ? complexField.fldChar\n : xml.emptyElement\n );\n }\n\n function parseInstrText(instrText, fldChar) {\n var externalLinkResult = /\\s*HYPERLINK \"(.*)\"/.exec(instrText);\n if (externalLinkResult) {\n return {type: \"hyperlink\", options: {href: externalLinkResult[1]}};\n }\n\n var internalLinkResult = /\\s*HYPERLINK\\s+\\\\l\\s+\"(.*)\"/.exec(instrText);\n if (internalLinkResult) {\n return {type: \"hyperlink\", options: {anchor: internalLinkResult[1]}};\n }\n\n var checkboxResult = /\\s*FORMCHECKBOX\\s*/.exec(instrText);\n if (checkboxResult) {\n var checkboxElement = fldChar\n .firstOrEmpty(\"w:ffData\")\n .firstOrEmpty(\"w:checkBox\");\n var checkedElement = checkboxElement.first(\"w:checked\");\n var checked = checkedElement == null\n ? readBooleanElement(checkboxElement.first(\"w:default\"))\n : readBooleanElement(checkedElement);\n return {type: \"checkbox\", checked: checked};\n }\n\n return {type: \"unknown\"};\n }\n\n function readInstrText(element) {\n currentInstrText.push(element.text());\n return emptyResult();\n }\n\n function readSymbol(element) {\n // See 17.3.3.30 sym (Symbol Character) of ECMA-376 4th edition Part 1\n var font = element.attributes[\"w:font\"];\n var char = element.attributes[\"w:char\"];\n var unicodeCharacter = dingbatToUnicode.hex(font, char);\n if (unicodeCharacter == null && /^F0..$/.test(char)) {\n unicodeCharacter = dingbatToUnicode.hex(font, char.substring(2));\n }\n\n if (unicodeCharacter == null) {\n return emptyResultWithMessages([warning(\n \"A w:sym element with an unsupported character was ignored: char \" + char + \" in font \" + font\n )]);\n } else {\n return elementResult(new documents.Text(unicodeCharacter.string));\n }\n }\n\n function noteReferenceReader(noteType) {\n return function(element) {\n var noteId = element.attributes[\"w:id\"];\n return elementResult(new documents.NoteReference({\n noteType: noteType,\n noteId: noteId\n }));\n };\n }\n\n function readCommentReference(element) {\n return elementResult(documents.commentReference({\n commentId: element.attributes[\"w:id\"]\n }));\n }\n\n function readChildElements(element) {\n return readXmlElements(element.children);\n }\n\n var xmlElementReaders = {\n \"w:p\": function(element) {\n var paragraphPropertiesElement = element.firstOrEmpty(\"w:pPr\");\n\n var isDeleted = !!paragraphPropertiesElement\n .firstOrEmpty(\"w:rPr\")\n .first(\"w:del\");\n\n if (isDeleted) {\n element.children.forEach(function(child) {\n deletedParagraphContents.push(child);\n });\n return emptyResult();\n } else {\n var childrenXml = element.children;\n if (deletedParagraphContents.length > 0) {\n childrenXml = deletedParagraphContents.concat(childrenXml);\n deletedParagraphContents = [];\n }\n return ReadResult.map(\n readParagraphProperties(paragraphPropertiesElement),\n readXmlElements(childrenXml),\n function(properties, children) {\n return new documents.Paragraph(children, properties);\n }\n ).insertExtra();\n }\n },\n \"w:r\": function(element) {\n return ReadResult.map(\n readRunProperties(element.firstOrEmpty(\"w:rPr\")),\n readXmlElements(element.children),\n function(properties, children) {\n var hyperlinkOptions = currentHyperlinkOptions();\n if (hyperlinkOptions !== null) {\n children = [new documents.Hyperlink(children, hyperlinkOptions)];\n }\n\n return new documents.Run(children, properties);\n }\n );\n },\n \"w:fldChar\": readFldChar,\n \"w:instrText\": readInstrText,\n \"w:t\": function(element) {\n return elementResult(new documents.Text(element.text()));\n },\n \"w:tab\": function(element) {\n return elementResult(new documents.Tab());\n },\n \"w:noBreakHyphen\": function() {\n return elementResult(new documents.Text(\"\\u2011\"));\n },\n \"w:softHyphen\": function(element) {\n return elementResult(new documents.Text(\"\\u00AD\"));\n },\n \"w:sym\": readSymbol,\n \"w:hyperlink\": function(element) {\n var relationshipId = element.attributes[\"r:id\"];\n var anchor = element.attributes[\"w:anchor\"];\n return readXmlElements(element.children).map(function(children) {\n function create(options) {\n var targetFrame = element.attributes[\"w:tgtFrame\"] || null;\n\n return new documents.Hyperlink(\n children,\n _.extend({targetFrame: targetFrame}, options)\n );\n }\n\n if (relationshipId) {\n var href = relationships.findTargetByRelationshipId(relationshipId);\n if (anchor) {\n href = uris.replaceFragment(href, anchor);\n }\n return create({href: href});\n } else if (anchor) {\n return create({anchor: anchor});\n } else {\n return children;\n }\n });\n },\n \"w:tbl\": readTable,\n \"w:tr\": readTableRow,\n \"w:tc\": readTableCell,\n \"w:footnoteReference\": noteReferenceReader(\"footnote\"),\n \"w:endnoteReference\": noteReferenceReader(\"endnote\"),\n \"w:commentReference\": readCommentReference,\n \"w:br\": function(element) {\n var breakType = element.attributes[\"w:type\"];\n if (breakType == null || breakType === \"textWrapping\") {\n return elementResult(documents.lineBreak);\n } else if (breakType === \"page\") {\n return elementResult(documents.pageBreak);\n } else if (breakType === \"column\") {\n return elementResult(documents.columnBreak);\n } else {\n return emptyResultWithMessages([warning(\"Unsupported break type: \" + breakType)]);\n }\n },\n \"w:bookmarkStart\": function(element){\n var name = element.attributes[\"w:name\"];\n if (name === \"_GoBack\") {\n return emptyResult();\n } else {\n return elementResult(new documents.BookmarkStart({name: name}));\n }\n },\n\n \"mc:AlternateContent\": function(element) {\n return readChildElements(element.firstOrEmpty(\"mc:Fallback\"));\n },\n\n \"w:sdt\": function(element) {\n var contentResult = readXmlElements(element.firstOrEmpty(\"w:sdtContent\").children);\n return contentResult.map(function(content) {\n // From the WordML standard: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/3350cb64-931f-41f7-8824-f18b2568ce66\n //\n // > A CT_SdtCheckbox element that specifies that the parent\n // > structured document tag is a checkbox when displayed in the\n // > document. The parent structured document tag contents MUST\n // > contain a single character and optionally an additional\n // > character in a deleted run.\n\n var checkbox = element\n .firstOrEmpty(\"w:sdtPr\")\n .first(\"wordml:checkbox\");\n\n if (checkbox) {\n var checkedElement = checkbox.first(\"wordml:checked\");\n var isChecked = !!checkedElement && readBooleanAttributeValue(\n checkedElement.attributes[\"wordml:val\"]\n );\n var documentCheckbox = documents.checkbox({\n checked: isChecked\n });\n\n var hasCheckbox = false;\n var replacedContent = content.map(transforms._elementsOfType(\n documents.types.text,\n function(text) {\n if (text.value.length > 0 && !hasCheckbox) {\n hasCheckbox = true;\n return documentCheckbox;\n } else {\n return text;\n }\n }\n ));\n\n if (hasCheckbox) {\n return replacedContent;\n } else {\n return documentCheckbox;\n }\n\n } else {\n return content;\n }\n });\n },\n\n \"w:ins\": readChildElements,\n \"w:object\": readChildElements,\n \"w:smartTag\": readChildElements,\n \"w:drawing\": readChildElements,\n \"w:pict\": function(element) {\n return readChildElements(element).toExtra();\n },\n \"v:roundrect\": readChildElements,\n \"v:shape\": readChildElements,\n \"v:textbox\": readChildElements,\n \"w:txbxContent\": readChildElements,\n \"wp:inline\": readDrawingElement,\n \"wp:anchor\": readDrawingElement,\n \"v:imagedata\": readImageData,\n \"v:group\": readChildElements,\n \"v:rect\": readChildElements\n };\n\n return {\n readXmlElement: readXmlElement,\n readXmlElements: readXmlElements\n };\n\n\n function readTable(element) {\n var propertiesResult = readTableProperties(element.firstOrEmpty(\"w:tblPr\"));\n return readXmlElements(element.children)\n .flatMap(calculateRowSpans)\n .flatMap(function(children) {\n return propertiesResult.map(function(properties) {\n return documents.Table(children, properties);\n });\n });\n }\n\n function readTableProperties(element) {\n return readTableStyle(element).map(function(style) {\n return {\n styleId: style.styleId,\n styleName: style.name\n };\n });\n }\n\n function readTableRow(element) {\n var properties = element.firstOrEmpty(\"w:trPr\");\n\n // See 17.13.5.12 del (Deleted Table Row) of ECMA-376 4th edition Part 1\n var isDeleted = !!properties.first(\"w:del\");\n if (isDeleted) {\n return emptyResult();\n }\n\n var isHeader = !!properties.first(\"w:tblHeader\");\n return readXmlElements(element.children).map(function(children) {\n return documents.TableRow(children, {isHeader: isHeader});\n });\n }\n\n function readTableCell(element) {\n return readXmlElements(element.children).map(function(children) {\n var properties = element.firstOrEmpty(\"w:tcPr\");\n\n var gridSpan = properties.firstOrEmpty(\"w:gridSpan\").attributes[\"w:val\"];\n var colSpan = gridSpan ? parseInt(gridSpan, 10) : 1;\n\n var cell = documents.TableCell(children, {colSpan: colSpan});\n cell._vMerge = readVMerge(properties);\n return cell;\n });\n }\n\n function readVMerge(properties) {\n var element = properties.first(\"w:vMerge\");\n if (element) {\n var val = element.attributes[\"w:val\"];\n return val === \"continue\" || !val;\n } else {\n return null;\n }\n }\n\n function calculateRowSpans(rows) {\n var unexpectedNonRows = _.any(rows, function(row) {\n return row.type !== documents.types.tableRow;\n });\n if (unexpectedNonRows) {\n removeVMergeProperties(rows);\n return elementResultWithMessages(rows, [warning(\n \"unexpected non-row element in table, cell merging may be incorrect\"\n )]);\n }\n var unexpectedNonCells = _.any(rows, function(row) {\n return _.any(row.children, function(cell) {\n return cell.type !== documents.types.tableCell;\n });\n });\n if (unexpectedNonCells) {\n removeVMergeProperties(rows);\n return elementResultWithMessages(rows, [warning(\n \"unexpected non-cell element in table row, cell merging may be incorrect\"\n )]);\n }\n\n var columns = {};\n\n rows.forEach(function(row) {\n var cellIndex = 0;\n row.children.forEach(function(cell) {\n if (cell._vMerge && columns[cellIndex]) {\n columns[cellIndex].rowSpan++;\n } else {\n columns[cellIndex] = cell;\n cell._vMerge = false;\n }\n cellIndex += cell.colSpan;\n });\n });\n\n rows.forEach(function(row) {\n row.children = row.children.filter(function(cell) {\n return !cell._vMerge;\n });\n row.children.forEach(function(cell) {\n delete cell._vMerge;\n });\n });\n\n return elementResult(rows);\n }\n\n function removeVMergeProperties(rows) {\n rows.forEach(function(row) {\n var cells = transforms.getDescendantsOfType(row, documents.types.tableCell);\n cells.forEach(function(cell) {\n delete cell._vMerge;\n });\n });\n }\n\n function readDrawingElement(element) {\n var blips = element\n .getElementsByTagName(\"a:graphic\")\n .getElementsByTagName(\"a:graphicData\")\n .getElementsByTagName(\"pic:pic\")\n .getElementsByTagName(\"pic:blipFill\")\n .getElementsByTagName(\"a:blip\");\n\n return combineResults(blips.map(readBlip.bind(null, element)));\n }\n\n function readBlip(element, blip) {\n var properties = element.first(\"wp:docPr\").attributes;\n var altText = isBlank(properties.descr) ? properties.title : properties.descr;\n var blipImageFile = findBlipImageFile(blip);\n if (blipImageFile === null) {\n return emptyResultWithMessages([warning(\"Could not find image file for a:blip element\")]);\n } else {\n return readImage(blipImageFile, altText);\n }\n }\n\n function isBlank(value) {\n return value == null || /^\\s*$/.test(value);\n }\n\n function findBlipImageFile(blip) {\n var embedRelationshipId = blip.attributes[\"r:embed\"];\n var linkRelationshipId = blip.attributes[\"r:link\"];\n if (embedRelationshipId) {\n return findEmbeddedImageFile(embedRelationshipId);\n } else if (linkRelationshipId) {\n var imagePath = relationships.findTargetByRelationshipId(linkRelationshipId);\n return {\n path: imagePath,\n read: files.read.bind(files, imagePath)\n };\n } else {\n return null;\n }\n }\n\n function readImageData(element) {\n var relationshipId = element.attributes['r:id'];\n\n if (relationshipId) {\n return readImage(\n findEmbeddedImageFile(relationshipId),\n element.attributes[\"o:title\"]);\n } else {\n return emptyResultWithMessages([warning(\"A v:imagedata element without a relationship ID was ignored\")]);\n }\n }\n\n function findEmbeddedImageFile(relationshipId) {\n var path = uris.uriToZipEntryName(\"word\", relationships.findTargetByRelationshipId(relationshipId));\n return {\n path: path,\n read: docxFile.read.bind(docxFile, path)\n };\n }\n\n function readImage(imageFile, altText) {\n var contentType = contentTypes.findContentType(imageFile.path);\n\n var image = documents.Image({\n readImage: imageFile.read,\n altText: altText,\n contentType: contentType\n });\n var warnings = supportedImageTypes[contentType] ?\n [] : warning(\"Image of type \" + contentType + \" is unlikely to display in web browsers\");\n return elementResultWithMessages(image, warnings);\n }\n\n function undefinedStyleWarning(type, styleId) {\n return warning(\n type + \" style with ID \" + styleId + \" was referenced but not defined in the document\");\n }\n}\n\n\nfunction readNumberingProperties(styleId, element, numbering) {\n var level = element.firstOrEmpty(\"w:ilvl\").attributes[\"w:val\"];\n var numId = element.firstOrEmpty(\"w:numId\").attributes[\"w:val\"];\n if (level !== undefined && numId !== undefined) {\n return numbering.findLevel(numId, level);\n }\n\n if (styleId != null) {\n var levelByStyleId = numbering.findLevelByParagraphStyleId(styleId);\n if (levelByStyleId != null) {\n return levelByStyleId;\n }\n }\n\n // Some malformed documents define numbering levels without an index, and\n // reference the numbering using a w:numPr element without a w:ilvl child.\n // To handle such cases, we assume a level of 0 as a fallback.\n if (numId !== undefined) {\n return numbering.findLevel(numId, \"0\");\n }\n\n return null;\n}\n\nvar supportedImageTypes = {\n \"image/png\": true,\n \"image/gif\": true,\n \"image/jpeg\": true,\n \"image/svg+xml\": true,\n \"image/tiff\": true\n};\n\nvar ignoreElements = {\n \"office-word:wrap\": true,\n \"v:shadow\": true,\n \"v:shapetype\": true,\n \"w:annotationRef\": true,\n \"w:bookmarkEnd\": true,\n \"w:sectPr\": true,\n \"w:proofErr\": true,\n \"w:lastRenderedPageBreak\": true,\n \"w:commentRangeStart\": true,\n \"w:commentRangeEnd\": true,\n \"w:del\": true,\n \"w:footnoteRef\": true,\n \"w:endnoteRef\": true,\n \"w:pPr\": true,\n \"w:rPr\": true,\n \"w:tblPr\": true,\n \"w:tblGrid\": true,\n \"w:trPr\": true,\n \"w:tcPr\": true\n};\n\nfunction emptyResultWithMessages(messages) {\n return new ReadResult(null, null, messages);\n}\n\nfunction emptyResult() {\n return new ReadResult(null);\n}\n\nfunction elementResult(element) {\n return new ReadResult(element);\n}\n\nfunction elementResultWithMessages(element, messages) {\n return new ReadResult(element, null, messages);\n}\n\nfunction ReadResult(element, extra, messages) {\n this.value = element || [];\n this.extra = extra || [];\n this._result = new Result({\n element: this.value,\n extra: extra\n }, messages);\n this.messages = this._result.messages;\n}\n\nReadResult.prototype.toExtra = function() {\n return new ReadResult(null, joinElements(this.extra, this.value), this.messages);\n};\n\nReadResult.prototype.insertExtra = function() {\n var extra = this.extra;\n if (extra && extra.length) {\n return new ReadResult(joinElements(this.value, extra), null, this.messages);\n } else {\n return this;\n }\n};\n\nReadResult.prototype.map = function(func) {\n var result = this._result.map(function(value) {\n return func(value.element);\n });\n return new ReadResult(result.value, this.extra, result.messages);\n};\n\nReadResult.prototype.flatMap = function(func) {\n var result = this._result.flatMap(function(value) {\n return func(value.element)._result;\n });\n return new ReadResult(result.value.element, joinElements(this.extra, result.value.extra), result.messages);\n};\n\nReadResult.map = function(first, second, func) {\n return new ReadResult(\n func(first.value, second.value),\n joinElements(first.extra, second.extra),\n first.messages.concat(second.messages)\n );\n};\n\nfunction combineResults(results) {\n var result = Result.combine(_.pluck(results, \"_result\"));\n return new ReadResult(\n _.flatten(_.pluck(result.value, \"element\")),\n _.filter(_.flatten(_.pluck(result.value, \"extra\")), identity),\n result.messages\n );\n}\n\nfunction joinElements(first, second) {\n return _.flatten([first, second]);\n}\n\nfunction identity(value) {\n return value;\n}\n","exports.DocumentXmlReader = DocumentXmlReader;\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\n\nfunction DocumentXmlReader(options) {\n var bodyReader = options.bodyReader;\n\n function convertXmlToDocument(element) {\n var body = element.first(\"w:body\");\n\n if (body == null) {\n throw new Error(\"Could not find the body element: are you sure this is a docx file?\");\n }\n\n var result = bodyReader.readXmlElements(body.children)\n .map(function(children) {\n return new documents.Document(children, {\n notes: options.notes,\n comments: options.comments\n });\n });\n return new Result(result.value, result.messages);\n }\n\n return {\n convertXmlToDocument: convertXmlToDocument\n };\n}\n","exports.readRelationships = readRelationships;\nexports.defaultValue = new Relationships([]);\nexports.Relationships = Relationships;\n\n\nfunction readRelationships(element) {\n var relationships = [];\n element.children.forEach(function(child) {\n if (child.name === \"relationships:Relationship\") {\n var relationship = {\n relationshipId: child.attributes.Id,\n target: child.attributes.Target,\n type: child.attributes.Type\n };\n relationships.push(relationship);\n }\n });\n return new Relationships(relationships);\n}\n\nfunction Relationships(relationships) {\n var targetsByRelationshipId = {};\n relationships.forEach(function(relationship) {\n targetsByRelationshipId[relationship.relationshipId] = relationship.target;\n });\n\n var targetsByType = {};\n relationships.forEach(function(relationship) {\n if (!targetsByType[relationship.type]) {\n targetsByType[relationship.type] = [];\n }\n targetsByType[relationship.type].push(relationship.target);\n });\n\n return {\n findTargetByRelationshipId: function(relationshipId) {\n return targetsByRelationshipId[relationshipId];\n },\n findTargetsByType: function(type) {\n return targetsByType[type] || [];\n }\n };\n}\n","exports.readContentTypesFromXml = readContentTypesFromXml;\n\nvar fallbackContentTypes = {\n \"png\": \"png\",\n \"gif\": \"gif\",\n \"jpeg\": \"jpeg\",\n \"jpg\": \"jpeg\",\n \"tif\": \"tiff\",\n \"tiff\": \"tiff\",\n \"bmp\": \"bmp\"\n};\n\nexports.defaultContentTypes = contentTypes({}, {});\n\n\nfunction readContentTypesFromXml(element) {\n var extensionDefaults = {};\n var overrides = {};\n \n element.children.forEach(function(child) {\n if (child.name === \"content-types:Default\") {\n extensionDefaults[child.attributes.Extension] = child.attributes.ContentType;\n }\n if (child.name === \"content-types:Override\") {\n var name = child.attributes.PartName;\n if (name.charAt(0) === \"/\") {\n name = name.substring(1);\n }\n overrides[name] = child.attributes.ContentType;\n }\n });\n return contentTypes(overrides, extensionDefaults);\n}\n\nfunction contentTypes(overrides, extensionDefaults) {\n return {\n findContentType: function(path) {\n var overrideContentType = overrides[path];\n if (overrideContentType) {\n return overrideContentType;\n } else {\n var pathParts = path.split(\".\");\n var extension = pathParts[pathParts.length - 1];\n if (extensionDefaults.hasOwnProperty(extension)) {\n return extensionDefaults[extension];\n } else {\n var fallback = fallbackContentTypes[extension.toLowerCase()];\n if (fallback) {\n return \"image/\" + fallback;\n } else {\n return null;\n }\n }\n }\n }\n };\n \n}\n","var _ = require(\"underscore\");\n\nexports.readNumberingXml = readNumberingXml;\nexports.Numbering = Numbering;\nexports.defaultNumbering = new Numbering({}, {});\n\nfunction Numbering(nums, abstractNums, styles) {\n var allLevels = _.flatten(_.values(abstractNums).map(function(abstractNum) {\n return _.values(abstractNum.levels);\n }));\n\n var levelsByParagraphStyleId = _.indexBy(\n allLevels.filter(function(level) {\n return level.paragraphStyleId != null;\n }),\n \"paragraphStyleId\"\n );\n\n function findLevel(numId, level) {\n var num = nums[numId];\n if (num) {\n var abstractNum = abstractNums[num.abstractNumId];\n if (!abstractNum) {\n return null;\n } else if (abstractNum.numStyleLink == null) {\n return abstractNums[num.abstractNumId].levels[level];\n } else {\n var style = styles.findNumberingStyleById(abstractNum.numStyleLink);\n return findLevel(style.numId, level);\n }\n } else {\n return null;\n }\n }\n\n function findLevelByParagraphStyleId(styleId) {\n return levelsByParagraphStyleId[styleId] || null;\n }\n\n return {\n findLevel: findLevel,\n findLevelByParagraphStyleId: findLevelByParagraphStyleId\n };\n}\n\nfunction readNumberingXml(root, options) {\n if (!options || !options.styles) {\n throw new Error(\"styles is missing\");\n }\n\n var abstractNums = readAbstractNums(root);\n var nums = readNums(root, abstractNums);\n return new Numbering(nums, abstractNums, options.styles);\n}\n\nfunction readAbstractNums(root) {\n var abstractNums = {};\n root.getElementsByTagName(\"w:abstractNum\").forEach(function(element) {\n var id = element.attributes[\"w:abstractNumId\"];\n abstractNums[id] = readAbstractNum(element);\n });\n return abstractNums;\n}\n\nfunction readAbstractNum(element) {\n var levels = {};\n\n // Some malformed documents define numbering levels without an index, and\n // reference the numbering using a w:numPr element without a w:ilvl child.\n // To handle such cases, we assume a level of 0 as a fallback.\n var levelWithoutIndex = null;\n\n element.getElementsByTagName(\"w:lvl\").forEach(function(levelElement) {\n var levelIndex = levelElement.attributes[\"w:ilvl\"];\n var numFmt = levelElement.firstOrEmpty(\"w:numFmt\").attributes[\"w:val\"];\n var isOrdered = numFmt !== \"bullet\";\n var paragraphStyleId = levelElement.firstOrEmpty(\"w:pStyle\").attributes[\"w:val\"];\n\n if (levelIndex === undefined) {\n levelWithoutIndex = {\n isOrdered: isOrdered,\n level: \"0\",\n paragraphStyleId: paragraphStyleId\n };\n } else {\n levels[levelIndex] = {\n isOrdered: isOrdered,\n level: levelIndex,\n paragraphStyleId: paragraphStyleId\n };\n }\n });\n\n if (levelWithoutIndex !== null && levels[levelWithoutIndex.level] === undefined) {\n levels[levelWithoutIndex.level] = levelWithoutIndex;\n }\n\n var numStyleLink = element.firstOrEmpty(\"w:numStyleLink\").attributes[\"w:val\"];\n\n return {levels: levels, numStyleLink: numStyleLink};\n}\n\nfunction readNums(root) {\n var nums = {};\n root.getElementsByTagName(\"w:num\").forEach(function(element) {\n var numId = element.attributes[\"w:numId\"];\n var abstractNumId = element.first(\"w:abstractNumId\").attributes[\"w:val\"];\n nums[numId] = {abstractNumId: abstractNumId};\n });\n return nums;\n}\n","exports.readStylesXml = readStylesXml;\nexports.Styles = Styles;\nexports.defaultStyles = new Styles({}, {});\n\nfunction Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles) {\n return {\n findParagraphStyleById: function(styleId) {\n return paragraphStyles[styleId];\n },\n findCharacterStyleById: function(styleId) {\n return characterStyles[styleId];\n },\n findTableStyleById: function(styleId) {\n return tableStyles[styleId];\n },\n findNumberingStyleById: function(styleId) {\n return numberingStyles[styleId];\n }\n };\n}\n\nStyles.EMPTY = new Styles({}, {}, {}, {});\n\nfunction readStylesXml(root) {\n var paragraphStyles = {};\n var characterStyles = {};\n var tableStyles = {};\n var numberingStyles = {};\n\n var styles = {\n \"paragraph\": paragraphStyles,\n \"character\": characterStyles,\n \"table\": tableStyles,\n \"numbering\": numberingStyles\n };\n\n root.getElementsByTagName(\"w:style\").forEach(function(styleElement) {\n var style = readStyleElement(styleElement);\n var styleSet = styles[style.type];\n\n // Per 17.7.4.17 style (Style Definition) of ECMA-376 4th edition Part 1:\n //\n // > If multiple style definitions each declare the same value for their\n // > styleId, then the first such instance shall keep its current\n // > identifier with all other instances being reassigned in any manner\n // > desired.\n //\n // For the purpose of conversion, there's no point holding onto styles\n // with reassigned style IDs, so we ignore such style definitions.\n\n if (styleSet && styleSet[style.styleId] === undefined) {\n styleSet[style.styleId] = style;\n }\n });\n\n return new Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles);\n}\n\nfunction readStyleElement(styleElement) {\n var type = styleElement.attributes[\"w:type\"];\n\n if (type === \"numbering\") {\n return readNumberingStyleElement(type, styleElement);\n } else {\n var styleId = readStyleId(styleElement);\n var name = styleName(styleElement);\n return {type: type, styleId: styleId, name: name};\n }\n}\n\nfunction styleName(styleElement) {\n var nameElement = styleElement.first(\"w:name\");\n return nameElement ? nameElement.attributes[\"w:val\"] : null;\n}\n\nfunction readNumberingStyleElement(type, styleElement) {\n var styleId = readStyleId(styleElement);\n\n var numId = styleElement\n .firstOrEmpty(\"w:pPr\")\n .firstOrEmpty(\"w:numPr\")\n .firstOrEmpty(\"w:numId\")\n .attributes[\"w:val\"];\n\n return {type: type, numId: numId, styleId: styleId};\n}\n\nfunction readStyleId(styleElement) {\n return styleElement.attributes[\"w:styleId\"];\n}\n","var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nexports.createFootnotesReader = createReader.bind(this, \"footnote\");\nexports.createEndnotesReader = createReader.bind(this, \"endnote\");\n\nfunction createReader(noteType, bodyReader) {\n function readNotesXml(element) {\n return Result.combine(element.getElementsByTagName(\"w:\" + noteType)\n .filter(isFootnoteElement)\n .map(readFootnoteElement));\n }\n\n function isFootnoteElement(element) {\n var type = element.attributes[\"w:type\"];\n return type !== \"continuationSeparator\" && type !== \"separator\";\n }\n\n function readFootnoteElement(footnoteElement) {\n var id = footnoteElement.attributes[\"w:id\"];\n return bodyReader.readXmlElements(footnoteElement.children)\n .map(function(body) {\n return documents.Note({noteType: noteType, noteId: id, body: body});\n });\n }\n \n return readNotesXml;\n}\n","var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nfunction createCommentsReader(bodyReader) {\n function readCommentsXml(element) {\n return Result.combine(element.getElementsByTagName(\"w:comment\")\n .map(readCommentElement));\n }\n\n function readCommentElement(element) {\n var id = element.attributes[\"w:id\"];\n\n function readOptionalAttribute(name) {\n return (element.attributes[name] || \"\").trim() || null;\n }\n\n return bodyReader.readXmlElements(element.children)\n .map(function(body) {\n return documents.comment({\n commentId: id,\n body: body,\n authorName: readOptionalAttribute(\"w:author\"),\n authorInitials: readOptionalAttribute(\"w:initials\")\n });\n });\n }\n \n return readCommentsXml;\n}\n\nexports.createCommentsReader = createCommentsReader;\n","var promises = require(\"../../lib/promises\");\n\nexports.Files = Files;\n\n\nfunction Files() {\n function read(uri) {\n return promises.reject(new Error(\"could not open external image: '\" + uri + \"'\\ncannot open linked files from a web browser\"));\n }\n \n return {\n read: read\n };\n}\n","exports.read = read;\nexports._findPartPaths = findPartPaths;\n\nvar promises = require(\"../promises\");\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar zipfile = require(\"../zipfile\");\n\nvar readXmlFromZipFile = require(\"./office-xml-reader\").readXmlFromZipFile;\nvar createBodyReader = require(\"./body-reader\").createBodyReader;\nvar DocumentXmlReader = require(\"./document-xml-reader\").DocumentXmlReader;\nvar relationshipsReader = require(\"./relationships-reader\");\nvar contentTypesReader = require(\"./content-types-reader\");\nvar numberingXml = require(\"./numbering-xml\");\nvar stylesReader = require(\"./styles-reader\");\nvar notesReader = require(\"./notes-reader\");\nvar commentsReader = require(\"./comments-reader\");\nvar Files = require(\"./files\").Files;\n\n\nfunction read(docxFile, input, options) {\n input = input || {};\n options = options || {};\n\n var files = new Files({\n externalFileAccess: options.externalFileAccess,\n relativeToFile: input.path\n });\n\n return promises.props({\n contentTypes: readContentTypesFromZipFile(docxFile),\n partPaths: findPartPaths(docxFile),\n docxFile: docxFile,\n files: files\n }).also(function(result) {\n return {\n styles: readStylesFromZipFile(docxFile, result.partPaths.styles)\n };\n }).also(function(result) {\n return {\n numbering: readNumberingFromZipFile(docxFile, result.partPaths.numbering, result.styles)\n };\n }).also(function(result) {\n return {\n footnotes: readXmlFileWithBody(result.partPaths.footnotes, result, function(bodyReader, xml) {\n if (xml) {\n return notesReader.createFootnotesReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n }),\n endnotes: readXmlFileWithBody(result.partPaths.endnotes, result, function(bodyReader, xml) {\n if (xml) {\n return notesReader.createEndnotesReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n }),\n comments: readXmlFileWithBody(result.partPaths.comments, result, function(bodyReader, xml) {\n if (xml) {\n return commentsReader.createCommentsReader(bodyReader)(xml);\n } else {\n return new Result([]);\n }\n })\n };\n }).also(function(result) {\n return {\n notes: result.footnotes.flatMap(function(footnotes) {\n return result.endnotes.map(function(endnotes) {\n return new documents.Notes(footnotes.concat(endnotes));\n });\n })\n };\n }).then(function(result) {\n return readXmlFileWithBody(result.partPaths.mainDocument, result, function(bodyReader, xml) {\n return result.notes.flatMap(function(notes) {\n return result.comments.flatMap(function(comments) {\n var reader = new DocumentXmlReader({\n bodyReader: bodyReader,\n notes: notes,\n comments: comments\n });\n return reader.convertXmlToDocument(xml);\n });\n });\n });\n });\n}\n\nfunction findPartPaths(docxFile) {\n return readPackageRelationships(docxFile).then(function(packageRelationships) {\n var mainDocumentPath = findPartPath({\n docxFile: docxFile,\n relationships: packageRelationships,\n relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n basePath: \"\",\n fallbackPath: \"word/document.xml\"\n });\n\n if (!docxFile.exists(mainDocumentPath)) {\n throw new Error(\"Could not find main document part. Are you sure this is a valid .docx file?\");\n }\n\n return xmlFileReader({\n filename: relationshipsFilename(mainDocumentPath),\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n })(docxFile).then(function(documentRelationships) {\n function findPartRelatedToMainDocument(name) {\n return findPartPath({\n docxFile: docxFile,\n relationships: documentRelationships,\n relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/\" + name,\n basePath: zipfile.splitPath(mainDocumentPath).dirname,\n fallbackPath: \"word/\" + name + \".xml\"\n });\n }\n\n return {\n mainDocument: mainDocumentPath,\n comments: findPartRelatedToMainDocument(\"comments\"),\n endnotes: findPartRelatedToMainDocument(\"endnotes\"),\n footnotes: findPartRelatedToMainDocument(\"footnotes\"),\n numbering: findPartRelatedToMainDocument(\"numbering\"),\n styles: findPartRelatedToMainDocument(\"styles\")\n };\n });\n });\n}\n\nfunction findPartPath(options) {\n var docxFile = options.docxFile;\n var relationships = options.relationships;\n var relationshipType = options.relationshipType;\n var basePath = options.basePath;\n var fallbackPath = options.fallbackPath;\n\n var targets = relationships.findTargetsByType(relationshipType);\n var normalisedTargets = targets.map(function(target) {\n return stripPrefix(zipfile.joinPath(basePath, target), \"/\");\n });\n var validTargets = normalisedTargets.filter(function(target) {\n return docxFile.exists(target);\n });\n if (validTargets.length === 0) {\n return fallbackPath;\n } else {\n return validTargets[0];\n }\n}\n\nfunction stripPrefix(value, prefix) {\n if (value.substring(0, prefix.length) === prefix) {\n return value.substring(prefix.length);\n } else {\n return value;\n }\n}\n\nfunction xmlFileReader(options) {\n return function(zipFile) {\n return readXmlFromZipFile(zipFile, options.filename)\n .then(function(element) {\n return element ? options.readElement(element) : options.defaultValue;\n });\n };\n}\n\nfunction readXmlFileWithBody(filename, options, func) {\n var readRelationshipsFromZipFile = xmlFileReader({\n filename: relationshipsFilename(filename),\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n });\n\n return readRelationshipsFromZipFile(options.docxFile).then(function(relationships) {\n var bodyReader = new createBodyReader({\n relationships: relationships,\n contentTypes: options.contentTypes,\n docxFile: options.docxFile,\n numbering: options.numbering,\n styles: options.styles,\n files: options.files\n });\n return readXmlFromZipFile(options.docxFile, filename)\n .then(function(xml) {\n return func(bodyReader, xml);\n });\n });\n}\n\nfunction relationshipsFilename(filename) {\n var split = zipfile.splitPath(filename);\n return zipfile.joinPath(split.dirname, \"_rels\", split.basename + \".rels\");\n}\n\nvar readContentTypesFromZipFile = xmlFileReader({\n filename: \"[Content_Types].xml\",\n readElement: contentTypesReader.readContentTypesFromXml,\n defaultValue: contentTypesReader.defaultContentTypes\n});\n\nfunction readNumberingFromZipFile(zipFile, path, styles) {\n return xmlFileReader({\n filename: path,\n readElement: function(element) {\n return numberingXml.readNumberingXml(element, {styles: styles});\n },\n defaultValue: numberingXml.defaultNumbering\n })(zipFile);\n}\n\nfunction readStylesFromZipFile(zipFile, path) {\n return xmlFileReader({\n filename: path,\n readElement: stylesReader.readStylesXml,\n defaultValue: stylesReader.defaultStyles\n })(zipFile);\n}\n\nvar readPackageRelationships = xmlFileReader({\n filename: \"_rels/.rels\",\n readElement: relationshipsReader.readRelationships,\n defaultValue: relationshipsReader.defaultValue\n});\n","var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\nexports.writeStyleMap = writeStyleMap;\nexports.readStyleMap = readStyleMap;\n\n\nvar schema = \"http://schemas.zwobble.org/mammoth/style-map\";\nvar styleMapPath = \"mammoth/style-map\";\nvar styleMapAbsolutePath = \"/\" + styleMapPath;\n\nfunction writeStyleMap(docxFile, styleMap) {\n docxFile.write(styleMapPath, styleMap);\n return updateRelationships(docxFile).then(function() {\n return updateContentTypes(docxFile);\n });\n}\n\nfunction updateRelationships(docxFile) {\n var path = \"word/_rels/document.xml.rels\";\n var relationshipsUri = \"http://schemas.openxmlformats.org/package/2006/relationships\";\n var relationshipElementName = \"{\" + relationshipsUri + \"}Relationship\";\n return docxFile.read(path, \"utf8\")\n .then(xml.readString)\n .then(function(relationshipsContainer) {\n var relationships = relationshipsContainer.children;\n addOrUpdateElement(relationships, relationshipElementName, \"Id\", {\n \"Id\": \"rMammothStyleMap\",\n \"Type\": schema,\n \"Target\": styleMapAbsolutePath\n });\n \n var namespaces = {\"\": relationshipsUri};\n return docxFile.write(path, xml.writeString(relationshipsContainer, namespaces));\n });\n}\n\nfunction updateContentTypes(docxFile) {\n var path = \"[Content_Types].xml\";\n var contentTypesUri = \"http://schemas.openxmlformats.org/package/2006/content-types\";\n var overrideName = \"{\" + contentTypesUri + \"}Override\";\n return docxFile.read(path, \"utf8\")\n .then(xml.readString)\n .then(function(typesElement) {\n var children = typesElement.children;\n addOrUpdateElement(children, overrideName, \"PartName\", {\n \"PartName\": styleMapAbsolutePath,\n \"ContentType\": \"text/prs.mammoth.style-map\"\n });\n var namespaces = {\"\": contentTypesUri};\n return docxFile.write(path, xml.writeString(typesElement, namespaces));\n });\n}\n\nfunction addOrUpdateElement(elements, name, identifyingAttribute, attributes) {\n var existingElement = _.find(elements, function(element) {\n return element.name === name &&\n element.attributes[identifyingAttribute] === attributes[identifyingAttribute];\n });\n if (existingElement) {\n existingElement.attributes = attributes;\n } else {\n elements.push(xml.element(name, attributes));\n }\n}\n\nfunction readStyleMap(docxFile) {\n if (docxFile.exists(styleMapPath)) {\n return docxFile.read(styleMapPath, \"utf8\");\n } else {\n return promises.resolve(null);\n }\n}\n","var htmlPaths = require(\"../styles/html-paths\");\n\n\nfunction nonFreshElement(tagName, attributes, children) {\n return elementWithTag(\n htmlPaths.element(tagName, attributes, {fresh: false}),\n children);\n}\n\nfunction freshElement(tagName, attributes, children) {\n var tag = htmlPaths.element(tagName, attributes, {fresh: true});\n return elementWithTag(tag, children);\n}\n\nfunction elementWithTag(tag, children) {\n return {\n type: \"element\",\n tag: tag,\n children: children || []\n };\n}\n\nfunction text(value) {\n return {\n type: \"text\",\n value: value\n };\n}\n\nvar forceWrite = {\n type: \"forceWrite\"\n};\n\nexports.freshElement = freshElement;\nexports.nonFreshElement = nonFreshElement;\nexports.elementWithTag = elementWithTag;\nexports.text = text;\nexports.forceWrite = forceWrite;\n\nvar voidTagNames = {\n \"br\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true\n};\n\nfunction isVoidElement(node) {\n return (node.children.length === 0) && voidTagNames[node.tag.tagName];\n}\n\nexports.isVoidElement = isVoidElement;\n","var _ = require(\"underscore\");\n\nvar ast = require(\"./ast\");\n\nfunction simplify(nodes) {\n return collapse(removeEmpty(nodes));\n}\n\nfunction collapse(nodes) {\n var children = [];\n \n nodes.map(collapseNode).forEach(function(child) {\n appendChild(children, child);\n });\n return children;\n}\n\nfunction collapseNode(node) {\n return collapsers[node.type](node);\n}\n\nvar collapsers = {\n element: collapseElement,\n text: identity,\n forceWrite: identity\n};\n\nfunction collapseElement(node) {\n return ast.elementWithTag(node.tag, collapse(node.children));\n}\n\nfunction identity(value) {\n return value;\n}\n\nfunction appendChild(children, child) {\n var lastChild = children[children.length - 1];\n if (child.type === \"element\" && !child.tag.fresh && lastChild && lastChild.type === \"element\" && child.tag.matchesElement(lastChild.tag)) {\n if (child.tag.separator) {\n appendChild(lastChild.children, ast.text(child.tag.separator));\n }\n child.children.forEach(function(grandChild) {\n // Mutation is fine since simplifying elements create a copy of the children.\n appendChild(lastChild.children, grandChild);\n });\n } else {\n children.push(child);\n }\n}\n\nfunction removeEmpty(nodes) {\n return flatMap(nodes, function(node) {\n return emptiers[node.type](node);\n });\n}\n\nfunction flatMap(values, func) {\n return _.flatten(_.map(values, func), true);\n}\n\nvar emptiers = {\n element: elementEmptier,\n text: textEmptier,\n forceWrite: neverEmpty\n};\n\nfunction neverEmpty(node) {\n return [node];\n}\n\nfunction elementEmptier(element) {\n var children = removeEmpty(element.children);\n if (children.length === 0 && !ast.isVoidElement(element)) {\n return [];\n } else {\n return [ast.elementWithTag(element.tag, children)];\n }\n}\n\nfunction textEmptier(node) {\n if (node.value.length === 0) {\n return [];\n } else {\n return [node];\n }\n}\n\nmodule.exports = simplify;\n","var ast = require(\"./ast\");\n\nexports.freshElement = ast.freshElement;\nexports.nonFreshElement = ast.nonFreshElement;\nexports.elementWithTag = ast.elementWithTag;\nexports.text = ast.text;\nexports.forceWrite = ast.forceWrite;\n\nexports.simplify = require(\"./simplify\");\n\nfunction write(writer, nodes) {\n nodes.forEach(function(node) {\n writeNode(writer, node);\n });\n}\n\nfunction writeNode(writer, node) {\n toStrings[node.type](writer, node);\n}\n\nvar toStrings = {\n element: generateElementString,\n text: generateTextString,\n forceWrite: function() { }\n};\n\nfunction generateElementString(writer, node) {\n if (ast.isVoidElement(node)) {\n writer.selfClosing(node.tag.tagName, node.tag.attributes);\n } else {\n writer.open(node.tag.tagName, node.tag.attributes);\n write(writer, node.children);\n writer.close(node.tag.tagName);\n }\n}\n\nfunction generateTextString(writer, node) {\n writer.text(node.value);\n}\n\nexports.write = write;\n","var _ = require(\"underscore\");\n\nvar html = require(\"../html\");\n\nexports.topLevelElement = topLevelElement;\nexports.elements = elements;\nexports.element = element;\n\nfunction topLevelElement(tagName, attributes) {\n return elements([element(tagName, attributes, {fresh: true})]);\n}\n\nfunction elements(elementStyles) {\n return new HtmlPath(elementStyles.map(function(elementStyle) {\n if (_.isString(elementStyle)) {\n return element(elementStyle);\n } else {\n return elementStyle;\n }\n }));\n}\n\nfunction HtmlPath(elements) {\n this._elements = elements;\n}\n\nHtmlPath.prototype.wrap = function wrap(children) {\n var result = children();\n for (var index = this._elements.length - 1; index >= 0; index--) {\n result = this._elements[index].wrapNodes(result);\n }\n return result;\n};\n\nfunction element(tagName, attributes, options) {\n options = options || {};\n return new Element(tagName, attributes, options);\n}\n\nfunction Element(tagName, attributes, options) {\n var tagNames = {};\n if (_.isArray(tagName)) {\n tagName.forEach(function(tagName) {\n tagNames[tagName] = true;\n });\n tagName = tagName[0];\n } else {\n tagNames[tagName] = true;\n }\n \n this.tagName = tagName;\n this.tagNames = tagNames;\n this.attributes = attributes || {};\n this.fresh = options.fresh;\n this.separator = options.separator;\n}\n\nElement.prototype.matchesElement = function(element) {\n return this.tagNames[element.tagName] && _.isEqual(this.attributes || {}, element.attributes || {});\n};\n\nElement.prototype.wrap = function wrap(generateNodes) {\n return this.wrapNodes(generateNodes());\n};\n\nElement.prototype.wrapNodes = function wrapNodes(nodes) {\n return [html.elementWithTag(this, nodes)];\n};\n\nexports.empty = elements([]);\nexports.ignore = {\n wrap: function() {\n return [];\n }\n};\n","var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar Html = require(\"./html\");\n\nexports.imgElement = imgElement;\n\nfunction imgElement(func) {\n return function(element, messages) {\n return promises.when(func(element)).then(function(result) {\n var attributes = {};\n if (element.altText) {\n attributes.alt = element.altText;\n }\n _.extend(attributes, result);\n\n return [Html.freshElement(\"img\", attributes)];\n });\n };\n}\n\n// Undocumented, but retained for backwards-compatibility with 0.3.x\nexports.inline = exports.imgElement;\n\nexports.dataUri = imgElement(function(element) {\n return element.readAsBase64String().then(function(imageBuffer) {\n return {\n src: \"data:\" + element.contentType + \";base64,\" + imageBuffer\n };\n });\n});\n","var _ = require(\"underscore\");\n\nexports.writer = writer;\n\nfunction writer(options) {\n options = options || {};\n if (options.prettyPrint) {\n return prettyWriter();\n } else {\n return simpleWriter();\n }\n}\n\n\nvar indentedElements = {\n div: true,\n p: true,\n ul: true,\n li: true\n};\n\n\nfunction prettyWriter() {\n var indentationLevel = 0;\n var indentation = \" \";\n var stack = [];\n var start = true;\n var inText = false;\n\n var writer = simpleWriter();\n\n function open(tagName, attributes) {\n if (indentedElements[tagName]) {\n indent();\n }\n stack.push(tagName);\n writer.open(tagName, attributes);\n if (indentedElements[tagName]) {\n indentationLevel++;\n }\n start = false;\n }\n\n function close(tagName) {\n if (indentedElements[tagName]) {\n indentationLevel--;\n indent();\n }\n stack.pop();\n writer.close(tagName);\n }\n\n function text(value) {\n startText();\n var text = isInPre() ? value : value.replace(\"\\n\", \"\\n\" + indentation);\n writer.text(text);\n }\n\n function selfClosing(tagName, attributes) {\n indent();\n writer.selfClosing(tagName, attributes);\n }\n\n function insideIndentedElement() {\n return stack.length === 0 || indentedElements[stack[stack.length - 1]];\n }\n\n function startText() {\n if (!inText) {\n indent();\n inText = true;\n }\n }\n\n function indent() {\n inText = false;\n if (!start && insideIndentedElement() && !isInPre()) {\n writer._append(\"\\n\");\n for (var i = 0; i < indentationLevel; i++) {\n writer._append(indentation);\n }\n }\n }\n\n function isInPre() {\n return _.some(stack, function(tagName) {\n return tagName === \"pre\";\n });\n }\n\n return {\n asString: writer.asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing\n };\n}\n\n\nfunction simpleWriter() {\n var fragments = [];\n\n function open(tagName, attributes) {\n var attributeString = generateAttributeString(attributes);\n fragments.push(\"<\" + tagName + attributeString + \">\");\n }\n\n function close(tagName) {\n fragments.push(\"\");\n }\n\n function selfClosing(tagName, attributes) {\n var attributeString = generateAttributeString(attributes);\n fragments.push(\"<\" + tagName + attributeString + \" />\");\n }\n\n function generateAttributeString(attributes) {\n return _.map(attributes, function(value, key) {\n return \" \" + key + '=\"' + escapeHtmlAttribute(value) + '\"';\n }).join(\"\");\n }\n\n function text(value) {\n fragments.push(escapeHtmlText(value));\n }\n\n function append(html) {\n fragments.push(html);\n }\n\n function asString() {\n return fragments.join(\"\");\n }\n\n return {\n asString: asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing,\n _append: append\n };\n}\n\nfunction escapeHtmlText(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>');\n}\n\nfunction escapeHtmlAttribute(value) {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(//g, '>');\n}\n","var _ = require(\"underscore\");\n\n\nfunction symmetricMarkdownElement(end) {\n return markdownElement(end, end);\n}\n\nfunction markdownElement(start, end) {\n return function() {\n return {start: start, end: end};\n };\n}\n\nfunction markdownLink(attributes) {\n var href = attributes.href || \"\";\n if (href) {\n return {\n start: \"[\",\n end: \"](\" + href + \")\",\n anchorPosition: \"before\"\n };\n } else {\n return {};\n }\n}\n\nfunction markdownImage(attributes) {\n var src = attributes.src || \"\";\n var altText = attributes.alt || \"\";\n if (src || altText) {\n return {start: \"![\" + altText + \"](\" + src + \")\"};\n } else {\n return {};\n }\n}\n\nfunction markdownList(options) {\n return function(attributes, list) {\n return {\n start: list ? \"\\n\" : \"\",\n end: list ? \"\" : \"\\n\",\n list: {\n isOrdered: options.isOrdered,\n indent: list ? list.indent + 1 : 0,\n count: 0\n }\n };\n };\n}\n\nfunction markdownListItem(attributes, list, listItem) {\n list = list || {indent: 0, isOrdered: false, count: 0};\n list.count++;\n listItem.hasClosed = false;\n \n var bullet = list.isOrdered ? list.count + \".\" : \"-\";\n var start = repeatString(\"\\t\", list.indent) + bullet + \" \";\n \n return {\n start: start,\n end: function() {\n if (!listItem.hasClosed) {\n listItem.hasClosed = true;\n return \"\\n\";\n }\n }\n };\n}\n\nvar htmlToMarkdown = {\n \"p\": markdownElement(\"\", \"\\n\\n\"),\n \"br\": markdownElement(\"\", \" \\n\"),\n \"ul\": markdownList({isOrdered: false}),\n \"ol\": markdownList({isOrdered: true}),\n \"li\": markdownListItem,\n \"strong\": symmetricMarkdownElement(\"__\"),\n \"em\": symmetricMarkdownElement(\"*\"),\n \"a\": markdownLink,\n \"img\": markdownImage\n};\n\n(function() {\n for (var i = 1; i <= 6; i++) {\n htmlToMarkdown[\"h\" + i] = markdownElement(repeatString(\"#\", i) + \" \", \"\\n\\n\");\n }\n})();\n\nfunction repeatString(value, count) {\n return new Array(count + 1).join(value);\n}\n\nfunction markdownWriter() {\n var fragments = [];\n var elementStack = [];\n var list = null;\n var listItem = {};\n \n function open(tagName, attributes) {\n attributes = attributes || {};\n \n var createElement = htmlToMarkdown[tagName] || function() {\n return {};\n };\n var element = createElement(attributes, list, listItem);\n elementStack.push({end: element.end, list: list});\n \n if (element.list) {\n list = element.list;\n }\n \n var anchorBeforeStart = element.anchorPosition === \"before\";\n if (anchorBeforeStart) {\n writeAnchor(attributes);\n }\n\n fragments.push(element.start || \"\");\n if (!anchorBeforeStart) {\n writeAnchor(attributes);\n }\n }\n \n function writeAnchor(attributes) {\n if (attributes.id) {\n fragments.push('');\n }\n }\n \n function close(tagName) {\n var element = elementStack.pop();\n list = element.list;\n var end = _.isFunction(element.end) ? element.end() : element.end;\n fragments.push(end || \"\");\n }\n \n function selfClosing(tagName, attributes) {\n open(tagName, attributes);\n close(tagName);\n }\n \n function text(value) {\n fragments.push(escapeMarkdown(value));\n }\n \n function asString() {\n return fragments.join(\"\");\n }\n\n return {\n asString: asString,\n open: open,\n close: close,\n text: text,\n selfClosing: selfClosing\n };\n}\n\nexports.writer = markdownWriter;\n\nfunction escapeMarkdown(value) {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/([\\`\\*_\\{\\}\\[\\]\\(\\)\\#\\+\\-\\.\\!])/g, '\\\\$1');\n}\n","var htmlWriter = require(\"./html-writer\");\nvar markdownWriter = require(\"./markdown-writer\");\n\nexports.writer = writer;\n\n\nfunction writer(options) {\n options = options || {};\n if (options.outputFormat === \"markdown\") {\n return markdownWriter.writer();\n } else {\n return htmlWriter.writer(options);\n }\n}\n","var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar documents = require(\"./documents\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar results = require(\"./results\");\nvar images = require(\"./images\");\nvar Html = require(\"./html\");\nvar writers = require(\"./writers\");\n\nexports.DocumentConverter = DocumentConverter;\n\n\nfunction DocumentConverter(options) {\n return {\n convertToHtml: function(element) {\n var comments = _.indexBy(\n element.type === documents.types.document ? element.comments : [],\n \"commentId\"\n );\n var conversion = new DocumentConversion(options, comments);\n return conversion.convertToHtml(element);\n }\n };\n}\n\nfunction DocumentConversion(options, comments) {\n var noteNumber = 1;\n\n var noteReferences = [];\n\n var referencedComments = [];\n\n options = _.extend({ignoreEmptyParagraphs: true}, options);\n var idPrefix = options.idPrefix === undefined ? \"\" : options.idPrefix;\n var ignoreEmptyParagraphs = options.ignoreEmptyParagraphs;\n\n var defaultParagraphStyle = htmlPaths.topLevelElement(\"p\");\n\n var styleMap = options.styleMap || [];\n\n function convertToHtml(document) {\n var messages = [];\n\n var html = elementToHtml(document, messages, {});\n\n var deferredNodes = [];\n walkHtml(html, function(node) {\n if (node.type === \"deferred\") {\n deferredNodes.push(node);\n }\n });\n var deferredValues = {};\n return promises.mapSeries(deferredNodes, function(deferred) {\n return deferred.value().then(function(value) {\n deferredValues[deferred.id] = value;\n });\n }).then(function() {\n function replaceDeferred(nodes) {\n return flatMap(nodes, function(node) {\n if (node.type === \"deferred\") {\n return deferredValues[node.id];\n } else if (node.children) {\n return [\n _.extend({}, node, {\n children: replaceDeferred(node.children)\n })\n ];\n } else {\n return [node];\n }\n });\n }\n var writer = writers.writer({\n prettyPrint: options.prettyPrint,\n outputFormat: options.outputFormat\n });\n Html.write(writer, Html.simplify(replaceDeferred(html)));\n return new results.Result(writer.asString(), messages);\n });\n }\n\n function convertElements(elements, messages, options) {\n return flatMap(elements, function(element) {\n return elementToHtml(element, messages, options);\n });\n }\n\n function elementToHtml(element, messages, options) {\n if (!options) {\n throw new Error(\"options not set\");\n }\n var handler = elementConverters[element.type];\n if (handler) {\n return handler(element, messages, options);\n } else {\n return [];\n }\n }\n\n function convertParagraph(element, messages, options) {\n return htmlPathForParagraph(element, messages).wrap(function() {\n var content = convertElements(element.children, messages, options);\n if (ignoreEmptyParagraphs) {\n return content;\n } else {\n return [Html.forceWrite].concat(content);\n }\n });\n }\n\n function htmlPathForParagraph(element, messages) {\n var style = findStyle(element);\n\n if (style) {\n return style.to;\n } else {\n if (element.styleId) {\n messages.push(unrecognisedStyleWarning(\"paragraph\", element));\n }\n return defaultParagraphStyle;\n }\n }\n\n function convertRun(run, messages, options) {\n var nodes = function() {\n return convertElements(run.children, messages, options);\n };\n var paths = [];\n if (run.highlight !== null) {\n var path = findHtmlPath({type: \"highlight\", color: run.highlight});\n if (path) {\n paths.push(path);\n }\n }\n if (run.isSmallCaps) {\n paths.push(findHtmlPathForRunProperty(\"smallCaps\"));\n }\n if (run.isAllCaps) {\n paths.push(findHtmlPathForRunProperty(\"allCaps\"));\n }\n if (run.isStrikethrough) {\n paths.push(findHtmlPathForRunProperty(\"strikethrough\", \"s\"));\n }\n if (run.isUnderline) {\n paths.push(findHtmlPathForRunProperty(\"underline\"));\n }\n if (run.verticalAlignment === documents.verticalAlignment.subscript) {\n paths.push(htmlPaths.element(\"sub\", {}, {fresh: false}));\n }\n if (run.verticalAlignment === documents.verticalAlignment.superscript) {\n paths.push(htmlPaths.element(\"sup\", {}, {fresh: false}));\n }\n if (run.isItalic) {\n paths.push(findHtmlPathForRunProperty(\"italic\", \"em\"));\n }\n if (run.isBold) {\n paths.push(findHtmlPathForRunProperty(\"bold\", \"strong\"));\n }\n var stylePath = htmlPaths.empty;\n var style = findStyle(run);\n if (style) {\n stylePath = style.to;\n } else if (run.styleId) {\n messages.push(unrecognisedStyleWarning(\"run\", run));\n }\n paths.push(stylePath);\n\n paths.forEach(function(path) {\n nodes = path.wrap.bind(path, nodes);\n });\n\n return nodes();\n }\n\n function findHtmlPathForRunProperty(elementType, defaultTagName) {\n var path = findHtmlPath({type: elementType});\n if (path) {\n return path;\n } else if (defaultTagName) {\n return htmlPaths.element(defaultTagName, {}, {fresh: false});\n } else {\n return htmlPaths.empty;\n }\n }\n\n function findHtmlPath(element, defaultPath) {\n var style = findStyle(element);\n return style ? style.to : defaultPath;\n }\n\n function findStyle(element) {\n for (var i = 0; i < styleMap.length; i++) {\n if (styleMap[i].from.matches(element)) {\n return styleMap[i];\n }\n }\n }\n\n function recoveringConvertImage(convertImage) {\n return function(image, messages) {\n return promises.attempt(function() {\n return convertImage(image, messages);\n }).caught(function(error) {\n messages.push(results.error(error));\n return [];\n });\n };\n }\n\n function noteHtmlId(note) {\n return referentHtmlId(note.noteType, note.noteId);\n }\n\n function noteRefHtmlId(note) {\n return referenceHtmlId(note.noteType, note.noteId);\n }\n\n function referentHtmlId(referenceType, referenceId) {\n return htmlId(referenceType + \"-\" + referenceId);\n }\n\n function referenceHtmlId(referenceType, referenceId) {\n return htmlId(referenceType + \"-ref-\" + referenceId);\n }\n\n function htmlId(suffix) {\n return idPrefix + suffix;\n }\n\n var defaultTablePath = htmlPaths.elements([\n htmlPaths.element(\"table\", {}, {fresh: true})\n ]);\n\n function convertTable(element, messages, options) {\n return findHtmlPath(element, defaultTablePath).wrap(function() {\n return convertTableChildren(element, messages, options);\n });\n }\n\n function convertTableChildren(element, messages, options) {\n var bodyIndex = _.findIndex(element.children, function(child) {\n return !child.type === documents.types.tableRow || !child.isHeader;\n });\n if (bodyIndex === -1) {\n bodyIndex = element.children.length;\n }\n var children;\n if (bodyIndex === 0) {\n children = convertElements(\n element.children,\n messages,\n _.extend({}, options, {isTableHeader: false})\n );\n } else {\n var headRows = convertElements(\n element.children.slice(0, bodyIndex),\n messages,\n _.extend({}, options, {isTableHeader: true})\n );\n var bodyRows = convertElements(\n element.children.slice(bodyIndex),\n messages,\n _.extend({}, options, {isTableHeader: false})\n );\n children = [\n Html.freshElement(\"thead\", {}, headRows),\n Html.freshElement(\"tbody\", {}, bodyRows)\n ];\n }\n return [Html.forceWrite].concat(children);\n }\n\n function convertTableRow(element, messages, options) {\n var children = convertElements(element.children, messages, options);\n return [\n Html.freshElement(\"tr\", {}, [Html.forceWrite].concat(children))\n ];\n }\n\n function convertTableCell(element, messages, options) {\n var tagName = options.isTableHeader ? \"th\" : \"td\";\n var children = convertElements(element.children, messages, options);\n var attributes = {};\n if (element.colSpan !== 1) {\n attributes.colspan = element.colSpan.toString();\n }\n if (element.rowSpan !== 1) {\n attributes.rowspan = element.rowSpan.toString();\n }\n\n return [\n Html.freshElement(tagName, attributes, [Html.forceWrite].concat(children))\n ];\n }\n\n function convertCommentReference(reference, messages, options) {\n return findHtmlPath(reference, htmlPaths.ignore).wrap(function() {\n var comment = comments[reference.commentId];\n var count = referencedComments.length + 1;\n var label = \"[\" + commentAuthorLabel(comment) + count + \"]\";\n referencedComments.push({label: label, comment: comment});\n // TODO: remove duplication with note references\n return [\n Html.freshElement(\"a\", {\n href: \"#\" + referentHtmlId(\"comment\", reference.commentId),\n id: referenceHtmlId(\"comment\", reference.commentId)\n }, [Html.text(label)])\n ];\n });\n }\n\n function convertComment(referencedComment, messages, options) {\n // TODO: remove duplication with note references\n\n var label = referencedComment.label;\n var comment = referencedComment.comment;\n var body = convertElements(comment.body, messages, options).concat([\n Html.nonFreshElement(\"p\", {}, [\n Html.text(\" \"),\n Html.freshElement(\"a\", {\"href\": \"#\" + referenceHtmlId(\"comment\", comment.commentId)}, [\n Html.text(\"↑\")\n ])\n ])\n ]);\n\n return [\n Html.freshElement(\n \"dt\",\n {\"id\": referentHtmlId(\"comment\", comment.commentId)},\n [Html.text(\"Comment \" + label)]\n ),\n Html.freshElement(\"dd\", {}, body)\n ];\n }\n\n function convertBreak(element, messages, options) {\n return htmlPathForBreak(element).wrap(function() {\n return [];\n });\n }\n\n function htmlPathForBreak(element) {\n var style = findStyle(element);\n if (style) {\n return style.to;\n } else if (element.breakType === \"line\") {\n return htmlPaths.topLevelElement(\"br\");\n } else {\n return htmlPaths.empty;\n }\n }\n\n var elementConverters = {\n \"document\": function(document, messages, options) {\n var children = convertElements(document.children, messages, options);\n var notes = noteReferences.map(function(noteReference) {\n return document.notes.resolve(noteReference);\n });\n var notesNodes = convertElements(notes, messages, options);\n return children.concat([\n Html.freshElement(\"ol\", {}, notesNodes),\n Html.freshElement(\"dl\", {}, flatMap(referencedComments, function(referencedComment) {\n return convertComment(referencedComment, messages, options);\n }))\n ]);\n },\n \"paragraph\": convertParagraph,\n \"run\": convertRun,\n \"text\": function(element, messages, options) {\n return [Html.text(element.value)];\n },\n \"tab\": function(element, messages, options) {\n return [Html.text(\"\\t\")];\n },\n \"hyperlink\": function(element, messages, options) {\n var href = element.anchor ? \"#\" + htmlId(element.anchor) : element.href;\n var attributes = {href: href};\n if (element.targetFrame != null) {\n attributes.target = element.targetFrame;\n }\n\n var children = convertElements(element.children, messages, options);\n return [Html.nonFreshElement(\"a\", attributes, children)];\n },\n \"checkbox\": function(element) {\n var attributes = {type: \"checkbox\"};\n if (element.checked) {\n attributes[\"checked\"] = \"checked\";\n }\n return [Html.freshElement(\"input\", attributes)];\n },\n \"bookmarkStart\": function(element, messages, options) {\n var anchor = Html.freshElement(\"a\", {\n id: htmlId(element.name)\n }, [Html.forceWrite]);\n return [anchor];\n },\n \"noteReference\": function(element, messages, options) {\n noteReferences.push(element);\n var anchor = Html.freshElement(\"a\", {\n href: \"#\" + noteHtmlId(element),\n id: noteRefHtmlId(element)\n }, [Html.text(\"[\" + (noteNumber++) + \"]\")]);\n\n return [Html.freshElement(\"sup\", {}, [anchor])];\n },\n \"note\": function(element, messages, options) {\n var children = convertElements(element.body, messages, options);\n var backLink = Html.elementWithTag(htmlPaths.element(\"p\", {}, {fresh: false}), [\n Html.text(\" \"),\n Html.freshElement(\"a\", {href: \"#\" + noteRefHtmlId(element)}, [Html.text(\"↑\")])\n ]);\n var body = children.concat([backLink]);\n\n return Html.freshElement(\"li\", {id: noteHtmlId(element)}, body);\n },\n \"commentReference\": convertCommentReference,\n \"comment\": convertComment,\n \"image\": deferredConversion(recoveringConvertImage(options.convertImage || images.dataUri)),\n \"table\": convertTable,\n \"tableRow\": convertTableRow,\n \"tableCell\": convertTableCell,\n \"break\": convertBreak\n };\n return {\n convertToHtml: convertToHtml\n };\n}\n\nvar deferredId = 1;\n\nfunction deferredConversion(func) {\n return function(element, messages, options) {\n return [\n {\n type: \"deferred\",\n id: deferredId++,\n value: function() {\n return func(element, messages, options);\n }\n }\n ];\n };\n}\n\nfunction unrecognisedStyleWarning(type, element) {\n return results.warning(\n \"Unrecognised \" + type + \" style: '\" + element.styleName + \"'\" +\n \" (Style ID: \" + element.styleId + \")\"\n );\n}\n\nfunction flatMap(values, func) {\n return _.flatten(values.map(func), true);\n}\n\nfunction walkHtml(nodes, callback) {\n nodes.forEach(function(node) {\n callback(node);\n if (node.children) {\n walkHtml(node.children, callback);\n }\n });\n}\n\nvar commentAuthorLabel = exports.commentAuthorLabel = function commentAuthorLabel(comment) {\n return comment.authorInitials || \"\";\n};\n","var documents = require(\"./documents\");\n\nfunction convertElementToRawText(element) {\n if (element.type === \"text\") {\n return element.value;\n } else if (element.type === documents.types.tab) {\n return \"\\t\";\n } else {\n var tail = element.type === \"paragraph\" ? \"\\n\\n\" : \"\";\n return (element.children || []).map(convertElementToRawText).join(\"\") + tail;\n }\n}\n\nexports.convertElementToRawText = convertElementToRawText;\n","var TokenIterator = module.exports = function(tokens, startIndex) {\n this._tokens = tokens;\n this._startIndex = startIndex || 0;\n};\n\nTokenIterator.prototype.head = function() {\n return this._tokens[this._startIndex];\n};\n\nTokenIterator.prototype.tail = function(startIndex) {\n return new TokenIterator(this._tokens, this._startIndex + 1);\n};\n\nTokenIterator.prototype.toArray = function() {\n return this._tokens.slice(this._startIndex);\n};\n\nTokenIterator.prototype.end = function() {\n return this._tokens[this._tokens.length - 1];\n};\n\n// TODO: doesn't need to be a method, can be a separate function,\n// which simplifies implementation of the TokenIterator interface\nTokenIterator.prototype.to = function(end) {\n var start = this.head().source;\n var endToken = end.head() || end.end();\n return start.to(endToken.source);\n};\n","var TokenIterator = require(\"./TokenIterator\");\n\nexports.Parser = function(options) {\n var parseTokens = function(parser, tokens) {\n return parser(new TokenIterator(tokens));\n };\n \n return {\n parseTokens: parseTokens\n };\n};\n","exports.none = Object.create({\n value: function() {\n throw new Error('Called value on none');\n },\n isNone: function() {\n return true;\n },\n isSome: function() {\n return false;\n },\n map: function() {\n return exports.none;\n },\n flatMap: function() {\n return exports.none;\n },\n filter: function() {\n return exports.none;\n },\n toArray: function() {\n return [];\n },\n orElse: callOrReturn,\n valueOrElse: callOrReturn\n});\n\nfunction callOrReturn(value) {\n if (typeof(value) == \"function\") {\n return value();\n } else {\n return value;\n }\n}\n\nexports.some = function(value) {\n return new Some(value);\n};\n\nvar Some = function(value) {\n this._value = value;\n};\n\nSome.prototype.value = function() {\n return this._value;\n};\n\nSome.prototype.isNone = function() {\n return false;\n};\n\nSome.prototype.isSome = function() {\n return true;\n};\n\nSome.prototype.map = function(func) {\n return new Some(func(this._value));\n};\n\nSome.prototype.flatMap = function(func) {\n return func(this._value);\n};\n\nSome.prototype.filter = function(predicate) {\n return predicate(this._value) ? this : exports.none;\n};\n\nSome.prototype.toArray = function() {\n return [this._value];\n};\n\nSome.prototype.orElse = function(value) {\n return this;\n};\n\nSome.prototype.valueOrElse = function(value) {\n return this._value;\n};\n\nexports.isOption = function(value) {\n return value === exports.none || value instanceof Some;\n};\n\nexports.fromNullable = function(value) {\n if (value == null) {\n return exports.none;\n }\n return new Some(value);\n}\n","module.exports = {\n failure: function(errors, remaining) {\n if (errors.length < 1) {\n throw new Error(\"Failure must have errors\");\n }\n return new Result({\n status: \"failure\",\n remaining: remaining,\n errors: errors\n });\n },\n error: function(errors, remaining) {\n if (errors.length < 1) {\n throw new Error(\"Failure must have errors\");\n }\n return new Result({\n status: \"error\",\n remaining: remaining,\n errors: errors\n });\n },\n success: function(value, remaining, source) {\n return new Result({\n status: \"success\",\n value: value,\n source: source,\n remaining: remaining,\n errors: []\n });\n },\n cut: function(remaining) {\n return new Result({\n status: \"cut\",\n remaining: remaining,\n errors: []\n });\n }\n};\n\nvar Result = function(options) {\n this._value = options.value;\n this._status = options.status;\n this._hasValue = options.value !== undefined;\n this._remaining = options.remaining;\n this._source = options.source;\n this._errors = options.errors;\n};\n\nResult.prototype.map = function(func) {\n if (this._hasValue) {\n return new Result({\n value: func(this._value, this._source),\n status: this._status,\n remaining: this._remaining,\n source: this._source,\n errors: this._errors\n });\n } else {\n return this;\n }\n};\n\nResult.prototype.changeRemaining = function(remaining) {\n return new Result({\n value: this._value,\n status: this._status,\n remaining: remaining,\n source: this._source,\n errors: this._errors\n });\n};\n\nResult.prototype.isSuccess = function() {\n return this._status === \"success\" || this._status === \"cut\";\n};\n\nResult.prototype.isFailure = function() {\n return this._status === \"failure\";\n};\n\nResult.prototype.isError = function() {\n return this._status === \"error\";\n};\n\nResult.prototype.isCut = function() {\n return this._status === \"cut\";\n};\n\nResult.prototype.value = function() {\n return this._value;\n};\n\nResult.prototype.remaining = function() {\n return this._remaining;\n};\n\nResult.prototype.source = function() {\n return this._source;\n};\n\nResult.prototype.errors = function() {\n return this._errors;\n};\n","exports.error = function(options) {\n return new Error(options);\n};\n\nvar Error = function(options) {\n this.expected = options.expected;\n this.actual = options.actual;\n this._location = options.location;\n};\n\nError.prototype.describe = function() {\n var locationDescription = this._location ? this._location.describe() + \":\\n\" : \"\";\n return locationDescription + \"Expected \" + this.expected + \"\\nbut got \" + this.actual;\n};\n\nError.prototype.lineNumber = function() {\n return this._location.lineNumber();\n};\n\nError.prototype.characterNumber = function() {\n return this._location.characterNumber();\n};\n","var fromArray = exports.fromArray = function(array) {\n var index = 0;\n var hasNext = function() {\n return index < array.length;\n };\n return new LazyIterator({\n hasNext: hasNext,\n next: function() {\n if (!hasNext()) {\n throw new Error(\"No more elements\");\n } else {\n return array[index++];\n }\n }\n });\n};\n\nvar LazyIterator = function(iterator) {\n this._iterator = iterator;\n};\n\nLazyIterator.prototype.map = function(func) {\n var iterator = this._iterator;\n return new LazyIterator({\n hasNext: function() {\n return iterator.hasNext();\n },\n next: function() {\n return func(iterator.next());\n }\n });\n};\n\nLazyIterator.prototype.filter = function(condition) {\n var iterator = this._iterator;\n \n var moved = false;\n var hasNext = false;\n var next;\n var moveIfNecessary = function() {\n if (moved) {\n return;\n }\n moved = true;\n hasNext = false;\n while (iterator.hasNext() && !hasNext) {\n next = iterator.next();\n hasNext = condition(next);\n }\n };\n \n return new LazyIterator({\n hasNext: function() {\n moveIfNecessary();\n return hasNext;\n },\n next: function() {\n moveIfNecessary();\n var toReturn = next;\n moved = false;\n return toReturn;\n }\n });\n};\n\nLazyIterator.prototype.first = function() {\n var iterator = this._iterator;\n if (this._iterator.hasNext()) {\n return iterator.next();\n } else {\n return null;\n }\n};\n\nLazyIterator.prototype.toArray = function() {\n var result = [];\n while (this._iterator.hasNext()) {\n result.push(this._iterator.next());\n }\n return result;\n};\n","var _ = require(\"underscore\");\nvar options = require(\"option\");\nvar results = require(\"./parsing-results\");\nvar errors = require(\"./errors\");\nvar lazyIterators = require(\"./lazy-iterators\");\n\nexports.token = function(tokenType, value) {\n var matchValue = value !== undefined;\n return function(input) {\n var token = input.head();\n if (token && token.name === tokenType && (!matchValue || token.value === value)) {\n return results.success(token.value, input.tail(), token.source);\n } else {\n var expected = describeToken({name: tokenType, value: value});\n return describeTokenMismatch(input, expected);\n }\n };\n};\n\nexports.tokenOfType = function(tokenType) {\n return exports.token(tokenType);\n};\n\nexports.firstOf = function(name, parsers) {\n if (!_.isArray(parsers)) {\n parsers = Array.prototype.slice.call(arguments, 1);\n }\n return function(input) {\n return lazyIterators\n .fromArray(parsers)\n .map(function(parser) {\n return parser(input);\n })\n .filter(function(result) {\n return result.isSuccess() || result.isError();\n })\n .first() || describeTokenMismatch(input, name);\n };\n};\n\nexports.then = function(parser, func) {\n return function(input) {\n var result = parser(input);\n if (!result.map) {\n console.log(result);\n }\n return result.map(func);\n };\n};\n\nexports.sequence = function() {\n var parsers = Array.prototype.slice.call(arguments, 0);\n var rule = function(input) {\n var result = _.foldl(parsers, function(memo, parser) {\n var result = memo.result;\n var hasCut = memo.hasCut;\n if (!result.isSuccess()) {\n return {result: result, hasCut: hasCut};\n }\n var subResult = parser(result.remaining());\n if (subResult.isCut()) {\n return {result: result, hasCut: true};\n } else if (subResult.isSuccess()) {\n var values;\n if (parser.isCaptured) {\n values = result.value().withValue(parser, subResult.value());\n } else {\n values = result.value();\n }\n var remaining = subResult.remaining();\n var source = input.to(remaining);\n return {\n result: results.success(values, remaining, source),\n hasCut: hasCut\n };\n } else if (hasCut) {\n return {result: results.error(subResult.errors(), subResult.remaining()), hasCut: hasCut};\n } else {\n return {result: subResult, hasCut: hasCut};\n }\n }, {result: results.success(new SequenceValues(), input), hasCut: false}).result;\n var source = input.to(result.remaining());\n return result.map(function(values) {\n return values.withValue(exports.sequence.source, source);\n });\n };\n rule.head = function() {\n var firstCapture = _.find(parsers, isCapturedRule);\n return exports.then(\n rule,\n exports.sequence.extract(firstCapture)\n );\n };\n rule.map = function(func) {\n return exports.then(\n rule,\n function(result) {\n return func.apply(this, result.toArray());\n }\n );\n };\n \n function isCapturedRule(subRule) {\n return subRule.isCaptured;\n }\n \n return rule;\n};\n\nvar SequenceValues = function(values, valuesArray) {\n this._values = values || {};\n this._valuesArray = valuesArray || [];\n};\n\nSequenceValues.prototype.withValue = function(rule, value) {\n if (rule.captureName && rule.captureName in this._values) {\n throw new Error(\"Cannot add second value for capture \\\"\" + rule.captureName + \"\\\"\");\n } else {\n var newValues = _.clone(this._values);\n newValues[rule.captureName] = value;\n var newValuesArray = this._valuesArray.concat([value]);\n return new SequenceValues(newValues, newValuesArray);\n }\n};\n\nSequenceValues.prototype.get = function(rule) {\n if (rule.captureName in this._values) {\n return this._values[rule.captureName];\n } else {\n throw new Error(\"No value for capture \\\"\" + rule.captureName + \"\\\"\");\n }\n};\n\nSequenceValues.prototype.toArray = function() {\n return this._valuesArray;\n};\n\nexports.sequence.capture = function(rule, name) {\n var captureRule = function() {\n return rule.apply(this, arguments);\n };\n captureRule.captureName = name;\n captureRule.isCaptured = true;\n return captureRule;\n};\n\nexports.sequence.extract = function(rule) {\n return function(result) {\n return result.get(rule);\n };\n};\n\nexports.sequence.applyValues = function(func) {\n // TODO: check captureName doesn't conflict with source or other captures\n var rules = Array.prototype.slice.call(arguments, 1);\n return function(result) {\n var values = rules.map(function(rule) {\n return result.get(rule);\n });\n return func.apply(this, values);\n };\n};\n\nexports.sequence.source = {\n captureName: \"☃source☃\"\n};\n\nexports.sequence.cut = function() {\n return function(input) {\n return results.cut(input);\n };\n};\n\nexports.optional = function(rule) {\n return function(input) {\n var result = rule(input);\n if (result.isSuccess()) {\n return result.map(options.some);\n } else if (result.isFailure()) {\n return results.success(options.none, input);\n } else {\n return result;\n }\n };\n};\n\nexports.zeroOrMoreWithSeparator = function(rule, separator) {\n return repeatedWithSeparator(rule, separator, false);\n};\n\nexports.oneOrMoreWithSeparator = function(rule, separator) {\n return repeatedWithSeparator(rule, separator, true);\n};\n\nvar zeroOrMore = exports.zeroOrMore = function(rule) {\n return function(input) {\n var values = [];\n var result;\n while ((result = rule(input)) && result.isSuccess()) {\n input = result.remaining();\n values.push(result.value());\n }\n if (result.isError()) {\n return result;\n } else {\n return results.success(values, input);\n }\n };\n};\n\nexports.oneOrMore = function(rule) {\n return exports.oneOrMoreWithSeparator(rule, noOpRule);\n};\n\nfunction noOpRule(input) {\n return results.success(null, input);\n}\n\nvar repeatedWithSeparator = function(rule, separator, isOneOrMore) {\n return function(input) {\n var result = rule(input);\n if (result.isSuccess()) {\n var mainRule = exports.sequence.capture(rule, \"main\");\n var remainingRule = zeroOrMore(exports.then(\n exports.sequence(separator, mainRule),\n exports.sequence.extract(mainRule)\n ));\n var remainingResult = remainingRule(result.remaining());\n return results.success([result.value()].concat(remainingResult.value()), remainingResult.remaining());\n } else if (isOneOrMore || result.isError()) {\n return result;\n } else {\n return results.success([], input);\n }\n };\n};\n\nexports.leftAssociative = function(leftRule, rightRule, func) {\n var rights;\n if (func) {\n rights = [{func: func, rule: rightRule}];\n } else {\n rights = rightRule;\n }\n rights = rights.map(function(right) {\n return exports.then(right.rule, function(rightValue) {\n return function(leftValue, source) {\n return right.func(leftValue, rightValue, source);\n };\n });\n });\n var repeatedRule = exports.firstOf.apply(null, [\"rules\"].concat(rights));\n \n return function(input) {\n var start = input;\n var leftResult = leftRule(input);\n if (!leftResult.isSuccess()) {\n return leftResult;\n }\n var repeatedResult = repeatedRule(leftResult.remaining());\n while (repeatedResult.isSuccess()) {\n var remaining = repeatedResult.remaining();\n var source = start.to(repeatedResult.remaining());\n var right = repeatedResult.value();\n leftResult = results.success(\n right(leftResult.value(), source),\n remaining,\n source\n );\n repeatedResult = repeatedRule(leftResult.remaining());\n }\n if (repeatedResult.isError()) {\n return repeatedResult;\n }\n return leftResult;\n };\n};\n\nexports.leftAssociative.firstOf = function() {\n return Array.prototype.slice.call(arguments, 0);\n};\n\nexports.nonConsuming = function(rule) {\n return function(input) {\n return rule(input).changeRemaining(input);\n };\n};\n\nvar describeToken = function(token) {\n if (token.value) {\n return token.name + \" \\\"\" + token.value + \"\\\"\";\n } else {\n return token.name;\n }\n};\n\nfunction describeTokenMismatch(input, expected) {\n var error;\n var token = input.head();\n if (token) {\n error = errors.error({\n expected: expected,\n actual: describeToken(token),\n location: token.source\n });\n } else {\n error = errors.error({\n expected: expected,\n actual: \"end of tokens\"\n });\n }\n return results.failure([error], input);\n}\n","var StringSource = module.exports = function(string, description) {\n var self = {\n asString: function() {\n return string;\n },\n range: function(startIndex, endIndex) {\n return new StringSourceRange(string, description, startIndex, endIndex);\n }\n };\n return self;\n};\n\nvar StringSourceRange = function(string, description, startIndex, endIndex) {\n this._string = string;\n this._description = description;\n this._startIndex = startIndex;\n this._endIndex = endIndex;\n};\n\nStringSourceRange.prototype.to = function(otherRange) {\n // TODO: Assert that tokens are the same across both iterators\n return new StringSourceRange(this._string, this._description, this._startIndex, otherRange._endIndex);\n};\n\nStringSourceRange.prototype.describe = function() {\n var position = this._position();\n var description = this._description ? this._description + \"\\n\" : \"\";\n return description + \"Line number: \" + position.lineNumber + \"\\nCharacter number: \" + position.characterNumber;\n};\n\nStringSourceRange.prototype.lineNumber = function() {\n return this._position().lineNumber;\n};\n\nStringSourceRange.prototype.characterNumber = function() {\n return this._position().characterNumber;\n};\n\nStringSourceRange.prototype._position = function() {\n var self = this;\n var index = 0;\n var nextNewLine = function() {\n return self._string.indexOf(\"\\n\", index);\n };\n\n var lineNumber = 1;\n while (nextNewLine() !== -1 && nextNewLine() < this._startIndex) {\n index = nextNewLine() + 1;\n lineNumber += 1;\n }\n var characterNumber = this._startIndex - index + 1;\n return {lineNumber: lineNumber, characterNumber: characterNumber};\n};\n","module.exports = function(name, value, source) {\n this.name = name;\n this.value = value;\n if (source) {\n this.source = source;\n }\n};\n","var rules = require(\"./rules\");\nvar results = require(\"./parsing-results\");\n\nexports.parser = function(name, prefixRules, infixRuleBuilders) {\n var self = {\n rule: rule,\n leftAssociative: leftAssociative,\n rightAssociative: rightAssociative\n };\n \n var infixRules = new InfixRules(infixRuleBuilders.map(createInfixRule));\n var prefixRule = rules.firstOf(name, prefixRules);\n \n function createInfixRule(infixRuleBuilder) {\n return {\n name: infixRuleBuilder.name,\n rule: lazyRule(infixRuleBuilder.ruleBuilder.bind(null, self))\n };\n }\n \n function rule() {\n return createRule(infixRules);\n }\n \n function leftAssociative(name) {\n return createRule(infixRules.untilExclusive(name));\n }\n \n function rightAssociative(name) {\n return createRule(infixRules.untilInclusive(name));\n }\n \n function createRule(infixRules) {\n return apply.bind(null, infixRules);\n }\n \n function apply(infixRules, tokens) {\n var leftResult = prefixRule(tokens);\n if (leftResult.isSuccess()) {\n return infixRules.apply(leftResult);\n } else {\n return leftResult;\n }\n }\n \n return self;\n};\n\nfunction InfixRules(infixRules) {\n function untilExclusive(name) {\n return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name)));\n }\n \n function untilInclusive(name) {\n return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name) + 1));\n }\n \n function ruleNames() {\n return infixRules.map(function(rule) {\n return rule.name;\n });\n }\n \n function apply(leftResult) {\n var currentResult;\n var source;\n while (true) {\n currentResult = applyToTokens(leftResult.remaining());\n if (currentResult.isSuccess()) {\n source = leftResult.source().to(currentResult.source());\n leftResult = results.success(\n currentResult.value()(leftResult.value(), source),\n currentResult.remaining(),\n source\n )\n } else if (currentResult.isFailure()) {\n return leftResult;\n } else {\n return currentResult;\n }\n }\n }\n \n function applyToTokens(tokens) {\n return rules.firstOf(\"infix\", infixRules.map(function(infix) {\n return infix.rule;\n }))(tokens);\n }\n \n return {\n apply: apply,\n untilExclusive: untilExclusive,\n untilInclusive: untilInclusive\n }\n}\n\nexports.infix = function(name, ruleBuilder) {\n function map(func) {\n return exports.infix(name, function(parser) {\n var rule = ruleBuilder(parser);\n return function(tokens) {\n var result = rule(tokens);\n return result.map(function(right) {\n return function(left, source) {\n return func(left, right, source);\n };\n });\n };\n });\n }\n \n return {\n name: name,\n ruleBuilder: ruleBuilder,\n map: map\n };\n}\n\n// TODO: move into a sensible place and remove duplication\nvar lazyRule = function(ruleBuilder) {\n var rule;\n return function(input) {\n if (!rule) {\n rule = ruleBuilder();\n }\n return rule(input);\n };\n};\n","var Token = require(\"./Token\");\nvar StringSource = require(\"./StringSource\");\n\nexports.RegexTokeniser = RegexTokeniser;\n\nfunction RegexTokeniser(rules) {\n rules = rules.map(function(rule) {\n return {\n name: rule.name,\n regex: new RegExp(rule.regex.source, \"g\")\n };\n });\n \n function tokenise(input, description) {\n var source = new StringSource(input, description);\n var index = 0;\n var tokens = [];\n \n while (index < input.length) {\n var result = readNextToken(input, index, source);\n index = result.endIndex;\n tokens.push(result.token);\n }\n \n tokens.push(endToken(input, source));\n return tokens;\n }\n\n function readNextToken(string, startIndex, source) {\n for (var i = 0; i < rules.length; i++) {\n var regex = rules[i].regex;\n regex.lastIndex = startIndex;\n var result = regex.exec(string);\n \n if (result) {\n var endIndex = startIndex + result[0].length;\n if (result.index === startIndex && endIndex > startIndex) {\n var value = result[1];\n var token = new Token(\n rules[i].name,\n value,\n source.range(startIndex, endIndex)\n );\n return {token: token, endIndex: endIndex};\n }\n }\n }\n var endIndex = startIndex + 1;\n var token = new Token(\n \"unrecognisedCharacter\",\n string.substring(startIndex, endIndex),\n source.range(startIndex, endIndex)\n );\n return {token: token, endIndex: endIndex};\n }\n \n function endToken(input, source) {\n return new Token(\n \"end\",\n null,\n source.range(input.length, input.length)\n );\n }\n \n return {\n tokenise: tokenise\n }\n}\n\n\n","exports.Parser = require(\"./lib/parser\").Parser;\nexports.rules = require(\"./lib/rules\");\nexports.errors = require(\"./lib/errors\");\nexports.results = require(\"./lib/parsing-results\");\nexports.StringSource = require(\"./lib/StringSource\");\nexports.Token = require(\"./lib/Token\");\nexports.bottomUp = require(\"./lib/bottom-up\");\nexports.RegexTokeniser = require(\"./lib/regex-tokeniser\").RegexTokeniser;\n\nexports.rule = function(ruleBuilder) {\n var rule;\n return function(input) {\n if (!rule) {\n rule = ruleBuilder();\n }\n return rule(input);\n };\n};\n","exports.paragraph = paragraph;\nexports.run = run;\nexports.table = table;\nexports.bold = new Matcher(\"bold\");\nexports.italic = new Matcher(\"italic\");\nexports.underline = new Matcher(\"underline\");\nexports.strikethrough = new Matcher(\"strikethrough\");\nexports.allCaps = new Matcher(\"allCaps\");\nexports.smallCaps = new Matcher(\"smallCaps\");\nexports.highlight = highlight;\nexports.commentReference = new Matcher(\"commentReference\");\nexports.lineBreak = new BreakMatcher({breakType: \"line\"});\nexports.pageBreak = new BreakMatcher({breakType: \"page\"});\nexports.columnBreak = new BreakMatcher({breakType: \"column\"});\nexports.equalTo = equalTo;\nexports.startsWith = startsWith;\n\n\nfunction paragraph(options) {\n return new Matcher(\"paragraph\", options);\n}\n\nfunction run(options) {\n return new Matcher(\"run\", options);\n}\n\nfunction table(options) {\n return new Matcher(\"table\", options);\n}\n\nfunction highlight(options) {\n return new HighlightMatcher(options);\n}\n\nfunction Matcher(elementType, options) {\n options = options || {};\n this._elementType = elementType;\n this._styleId = options.styleId;\n this._styleName = options.styleName;\n if (options.list) {\n this._listIndex = options.list.levelIndex;\n this._listIsOrdered = options.list.isOrdered;\n }\n}\n\nMatcher.prototype.matches = function(element) {\n return element.type === this._elementType &&\n (this._styleId === undefined || element.styleId === this._styleId) &&\n (this._styleName === undefined || (element.styleName && this._styleName.operator(this._styleName.operand, element.styleName))) &&\n (this._listIndex === undefined || isList(element, this._listIndex, this._listIsOrdered)) &&\n (this._breakType === undefined || this._breakType === element.breakType);\n};\n\nfunction HighlightMatcher(options) {\n options = options || {};\n this._color = options.color;\n}\n\nHighlightMatcher.prototype.matches = function(element) {\n return element.type === \"highlight\" &&\n (this._color === undefined || element.color === this._color);\n};\n\nfunction BreakMatcher(options) {\n options = options || {};\n this._breakType = options.breakType;\n}\n\nBreakMatcher.prototype.matches = function(element) {\n return element.type === \"break\" &&\n (this._breakType === undefined || element.breakType === this._breakType);\n};\n\nfunction isList(element, levelIndex, isOrdered) {\n return element.numbering &&\n element.numbering.level == levelIndex &&\n element.numbering.isOrdered == isOrdered;\n}\n\nfunction equalTo(value) {\n return {\n operator: operatorEqualTo,\n operand: value\n };\n}\n\nfunction startsWith(value) {\n return {\n operator: operatorStartsWith,\n operand: value\n };\n}\n\nfunction operatorEqualTo(first, second) {\n return first.toUpperCase() === second.toUpperCase();\n}\n\nfunction operatorStartsWith(first, second) {\n return second.toUpperCase().indexOf(first.toUpperCase()) === 0;\n}\n","var lop = require(\"lop\");\nvar RegexTokeniser = lop.RegexTokeniser;\n\nexports.tokenise = tokenise;\n\nvar stringPrefix = \"'((?:\\\\\\\\.|[^'])*)\";\n\nfunction tokenise(string) {\n var identifierCharacter = \"(?:[a-zA-Z\\\\-_]|\\\\\\\\.)\";\n var tokeniser = new RegexTokeniser([\n {name: \"identifier\", regex: new RegExp(\"(\" + identifierCharacter + \"(?:\" + identifierCharacter + \"|[0-9])*)\")},\n {name: \"dot\", regex: /\\./},\n {name: \"colon\", regex: /:/},\n {name: \"gt\", regex: />/},\n {name: \"whitespace\", regex: /\\s+/},\n {name: \"arrow\", regex: /=>/},\n {name: \"equals\", regex: /=/},\n {name: \"startsWith\", regex: /\\^=/},\n {name: \"open-paren\", regex: /\\(/},\n {name: \"close-paren\", regex: /\\)/},\n {name: \"open-square-bracket\", regex: /\\[/},\n {name: \"close-square-bracket\", regex: /\\]/},\n {name: \"string\", regex: new RegExp(stringPrefix + \"'\")},\n {name: \"unterminated-string\", regex: new RegExp(stringPrefix)},\n {name: \"integer\", regex: /([0-9]+)/},\n {name: \"choice\", regex: /\\|/},\n {name: \"bang\", regex: /(!)/}\n ]);\n return tokeniser.tokenise(string);\n}\n","var _ = require(\"underscore\");\nvar lop = require(\"lop\");\n\nvar documentMatchers = require(\"./styles/document-matchers\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar tokenise = require(\"./styles/parser/tokeniser\").tokenise;\nvar results = require(\"./results\");\n\nexports.readHtmlPath = readHtmlPath;\nexports.readDocumentMatcher = readDocumentMatcher;\nexports.readStyle = readStyle;\n\n\nfunction readStyle(string) {\n return parseString(styleRule, string);\n}\n\nfunction createStyleRule() {\n return lop.rules.sequence(\n lop.rules.sequence.capture(documentMatcherRule()),\n lop.rules.tokenOfType(\"whitespace\"),\n lop.rules.tokenOfType(\"arrow\"),\n lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"whitespace\"),\n lop.rules.sequence.capture(htmlPathRule())\n ).head())),\n lop.rules.tokenOfType(\"end\")\n ).map(function(documentMatcher, htmlPath) {\n return {\n from: documentMatcher,\n to: htmlPath.valueOrElse(htmlPaths.empty)\n };\n });\n}\n\nfunction readDocumentMatcher(string) {\n return parseString(documentMatcherRule(), string);\n}\n\nfunction documentMatcherRule() {\n var sequence = lop.rules.sequence;\n\n var identifierToConstant = function(identifier, constant) {\n return lop.rules.then(\n lop.rules.token(\"identifier\", identifier),\n function() {\n return constant;\n }\n );\n };\n\n var paragraphRule = identifierToConstant(\"p\", documentMatchers.paragraph);\n var runRule = identifierToConstant(\"r\", documentMatchers.run);\n\n var elementTypeRule = lop.rules.firstOf(\"p or r or table\",\n paragraphRule,\n runRule\n );\n\n var styleIdRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"dot\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule)\n ).map(function(styleId) {\n return {styleId: styleId};\n });\n\n var styleNameMatcherRule = lop.rules.firstOf(\"style name matcher\",\n lop.rules.then(\n lop.rules.sequence(\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(stringRule)\n ).head(),\n function(styleName) {\n return {styleName: documentMatchers.equalTo(styleName)};\n }\n ),\n lop.rules.then(\n lop.rules.sequence(\n lop.rules.tokenOfType(\"startsWith\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(stringRule)\n ).head(),\n function(styleName) {\n return {styleName: documentMatchers.startsWith(styleName)};\n }\n )\n );\n\n var styleNameRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.token(\"identifier\", \"style-name\"),\n lop.rules.sequence.capture(styleNameMatcherRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).head();\n\n\n var listTypeRule = lop.rules.firstOf(\"list type\",\n identifierToConstant(\"ordered-list\", {isOrdered: true}),\n identifierToConstant(\"unordered-list\", {isOrdered: false})\n );\n var listRule = sequence(\n lop.rules.tokenOfType(\"colon\"),\n sequence.capture(listTypeRule),\n sequence.cut(),\n lop.rules.tokenOfType(\"open-paren\"),\n sequence.capture(integerRule),\n lop.rules.tokenOfType(\"close-paren\")\n ).map(function(listType, levelNumber) {\n return {\n list: {\n isOrdered: listType.isOrdered,\n levelIndex: levelNumber - 1\n }\n };\n });\n\n function createMatcherSuffixesRule(rules) {\n var matcherSuffix = lop.rules.firstOf.apply(\n lop.rules.firstOf,\n [\"matcher suffix\"].concat(rules)\n );\n var matcherSuffixes = lop.rules.zeroOrMore(matcherSuffix);\n return lop.rules.then(matcherSuffixes, function(suffixes) {\n var matcherOptions = {};\n suffixes.forEach(function(suffix) {\n _.extend(matcherOptions, suffix);\n });\n return matcherOptions;\n });\n }\n\n var paragraphOrRun = sequence(\n sequence.capture(elementTypeRule),\n sequence.capture(createMatcherSuffixesRule([\n styleIdRule,\n styleNameRule,\n listRule\n ]))\n ).map(function(createMatcher, matcherOptions) {\n return createMatcher(matcherOptions);\n });\n\n var table = sequence(\n lop.rules.token(\"identifier\", \"table\"),\n sequence.capture(createMatcherSuffixesRule([\n styleIdRule,\n styleNameRule\n ]))\n ).map(function(options) {\n return documentMatchers.table(options);\n });\n\n var bold = identifierToConstant(\"b\", documentMatchers.bold);\n var italic = identifierToConstant(\"i\", documentMatchers.italic);\n var underline = identifierToConstant(\"u\", documentMatchers.underline);\n var strikethrough = identifierToConstant(\"strike\", documentMatchers.strikethrough);\n var allCaps = identifierToConstant(\"all-caps\", documentMatchers.allCaps);\n var smallCaps = identifierToConstant(\"small-caps\", documentMatchers.smallCaps);\n\n var highlight = sequence(\n lop.rules.token(\"identifier\", \"highlight\"),\n lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.token(\"identifier\", \"color\"),\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).head()))\n ).map(function(color) {\n return documentMatchers.highlight({\n color: color.valueOrElse(undefined)\n });\n });\n\n var commentReference = identifierToConstant(\"comment-reference\", documentMatchers.commentReference);\n\n var breakMatcher = sequence(\n lop.rules.token(\"identifier\", \"br\"),\n sequence.cut(),\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.token(\"identifier\", \"type\"),\n lop.rules.tokenOfType(\"equals\"),\n sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n ).map(function(breakType) {\n switch (breakType) {\n case \"line\":\n return documentMatchers.lineBreak;\n case \"page\":\n return documentMatchers.pageBreak;\n case \"column\":\n return documentMatchers.columnBreak;\n default:\n // TODO: handle unknown document matchers\n }\n });\n\n return lop.rules.firstOf(\"element type\",\n paragraphOrRun,\n table,\n bold,\n italic,\n underline,\n strikethrough,\n allCaps,\n smallCaps,\n highlight,\n commentReference,\n breakMatcher\n );\n}\n\nfunction readHtmlPath(string) {\n return parseString(htmlPathRule(), string);\n}\n\nfunction htmlPathRule() {\n var capture = lop.rules.sequence.capture;\n var whitespaceRule = lop.rules.tokenOfType(\"whitespace\");\n var freshRule = lop.rules.then(\n lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"colon\"),\n lop.rules.token(\"identifier\", \"fresh\")\n )),\n function(option) {\n return option.map(function() {\n return true;\n }).valueOrElse(false);\n }\n );\n\n var separatorRule = lop.rules.then(\n lop.rules.optional(lop.rules.sequence(\n lop.rules.tokenOfType(\"colon\"),\n lop.rules.token(\"identifier\", \"separator\"),\n lop.rules.tokenOfType(\"open-paren\"),\n capture(stringRule),\n lop.rules.tokenOfType(\"close-paren\")\n ).head()),\n function(option) {\n return option.valueOrElse(\"\");\n }\n );\n\n var tagNamesRule = lop.rules.oneOrMoreWithSeparator(\n identifierRule,\n lop.rules.tokenOfType(\"choice\")\n );\n\n var styleElementRule = lop.rules.sequence(\n capture(tagNamesRule),\n capture(lop.rules.zeroOrMore(attributeOrClassRule)),\n capture(freshRule),\n capture(separatorRule)\n ).map(function(tagName, attributesList, fresh, separator) {\n var attributes = {};\n var options = {};\n attributesList.forEach(function(attribute) {\n if (attribute.append && attributes[attribute.name]) {\n attributes[attribute.name] += \" \" + attribute.value;\n } else {\n attributes[attribute.name] = attribute.value;\n }\n });\n if (fresh) {\n options.fresh = true;\n }\n if (separator) {\n options.separator = separator;\n }\n return htmlPaths.element(tagName, attributes, options);\n });\n\n return lop.rules.firstOf(\"html path\",\n lop.rules.then(lop.rules.tokenOfType(\"bang\"), function() {\n return htmlPaths.ignore;\n }),\n lop.rules.then(\n lop.rules.zeroOrMoreWithSeparator(\n styleElementRule,\n lop.rules.sequence(\n whitespaceRule,\n lop.rules.tokenOfType(\"gt\"),\n whitespaceRule\n )\n ),\n htmlPaths.elements\n )\n );\n}\n\nvar identifierRule = lop.rules.then(\n lop.rules.tokenOfType(\"identifier\"),\n decodeEscapeSequences\n);\nvar integerRule = lop.rules.tokenOfType(\"integer\");\n\nvar stringRule = lop.rules.then(\n lop.rules.tokenOfType(\"string\"),\n decodeEscapeSequences\n);\n\nvar escapeSequences = {\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"t\": \"\\t\"\n};\n\nfunction decodeEscapeSequences(value) {\n return value.replace(/\\\\(.)/g, function(match, code) {\n return escapeSequences[code] || code;\n });\n}\n\nvar attributeRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"open-square-bracket\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule),\n lop.rules.tokenOfType(\"equals\"),\n lop.rules.sequence.capture(stringRule),\n lop.rules.tokenOfType(\"close-square-bracket\")\n).map(function(name, value) {\n return {name: name, value: value, append: false};\n});\n\nvar classRule = lop.rules.sequence(\n lop.rules.tokenOfType(\"dot\"),\n lop.rules.sequence.cut(),\n lop.rules.sequence.capture(identifierRule)\n).map(function(className) {\n return {name: \"class\", value: className, append: true};\n});\n\nvar attributeOrClassRule = lop.rules.firstOf(\n \"attribute or class\",\n attributeRule,\n classRule\n);\n\nfunction parseString(rule, string) {\n var tokens = tokenise(string);\n var parser = lop.Parser();\n var parseResult = parser.parseTokens(rule, tokens);\n if (parseResult.isSuccess()) {\n return results.success(parseResult.value());\n } else {\n return new results.Result(null, [results.warning(describeFailure(string, parseResult))]);\n }\n}\n\nfunction describeFailure(input, parseResult) {\n return \"Did not understand this style mapping, so ignored it: \" + input + \"\\n\" +\n parseResult.errors().map(describeError).join(\"\\n\");\n}\n\nfunction describeError(error) {\n return \"Error was at character number \" + error.characterNumber() + \": \" +\n \"Expected \" + error.expected + \" but got \" + error.actual;\n}\n\nvar styleRule = createStyleRule();\n","exports.readOptions = readOptions;\n\n\nvar _ = require(\"underscore\");\n\nvar defaultStyleMap = exports._defaultStyleMap = [\n \"p.Heading1 => h1:fresh\",\n \"p.Heading2 => h2:fresh\",\n \"p.Heading3 => h3:fresh\",\n \"p.Heading4 => h4:fresh\",\n \"p.Heading5 => h5:fresh\",\n \"p.Heading6 => h6:fresh\",\n \"p[style-name='Heading 1'] => h1:fresh\",\n \"p[style-name='Heading 2'] => h2:fresh\",\n \"p[style-name='Heading 3'] => h3:fresh\",\n \"p[style-name='Heading 4'] => h4:fresh\",\n \"p[style-name='Heading 5'] => h5:fresh\",\n \"p[style-name='Heading 6'] => h6:fresh\",\n \"p[style-name='heading 1'] => h1:fresh\",\n \"p[style-name='heading 2'] => h2:fresh\",\n \"p[style-name='heading 3'] => h3:fresh\",\n \"p[style-name='heading 4'] => h4:fresh\",\n \"p[style-name='heading 5'] => h5:fresh\",\n \"p[style-name='heading 6'] => h6:fresh\",\n\n // Apple Pages\n \"p.Heading => h1:fresh\",\n \"p[style-name='Heading'] => h1:fresh\",\n\n \"r[style-name='Strong'] => strong\",\n\n \"p[style-name='footnote text'] => p:fresh\",\n \"r[style-name='footnote reference'] =>\",\n \"p[style-name='endnote text'] => p:fresh\",\n \"r[style-name='endnote reference'] =>\",\n \"p[style-name='annotation text'] => p:fresh\",\n \"r[style-name='annotation reference'] =>\",\n\n // LibreOffice\n \"p[style-name='Footnote'] => p:fresh\",\n \"r[style-name='Footnote anchor'] =>\",\n \"p[style-name='Endnote'] => p:fresh\",\n \"r[style-name='Endnote anchor'] =>\",\n\n \"p:unordered-list(1) => ul > li:fresh\",\n \"p:unordered-list(2) => ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n \"p:ordered-list(1) => ol > li:fresh\",\n \"p:ordered-list(2) => ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n \"p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n\n \"r[style-name='Hyperlink'] =>\",\n\n \"p[style-name='Normal'] => p:fresh\",\n\n // Apple Pages\n \"p.Body => p:fresh\",\n \"p[style-name='Body'] => p:fresh\"\n];\n\nvar standardOptions = exports._standardOptions = {\n externalFileAccess: false,\n transformDocument: identity,\n includeDefaultStyleMap: true,\n includeEmbeddedStyleMap: true\n};\n\nfunction readOptions(options) {\n options = options || {};\n return _.extend({}, standardOptions, options, {\n customStyleMap: readStyleMap(options.styleMap),\n readStyleMap: function() {\n var styleMap = this.customStyleMap;\n if (this.includeEmbeddedStyleMap) {\n styleMap = styleMap.concat(readStyleMap(this.embeddedStyleMap));\n }\n if (this.includeDefaultStyleMap) {\n styleMap = styleMap.concat(defaultStyleMap);\n }\n return styleMap;\n }\n });\n}\n\nfunction readStyleMap(styleMap) {\n if (!styleMap) {\n return [];\n } else if (_.isString(styleMap)) {\n return styleMap.split(\"\\n\")\n .map(function(line) {\n return line.trim();\n })\n .filter(function(line) {\n return line !== \"\" && line.charAt(0) !== \"#\";\n });\n } else {\n return styleMap;\n }\n}\n\nfunction identity(value) {\n return value;\n}\n","var promises = require(\"../lib/promises\");\nvar zipfile = require(\"../lib/zipfile\");\n\nexports.openZip = openZip;\n\nfunction openZip(options) {\n if (options.arrayBuffer) {\n return promises.resolve(zipfile.openArrayBuffer(options.arrayBuffer));\n } else {\n return promises.reject(new Error(\"Could not find file in options\"));\n }\n}\n","var htmlPaths = require(\"./styles/html-paths\");\nvar Html = require(\"./html\");\n\n\nexports.element = element;\n\nfunction element(name) {\n return function(html) {\n return Html.elementWithTag(htmlPaths.element(name), [html]);\n };\n}\n","var _ = require(\"underscore\");\n\nvar docxReader = require(\"./docx/docx-reader\");\nvar docxStyleMap = require(\"./docx/style-map\");\nvar DocumentConverter = require(\"./document-to-html\").DocumentConverter;\nvar convertElementToRawText = require(\"./raw-text\").convertElementToRawText;\nvar readStyle = require(\"./style-reader\").readStyle;\nvar readOptions = require(\"./options-reader\").readOptions;\nvar unzip = require(\"./unzip\");\nvar Result = require(\"./results\").Result;\n\nexports.convertToHtml = convertToHtml;\nexports.convertToMarkdown = convertToMarkdown;\nexports.convert = convert;\nexports.extractRawText = extractRawText;\nexports.images = require(\"./images\");\nexports.transforms = require(\"./transforms\");\nexports.underline = require(\"./underline\");\nexports.embedStyleMap = embedStyleMap;\nexports.readEmbeddedStyleMap = readEmbeddedStyleMap;\n\nfunction convertToHtml(input, options) {\n return convert(input, options);\n}\n\nfunction convertToMarkdown(input, options) {\n var markdownOptions = Object.create(options || {});\n markdownOptions.outputFormat = \"markdown\";\n return convert(input, markdownOptions);\n}\n\nfunction convert(input, options) {\n options = readOptions(options);\n\n return unzip.openZip(input)\n .tap(function(docxFile) {\n return docxStyleMap.readStyleMap(docxFile).then(function(styleMap) {\n options.embeddedStyleMap = styleMap;\n });\n })\n .then(function(docxFile) {\n return docxReader.read(docxFile, input, options)\n .then(function(documentResult) {\n return documentResult.map(options.transformDocument);\n })\n .then(function(documentResult) {\n return convertDocumentToHtml(documentResult, options);\n });\n });\n}\n\nfunction readEmbeddedStyleMap(input) {\n return unzip.openZip(input)\n .then(docxStyleMap.readStyleMap);\n}\n\nfunction convertDocumentToHtml(documentResult, options) {\n var styleMapResult = parseStyleMap(options.readStyleMap());\n var parsedOptions = _.extend({}, options, {\n styleMap: styleMapResult.value\n });\n var documentConverter = new DocumentConverter(parsedOptions);\n\n return documentResult.flatMapThen(function(document) {\n return styleMapResult.flatMapThen(function(styleMap) {\n return documentConverter.convertToHtml(document);\n });\n });\n}\n\nfunction parseStyleMap(styleMap) {\n return Result.combine((styleMap || []).map(readStyle))\n .map(function(styleMap) {\n return styleMap.filter(function(styleMapping) {\n return !!styleMapping;\n });\n });\n}\n\n\nfunction extractRawText(input) {\n return unzip.openZip(input)\n .then(docxReader.read)\n .then(function(documentResult) {\n return documentResult.map(convertElementToRawText);\n });\n}\n\nfunction embedStyleMap(input, styleMap) {\n return unzip.openZip(input)\n .tap(function(docxFile) {\n return docxStyleMap.writeStyleMap(docxFile, styleMap);\n })\n .then(function(docxFile) {\n return docxFile.toArrayBuffer();\n })\n .then(function(arrayBuffer) {\n return {\n toArrayBuffer: function() {\n return arrayBuffer;\n },\n toBuffer: function() {\n return Buffer.from(arrayBuffer);\n }\n };\n });\n}\n\nexports.styleMapping = function() {\n throw new Error('Use a raw string instead of mammoth.styleMapping e.g. \"p[style-name=\\'Title\\'] => h1\" instead of mammoth.styleMapping(\"p[style-name=\\'Title\\'] => h1\")');\n};\n","/**\n * DOCX Preview Component\n *\n * Renders Word documents by:\n * 1. Attempting Docker-based PDF conversion for full fidelity (if available)\n * 2. Falling back to HTML conversion using mammoth.js\n */\n\nimport { useEffect, useState, useRef } from 'react';\nimport { FileText, AlertCircle, Loader2, FileImage } from 'lucide-react';\nimport mammoth from 'mammoth';\nimport PdfPreview from './PdfPreview';\n\ninterface DocxPreviewProps {\n content: string; // Base64 encoded DOCX data\n fileName: string;\n // Optional: workspace context for Docker conversion\n workspacePath?: string;\n filePath?: string;\n}\n\ntype PreviewMode = 'auto' | 'pdf' | 'html';\n\nexport function DocxPreview({ content, fileName, workspacePath, filePath }: DocxPreviewProps) {\n const [htmlContent, setHtmlContent] = useState('');\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [previewMode, setPreviewMode] = useState('auto');\n\n // PDF conversion state\n const [pdfContent, setPdfContent] = useState(null);\n const [isConverting, setIsConverting] = useState(false);\n const [dockerAvailable, setDockerAvailable] = useState(null);\n\n // AbortController for canceling in-flight requests\n const abortControllerRef = useRef(null);\n\n // Try Docker PDF conversion\n useEffect(() => {\n async function tryDockerConversion() {\n if (!workspacePath || !filePath) {\n setDockerAvailable(false);\n return;\n }\n\n // Cancel any previous conversion request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsConverting(true);\n\n try {\n const response = await fetch('/api/convert/document', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n path: filePath,\n workspace: workspacePath,\n }),\n signal: controller.signal,\n });\n\n // Check if request was aborted\n if (controller.signal.aborted) return;\n\n const data = await response.json();\n\n // Double-check abort status after parsing\n if (controller.signal.aborted) return;\n\n if (data.success && data.content) {\n setPdfContent(data.content);\n setDockerAvailable(true);\n } else {\n setDockerAvailable(data.docker_required === true ? false : null);\n }\n } catch (err) {\n // Ignore abort errors - they're expected when switching files\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Docker conversion failed:', err);\n setDockerAvailable(false);\n } finally {\n // Only update loading state if this request wasn't aborted\n if (!controller.signal.aborted) {\n setIsConverting(false);\n }\n }\n }\n\n if (previewMode === 'auto' || previewMode === 'pdf') {\n tryDockerConversion();\n }\n\n // Cleanup: abort on unmount or when dependencies change\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, [workspacePath, filePath, previewMode]);\n\n // Convert DOCX to HTML using mammoth (fallback)\n useEffect(() => {\n async function convertDocx() {\n setIsLoading(true);\n setError(null);\n\n try {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(content);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const arrayBuffer = bytes.buffer;\n\n // Convert DOCX to HTML using mammoth\n const result = await mammoth.convertToHtml({ arrayBuffer });\n\n // Wrap in styled HTML document\n const styledHtml = `\n\n\n\n \n \n\n\n${result.value}\n\n`;\n\n setHtmlContent(styledHtml);\n\n // Log any warnings\n if (result.messages.length > 0) {\n console.warn('Mammoth conversion warnings:', result.messages);\n }\n } catch (err) {\n console.error('DOCX conversion error:', err);\n setError(err instanceof Error ? err.message : 'Failed to convert document');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content && (previewMode === 'auto' || previewMode === 'html')) {\n convertDocx();\n }\n }, [content, previewMode]);\n\n // Determine what to show\n const showPdf = pdfContent && (previewMode === 'pdf' || (previewMode === 'auto' && dockerAvailable));\n const showHtml = !showPdf && htmlContent;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Word Document\n - {fileName}\n
    \n\n {/* Mode toggle */}\n {(pdfContent || htmlContent) && (\n
    \n setPreviewMode('pdf')}\n disabled={!pdfContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showPdf ? 'bg-blue-600 text-white' : 'text-gray-400 hover:text-gray-300'\n } ${!pdfContent ? 'opacity-50 cursor-not-allowed' : ''}`}\n title={pdfContent ? 'Full fidelity preview' : 'Docker container required for PDF preview'}\n >\n \n PDF\n \n setPreviewMode('html')}\n disabled={!htmlContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showHtml ? 'bg-blue-600 text-white' : 'text-gray-400 hover:text-gray-300'\n }`}\n title=\"HTML conversion mode\"\n >\n \n HTML\n \n
    \n )}\n
    \n\n {/* Content */}\n
    \n {/* Loading state */}\n {(isLoading || isConverting) && (\n
    \n \n {isConverting ? 'Converting to PDF...' : 'Converting document...'}\n
    \n )}\n\n {/* Error state */}\n {error && !pdfContent && (\n
    \n \n Failed to convert document\n {error}\n
    \n )}\n\n {/* PDF preview mode */}\n {!isLoading && !isConverting && showPdf && pdfContent && (\n
    \n \n
    \n )}\n\n {/* HTML preview mode */}\n {!isLoading && !isConverting && showHtml && (\n <>\n {/* Docker not available notice - show when not using PDF mode */}\n {!pdfContent && (\n
    \n
    \n \n \n {!workspacePath\n ? \"Full document preview available when viewing from workspace (requires Docker).\"\n : \"Full preview requires Docker with MassGen container.\"\n } Showing HTML conversion.\n \n
    \n
    \n )}\n \n \n )}\n
    \n
    \n );\n}\n\nexport default DocxPreview;\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.18.5';\nvar current_codepage = 1200, current_ansi = 1252;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t/*::[*/0/*::]*/: 1252, /* ANSI */\n\t/*::[*/1/*::]*/: 65001, /* DEFAULT */\n\t/*::[*/2/*::]*/: 65001, /* SYMBOL */\n\t/*::[*/77/*::]*/: 10000, /* MAC */\n\t/*::[*/128/*::]*/: 932, /* SHIFTJIS */\n\t/*::[*/129/*::]*/: 949, /* HANGUL */\n\t/*::[*/130/*::]*/: 1361, /* JOHAB */\n\t/*::[*/134/*::]*/: 936, /* GB2312 */\n\t/*::[*/136/*::]*/: 950, /* CHINESEBIG5 */\n\t/*::[*/161/*::]*/: 1253, /* GREEK */\n\t/*::[*/162/*::]*/: 1254, /* TURKISH */\n\t/*::[*/163/*::]*/: 1258, /* VIETNAMESE */\n\t/*::[*/177/*::]*/: 1255, /* HEBREW */\n\t/*::[*/178/*::]*/: 1256, /* ARABIC */\n\t/*::[*/186/*::]*/: 1257, /* BALTIC */\n\t/*::[*/204/*::]*/: 1251, /* RUSSIAN */\n\t/*::[*/222/*::]*/: 874, /* THAI */\n\t/*::[*/238/*::]*/: 1250, /* EASTEUROPE */\n\t/*::[*/255/*::]*/: 1252, /* OEM */\n\t/*::[*/69/*::]*/: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nvar $cptable;\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nexport { set_cptable };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n for (var i = 0; i < input.length; ) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") { throw \"wtf\"; }\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5: 37, 6: 38, 7: 39, 8: 40, // 5 -> 37 ... 8 -> 40\n\n\t23: 0, 24: 0, 25: 0, 26: 0, // 23 -> 0 ... 26 -> 0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59: 1, 60: 2, 61: 3, 62: 4, // 59 -> 1 ... 62 -> 4\n\n\t67: 9, 68: 10, // 67 -> 9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14, // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17, // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22, // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47, // 79 -> 45 ... 81 -> 47\n\t82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= SSFbase1904) epoch += 24*60*60*1000;\n\treturn (epoch - (SSFdnthresh + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports = {};\nexports.version = '1.2.1';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = {}); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\tif(!s) {\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nlet _fs = void 0;\nfunction set_fs(fs) { _fs = fs; }\nexport { set_fs };\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\nfunction numdate(v/*:number*/)/*:Date*/ {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN(/*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {\n\tvar d = new Date(str);\n\tif(good_pd) {\n\t\t/*:: if(fixdate == null) fixdate = 0; */\n\t\tif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr/*:Array*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [];\n\tfor(var i = 0; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tvar lower = s.toLowerCase();\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
    \").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); }\n\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\n// matches ... extracts content\nvar matchtag = /*#__PURE__*/(function() {\n\tvar mtcache/*:{[k:string]:RegExp}*/ = ({}/*:any*/);\n\treturn function matchtag(f/*:string*/,g/*:?string*/)/*:RegExp*/ {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)',((g||\"\")/*:any*/)));\n\t};\n})();\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = /*#__PURE__*/(function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = data.match(vtregex(h.baseType))||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + ''; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || (dense ? ([]/*:any*/) : ({}/*:any*/));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}/*:any*/));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\nvar VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Category', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'PresentationFormat', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'ByteCount', t: VT_I4 },\n\t/*::[*/0x05/*::]*/: { n: 'LineCount', t: VT_I4 },\n\t/*::[*/0x06/*::]*/: { n: 'ParagraphCount', t: VT_I4 },\n\t/*::[*/0x07/*::]*/: { n: 'SlideCount', t: VT_I4 },\n\t/*::[*/0x08/*::]*/: { n: 'NoteCount', t: VT_I4 },\n\t/*::[*/0x09/*::]*/: { n: 'HiddenCount', t: VT_I4 },\n\t/*::[*/0x0a/*::]*/: { n: 'MultimediaClipCount', t: VT_I4 },\n\t/*::[*/0x0b/*::]*/: { n: 'ScaleCrop', t: VT_BOOL },\n\t/*::[*/0x0c/*::]*/: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t/*::[*/0x0d/*::]*/: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t/*::[*/0x0e/*::]*/: { n: 'Manager', t: VT_STRING },\n\t/*::[*/0x0f/*::]*/: { n: 'Company', t: VT_STRING },\n\t/*::[*/0x10/*::]*/: { n: 'LinksUpToDate', t: VT_BOOL },\n\t/*::[*/0x11/*::]*/: { n: 'CharacterCount', t: VT_I4 },\n\t/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },\n\t/*::[*/0x16/*::]*/: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },\n\t/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },\n\t/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },\n\t/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },\n\t/*::[*/0x1D/*::]*/: { n: 'Version', t: VT_STRING },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Title', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'Subject', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'Author', t: VT_STRING },\n\t/*::[*/0x05/*::]*/: { n: 'Keywords', t: VT_STRING },\n\t/*::[*/0x06/*::]*/: { n: 'Comments', t: VT_STRING },\n\t/*::[*/0x07/*::]*/: { n: 'Template', t: VT_STRING },\n\t/*::[*/0x08/*::]*/: { n: 'LastAuthor', t: VT_STRING },\n\t/*::[*/0x09/*::]*/: { n: 'RevNumber', t: VT_STRING },\n\t/*::[*/0x0A/*::]*/: { n: 'EditTime', t: VT_FILETIME },\n\t/*::[*/0x0B/*::]*/: { n: 'LastPrinted', t: VT_FILETIME },\n\t/*::[*/0x0C/*::]*/: { n: 'CreatedDate', t: VT_FILETIME },\n\t/*::[*/0x0D/*::]*/: { n: 'ModifiedDate', t: VT_FILETIME },\n\t/*::[*/0x0E/*::]*/: { n: 'PageCount', t: VT_I4 },\n\t/*::[*/0x0F/*::]*/: { n: 'WordCount', t: VT_I4 },\n\t/*::[*/0x10/*::]*/: { n: 'CharCount', t: VT_I4 },\n\t/*::[*/0x11/*::]*/: { n: 'Thumbnail', t: VT_CF },\n\t/*::[*/0x12/*::]*/: { n: 'Application', t: VT_STRING },\n\t/*::[*/0x13/*::]*/: { n: 'DocSecurity', t: VT_I4 },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t/*::[*/0x0001/*::]*/: \"US\", // United States\n\t/*::[*/0x0002/*::]*/: \"CA\", // Canada\n\t/*::[*/0x0003/*::]*/: \"\", // Latin America (except Brazil)\n\t/*::[*/0x0007/*::]*/: \"RU\", // Russia\n\t/*::[*/0x0014/*::]*/: \"EG\", // Egypt\n\t/*::[*/0x001E/*::]*/: \"GR\", // Greece\n\t/*::[*/0x001F/*::]*/: \"NL\", // Netherlands\n\t/*::[*/0x0020/*::]*/: \"BE\", // Belgium\n\t/*::[*/0x0021/*::]*/: \"FR\", // France\n\t/*::[*/0x0022/*::]*/: \"ES\", // Spain\n\t/*::[*/0x0024/*::]*/: \"HU\", // Hungary\n\t/*::[*/0x0027/*::]*/: \"IT\", // Italy\n\t/*::[*/0x0029/*::]*/: \"CH\", // Switzerland\n\t/*::[*/0x002B/*::]*/: \"AT\", // Austria\n\t/*::[*/0x002C/*::]*/: \"GB\", // United Kingdom\n\t/*::[*/0x002D/*::]*/: \"DK\", // Denmark\n\t/*::[*/0x002E/*::]*/: \"SE\", // Sweden\n\t/*::[*/0x002F/*::]*/: \"NO\", // Norway\n\t/*::[*/0x0030/*::]*/: \"PL\", // Poland\n\t/*::[*/0x0031/*::]*/: \"DE\", // Germany\n\t/*::[*/0x0034/*::]*/: \"MX\", // Mexico\n\t/*::[*/0x0037/*::]*/: \"BR\", // Brazil\n\t/*::[*/0x003d/*::]*/: \"AU\", // Australia\n\t/*::[*/0x0040/*::]*/: \"NZ\", // New Zealand\n\t/*::[*/0x0042/*::]*/: \"TH\", // Thailand\n\t/*::[*/0x0051/*::]*/: \"JP\", // Japan\n\t/*::[*/0x0052/*::]*/: \"KR\", // Korea\n\t/*::[*/0x0054/*::]*/: \"VN\", // Viet Nam\n\t/*::[*/0x0056/*::]*/: \"CN\", // China\n\t/*::[*/0x005A/*::]*/: \"TR\", // Turkey\n\t/*::[*/0x0069/*::]*/: \"JS\", // Ramastan\n\t/*::[*/0x00D5/*::]*/: \"DZ\", // Algeria\n\t/*::[*/0x00D8/*::]*/: \"MA\", // Morocco\n\t/*::[*/0x00DA/*::]*/: \"LY\", // Libya\n\t/*::[*/0x015F/*::]*/: \"PT\", // Portugal\n\t/*::[*/0x0162/*::]*/: \"IS\", // Iceland\n\t/*::[*/0x0166/*::]*/: \"FI\", // Finland\n\t/*::[*/0x01A4/*::]*/: \"CZ\", // Czech Republic\n\t/*::[*/0x0376/*::]*/: \"TW\", // Taiwan\n\t/*::[*/0x03C1/*::]*/: \"LB\", // Lebanon\n\t/*::[*/0x03C2/*::]*/: \"JO\", // Jordan\n\t/*::[*/0x03C3/*::]*/: \"SY\", // Syria\n\t/*::[*/0x03C4/*::]*/: \"IQ\", // Iraq\n\t/*::[*/0x03C5/*::]*/: \"KW\", // Kuwait\n\t/*::[*/0x03C6/*::]*/: \"SA\", // Saudi Arabia\n\t/*::[*/0x03CB/*::]*/: \"AE\", // United Arab Emirates\n\t/*::[*/0x03CC/*::]*/: \"IL\", // Israel\n\t/*::[*/0x03CE/*::]*/: \"QA\", // Qatar\n\t/*::[*/0x03D5/*::]*/: \"IR\", // Iran\n\t/*::[*/0xFFFF/*::]*/: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t/*::[*/0x00/*::]*/: \"#NULL!\",\n\t/*::[*/0x07/*::]*/: \"#DIV/0!\",\n\t/*::[*/0x0F/*::]*/: \"#VALUE!\",\n\t/*::[*/0x17/*::]*/: \"#REF!\",\n\t/*::[*/0x1D/*::]*/: \"#NAME?\",\n\t/*::[*/0x24/*::]*/: \"#NUM!\",\n\t/*::[*/0x2A/*::]*/: \"#N/A\",\n\t/*::[*/0x2B/*::]*/: \"#GETTING_DATA\",\n\t/*::[*/0xFF/*::]*/: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\": 0x00,\n\t\"#DIV/0!\": 0x07,\n\t\"#VALUE!\": 0x0F,\n\t\"#REF!\": 0x17,\n\t\"#NAME?\": 0x1D,\n\t\"#NUM!\": 0x24,\n\t\"#N/A\": 0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\": 0xFF\n};\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts)/*:string*/ {\n\tvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array*/ = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = writextag('Types', null, {\n\t\t'xmlns': XMLNS.CT,\n\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t});\n\n\to = o.concat([\n\t\t['xml', 'application/xml'],\n\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t/* from test files */\n\t\t['bmp', 'image/bmp'],\n\t\t['png', 'image/png'],\n\t\t['gif', 'image/gif'],\n\t\t['emf', 'image/x-emf'],\n\t\t['wmf', 'image/x-wmf'],\n\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t['pdf', 'application/pdf'],\n\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t].map(function(x) {\n\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t}));\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest/*:Array >*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base/*:string*/, file/*:string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nfunction write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ {\n\treturn 'Sheet' + 'JS ' + XLSX.version + '';\n}\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nvar CORE_PROPS_REGEX/*:Array*/ = /*#__PURE__*/(function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ]; //.concat(PseudoPropsPairs);\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob/*::, length*/)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe}/*:any*/);\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t/*::[*/0x00/*::]*/: parse_FtSkip, /* FtEnd */\n\t/*::[*/0x04/*::]*/: parse_FtSkip, /* FtMacro */\n\t/*::[*/0x05/*::]*/: parse_FtSkip, /* FtButton */\n\t/*::[*/0x06/*::]*/: parse_FtSkip, /* FtGmo */\n\t/*::[*/0x07/*::]*/: parse_FtCf, /* FtCf */\n\t/*::[*/0x08/*::]*/: parse_FtSkip, /* FtPioGrbit */\n\t/*::[*/0x09/*::]*/: parse_FtSkip, /* FtPictFmla */\n\t/*::[*/0x0A/*::]*/: parse_FtSkip, /* FtCbls */\n\t/*::[*/0x0B/*::]*/: parse_FtSkip, /* FtRbo */\n\t/*::[*/0x0C/*::]*/: parse_FtSkip, /* FtSbs */\n\t/*::[*/0x0D/*::]*/: parse_FtNts, /* FtNts */\n\t/*::[*/0x0E/*::]*/: parse_FtSkip, /* FtSbsFmla */\n\t/*::[*/0x0F/*::]*/: parse_FtSkip, /* FtGboData */\n\t/*::[*/0x10/*::]*/: parse_FtSkip, /* FtEdoData */\n\t/*::[*/0x11/*::]*/: parse_FtSkip, /* FtRboData */\n\t/*::[*/0x12/*::]*/: parse_FtSkip, /* FtCblsData */\n\t/*::[*/0x13/*::]*/: parse_FtSkip, /* FtLbsData */\n\t/*::[*/0x14/*::]*/: parse_FtSkip, /* FtCblsFmla */\n\t/*::[*/0x15/*::]*/: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2 || length == 9) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob/*::, length*/) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\n\t/* shapefile DBF extension */\n\t/*::[*/0x00/*::]*/: 20127, /*::[*/0x08/*::]*/: 865,\n\t/*::[*/0x09/*::]*/: 437, /*::[*/0x0A/*::]*/: 850,\n\t/*::[*/0x0B/*::]*/: 437, /*::[*/0x0D/*::]*/: 437,\n\t/*::[*/0x0E/*::]*/: 850, /*::[*/0x0F/*::]*/: 437,\n\t/*::[*/0x10/*::]*/: 850, /*::[*/0x11/*::]*/: 437,\n\t/*::[*/0x12/*::]*/: 850, /*::[*/0x13/*::]*/: 932,\n\t/*::[*/0x14/*::]*/: 850, /*::[*/0x15/*::]*/: 437,\n\t/*::[*/0x16/*::]*/: 850, /*::[*/0x17/*::]*/: 865,\n\t/*::[*/0x18/*::]*/: 437, /*::[*/0x19/*::]*/: 437,\n\t/*::[*/0x1A/*::]*/: 850, /*::[*/0x1B/*::]*/: 437,\n\t/*::[*/0x1C/*::]*/: 863, /*::[*/0x1D/*::]*/: 850,\n\t/*::[*/0x1F/*::]*/: 852, /*::[*/0x22/*::]*/: 852,\n\t/*::[*/0x23/*::]*/: 852, /*::[*/0x24/*::]*/: 860,\n\t/*::[*/0x25/*::]*/: 850, /*::[*/0x26/*::]*/: 866,\n\t/*::[*/0x37/*::]*/: 850, /*::[*/0x40/*::]*/: 852,\n\t/*::[*/0x4D/*::]*/: 936, /*::[*/0x4E/*::]*/: 949,\n\t/*::[*/0x4F/*::]*/: 950, /*::[*/0x50/*::]*/: 874,\n\t/*::[*/0x57/*::]*/: 1252, /*::[*/0x58/*::]*/: 1252,\n\t/*::[*/0x59/*::]*/: 1252, /*::[*/0x6C/*::]*/: 863,\n\t/*::[*/0x86/*::]*/: 737, /*::[*/0x87/*::]*/: 852,\n\t/*::[*/0x88/*::]*/: 857, /*::[*/0xCC/*::]*/: 1257,\n\n\t/*::[*/0xFF/*::]*/: 16969\n};\nvar dbf_reverse_map = evert({\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\t/*::[*/0x00/*::]*/: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = $cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/\\s+$/,\"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tvar colwidths/*:Array*/ = [];\n\tvar coldecimals/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tmaxlen = Math.max(maxlen, String(col[j]).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[/*::String(*/current_ansi/*::)*/] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'W': break; /* window? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;\n\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tarr[R][C][1] = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F':\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*//*::, opts*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/)/*:string*/ {\n\t\tvar preamble/*:Array*/ = [\"ID;PWXL;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = /*#__PURE__*/(function() {\n\t\tvar push_field = function pf(o/*:Array*/, topic/*:string*/, v/*:number*/, n/*:number*/, s/*:string*/) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o/*:Array*/, type/*:number*/, v/*:any*/, s/*:string*/) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\t\tvar o/*:Array*/ = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t/*::[*/0x2C/*::]*/: ',',\n\t\t/*::[*/0x09/*::]*/: \"\\t\",\n\t\t/*::[*/0x3B/*::]*/: ';',\n\t\t/*::[*/0x7C/*::]*/: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t/*::[*/0x2C/*::]*/: 3,\n\t\t/*::[*/0x09/*::]*/: 2,\n\t\t/*::[*/0x3B/*::]*/: 1,\n\t\t/*::[*/0x7C/*::]*/: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ((o.dense ? [] : {})/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (s[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = Array.isArray(ws);\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n\t\t\t\t} else {\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, v) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, v) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t0x6F: [\"T\", 1]\n\t};\n\tvar BinOpTab = [\n\t\t \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"CALCMODE\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCORDER\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"SPLIT\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SYNC\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"RANGE\", f:parse_RANGE },\n\t\t/*::[*/0x0007/*::]*/: { n:\"WINDOW1\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"COLW1\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"WINTWO\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"COLW2\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"NAME\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"BLANK\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t/*::[*/0x000E/*::]*/: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t/*::[*/0x000F/*::]*/: { n:\"LABEL\", f:parse_LABEL },\n\t\t/*::[*/0x0010/*::]*/: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t/*::[*/0x0018/*::]*/: { n:\"TABLE\" },\n\t\t/*::[*/0x0019/*::]*/: { n:\"ORANGE\" },\n\t\t/*::[*/0x001A/*::]*/: { n:\"PRANGE\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"SRANGE\" },\n\t\t/*::[*/0x001C/*::]*/: { n:\"FRANGE\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"KRANGE1\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"HRANGE\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"KRANGE2\" },\n\t\t/*::[*/0x0024/*::]*/: { n:\"PROTEC\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"FOOTER\" },\n\t\t/*::[*/0x0026/*::]*/: { n:\"HEADER\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"SETUP\" },\n\t\t/*::[*/0x0028/*::]*/: { n:\"MARGINS\" },\n\t\t/*::[*/0x0029/*::]*/: { n:\"LABELFMT\" },\n\t\t/*::[*/0x002A/*::]*/: { n:\"TITLES\" },\n\t\t/*::[*/0x002B/*::]*/: { n:\"SHEETJS\" },\n\t\t/*::[*/0x002D/*::]*/: { n:\"GRAPH\" },\n\t\t/*::[*/0x002E/*::]*/: { n:\"NGRAPH\" },\n\t\t/*::[*/0x002F/*::]*/: { n:\"CALCCOUNT\" },\n\t\t/*::[*/0x0030/*::]*/: { n:\"UNFORMATTED\" },\n\t\t/*::[*/0x0031/*::]*/: { n:\"CURSORW12\" },\n\t\t/*::[*/0x0032/*::]*/: { n:\"WINDOW\" },\n\t\t/*::[*/0x0033/*::]*/: { n:\"STRING\", f:parse_LABEL },\n\t\t/*::[*/0x0037/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0038/*::]*/: { n:\"LOCKED\" },\n\t\t/*::[*/0x003C/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x003D/*::]*/: { n:\"QUERYNAME\" },\n\t\t/*::[*/0x003E/*::]*/: { n:\"PRINT\" },\n\t\t/*::[*/0x003F/*::]*/: { n:\"PRINTNAME\" },\n\t\t/*::[*/0x0040/*::]*/: { n:\"GRAPH2\" },\n\t\t/*::[*/0x0041/*::]*/: { n:\"GRAPHNAME\" },\n\t\t/*::[*/0x0042/*::]*/: { n:\"ZOOM\" },\n\t\t/*::[*/0x0043/*::]*/: { n:\"SYMSPLIT\" },\n\t\t/*::[*/0x0044/*::]*/: { n:\"NSROWS\" },\n\t\t/*::[*/0x0045/*::]*/: { n:\"NSCOLS\" },\n\t\t/*::[*/0x0046/*::]*/: { n:\"RULER\" },\n\t\t/*::[*/0x0047/*::]*/: { n:\"NNAME\" },\n\t\t/*::[*/0x0048/*::]*/: { n:\"ACOMM\" },\n\t\t/*::[*/0x0049/*::]*/: { n:\"AMACRO\" },\n\t\t/*::[*/0x004A/*::]*/: { n:\"PARSE\" },\n\t\t/*::[*/0x0066/*::]*/: { n:\"PRANGES??\" },\n\t\t/*::[*/0x0067/*::]*/: { n:\"RRANGES??\" },\n\t\t/*::[*/0x0068/*::]*/: { n:\"FNAME??\" },\n\t\t/*::[*/0x0069/*::]*/: { n:\"MRANGES??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00DE/*::]*/: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\" },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCSET\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"WINDOWSET\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SHEETCELLPTR\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"SHEETLAYOUT\" },\n\t\t/*::[*/0x0007/*::]*/: { n:\"COLUMNWIDTH\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"HIDDENCOLUMN\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"USERRANGE\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"SYSTEMRANGE\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"ZEROFORCE\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"SORTKEYDIR\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"FILESEAL\" },\n\t\t/*::[*/0x000E/*::]*/: { n:\"DATAFILLNUMS\" },\n\t\t/*::[*/0x000F/*::]*/: { n:\"PRINTMAIN\" },\n\t\t/*::[*/0x0010/*::]*/: { n:\"PRINTSTRING\" },\n\t\t/*::[*/0x0011/*::]*/: { n:\"GRAPHMAIN\" },\n\t\t/*::[*/0x0012/*::]*/: { n:\"GRAPHSTRING\" },\n\t\t/*::[*/0x0013/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0014/*::]*/: { n:\"ERRCELL\" },\n\t\t/*::[*/0x0015/*::]*/: { n:\"NACELL\" },\n\t\t/*::[*/0x0016/*::]*/: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t/*::[*/0x0017/*::]*/: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t/*::[*/0x0018/*::]*/: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t/*::[*/0x0019/*::]*/: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t/*::[*/0x001A/*::]*/: { n:\"FORMULA1A\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t/*::[*/0x001C/*::]*/: { n:\"DTLABELMISC\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"DTLABELCELL\" },\n\t\t/*::[*/0x001E/*::]*/: { n:\"GRAPHWINDOW\" },\n\t\t/*::[*/0x001F/*::]*/: { n:\"CPA\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"LPLAUTO\" },\n\t\t/*::[*/0x0021/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x0022/*::]*/: { n:\"HIDDENSHEET\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t/*::[*/0x0026/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t/*::[*/0x0028/*::]*/: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t/*::[*/0x008E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0093/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0096/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0097/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0098/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0099/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00A3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B1/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B8/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BA/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BB/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BC/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00CD/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00D0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0100/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0103/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0104/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0105/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0106/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0107/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0109/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010F/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0180/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0185/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0186/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0189/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x018C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0200/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0202/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0201/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0204/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0205/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0280/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0281/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0282/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0283/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0284/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0285/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0286/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0287/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0288/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0292/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0293/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0294/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0295/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0296/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0299/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x029A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0300/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0304/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0601/*::]*/: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t/*::[*/0x0640/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0642/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0701/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0702/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0703/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0704/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0780/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0800/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0801/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0804/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0A80/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x2AF6/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x3231/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6E49/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6F44/*::]*/: { n:\"??\" },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
    ') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = /*#__PURE__*/(function() {\n\tfunction rtf_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\t/* TODO: this is a stub */\n\tfunction rtf_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\n\t\tvar rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n\t\tif(!rows.length) throw new Error(\"RTF missing table\");\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:rows.length - 1}}/*:any*/);\n\t\trows.forEach(function(rowtf, R) {\n\t\t\tif(Array.isArray(ws)) ws[R] = [];\n\t\t\tvar rtfre = /\\\\\\w+\\b/g;\n\t\t\tvar last_index = 0;\n\t\t\tvar res;\n\t\t\tvar C = -1;\n\t\t\twhile((res = rtfre.exec(rowtf))) {\n\t\t\t\tswitch(res[0]) {\n\t\t\t\t\tcase \"\\\\cell\":\n\t\t\t\t\t\tvar data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n\t\t\t\t\t\tif(data[0] == \" \") data = data.slice(1);\n\t\t\t\t\t\t++C;\n\t\t\t\t\t\tif(data.length) {\n\t\t\t\t\t\t\t// TODO: value parsing, including codepage adjustments\n\t\t\t\t\t\t\tvar cell = {v: data, t:\"s\"};\n\t\t\t\t\t\t\tif(Array.isArray(ws)) ws[R][C] = cell;\n\t\t\t\t\t\t\telse ws[encode_cell({r:R, c:C})] = cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlast_index = rtfre.lastIndex;\n\t\t\t}\n\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t});\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws/*:Worksheet*//*::, opts*/)/*:string*/ {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF_load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF_load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n while (cnt-- > 0)\n out.push([data.read_shift(4), data.read_shift(4)]);\n return out;\n}\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = { Types: [], Cell: [], Value: [] };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function(val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({ name: val.name });\n break;\n case 51:\n val.forEach(function(r) {\n if (metatype == 1)\n out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n else if (metatype == 0)\n out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n });\n break;\n case 337:\n metatype = val ? 1 : 0;\n break;\n case 338:\n metatype = 2;\n break;\n case 35:\n state.push(RT);\n pass = true;\n break;\n case 36:\n state.pop();\n pass = false;\n break;\n default:\n if (R.T) {\n } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return out;\n}\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = { Types: [], Cell: [], Value: [] };\n if (!data)\n return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function(x) {\n var y = parsexmltag(x);\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n case \"\":\n case \"\":\n break;\n case \"\":\n pass = false;\n break;\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ']*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId/*:number*/, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
    ',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nfunction sheet_insert_comments(sheet, comments/*:Array*/, threaded/*:boolean*/, people/*:?Array*/) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"\" + a + \"\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"\" + \"tc=\" + w.ID + \"\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"SheetJ5\"); }\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [];\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\telse d[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tts.push(c.t||\"\");\n\t\t});\n\t\to.push('');\n\t\tif(ts.length <= 1) o.push(writetag(\"t\", escapexml(ts[0]||\"\")));\n\t\telse {\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\tvar t = \"Comment:\\n \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t}\n\t\to.push('');\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '': case '': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '
    ': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n cfb.FullPaths.forEach(function(p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function(p, i) {\n if (i == 0)\n return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\")\n CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t/*::[*/0x01/*::]*/: { n:'PtgExp', f:parse_PtgExp },\n\t/*::[*/0x02/*::]*/: { n:'PtgTbl', f:parse_PtgTbl },\n\t/*::[*/0x03/*::]*/: { n:'PtgAdd', f:parseread1 },\n\t/*::[*/0x04/*::]*/: { n:'PtgSub', f:parseread1 },\n\t/*::[*/0x05/*::]*/: { n:'PtgMul', f:parseread1 },\n\t/*::[*/0x06/*::]*/: { n:'PtgDiv', f:parseread1 },\n\t/*::[*/0x07/*::]*/: { n:'PtgPower', f:parseread1 },\n\t/*::[*/0x08/*::]*/: { n:'PtgConcat', f:parseread1 },\n\t/*::[*/0x09/*::]*/: { n:'PtgLt', f:parseread1 },\n\t/*::[*/0x0A/*::]*/: { n:'PtgLe', f:parseread1 },\n\t/*::[*/0x0B/*::]*/: { n:'PtgEq', f:parseread1 },\n\t/*::[*/0x0C/*::]*/: { n:'PtgGe', f:parseread1 },\n\t/*::[*/0x0D/*::]*/: { n:'PtgGt', f:parseread1 },\n\t/*::[*/0x0E/*::]*/: { n:'PtgNe', f:parseread1 },\n\t/*::[*/0x0F/*::]*/: { n:'PtgIsect', f:parseread1 },\n\t/*::[*/0x10/*::]*/: { n:'PtgUnion', f:parseread1 },\n\t/*::[*/0x11/*::]*/: { n:'PtgRange', f:parseread1 },\n\t/*::[*/0x12/*::]*/: { n:'PtgUplus', f:parseread1 },\n\t/*::[*/0x13/*::]*/: { n:'PtgUminus', f:parseread1 },\n\t/*::[*/0x14/*::]*/: { n:'PtgPercent', f:parseread1 },\n\t/*::[*/0x15/*::]*/: { n:'PtgParen', f:parseread1 },\n\t/*::[*/0x16/*::]*/: { n:'PtgMissArg', f:parseread1 },\n\t/*::[*/0x17/*::]*/: { n:'PtgStr', f:parse_PtgStr },\n\t/*::[*/0x1A/*::]*/: { n:'PtgSheet', f:parse_PtgSheet },\n\t/*::[*/0x1B/*::]*/: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t/*::[*/0x1C/*::]*/: { n:'PtgErr', f:parse_PtgErr },\n\t/*::[*/0x1D/*::]*/: { n:'PtgBool', f:parse_PtgBool },\n\t/*::[*/0x1E/*::]*/: { n:'PtgInt', f:parse_PtgInt },\n\t/*::[*/0x1F/*::]*/: { n:'PtgNum', f:parse_PtgNum },\n\t/*::[*/0x20/*::]*/: { n:'PtgArray', f:parse_PtgArray },\n\t/*::[*/0x21/*::]*/: { n:'PtgFunc', f:parse_PtgFunc },\n\t/*::[*/0x22/*::]*/: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t/*::[*/0x23/*::]*/: { n:'PtgName', f:parse_PtgName },\n\t/*::[*/0x24/*::]*/: { n:'PtgRef', f:parse_PtgRef },\n\t/*::[*/0x25/*::]*/: { n:'PtgArea', f:parse_PtgArea },\n\t/*::[*/0x26/*::]*/: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t/*::[*/0x27/*::]*/: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t/*::[*/0x28/*::]*/: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t/*::[*/0x29/*::]*/: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t/*::[*/0x2A/*::]*/: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t/*::[*/0x2B/*::]*/: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t/*::[*/0x2C/*::]*/: { n:'PtgRefN', f:parse_PtgRefN },\n\t/*::[*/0x2D/*::]*/: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t/*::[*/0x2E/*::]*/: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t/*::[*/0x2F/*::]*/: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t/*::[*/0x39/*::]*/: { n:'PtgNameX', f:parse_PtgNameX },\n\t/*::[*/0x3A/*::]*/: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t/*::[*/0x3B/*::]*/: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t/*::[*/0x3C/*::]*/: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t/*::[*/0x3D/*::]*/: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t/*::[*/0xFF/*::]*/: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t/*::[*/0x40/*::]*/: 0x20, /*::[*/0x60/*::]*/: 0x20,\n\t/*::[*/0x41/*::]*/: 0x21, /*::[*/0x61/*::]*/: 0x21,\n\t/*::[*/0x42/*::]*/: 0x22, /*::[*/0x62/*::]*/: 0x22,\n\t/*::[*/0x43/*::]*/: 0x23, /*::[*/0x63/*::]*/: 0x23,\n\t/*::[*/0x44/*::]*/: 0x24, /*::[*/0x64/*::]*/: 0x24,\n\t/*::[*/0x45/*::]*/: 0x25, /*::[*/0x65/*::]*/: 0x25,\n\t/*::[*/0x46/*::]*/: 0x26, /*::[*/0x66/*::]*/: 0x26,\n\t/*::[*/0x47/*::]*/: 0x27, /*::[*/0x67/*::]*/: 0x27,\n\t/*::[*/0x48/*::]*/: 0x28, /*::[*/0x68/*::]*/: 0x28,\n\t/*::[*/0x49/*::]*/: 0x29, /*::[*/0x69/*::]*/: 0x29,\n\t/*::[*/0x4A/*::]*/: 0x2A, /*::[*/0x6A/*::]*/: 0x2A,\n\t/*::[*/0x4B/*::]*/: 0x2B, /*::[*/0x6B/*::]*/: 0x2B,\n\t/*::[*/0x4C/*::]*/: 0x2C, /*::[*/0x6C/*::]*/: 0x2C,\n\t/*::[*/0x4D/*::]*/: 0x2D, /*::[*/0x6D/*::]*/: 0x2D,\n\t/*::[*/0x4E/*::]*/: 0x2E, /*::[*/0x6E/*::]*/: 0x2E,\n\t/*::[*/0x4F/*::]*/: 0x2F, /*::[*/0x6F/*::]*/: 0x2F,\n\t/*::[*/0x58/*::]*/: 0x22, /*::[*/0x78/*::]*/: 0x22,\n\t/*::[*/0x59/*::]*/: 0x39, /*::[*/0x79/*::]*/: 0x39,\n\t/*::[*/0x5A/*::]*/: 0x3A, /*::[*/0x7A/*::]*/: 0x3A,\n\t/*::[*/0x5B/*::]*/: 0x3B, /*::[*/0x7B/*::]*/: 0x3B,\n\t/*::[*/0x5C/*::]*/: 0x3C, /*::[*/0x7C/*::]*/: 0x3C,\n\t/*::[*/0x5D/*::]*/: 0x3D, /*::[*/0x7D/*::]*/: 0x3D\n};\n\nvar Ptg18 = {\n\t/*::[*/0x01/*::]*/: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t/*::[*/0x02/*::]*/: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t/*::[*/0x03/*::]*/: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t/*::[*/0x06/*::]*/: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t/*::[*/0x07/*::]*/: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t/*::[*/0x0A/*::]*/: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t/*::[*/0x0B/*::]*/: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t/*::[*/0x0D/*::]*/: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t/*::[*/0x0F/*::]*/: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t/*::[*/0x10/*::]*/: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t/*::[*/0x19/*::]*/: { n:'PtgList', f:parse_PtgList },\n\t/*::[*/0x1D/*::]*/: { n:'PtgSxName', f:parse_PtgSxName },\n\t/*::[*/0xFF/*::]*/: {}\n};\nvar Ptg19 = {\n\t/*::[*/0x00/*::]*/: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t/*::[*/0x01/*::]*/: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t/*::[*/0x02/*::]*/: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t/*::[*/0x04/*::]*/: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t/*::[*/0x08/*::]*/: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t/*::[*/0x10/*::]*/: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t/*::[*/0x20/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x21/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x40/*::]*/: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t/*::[*/0x41/*::]*/: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t/*::[*/0x80/*::]*/: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF_load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2= /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z' && !cell.f) return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=d.match(match_v))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && /*::cref != null && */cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(8 + 4 * cell.v.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/)/*:boolean*/ {\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_theme(data/*:string*/, name/*:string*/, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\n\nfunction write_wb(wb, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data/*:SST*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data/*:Array*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\n\nfunction write_xlmeta(name/*:string*/) {\n\treturn (name.slice(-4)===\".bin\" ? write_xlmeta_bin : write_xlmeta_xml)();\n}\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\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\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF_load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(/*::wb, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"
    \" + t + \"
    \");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002f /* FilePass */: case 0x0195 /* FileLock */: case 0x00e1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ((options.dense ? [] : {})/*:any*/);\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* 'BOF' */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t/*::[*/0x0009/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0209/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0409/*::]*/:4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t/*::[*/0x0200/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0300/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0400/*::]*/:4,\n\t\t\t\t\t\t/*::[*/0x0500/*::]*/:5,\n\t\t\t\t\t\t/*::[*/0x0600/*::]*/:8,\n\t\t\t\t\t\t/*::[*/0x0002/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0007/*::]*/:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\n\t\t\t\t\tif(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF_load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t/*::[*/0x0000/*::]*/: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t/*::[*/0x0006/*::]*/: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t/*::[*/0x0007/*::]*/: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t/*::[*/0x000A/*::]*/: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t/*::[*/0x000B/*::]*/: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t/*::[*/0x000C/*::]*/: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t/*::[*/0x000D/*::]*/: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t/*::[*/0x000E/*::]*/: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t/*::[*/0x000F/*::]*/: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t/*::[*/0x0010/*::]*/: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t/*::[*/0x0011/*::]*/: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t/*::[*/0x0012/*::]*/: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t/*::[*/0x0013/*::]*/: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t/*::[*/0x0014/*::]*/: { /* n:\"BrtPCDIMissing\" */ },\n\t/*::[*/0x0015/*::]*/: { /* n:\"BrtPCDINumber\" */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"BrtPCDIBoolean\" */ },\n\t/*::[*/0x0017/*::]*/: { /* n:\"BrtPCDIError\" */ },\n\t/*::[*/0x0018/*::]*/: { /* n:\"BrtPCDIString\" */ },\n\t/*::[*/0x0019/*::]*/: { /* n:\"BrtPCDIDatetime\" */ },\n\t/*::[*/0x001A/*::]*/: { /* n:\"BrtPCDIIndex\" */ },\n\t/*::[*/0x001B/*::]*/: { /* n:\"BrtPCDIAMissing\" */ },\n\t/*::[*/0x001C/*::]*/: { /* n:\"BrtPCDIANumber\" */ },\n\t/*::[*/0x001D/*::]*/: { /* n:\"BrtPCDIABoolean\" */ },\n\t/*::[*/0x001E/*::]*/: { /* n:\"BrtPCDIAError\" */ },\n\t/*::[*/0x001F/*::]*/: { /* n:\"BrtPCDIAString\" */ },\n\t/*::[*/0x0020/*::]*/: { /* n:\"BrtPCDIADatetime\" */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"BrtPCRRecord\" */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"BrtPCRRecordDt\" */ },\n\t/*::[*/0x0023/*::]*/: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t/*::[*/0x0024/*::]*/: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t/*::[*/0x0025/*::]*/: { /* n:\"BrtACBegin\", */ T:1 },\n\t/*::[*/0x0026/*::]*/: { /* n:\"BrtACEnd\", */ T:-1 },\n\t/*::[*/0x0027/*::]*/: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t/*::[*/0x0028/*::]*/: { /* n:\"BrtIndexRowBlock\" */ },\n\t/*::[*/0x002A/*::]*/: { /* n:\"BrtIndexBlock\" */ },\n\t/*::[*/0x002B/*::]*/: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t/*::[*/0x002C/*::]*/: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t/*::[*/0x002D/*::]*/: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t/*::[*/0x002E/*::]*/: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t/*::[*/0x002F/*::]*/: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t/*::[*/0x0030/*::]*/: { /* n:\"BrtStyle\" */ },\n\t/*::[*/0x0031/*::]*/: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t/*::[*/0x0032/*::]*/: { /* n:\"BrtValueMeta\" */ },\n\t/*::[*/0x0033/*::]*/: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t/*::[*/0x0034/*::]*/: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t/*::[*/0x0035/*::]*/: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t/*::[*/0x0036/*::]*/: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t/*::[*/0x0037/*::]*/: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t/*::[*/0x0038/*::]*/: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t/*::[*/0x0039/*::]*/: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t/*::[*/0x003A/*::]*/: { /* n:\"BrtMdxMbrIstr\" */ },\n\t/*::[*/0x003B/*::]*/: { /* n:\"BrtStr\" */ },\n\t/*::[*/0x003C/*::]*/: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x003E/*::]*/: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t/*::[*/0x003F/*::]*/: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t/*::[*/0x0040/*::]*/: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t/*::[*/0x0041/*::]*/: { /* n:\"BrtSxvcellNum\" */ },\n\t/*::[*/0x0042/*::]*/: { /* n:\"BrtSxvcellStr\" */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BrtSxvcellBool\" */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BrtSxvcellErr\" */ },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BrtSxvcellDate\" */ },\n\t/*::[*/0x0046/*::]*/: { /* n:\"BrtSxvcellNil\" */ },\n\t/*::[*/0x0080/*::]*/: { /* n:\"BrtFileVersion\" */ },\n\t/*::[*/0x0081/*::]*/: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t/*::[*/0x0082/*::]*/: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t/*::[*/0x0084/*::]*/: { /* n:\"BrtEndBook\", */ T:-1 },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t/*::[*/0x0087/*::]*/: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t/*::[*/0x0088/*::]*/: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t/*::[*/0x0089/*::]*/: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t/*::[*/0x008A/*::]*/: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t/*::[*/0x008B/*::]*/: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t/*::[*/0x008C/*::]*/: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t/*::[*/0x008D/*::]*/: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t/*::[*/0x008E/*::]*/: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t/*::[*/0x008F/*::]*/: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t/*::[*/0x0091/*::]*/: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t/*::[*/0x0092/*::]*/: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t/*::[*/0x0093/*::]*/: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t/*::[*/0x0094/*::]*/: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t/*::[*/0x0097/*::]*/: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t/*::[*/0x0098/*::]*/: { /* n:\"BrtSel\" */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t/*::[*/0x009A/*::]*/: { /* n:\"BrtWbFactoid\" */ },\n\t/*::[*/0x009B/*::]*/: { /* n:\"BrtFileRecover\" */ },\n\t/*::[*/0x009C/*::]*/: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t/*::[*/0x009D/*::]*/: { /* n:\"BrtCalcProp\" */ },\n\t/*::[*/0x009E/*::]*/: { /* n:\"BrtBookView\" */ },\n\t/*::[*/0x009F/*::]*/: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t/*::[*/0x00A0/*::]*/: { /* n:\"BrtEndSst\", */ T:-1 },\n\t/*::[*/0x00A1/*::]*/: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t/*::[*/0x00A2/*::]*/: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t/*::[*/0x00A3/*::]*/: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t/*::[*/0x00A4/*::]*/: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t/*::[*/0x00A5/*::]*/: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t/*::[*/0x00A6/*::]*/: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t/*::[*/0x00A7/*::]*/: { /* n:\"BrtFilter\" */ },\n\t/*::[*/0x00A8/*::]*/: { /* n:\"BrtColorFilter\" */ },\n\t/*::[*/0x00A9/*::]*/: { /* n:\"BrtIconFilter\" */ },\n\t/*::[*/0x00AA/*::]*/: { /* n:\"BrtTop10Filter\" */ },\n\t/*::[*/0x00AB/*::]*/: { /* n:\"BrtDynamicFilter\" */ },\n\t/*::[*/0x00AC/*::]*/: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t/*::[*/0x00AD/*::]*/: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t/*::[*/0x00AE/*::]*/: { /* n:\"BrtCustomFilter\" */ },\n\t/*::[*/0x00AF/*::]*/: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t/*::[*/0x00B0/*::]*/: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t/*::[*/0x00B1/*::]*/: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t/*::[*/0x00B2/*::]*/: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t/*::[*/0x00B3/*::]*/: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t/*::[*/0x00B4/*::]*/: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t/*::[*/0x00B5/*::]*/: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t/*::[*/0x00B6/*::]*/: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t/*::[*/0x00B7/*::]*/: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t/*::[*/0x00B8/*::]*/: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t/*::[*/0x00B9/*::]*/: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t/*::[*/0x00BA/*::]*/: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t/*::[*/0x00BB/*::]*/: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t/*::[*/0x00BC/*::]*/: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t/*::[*/0x00BD/*::]*/: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t/*::[*/0x00BE/*::]*/: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t/*::[*/0x00BF/*::]*/: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t/*::[*/0x00C0/*::]*/: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t/*::[*/0x00C1/*::]*/: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t/*::[*/0x00C2/*::]*/: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t/*::[*/0x00C3/*::]*/: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t/*::[*/0x00C4/*::]*/: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t/*::[*/0x00C5/*::]*/: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t/*::[*/0x00C6/*::]*/: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t/*::[*/0x00C7/*::]*/: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t/*::[*/0x00C8/*::]*/: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t/*::[*/0x00C9/*::]*/: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t/*::[*/0x00CA/*::]*/: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t/*::[*/0x00CB/*::]*/: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t/*::[*/0x00CC/*::]*/: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t/*::[*/0x00CD/*::]*/: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t/*::[*/0x00CE/*::]*/: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t/*::[*/0x00CF/*::]*/: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t/*::[*/0x00D0/*::]*/: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t/*::[*/0x00D1/*::]*/: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t/*::[*/0x00D2/*::]*/: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t/*::[*/0x00D3/*::]*/: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t/*::[*/0x00D4/*::]*/: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t/*::[*/0x00D5/*::]*/: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t/*::[*/0x00D6/*::]*/: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t/*::[*/0x00D7/*::]*/: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t/*::[*/0x00D8/*::]*/: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t/*::[*/0x00D9/*::]*/: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t/*::[*/0x00DA/*::]*/: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t/*::[*/0x00DB/*::]*/: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t/*::[*/0x00DC/*::]*/: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t/*::[*/0x00DD/*::]*/: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t/*::[*/0x00DE/*::]*/: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t/*::[*/0x00DF/*::]*/: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t/*::[*/0x00E0/*::]*/: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t/*::[*/0x00E1/*::]*/: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t/*::[*/0x00E2/*::]*/: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t/*::[*/0x00E3/*::]*/: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t/*::[*/0x00E4/*::]*/: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t/*::[*/0x00E5/*::]*/: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t/*::[*/0x00E6/*::]*/: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t/*::[*/0x00E7/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t/*::[*/0x00E8/*::]*/: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t/*::[*/0x00E9/*::]*/: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t/*::[*/0x00EA/*::]*/: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t/*::[*/0x00EB/*::]*/: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t/*::[*/0x00EC/*::]*/: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t/*::[*/0x00ED/*::]*/: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t/*::[*/0x00EE/*::]*/: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t/*::[*/0x00EF/*::]*/: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t/*::[*/0x00F0/*::]*/: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t/*::[*/0x00F1/*::]*/: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t/*::[*/0x00F2/*::]*/: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t/*::[*/0x00F3/*::]*/: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t/*::[*/0x00F4/*::]*/: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t/*::[*/0x00F5/*::]*/: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t/*::[*/0x00F6/*::]*/: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t/*::[*/0x00F7/*::]*/: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t/*::[*/0x00F8/*::]*/: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t/*::[*/0x00F9/*::]*/: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t/*::[*/0x00FA/*::]*/: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t/*::[*/0x00FB/*::]*/: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t/*::[*/0x00FC/*::]*/: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t/*::[*/0x00FD/*::]*/: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t/*::[*/0x00FE/*::]*/: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t/*::[*/0x00FF/*::]*/: { /* n:\"BrtBeginPName\", */ T:1 },\n\t/*::[*/0x0100/*::]*/: { /* n:\"BrtEndPName\", */ T:-1 },\n\t/*::[*/0x0101/*::]*/: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t/*::[*/0x0102/*::]*/: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t/*::[*/0x0103/*::]*/: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t/*::[*/0x0104/*::]*/: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t/*::[*/0x0105/*::]*/: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t/*::[*/0x0106/*::]*/: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t/*::[*/0x0107/*::]*/: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t/*::[*/0x0108/*::]*/: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t/*::[*/0x0109/*::]*/: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t/*::[*/0x010A/*::]*/: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t/*::[*/0x010B/*::]*/: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t/*::[*/0x010C/*::]*/: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t/*::[*/0x010D/*::]*/: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t/*::[*/0x010E/*::]*/: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t/*::[*/0x010F/*::]*/: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t/*::[*/0x0110/*::]*/: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t/*::[*/0x0111/*::]*/: { /* n:\"BrtBeginDims\", */ T:1 },\n\t/*::[*/0x0112/*::]*/: { /* n:\"BrtEndDims\", */ T:-1 },\n\t/*::[*/0x0113/*::]*/: { /* n:\"BrtBeginDim\", */ T:1 },\n\t/*::[*/0x0114/*::]*/: { /* n:\"BrtEndDim\", */ T:-1 },\n\t/*::[*/0x0115/*::]*/: { /* n:\"BrtIndexPartEnd\" */ },\n\t/*::[*/0x0116/*::]*/: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t/*::[*/0x0117/*::]*/: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t/*::[*/0x0118/*::]*/: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t/*::[*/0x0119/*::]*/: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t/*::[*/0x011A/*::]*/: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t/*::[*/0x011B/*::]*/: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t/*::[*/0x011C/*::]*/: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t/*::[*/0x011D/*::]*/: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t/*::[*/0x011E/*::]*/: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t/*::[*/0x011F/*::]*/: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t/*::[*/0x0120/*::]*/: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t/*::[*/0x0121/*::]*/: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t/*::[*/0x0122/*::]*/: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t/*::[*/0x0123/*::]*/: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t/*::[*/0x0124/*::]*/: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t/*::[*/0x0125/*::]*/: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t/*::[*/0x0126/*::]*/: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t/*::[*/0x0127/*::]*/: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t/*::[*/0x0128/*::]*/: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t/*::[*/0x0129/*::]*/: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t/*::[*/0x012A/*::]*/: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t/*::[*/0x012B/*::]*/: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t/*::[*/0x012C/*::]*/: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t/*::[*/0x012D/*::]*/: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t/*::[*/0x012E/*::]*/: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t/*::[*/0x012F/*::]*/: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t/*::[*/0x0130/*::]*/: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t/*::[*/0x0131/*::]*/: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t/*::[*/0x0132/*::]*/: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t/*::[*/0x0133/*::]*/: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t/*::[*/0x0134/*::]*/: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t/*::[*/0x0135/*::]*/: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t/*::[*/0x0136/*::]*/: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t/*::[*/0x0137/*::]*/: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t/*::[*/0x0138/*::]*/: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t/*::[*/0x0139/*::]*/: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t/*::[*/0x013A/*::]*/: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t/*::[*/0x013B/*::]*/: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t/*::[*/0x013C/*::]*/: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t/*::[*/0x013D/*::]*/: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t/*::[*/0x013E/*::]*/: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t/*::[*/0x013F/*::]*/: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t/*::[*/0x0140/*::]*/: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t/*::[*/0x0141/*::]*/: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t/*::[*/0x0142/*::]*/: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t/*::[*/0x0143/*::]*/: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t/*::[*/0x0144/*::]*/: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t/*::[*/0x0145/*::]*/: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t/*::[*/0x0146/*::]*/: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t/*::[*/0x0147/*::]*/: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t/*::[*/0x0148/*::]*/: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t/*::[*/0x0149/*::]*/: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t/*::[*/0x014A/*::]*/: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t/*::[*/0x014B/*::]*/: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t/*::[*/0x014C/*::]*/: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t/*::[*/0x014D/*::]*/: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t/*::[*/0x014E/*::]*/: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t/*::[*/0x014F/*::]*/: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t/*::[*/0x0150/*::]*/: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t/*::[*/0x0151/*::]*/: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t/*::[*/0x0152/*::]*/: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t/*::[*/0x0153/*::]*/: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t/*::[*/0x0154/*::]*/: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t/*::[*/0x0155/*::]*/: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t/*::[*/0x0156/*::]*/: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t/*::[*/0x0157/*::]*/: { /* n:\"BrtBeginList\", */ T:1 },\n\t/*::[*/0x0158/*::]*/: { /* n:\"BrtEndList\", */ T:-1 },\n\t/*::[*/0x0159/*::]*/: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t/*::[*/0x015A/*::]*/: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t/*::[*/0x015B/*::]*/: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t/*::[*/0x015C/*::]*/: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t/*::[*/0x015D/*::]*/: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t/*::[*/0x015E/*::]*/: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t/*::[*/0x015F/*::]*/: { /* n:\"BrtListCCFmla\" */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"BrtListTrFmla\" */ },\n\t/*::[*/0x0161/*::]*/: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t/*::[*/0x0162/*::]*/: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t/*::[*/0x0163/*::]*/: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t/*::[*/0x0165/*::]*/: { /* n:\"BrtSupSelf\" */ },\n\t/*::[*/0x0166/*::]*/: { /* n:\"BrtSupSame\" */ },\n\t/*::[*/0x0167/*::]*/: { /* n:\"BrtSupTabs\" */ },\n\t/*::[*/0x0168/*::]*/: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t/*::[*/0x0169/*::]*/: { /* n:\"BrtPlaceholderName\" */ },\n\t/*::[*/0x016A/*::]*/: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x016B/*::]*/: { /* n:\"BrtExternTableStart\" */ },\n\t/*::[*/0x016C/*::]*/: { /* n:\"BrtExternTableEnd\" */ },\n\t/*::[*/0x016E/*::]*/: { /* n:\"BrtExternRowHdr\" */ },\n\t/*::[*/0x016F/*::]*/: { /* n:\"BrtExternCellBlank\" */ },\n\t/*::[*/0x0170/*::]*/: { /* n:\"BrtExternCellReal\" */ },\n\t/*::[*/0x0171/*::]*/: { /* n:\"BrtExternCellBool\" */ },\n\t/*::[*/0x0172/*::]*/: { /* n:\"BrtExternCellError\" */ },\n\t/*::[*/0x0173/*::]*/: { /* n:\"BrtExternCellString\" */ },\n\t/*::[*/0x0174/*::]*/: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t/*::[*/0x0175/*::]*/: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t/*::[*/0x0176/*::]*/: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t/*::[*/0x0177/*::]*/: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t/*::[*/0x0178/*::]*/: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t/*::[*/0x0179/*::]*/: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t/*::[*/0x017A/*::]*/: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t/*::[*/0x017B/*::]*/: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t/*::[*/0x017C/*::]*/: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t/*::[*/0x017D/*::]*/: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t/*::[*/0x017E/*::]*/: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t/*::[*/0x017F/*::]*/: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t/*::[*/0x0180/*::]*/: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0181/*::]*/: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0182/*::]*/: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t/*::[*/0x0183/*::]*/: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t/*::[*/0x0184/*::]*/: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t/*::[*/0x0185/*::]*/: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t/*::[*/0x0186/*::]*/: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t/*::[*/0x0187/*::]*/: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t/*::[*/0x0188/*::]*/: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t/*::[*/0x0189/*::]*/: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t/*::[*/0x018A/*::]*/: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t/*::[*/0x018B/*::]*/: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t/*::[*/0x018C/*::]*/: { /* n:\"BrtBrk\" */ },\n\t/*::[*/0x018D/*::]*/: { /* n:\"BrtUserBookView\" */ },\n\t/*::[*/0x018E/*::]*/: { /* n:\"BrtInfo\" */ },\n\t/*::[*/0x018F/*::]*/: { /* n:\"BrtCUsr\" */ },\n\t/*::[*/0x0190/*::]*/: { /* n:\"BrtUsr\" */ },\n\t/*::[*/0x0191/*::]*/: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t/*::[*/0x0193/*::]*/: { /* n:\"BrtEOF\" */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"BrtUCR\" */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"BrtRRInsDel\" */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"BrtRREndInsDel\" */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BrtRRMove\" */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"BrtRREndMove\" */ },\n\t/*::[*/0x0199/*::]*/: { /* n:\"BrtRRChgCell\" */ },\n\t/*::[*/0x019A/*::]*/: { /* n:\"BrtRREndChgCell\" */ },\n\t/*::[*/0x019B/*::]*/: { /* n:\"BrtRRHeader\" */ },\n\t/*::[*/0x019C/*::]*/: { /* n:\"BrtRRUserView\" */ },\n\t/*::[*/0x019D/*::]*/: { /* n:\"BrtRRRenSheet\" */ },\n\t/*::[*/0x019E/*::]*/: { /* n:\"BrtRRInsertSh\" */ },\n\t/*::[*/0x019F/*::]*/: { /* n:\"BrtRRDefName\" */ },\n\t/*::[*/0x01A0/*::]*/: { /* n:\"BrtRRNote\" */ },\n\t/*::[*/0x01A1/*::]*/: { /* n:\"BrtRRConflict\" */ },\n\t/*::[*/0x01A2/*::]*/: { /* n:\"BrtRRTQSIF\" */ },\n\t/*::[*/0x01A3/*::]*/: { /* n:\"BrtRRFormat\" */ },\n\t/*::[*/0x01A4/*::]*/: { /* n:\"BrtRREndFormat\" */ },\n\t/*::[*/0x01A5/*::]*/: { /* n:\"BrtRRAutoFmt\" */ },\n\t/*::[*/0x01A6/*::]*/: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t/*::[*/0x01A7/*::]*/: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t/*::[*/0x01A8/*::]*/: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t/*::[*/0x01A9/*::]*/: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t/*::[*/0x01AA/*::]*/: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t/*::[*/0x01AB/*::]*/: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t/*::[*/0x01AC/*::]*/: { /* n:\"BrtTable\" */ },\n\t/*::[*/0x01AD/*::]*/: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t/*::[*/0x01AE/*::]*/: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t/*::[*/0x01AF/*::]*/: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t/*::[*/0x01B0/*::]*/: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t/*::[*/0x01B1/*::]*/: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t/*::[*/0x01B2/*::]*/: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t/*::[*/0x01B3/*::]*/: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t/*::[*/0x01B4/*::]*/: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t/*::[*/0x01B5/*::]*/: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t/*::[*/0x01B6/*::]*/: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t/*::[*/0x01B7/*::]*/: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t/*::[*/0x01B8/*::]*/: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t/*::[*/0x01B9/*::]*/: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t/*::[*/0x01BA/*::]*/: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t/*::[*/0x01BB/*::]*/: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t/*::[*/0x01BC/*::]*/: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t/*::[*/0x01BD/*::]*/: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t/*::[*/0x01BE/*::]*/: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t/*::[*/0x01BF/*::]*/: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t/*::[*/0x01C0/*::]*/: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t/*::[*/0x01C1/*::]*/: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t/*::[*/0x01C2/*::]*/: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t/*::[*/0x01C3/*::]*/: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t/*::[*/0x01C4/*::]*/: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t/*::[*/0x01C5/*::]*/: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t/*::[*/0x01C6/*::]*/: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t/*::[*/0x01C7/*::]*/: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t/*::[*/0x01C8/*::]*/: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t/*::[*/0x01C9/*::]*/: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t/*::[*/0x01CA/*::]*/: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t/*::[*/0x01CB/*::]*/: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t/*::[*/0x01CC/*::]*/: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t/*::[*/0x01CD/*::]*/: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t/*::[*/0x01CE/*::]*/: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t/*::[*/0x01CF/*::]*/: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t/*::[*/0x01D0/*::]*/: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t/*::[*/0x01D1/*::]*/: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t/*::[*/0x01D2/*::]*/: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t/*::[*/0x01D3/*::]*/: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t/*::[*/0x01D4/*::]*/: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t/*::[*/0x01D5/*::]*/: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t/*::[*/0x01D6/*::]*/: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t/*::[*/0x01D7/*::]*/: { /* n:\"BrtCFVO\" */ },\n\t/*::[*/0x01D8/*::]*/: { /* n:\"BrtExternValueMeta\" */ },\n\t/*::[*/0x01D9/*::]*/: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t/*::[*/0x01DA/*::]*/: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t/*::[*/0x01DB/*::]*/: { /* n:\"BrtIndexedColor\" */ },\n\t/*::[*/0x01DC/*::]*/: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t/*::[*/0x01DD/*::]*/: { /* n:\"BrtPrintOptions\" */ },\n\t/*::[*/0x01DE/*::]*/: { /* n:\"BrtPageSetup\" */ },\n\t/*::[*/0x01DF/*::]*/: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t/*::[*/0x01E0/*::]*/: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t/*::[*/0x01E1/*::]*/: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t/*::[*/0x01E2/*::]*/: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t/*::[*/0x01E3/*::]*/: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t/*::[*/0x01E4/*::]*/: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t/*::[*/0x01E5/*::]*/: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t/*::[*/0x01E6/*::]*/: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t/*::[*/0x01E7/*::]*/: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t/*::[*/0x01E8/*::]*/: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t/*::[*/0x01E9/*::]*/: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t/*::[*/0x01EA/*::]*/: { /* n:\"BrtBeginMG\", */ T:1 },\n\t/*::[*/0x01EB/*::]*/: { /* n:\"BrtEndMG\", */ T:-1 },\n\t/*::[*/0x01EC/*::]*/: { /* n:\"BrtBeginMap\", */ T:1 },\n\t/*::[*/0x01ED/*::]*/: { /* n:\"BrtEndMap\", */ T:-1 },\n\t/*::[*/0x01EE/*::]*/: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t/*::[*/0x01EF/*::]*/: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t/*::[*/0x01F0/*::]*/: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t/*::[*/0x01F1/*::]*/: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t/*::[*/0x01F2/*::]*/: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t/*::[*/0x01F3/*::]*/: { /* n:\"BrtDRef\" */ },\n\t/*::[*/0x01F4/*::]*/: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t/*::[*/0x01F5/*::]*/: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t/*::[*/0x01F6/*::]*/: { /* n:\"BrtBeginSct\", */ T:1 },\n\t/*::[*/0x01F7/*::]*/: { /* n:\"BrtEndSct\", */ T:-1 },\n\t/*::[*/0x01F8/*::]*/: { /* n:\"BrtSlc\" */ },\n\t/*::[*/0x01F9/*::]*/: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t/*::[*/0x01FA/*::]*/: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t/*::[*/0x01FB/*::]*/: { /* n:\"BrtDXF\" */ },\n\t/*::[*/0x01FC/*::]*/: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t/*::[*/0x01FD/*::]*/: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t/*::[*/0x01FE/*::]*/: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t/*::[*/0x01FF/*::]*/: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"BrtTableStyleElement\" */ },\n\t/*::[*/0x0201/*::]*/: { /* n:\"BrtTableStyleClient\" */ },\n\t/*::[*/0x0202/*::]*/: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t/*::[*/0x0203/*::]*/: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t/*::[*/0x0204/*::]*/: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t/*::[*/0x0206/*::]*/: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t/*::[*/0x0207/*::]*/: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t/*::[*/0x0208/*::]*/: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t/*::[*/0x020A/*::]*/: { /* n:\"BrtVolSubtopic\" */ },\n\t/*::[*/0x020B/*::]*/: { /* n:\"BrtVolRef\" */ },\n\t/*::[*/0x020C/*::]*/: { /* n:\"BrtVolNum\" */ },\n\t/*::[*/0x020D/*::]*/: { /* n:\"BrtVolErr\" */ },\n\t/*::[*/0x020E/*::]*/: { /* n:\"BrtVolStr\" */ },\n\t/*::[*/0x020F/*::]*/: { /* n:\"BrtVolBool\" */ },\n\t/*::[*/0x0210/*::]*/: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t/*::[*/0x0211/*::]*/: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t/*::[*/0x0212/*::]*/: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t/*::[*/0x0213/*::]*/: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t/*::[*/0x0214/*::]*/: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t/*::[*/0x0215/*::]*/: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t/*::[*/0x0216/*::]*/: { /* n:\"BrtBookProtection\" */ },\n\t/*::[*/0x0217/*::]*/: { /* n:\"BrtSheetProtection\" */ },\n\t/*::[*/0x0218/*::]*/: { /* n:\"BrtRangeProtection\" */ },\n\t/*::[*/0x0219/*::]*/: { /* n:\"BrtPhoneticInfo\" */ },\n\t/*::[*/0x021A/*::]*/: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t/*::[*/0x021B/*::]*/: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t/*::[*/0x021C/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t/*::[*/0x021D/*::]*/: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t/*::[*/0x021E/*::]*/: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t/*::[*/0x0224/*::]*/: { /* n:\"BrtFileSharing\" */ },\n\t/*::[*/0x0225/*::]*/: { /* n:\"BrtOleSize\" */ },\n\t/*::[*/0x0226/*::]*/: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t/*::[*/0x0227/*::]*/: { /* n:\"BrtLegacyDrawing\" */ },\n\t/*::[*/0x0228/*::]*/: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t/*::[*/0x0229/*::]*/: { /* n:\"BrtWebOpt\" */ },\n\t/*::[*/0x022A/*::]*/: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t/*::[*/0x022B/*::]*/: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t/*::[*/0x022C/*::]*/: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t/*::[*/0x022D/*::]*/: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t/*::[*/0x022E/*::]*/: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t/*::[*/0x022F/*::]*/: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t/*::[*/0x0230/*::]*/: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t/*::[*/0x0231/*::]*/: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t/*::[*/0x0232/*::]*/: { /* n:\"BrtBkHim\" */ },\n\t/*::[*/0x0234/*::]*/: { /* n:\"BrtColor\" */ },\n\t/*::[*/0x0235/*::]*/: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t/*::[*/0x0236/*::]*/: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t/*::[*/0x0239/*::]*/: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t/*::[*/0x023A/*::]*/: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t/*::[*/0x023C/*::]*/: { /* n:\"BrtMRUColor\" */ },\n\t/*::[*/0x023D/*::]*/: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t/*::[*/0x023E/*::]*/: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t/*::[*/0x0241/*::]*/: { /* n:\"BrtSupNameStart\" */ },\n\t/*::[*/0x0242/*::]*/: { /* n:\"BrtSupNameValueStart\" */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BrtSupNameValueEnd\" */ },\n\t/*::[*/0x0244/*::]*/: { /* n:\"BrtSupNameNum\" */ },\n\t/*::[*/0x0245/*::]*/: { /* n:\"BrtSupNameErr\" */ },\n\t/*::[*/0x0246/*::]*/: { /* n:\"BrtSupNameSt\" */ },\n\t/*::[*/0x0247/*::]*/: { /* n:\"BrtSupNameNil\" */ },\n\t/*::[*/0x0248/*::]*/: { /* n:\"BrtSupNameBool\" */ },\n\t/*::[*/0x0249/*::]*/: { /* n:\"BrtSupNameFmla\" */ },\n\t/*::[*/0x024A/*::]*/: { /* n:\"BrtSupNameBits\" */ },\n\t/*::[*/0x024B/*::]*/: { /* n:\"BrtSupNameEnd\" */ },\n\t/*::[*/0x024C/*::]*/: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t/*::[*/0x024D/*::]*/: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t/*::[*/0x024E/*::]*/: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t/*::[*/0x024F/*::]*/: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t/*::[*/0x0250/*::]*/: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t/*::[*/0x0251/*::]*/: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t/*::[*/0x0252/*::]*/: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t/*::[*/0x0253/*::]*/: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t/*::[*/0x0254/*::]*/: { /* n:\"BrtSmartTagType\" */ },\n\t/*::[*/0x0255/*::]*/: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t/*::[*/0x0256/*::]*/: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t/*::[*/0x0257/*::]*/: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t/*::[*/0x0258/*::]*/: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t/*::[*/0x0259/*::]*/: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t/*::[*/0x025A/*::]*/: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t/*::[*/0x025B/*::]*/: { /* n:\"BrtBeginFills\", */ T:1 },\n\t/*::[*/0x025C/*::]*/: { /* n:\"BrtEndFills\", */ T:-1 },\n\t/*::[*/0x025D/*::]*/: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t/*::[*/0x025E/*::]*/: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t/*::[*/0x025F/*::]*/: { /* n:\"BrtCellWatch\" */ },\n\t/*::[*/0x0260/*::]*/: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t/*::[*/0x0261/*::]*/: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t/*::[*/0x0262/*::]*/: { /* n:\"BrtCrashRecErr\" */ },\n\t/*::[*/0x0263/*::]*/: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t/*::[*/0x0264/*::]*/: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t/*::[*/0x0265/*::]*/: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t/*::[*/0x0266/*::]*/: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t/*::[*/0x0267/*::]*/: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t/*::[*/0x0268/*::]*/: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t/*::[*/0x0269/*::]*/: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t/*::[*/0x026A/*::]*/: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t/*::[*/0x026B/*::]*/: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t/*::[*/0x026C/*::]*/: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t/*::[*/0x0271/*::]*/: { /* n:\"BrtBigName\" */ },\n\t/*::[*/0x0272/*::]*/: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t/*::[*/0x0273/*::]*/: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t/*::[*/0x0274/*::]*/: { /* n:\"BrtBeginComments\", */ T:1 },\n\t/*::[*/0x0275/*::]*/: { /* n:\"BrtEndComments\", */ T:-1 },\n\t/*::[*/0x0276/*::]*/: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t/*::[*/0x0277/*::]*/: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t/*::[*/0x0278/*::]*/: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t/*::[*/0x0279/*::]*/: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t/*::[*/0x027A/*::]*/: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t/*::[*/0x027B/*::]*/: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t/*::[*/0x027C/*::]*/: { /* n:\"BrtEndComment\", */ T:-1 },\n\t/*::[*/0x027D/*::]*/: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t/*::[*/0x027E/*::]*/: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t/*::[*/0x027F/*::]*/: { /* n:\"BrtOleObject\" */ },\n\t/*::[*/0x0280/*::]*/: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t/*::[*/0x0281/*::]*/: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t/*::[*/0x0282/*::]*/: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t/*::[*/0x0283/*::]*/: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t/*::[*/0x0284/*::]*/: { /* n:\"BrtActiveX\" */ },\n\t/*::[*/0x0285/*::]*/: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t/*::[*/0x0286/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t/*::[*/0x0288/*::]*/: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t/*::[*/0x0289/*::]*/: { /* n:\"BrtCellIgnoreEC\" */ },\n\t/*::[*/0x028A/*::]*/: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t/*::[*/0x028B/*::]*/: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t/*::[*/0x028C/*::]*/: { /* n:\"BrtCsPageSetup\" */ },\n\t/*::[*/0x028D/*::]*/: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t/*::[*/0x028E/*::]*/: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t/*::[*/0x028F/*::]*/: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t/*::[*/0x0290/*::]*/: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t/*::[*/0x0291/*::]*/: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t/*::[*/0x0292/*::]*/: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t/*::[*/0x0293/*::]*/: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t/*::[*/0x0294/*::]*/: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t/*::[*/0x0295/*::]*/: { /* n:\"BrtListPart\" */ },\n\t/*::[*/0x0296/*::]*/: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t/*::[*/0x0297/*::]*/: { /* n:\"BrtSheetCalcProp\" */ },\n\t/*::[*/0x0298/*::]*/: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t/*::[*/0x0299/*::]*/: { /* n:\"BrtFnGroup\" */ },\n\t/*::[*/0x029A/*::]*/: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t/*::[*/0x029B/*::]*/: { /* n:\"BrtSupAddin\" */ },\n\t/*::[*/0x029C/*::]*/: { /* n:\"BrtSXTDMPOrder\" */ },\n\t/*::[*/0x029D/*::]*/: { /* n:\"BrtCsProtection\" */ },\n\t/*::[*/0x029F/*::]*/: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t/*::[*/0x02A0/*::]*/: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t/*::[*/0x02A1/*::]*/: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t/*::[*/0x02A2/*::]*/: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t/*::[*/0x02A3/*::]*/: { /* n:\"BrtRRSortItem\" */ },\n\t/*::[*/0x02A4/*::]*/: { /* n:\"BrtFileSharingIso\" */ },\n\t/*::[*/0x02A5/*::]*/: { /* n:\"BrtBookProtectionIso\" */ },\n\t/*::[*/0x02A6/*::]*/: { /* n:\"BrtSheetProtectionIso\" */ },\n\t/*::[*/0x02A7/*::]*/: { /* n:\"BrtCsProtectionIso\" */ },\n\t/*::[*/0x02A8/*::]*/: { /* n:\"BrtRangeProtectionIso\" */ },\n\t/*::[*/0x02A9/*::]*/: { /* n:\"BrtDValList\" */ },\n\t/*::[*/0x0400/*::]*/: { /* n:\"BrtRwDescent\" */ },\n\t/*::[*/0x0401/*::]*/: { /* n:\"BrtKnownFonts\" */ },\n\t/*::[*/0x0402/*::]*/: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t/*::[*/0x0403/*::]*/: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t/*::[*/0x0404/*::]*/: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t/*::[*/0x0405/*::]*/: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t/*::[*/0x0406/*::]*/: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t/*::[*/0x0407/*::]*/: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t/*::[*/0x0408/*::]*/: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t/*::[*/0x040A/*::]*/: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t/*::[*/0x040B/*::]*/: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t/*::[*/0x040C/*::]*/: { /* n:\"BrtNameExt\" */ },\n\t/*::[*/0x040D/*::]*/: { /* n:\"BrtPCDH14\" */ },\n\t/*::[*/0x040E/*::]*/: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t/*::[*/0x040F/*::]*/: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t/*::[*/0x0410/*::]*/: { /* n:\"BrtSXTH14\" */ },\n\t/*::[*/0x0411/*::]*/: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t/*::[*/0x0412/*::]*/: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t/*::[*/0x0413/*::]*/: { /* n:\"BrtSparkline\" */ },\n\t/*::[*/0x0414/*::]*/: { /* n:\"BrtSXDI14\" */ },\n\t/*::[*/0x0415/*::]*/: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t/*::[*/0x0416/*::]*/: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t/*::[*/0x0417/*::]*/: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t/*::[*/0x0419/*::]*/: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t/*::[*/0x041A/*::]*/: { /* n:\"BrtCFVO14\" */ },\n\t/*::[*/0x041B/*::]*/: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t/*::[*/0x041C/*::]*/: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t/*::[*/0x041D/*::]*/: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t/*::[*/0x041E/*::]*/: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t/*::[*/0x041F/*::]*/: { /* n:\"BrtColor14\" */ },\n\t/*::[*/0x0420/*::]*/: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t/*::[*/0x0421/*::]*/: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t/*::[*/0x0422/*::]*/: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t/*::[*/0x0423/*::]*/: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t/*::[*/0x0425/*::]*/: { /* n:\"BrtSXVD14\" */ },\n\t/*::[*/0x0426/*::]*/: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t/*::[*/0x0427/*::]*/: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t/*::[*/0x0428/*::]*/: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t/*::[*/0x0429/*::]*/: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t/*::[*/0x042A/*::]*/: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t/*::[*/0x042B/*::]*/: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t/*::[*/0x042C/*::]*/: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t/*::[*/0x042D/*::]*/: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t/*::[*/0x042E/*::]*/: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t/*::[*/0x042F/*::]*/: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t/*::[*/0x0430/*::]*/: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t/*::[*/0x0431/*::]*/: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t/*::[*/0x0433/*::]*/: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t/*::[*/0x0434/*::]*/: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t/*::[*/0x0435/*::]*/: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t/*::[*/0x0436/*::]*/: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t/*::[*/0x0437/*::]*/: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t/*::[*/0x0438/*::]*/: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t/*::[*/0x0439/*::]*/: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t/*::[*/0x043A/*::]*/: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t/*::[*/0x043B/*::]*/: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t/*::[*/0x043C/*::]*/: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t/*::[*/0x043D/*::]*/: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t/*::[*/0x043E/*::]*/: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t/*::[*/0x043F/*::]*/: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t/*::[*/0x0440/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t/*::[*/0x0441/*::]*/: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t/*::[*/0x0442/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t/*::[*/0x0444/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t/*::[*/0x0445/*::]*/: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t/*::[*/0x0446/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t/*::[*/0x0447/*::]*/: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t/*::[*/0x0448/*::]*/: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t/*::[*/0x0449/*::]*/: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t/*::[*/0x044A/*::]*/: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t/*::[*/0x044B/*::]*/: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t/*::[*/0x044C/*::]*/: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t/*::[*/0x044D/*::]*/: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t/*::[*/0x044E/*::]*/: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t/*::[*/0x044F/*::]*/: { /* n:\"BrtRangeProtection14\" */ },\n\t/*::[*/0x0450/*::]*/: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t/*::[*/0x0451/*::]*/: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t/*::[*/0x0457/*::]*/: { /* n:\"BrtList14\" */ },\n\t/*::[*/0x0458/*::]*/: { /* n:\"BrtCFIcon\" */ },\n\t/*::[*/0x0459/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x045A/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x045B/*::]*/: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t/*::[*/0x045C/*::]*/: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t/*::[*/0x045D/*::]*/: { /* n:\"BrtWbProp14\" */ },\n\t/*::[*/0x045E/*::]*/: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t/*::[*/0x045F/*::]*/: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t/*::[*/0x0460/*::]*/: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t/*::[*/0x0461/*::]*/: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t/*::[*/0x0462/*::]*/: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t/*::[*/0x0463/*::]*/: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t/*::[*/0x0464/*::]*/: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t/*::[*/0x0465/*::]*/: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t/*::[*/0x0466/*::]*/: { /* n:\"BrtSXTupleItems\" */ },\n\t/*::[*/0x0468/*::]*/: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t/*::[*/0x0469/*::]*/: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t/*::[*/0x046A/*::]*/: { /* n:\"BrtSlicerStyleElement\" */ },\n\t/*::[*/0x046B/*::]*/: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t/*::[*/0x046C/*::]*/: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t/*::[*/0x046D/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t/*::[*/0x046E/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t/*::[*/0x046F/*::]*/: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t/*::[*/0x0470/*::]*/: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t/*::[*/0x0471/*::]*/: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t/*::[*/0x0472/*::]*/: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t/*::[*/0x0473/*::]*/: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t/*::[*/0x0474/*::]*/: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t/*::[*/0x0475/*::]*/: { /* n:\"BrtPCDField14\" */ },\n\t/*::[*/0x0476/*::]*/: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t/*::[*/0x0477/*::]*/: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t/*::[*/0x0478/*::]*/: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t/*::[*/0x0479/*::]*/: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t/*::[*/0x047A/*::]*/: { /* n:\"BrtCFRuleExt\" */ },\n\t/*::[*/0x047B/*::]*/: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t/*::[*/0x047C/*::]*/: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t/*::[*/0x047D/*::]*/: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t/*::[*/0x047E/*::]*/: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t/*::[*/0x0480/*::]*/: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t/*::[*/0x0481/*::]*/: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t/*::[*/0x0482/*::]*/: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t/*::[*/0x0483/*::]*/: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t/*::[*/0x0484/*::]*/: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t/*::[*/0x0485/*::]*/: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t/*::[*/0x0486/*::]*/: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t/*::[*/0x0487/*::]*/: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t/*::[*/0x0488/*::]*/: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t/*::[*/0x0489/*::]*/: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t/*::[*/0x048A/*::]*/: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t/*::[*/0x048B/*::]*/: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t/*::[*/0x048C/*::]*/: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t/*::[*/0x048D/*::]*/: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t/*::[*/0x048E/*::]*/: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t/*::[*/0x048F/*::]*/: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t/*::[*/0x0490/*::]*/: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t/*::[*/0x0491/*::]*/: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t/*::[*/0x0492/*::]*/: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t/*::[*/0x0493/*::]*/: { /* n:\"BrtDxf14\" */ },\n\t/*::[*/0x0494/*::]*/: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t/*::[*/0x0495/*::]*/: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t/*::[*/0x0499/*::]*/: { /* n:\"BrtFilter14\" */ },\n\t/*::[*/0x049A/*::]*/: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t/*::[*/0x049C/*::]*/: { /* n:\"BrtCustomFilter14\" */ },\n\t/*::[*/0x049D/*::]*/: { /* n:\"BrtIconFilter14\" */ },\n\t/*::[*/0x049E/*::]*/: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t/*::[*/0x0800/*::]*/: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0801/*::]*/: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0802/*::]*/: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t/*::[*/0x0804/*::]*/: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t/*::[*/0x0805/*::]*/: { /* n:\"BrtPivotTableRef\" */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t/*::[*/0x0808/*::]*/: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t/*::[*/0x080A/*::]*/: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t/*::[*/0x080C/*::]*/: { /* n:\"BrtPcdCalcMem15\" */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"BrtQsi15\" */ },\n\t/*::[*/0x0814/*::]*/: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t/*::[*/0x0815/*::]*/: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t/*::[*/0x0816/*::]*/: { /* n:\"BrtWebExtension\" */ },\n\t/*::[*/0x0817/*::]*/: { /* n:\"BrtAbsPath15\" */ },\n\t/*::[*/0x0818/*::]*/: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t/*::[*/0x0819/*::]*/: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t/*::[*/0x081B/*::]*/: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t/*::[*/0x081C/*::]*/: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t/*::[*/0x081D/*::]*/: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t/*::[*/0x081E/*::]*/: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t/*::[*/0x081F/*::]*/: { /* n:\"BrtSxFilter15\" */ },\n\t/*::[*/0x0820/*::]*/: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0821/*::]*/: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0822/*::]*/: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t/*::[*/0x0823/*::]*/: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t/*::[*/0x0824/*::]*/: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t/*::[*/0x0825/*::]*/: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t/*::[*/0x0826/*::]*/: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t/*::[*/0x0827/*::]*/: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t/*::[*/0x0828/*::]*/: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t/*::[*/0x0829/*::]*/: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t/*::[*/0x082A/*::]*/: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t/*::[*/0x082B/*::]*/: { /* n:\"BrtWorkBookPr15\" */ },\n\t/*::[*/0x082C/*::]*/: { /* n:\"BrtPCDH15\" */ },\n\t/*::[*/0x082D/*::]*/: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t/*::[*/0x082E/*::]*/: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t/*::[*/0x082F/*::]*/: { /* n:\"BrtTimelineStyleElement\" */ },\n\t/*::[*/0x0830/*::]*/: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t/*::[*/0x0831/*::]*/: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t/*::[*/0x0832/*::]*/: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t/*::[*/0x0833/*::]*/: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t/*::[*/0x0834/*::]*/: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t/*::[*/0x0835/*::]*/: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t/*::[*/0x0836/*::]*/: { /* n:\"BrtDxf15\" */ },\n\t/*::[*/0x0837/*::]*/: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t/*::[*/0x0838/*::]*/: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t/*::[*/0x0839/*::]*/: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t/*::[*/0x083A/*::]*/: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t/*::[*/0x083B/*::]*/: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t/*::[*/0x083C/*::]*/: { /* n:\"BrtItemUniqueName\" */ },\n\t/*::[*/0x083D/*::]*/: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t/*::[*/0x083E/*::]*/: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t/*::[*/0x083F/*::]*/: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t/*::[*/0x0840/*::]*/: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t/*::[*/0x0841/*::]*/: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t/*::[*/0x0842/*::]*/: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t/*::[*/0x0843/*::]*/: { /* n:\"BrtTextPr15\" */ },\n\t/*::[*/0x0844/*::]*/: { /* n:\"BrtRangePr15\" */ },\n\t/*::[*/0x0845/*::]*/: { /* n:\"BrtDbCommand15\" */ },\n\t/*::[*/0x0846/*::]*/: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t/*::[*/0x0847/*::]*/: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t/*::[*/0x0848/*::]*/: { /* n:\"BrtDbTable15\" */ },\n\t/*::[*/0x0849/*::]*/: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t/*::[*/0x084A/*::]*/: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t/*::[*/0x084B/*::]*/: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t/*::[*/0x084C/*::]*/: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t/*::[*/0x084D/*::]*/: { /* n:\"BrtModelTable\" */ },\n\t/*::[*/0x084E/*::]*/: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t/*::[*/0x084F/*::]*/: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t/*::[*/0x0850/*::]*/: { /* n:\"BrtModelRelationship\" */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t/*::[*/0x0852/*::]*/: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t/*::[*/0x0853/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t/*::[*/0x0854/*::]*/: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t/*::[*/0x0855/*::]*/: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t/*::[*/0x0856/*::]*/: { /* n:\"BrtFieldListActiveItem\" */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"BrtSXDI15\" */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t/*::[*/0x085A/*::]*/: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t/*::[*/0x085B/*::]*/: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t/*::[*/0x085C/*::]*/: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t/*::[*/0x085D/*::]*/: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t/*::[*/0x0C00/*::]*/: { /* n:\"BrtUid\" */ },\n\t/*::[*/0x0C01/*::]*/: { /* n:\"BrtRevisionPtr\" */ },\n\t/*::[*/0x1000/*::]*/: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t/*::[*/0x1001/*::]*/: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t/*::[*/0x138A/*::]*/: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t/*::[*/0x138B/*::]*/: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t/*::[*/0x13D9/*::]*/: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t/*::[*/0x13DA/*::]*/: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t/*::[*/0x13DB/*::]*/: { /* n:\"BrtRichFilter\" */ },\n\t/*::[*/0x13DC/*::]*/: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t/*::[*/0x13DD/*::]*/: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t/*::[*/0x13DE/*::]*/: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t/*::[*/0x13DF/*::]*/: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t/*::[*/0x13E0/*::]*/: { /* n:\"BrtCustomRichFilter\" */ },\n\t/*::[*/0x13E1/*::]*/: { /* n:\"BrtTop10RichFilter\" */ },\n\t/*::[*/0x13E2/*::]*/: { /* n:\"BrtDynamicRichFilter\" */ },\n\t/*::[*/0x13E4/*::]*/: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t/*::[*/0x13E5/*::]*/: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t/*::[*/0x13E6/*::]*/: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t/*::[*/0x13E7/*::]*/: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t/*::[*/0x13E8/*::]*/: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t/*::[*/0x13E9/*::]*/: { /* n:\"BrtCalcFeature\" */ },\n\t/*::[*/0x13EB/*::]*/: { /* n:\"BrtExternalLinksPr\" */ },\n\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t/*::[*/0x0006/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x000a/*::]*/: { /* n:\"EOF\", */ f:parsenoop2 },\n\t/*::[*/0x000c/*::]*/: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t/*::[*/0x000d/*::]*/: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t/*::[*/0x000e/*::]*/: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t/*::[*/0x000f/*::]*/: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t/*::[*/0x0010/*::]*/: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t/*::[*/0x0011/*::]*/: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t/*::[*/0x0012/*::]*/: { /* n:\"Protect\", */ f:parsebool },\n\t/*::[*/0x0013/*::]*/: { /* n:\"Password\", */ f:parseuint16 },\n\t/*::[*/0x0014/*::]*/: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0015/*::]*/: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0017/*::]*/: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x0018/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0019/*::]*/: { /* n:\"WinProtect\", */ f:parsebool },\n\t/*::[*/0x001a/*::]*/: { /* n:\"VerticalPageBreaks\", */ },\n\t/*::[*/0x001b/*::]*/: { /* n:\"HorizontalPageBreaks\", */ },\n\t/*::[*/0x001c/*::]*/: { /* n:\"Note\", */ f:parse_Note },\n\t/*::[*/0x001d/*::]*/: { /* n:\"Selection\", */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"Date1904\", */ f:parsebool },\n\t/*::[*/0x0023/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0026/*::]*/: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0027/*::]*/: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0028/*::]*/: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0029/*::]*/: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x002a/*::]*/: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t/*::[*/0x002b/*::]*/: { /* n:\"PrintGrid\", */ f:parsebool },\n\t/*::[*/0x002f/*::]*/: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t/*::[*/0x0031/*::]*/: { /* n:\"Font\", */ f:parse_Font },\n\t/*::[*/0x0033/*::]*/: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t/*::[*/0x003c/*::]*/: { /* n:\"Continue\", */ },\n\t/*::[*/0x003d/*::]*/: { /* n:\"Window1\", */ f:parse_Window1 },\n\t/*::[*/0x0040/*::]*/: { /* n:\"Backup\", */ f:parsebool },\n\t/*::[*/0x0041/*::]*/: { /* n:\"Pane\", */ f:parse_Pane },\n\t/*::[*/0x0042/*::]*/: { /* n:\"CodePage\", */ f:parseuint16 },\n\t/*::[*/0x004d/*::]*/: { /* n:\"Pls\", */ },\n\t/*::[*/0x0050/*::]*/: { /* n:\"DCon\", */ },\n\t/*::[*/0x0051/*::]*/: { /* n:\"DConRef\", */ },\n\t/*::[*/0x0052/*::]*/: { /* n:\"DConName\", */ },\n\t/*::[*/0x0055/*::]*/: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t/*::[*/0x0059/*::]*/: { /* n:\"XCT\", */ },\n\t/*::[*/0x005a/*::]*/: { /* n:\"CRN\", */ },\n\t/*::[*/0x005b/*::]*/: { /* n:\"FileSharing\", */ },\n\t/*::[*/0x005c/*::]*/: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t/*::[*/0x005d/*::]*/: { /* n:\"Obj\", */ f:parse_Obj },\n\t/*::[*/0x005e/*::]*/: { /* n:\"Uncalced\", */ },\n\t/*::[*/0x005f/*::]*/: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t/*::[*/0x0060/*::]*/: { /* n:\"Template\", */ },\n\t/*::[*/0x0061/*::]*/: { /* n:\"Intl\", */ },\n\t/*::[*/0x0063/*::]*/: { /* n:\"ObjProtect\", */ f:parsebool },\n\t/*::[*/0x007d/*::]*/: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x0080/*::]*/: { /* n:\"Guts\", */ f:parse_Guts },\n\t/*::[*/0x0081/*::]*/: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t/*::[*/0x0082/*::]*/: { /* n:\"GridSet\", */ f:parseuint16 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"HCenter\", */ f:parsebool },\n\t/*::[*/0x0084/*::]*/: { /* n:\"VCenter\", */ f:parsebool },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"WriteProtect\", */ },\n\t/*::[*/0x008c/*::]*/: { /* n:\"Country\", */ f:parse_Country },\n\t/*::[*/0x008d/*::]*/: { /* n:\"HideObj\", */ f:parseuint16 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"Sort\", */ },\n\t/*::[*/0x0092/*::]*/: { /* n:\"Palette\", */ f:parse_Palette },\n\t/*::[*/0x0097/*::]*/: { /* n:\"Sync\", */ },\n\t/*::[*/0x0098/*::]*/: { /* n:\"LPr\", */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"DxGCol\", */ },\n\t/*::[*/0x009a/*::]*/: { /* n:\"FnGroupName\", */ },\n\t/*::[*/0x009b/*::]*/: { /* n:\"FilterMode\", */ },\n\t/*::[*/0x009c/*::]*/: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t/*::[*/0x009d/*::]*/: { /* n:\"AutoFilterInfo\", */ },\n\t/*::[*/0x009e/*::]*/: { /* n:\"AutoFilter\", */ },\n\t/*::[*/0x00a0/*::]*/: { /* n:\"Scl\", */ f:parse_Scl },\n\t/*::[*/0x00a1/*::]*/: { /* n:\"Setup\", */ f:parse_Setup },\n\t/*::[*/0x00ae/*::]*/: { /* n:\"ScenMan\", */ },\n\t/*::[*/0x00af/*::]*/: { /* n:\"SCENARIO\", */ },\n\t/*::[*/0x00b0/*::]*/: { /* n:\"SxView\", */ },\n\t/*::[*/0x00b1/*::]*/: { /* n:\"Sxvd\", */ },\n\t/*::[*/0x00b2/*::]*/: { /* n:\"SXVI\", */ },\n\t/*::[*/0x00b4/*::]*/: { /* n:\"SxIvd\", */ },\n\t/*::[*/0x00b5/*::]*/: { /* n:\"SXLI\", */ },\n\t/*::[*/0x00b6/*::]*/: { /* n:\"SXPI\", */ },\n\t/*::[*/0x00b8/*::]*/: { /* n:\"DocRoute\", */ },\n\t/*::[*/0x00b9/*::]*/: { /* n:\"RecipName\", */ },\n\t/*::[*/0x00bd/*::]*/: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t/*::[*/0x00be/*::]*/: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t/*::[*/0x00c1/*::]*/: { /* n:\"Mms\", */ f:parsenoop2 },\n\t/*::[*/0x00c5/*::]*/: { /* n:\"SXDI\", */ },\n\t/*::[*/0x00c6/*::]*/: { /* n:\"SXDB\", */ },\n\t/*::[*/0x00c7/*::]*/: { /* n:\"SXFDB\", */ },\n\t/*::[*/0x00c8/*::]*/: { /* n:\"SXDBB\", */ },\n\t/*::[*/0x00c9/*::]*/: { /* n:\"SXNum\", */ },\n\t/*::[*/0x00ca/*::]*/: { /* n:\"SxBool\", */ f:parsebool },\n\t/*::[*/0x00cb/*::]*/: { /* n:\"SxErr\", */ },\n\t/*::[*/0x00cc/*::]*/: { /* n:\"SXInt\", */ },\n\t/*::[*/0x00cd/*::]*/: { /* n:\"SXString\", */ },\n\t/*::[*/0x00ce/*::]*/: { /* n:\"SXDtr\", */ },\n\t/*::[*/0x00cf/*::]*/: { /* n:\"SxNil\", */ },\n\t/*::[*/0x00d0/*::]*/: { /* n:\"SXTbl\", */ },\n\t/*::[*/0x00d1/*::]*/: { /* n:\"SXTBRGIITM\", */ },\n\t/*::[*/0x00d2/*::]*/: { /* n:\"SxTbpg\", */ },\n\t/*::[*/0x00d3/*::]*/: { /* n:\"ObProj\", */ },\n\t/*::[*/0x00d5/*::]*/: { /* n:\"SXStreamID\", */ },\n\t/*::[*/0x00d7/*::]*/: { /* n:\"DBCell\", */ },\n\t/*::[*/0x00d8/*::]*/: { /* n:\"SXRng\", */ },\n\t/*::[*/0x00d9/*::]*/: { /* n:\"SxIsxoper\", */ },\n\t/*::[*/0x00da/*::]*/: { /* n:\"BookBool\", */ f:parseuint16 },\n\t/*::[*/0x00dc/*::]*/: { /* n:\"DbOrParamQry\", */ },\n\t/*::[*/0x00dd/*::]*/: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t/*::[*/0x00de/*::]*/: { /* n:\"OleObjectSize\", */ },\n\t/*::[*/0x00e0/*::]*/: { /* n:\"XF\", */ f:parse_XF },\n\t/*::[*/0x00e1/*::]*/: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t/*::[*/0x00e2/*::]*/: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t/*::[*/0x00e3/*::]*/: { /* n:\"SXVS\", */ },\n\t/*::[*/0x00e5/*::]*/: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t/*::[*/0x00e9/*::]*/: { /* n:\"BkHim\", */ },\n\t/*::[*/0x00eb/*::]*/: { /* n:\"MsoDrawingGroup\", */ },\n\t/*::[*/0x00ec/*::]*/: { /* n:\"MsoDrawing\", */ },\n\t/*::[*/0x00ed/*::]*/: { /* n:\"MsoDrawingSelection\", */ },\n\t/*::[*/0x00ef/*::]*/: { /* n:\"PhoneticInfo\", */ },\n\t/*::[*/0x00f0/*::]*/: { /* n:\"SxRule\", */ },\n\t/*::[*/0x00f1/*::]*/: { /* n:\"SXEx\", */ },\n\t/*::[*/0x00f2/*::]*/: { /* n:\"SxFilt\", */ },\n\t/*::[*/0x00f4/*::]*/: { /* n:\"SxDXF\", */ },\n\t/*::[*/0x00f5/*::]*/: { /* n:\"SxItm\", */ },\n\t/*::[*/0x00f6/*::]*/: { /* n:\"SxName\", */ },\n\t/*::[*/0x00f7/*::]*/: { /* n:\"SxSelect\", */ },\n\t/*::[*/0x00f8/*::]*/: { /* n:\"SXPair\", */ },\n\t/*::[*/0x00f9/*::]*/: { /* n:\"SxFmla\", */ },\n\t/*::[*/0x00fb/*::]*/: { /* n:\"SxFormat\", */ },\n\t/*::[*/0x00fc/*::]*/: { /* n:\"SST\", */ f:parse_SST },\n\t/*::[*/0x00fd/*::]*/: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t/*::[*/0x00ff/*::]*/: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t/*::[*/0x0100/*::]*/: { /* n:\"SXVDEx\", */ },\n\t/*::[*/0x0103/*::]*/: { /* n:\"SXFormula\", */ },\n\t/*::[*/0x0122/*::]*/: { /* n:\"SXDBEx\", */ },\n\t/*::[*/0x0137/*::]*/: { /* n:\"RRDInsDel\", */ },\n\t/*::[*/0x0138/*::]*/: { /* n:\"RRDHead\", */ },\n\t/*::[*/0x013b/*::]*/: { /* n:\"RRDChgCell\", */ },\n\t/*::[*/0x013d/*::]*/: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t/*::[*/0x013e/*::]*/: { /* n:\"RRDRenSheet\", */ },\n\t/*::[*/0x013f/*::]*/: { /* n:\"RRSort\", */ },\n\t/*::[*/0x0140/*::]*/: { /* n:\"RRDMove\", */ },\n\t/*::[*/0x014a/*::]*/: { /* n:\"RRFormat\", */ },\n\t/*::[*/0x014b/*::]*/: { /* n:\"RRAutoFmt\", */ },\n\t/*::[*/0x014d/*::]*/: { /* n:\"RRInsertSh\", */ },\n\t/*::[*/0x014e/*::]*/: { /* n:\"RRDMoveBegin\", */ },\n\t/*::[*/0x014f/*::]*/: { /* n:\"RRDMoveEnd\", */ },\n\t/*::[*/0x0150/*::]*/: { /* n:\"RRDInsDelBegin\", */ },\n\t/*::[*/0x0151/*::]*/: { /* n:\"RRDInsDelEnd\", */ },\n\t/*::[*/0x0152/*::]*/: { /* n:\"RRDConflict\", */ },\n\t/*::[*/0x0153/*::]*/: { /* n:\"RRDDefName\", */ },\n\t/*::[*/0x0154/*::]*/: { /* n:\"RRDRstEtxp\", */ },\n\t/*::[*/0x015f/*::]*/: { /* n:\"LRng\", */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"UsesELFs\", */ f:parsebool },\n\t/*::[*/0x0161/*::]*/: { /* n:\"DSF\", */ f:parsenoop2 },\n\t/*::[*/0x0191/*::]*/: { /* n:\"CUsr\", */ },\n\t/*::[*/0x0192/*::]*/: { /* n:\"CbUsr\", */ },\n\t/*::[*/0x0193/*::]*/: { /* n:\"UsrInfo\", */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"UsrExcl\", */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"FileLock\", */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"RRDInfo\", */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BCUsrs\", */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"UsrChk\", */ },\n\t/*::[*/0x01a9/*::]*/: { /* n:\"UserBView\", */ },\n\t/*::[*/0x01aa/*::]*/: { /* n:\"UserSViewBegin\", */ },\n\t/*::[*/0x01ab/*::]*/: { /* n:\"UserSViewEnd\", */ },\n\t/*::[*/0x01ac/*::]*/: { /* n:\"RRDUserView\", */ },\n\t/*::[*/0x01ad/*::]*/: { /* n:\"Qsi\", */ },\n\t/*::[*/0x01ae/*::]*/: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t/*::[*/0x01af/*::]*/: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t/*::[*/0x01b0/*::]*/: { /* n:\"CondFmt\", */ },\n\t/*::[*/0x01b1/*::]*/: { /* n:\"CF\", */ },\n\t/*::[*/0x01b2/*::]*/: { /* n:\"DVal\", */ },\n\t/*::[*/0x01b5/*::]*/: { /* n:\"DConBin\", */ },\n\t/*::[*/0x01b6/*::]*/: { /* n:\"TxO\", */ f:parse_TxO },\n\t/*::[*/0x01b7/*::]*/: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t/*::[*/0x01b8/*::]*/: { /* n:\"HLink\", */ f:parse_HLink },\n\t/*::[*/0x01b9/*::]*/: { /* n:\"Lel\", */ },\n\t/*::[*/0x01ba/*::]*/: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t/*::[*/0x01bb/*::]*/: { /* n:\"SXFDBType\", */ },\n\t/*::[*/0x01bc/*::]*/: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t/*::[*/0x01bd/*::]*/: { /* n:\"ObNoMacros\", */ },\n\t/*::[*/0x01be/*::]*/: { /* n:\"Dv\", */ },\n\t/*::[*/0x01c0/*::]*/: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t/*::[*/0x01c1/*::]*/: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t/*::[*/0x01c2/*::]*/: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0201/*::]*/: { /* n:\"Blank\", */ f:parse_Blank },\n\t/*::[*/0x0203/*::]*/: { /* n:\"Number\", */ f:parse_Number },\n\t/*::[*/0x0204/*::]*/: { /* n:\"Label\", */ f:parse_Label },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0207/*::]*/: { /* n:\"String\", */ f:parse_String },\n\t/*::[*/0x0208/*::]*/: { /* n:\"Row\", */ f:parse_Row },\n\t/*::[*/0x020b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0221/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0225/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t/*::[*/0x0236/*::]*/: { /* n:\"Table\", */ },\n\t/*::[*/0x023e/*::]*/: { /* n:\"Window2\", */ f:parse_Window2 },\n\t/*::[*/0x027e/*::]*/: { /* n:\"RK\", */ f:parse_RK },\n\t/*::[*/0x0293/*::]*/: { /* n:\"Style\", */ },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BigName\", */ },\n\t/*::[*/0x041e/*::]*/: { /* n:\"Format\", */ f:parse_Format },\n\t/*::[*/0x043c/*::]*/: { /* n:\"ContinueBigName\", */ },\n\t/*::[*/0x04bc/*::]*/: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t/*::[*/0x0800/*::]*/: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t/*::[*/0x0801/*::]*/: { /* n:\"WebPub\", */ },\n\t/*::[*/0x0802/*::]*/: { /* n:\"QsiSXTag\", */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"DBQueryExt\", */ },\n\t/*::[*/0x0804/*::]*/: { /* n:\"ExtString\", */ },\n\t/*::[*/0x0805/*::]*/: { /* n:\"TxtQry\", */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"Qsir\", */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"Qsif\", */ },\n\t/*::[*/0x0808/*::]*/: { /* n:\"RRDTQSIF\", */ },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x080a/*::]*/: { /* n:\"OleDbConn\", */ },\n\t/*::[*/0x080b/*::]*/: { /* n:\"WOpt\", */ },\n\t/*::[*/0x080c/*::]*/: { /* n:\"SXViewEx\", */ },\n\t/*::[*/0x080d/*::]*/: { /* n:\"SXTH\", */ },\n\t/*::[*/0x080e/*::]*/: { /* n:\"SXPIEx\", */ },\n\t/*::[*/0x080f/*::]*/: { /* n:\"SXVDTEx\", */ },\n\t/*::[*/0x0810/*::]*/: { /* n:\"SXViewEx9\", */ },\n\t/*::[*/0x0812/*::]*/: { /* n:\"ContinueFrt\", */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"RealTimeData\", */ },\n\t/*::[*/0x0850/*::]*/: { /* n:\"ChartFrtInfo\", */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"FrtWrapper\", */ },\n\t/*::[*/0x0852/*::]*/: { /* n:\"StartBlock\", */ },\n\t/*::[*/0x0853/*::]*/: { /* n:\"EndBlock\", */ },\n\t/*::[*/0x0854/*::]*/: { /* n:\"StartObject\", */ },\n\t/*::[*/0x0855/*::]*/: { /* n:\"EndObject\", */ },\n\t/*::[*/0x0856/*::]*/: { /* n:\"CatLab\", */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"YMult\", */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"SXViewLink\", */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"PivotChartBits\", */ },\n\t/*::[*/0x085a/*::]*/: { /* n:\"FrtFontList\", */ },\n\t/*::[*/0x0862/*::]*/: { /* n:\"SheetExt\", */ },\n\t/*::[*/0x0863/*::]*/: { /* n:\"BookExt\", */ r:12},\n\t/*::[*/0x0864/*::]*/: { /* n:\"SXAddl\", */ },\n\t/*::[*/0x0865/*::]*/: { /* n:\"CrErr\", */ },\n\t/*::[*/0x0866/*::]*/: { /* n:\"HFPicture\", */ },\n\t/*::[*/0x0867/*::]*/: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t/*::[*/0x0868/*::]*/: { /* n:\"Feat\", */ },\n\t/*::[*/0x086a/*::]*/: { /* n:\"DataLabExt\", */ },\n\t/*::[*/0x086b/*::]*/: { /* n:\"DataLabExtContents\", */ },\n\t/*::[*/0x086c/*::]*/: { /* n:\"CellWatch\", */ },\n\t/*::[*/0x0871/*::]*/: { /* n:\"FeatHdr11\", */ },\n\t/*::[*/0x0872/*::]*/: { /* n:\"Feature11\", */ },\n\t/*::[*/0x0874/*::]*/: { /* n:\"DropDownObjIds\", */ },\n\t/*::[*/0x0875/*::]*/: { /* n:\"ContinueFrt11\", */ },\n\t/*::[*/0x0876/*::]*/: { /* n:\"DConn\", */ },\n\t/*::[*/0x0877/*::]*/: { /* n:\"List12\", */ },\n\t/*::[*/0x0878/*::]*/: { /* n:\"Feature12\", */ },\n\t/*::[*/0x0879/*::]*/: { /* n:\"CondFmt12\", */ },\n\t/*::[*/0x087a/*::]*/: { /* n:\"CF12\", */ },\n\t/*::[*/0x087b/*::]*/: { /* n:\"CFEx\", */ },\n\t/*::[*/0x087c/*::]*/: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t/*::[*/0x087d/*::]*/: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t/*::[*/0x087e/*::]*/: { /* n:\"AutoFilter12\", */ },\n\t/*::[*/0x087f/*::]*/: { /* n:\"ContinueFrt12\", */ },\n\t/*::[*/0x0884/*::]*/: { /* n:\"MDTInfo\", */ },\n\t/*::[*/0x0885/*::]*/: { /* n:\"MDXStr\", */ },\n\t/*::[*/0x0886/*::]*/: { /* n:\"MDXTuple\", */ },\n\t/*::[*/0x0887/*::]*/: { /* n:\"MDXSet\", */ },\n\t/*::[*/0x0888/*::]*/: { /* n:\"MDXProp\", */ },\n\t/*::[*/0x0889/*::]*/: { /* n:\"MDXKPI\", */ },\n\t/*::[*/0x088a/*::]*/: { /* n:\"MDB\", */ },\n\t/*::[*/0x088b/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x088c/*::]*/: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t/*::[*/0x088d/*::]*/: { /* n:\"DXF\", */ },\n\t/*::[*/0x088e/*::]*/: { /* n:\"TableStyles\", */ r:12 },\n\t/*::[*/0x088f/*::]*/: { /* n:\"TableStyle\", */ },\n\t/*::[*/0x0890/*::]*/: { /* n:\"TableStyleElement\", */ },\n\t/*::[*/0x0892/*::]*/: { /* n:\"StyleExt\", */ },\n\t/*::[*/0x0893/*::]*/: { /* n:\"NamePublish\", */ },\n\t/*::[*/0x0894/*::]*/: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t/*::[*/0x0895/*::]*/: { /* n:\"SortData\", */ },\n\t/*::[*/0x0896/*::]*/: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t/*::[*/0x0897/*::]*/: { /* n:\"GUIDTypeLib\", */ },\n\t/*::[*/0x0898/*::]*/: { /* n:\"FnGrp12\", */ },\n\t/*::[*/0x0899/*::]*/: { /* n:\"NameFnGrp12\", */ },\n\t/*::[*/0x089a/*::]*/: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t/*::[*/0x089b/*::]*/: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t/*::[*/0x089c/*::]*/: { /* n:\"HeaderFooter\", */ },\n\t/*::[*/0x089d/*::]*/: { /* n:\"CrtLayout12\", */ },\n\t/*::[*/0x089e/*::]*/: { /* n:\"CrtMlFrt\", */ },\n\t/*::[*/0x089f/*::]*/: { /* n:\"CrtMlFrtContinue\", */ },\n\t/*::[*/0x08a3/*::]*/: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t/*::[*/0x08a4/*::]*/: { /* n:\"ShapePropsStream\", */ },\n\t/*::[*/0x08a5/*::]*/: { /* n:\"TextPropsStream\", */ },\n\t/*::[*/0x08a6/*::]*/: { /* n:\"RichTextStream\", */ },\n\t/*::[*/0x08a7/*::]*/: { /* n:\"CrtLayout12A\", */ },\n\t/*::[*/0x1001/*::]*/: { /* n:\"Units\", */ },\n\t/*::[*/0x1002/*::]*/: { /* n:\"Chart\", */ },\n\t/*::[*/0x1003/*::]*/: { /* n:\"Series\", */ },\n\t/*::[*/0x1006/*::]*/: { /* n:\"DataFormat\", */ },\n\t/*::[*/0x1007/*::]*/: { /* n:\"LineFormat\", */ },\n\t/*::[*/0x1009/*::]*/: { /* n:\"MarkerFormat\", */ },\n\t/*::[*/0x100a/*::]*/: { /* n:\"AreaFormat\", */ },\n\t/*::[*/0x100b/*::]*/: { /* n:\"PieFormat\", */ },\n\t/*::[*/0x100c/*::]*/: { /* n:\"AttachedLabel\", */ },\n\t/*::[*/0x100d/*::]*/: { /* n:\"SeriesText\", */ },\n\t/*::[*/0x1014/*::]*/: { /* n:\"ChartFormat\", */ },\n\t/*::[*/0x1015/*::]*/: { /* n:\"Legend\", */ },\n\t/*::[*/0x1016/*::]*/: { /* n:\"SeriesList\", */ },\n\t/*::[*/0x1017/*::]*/: { /* n:\"Bar\", */ },\n\t/*::[*/0x1018/*::]*/: { /* n:\"Line\", */ },\n\t/*::[*/0x1019/*::]*/: { /* n:\"Pie\", */ },\n\t/*::[*/0x101a/*::]*/: { /* n:\"Area\", */ },\n\t/*::[*/0x101b/*::]*/: { /* n:\"Scatter\", */ },\n\t/*::[*/0x101c/*::]*/: { /* n:\"CrtLine\", */ },\n\t/*::[*/0x101d/*::]*/: { /* n:\"Axis\", */ },\n\t/*::[*/0x101e/*::]*/: { /* n:\"Tick\", */ },\n\t/*::[*/0x101f/*::]*/: { /* n:\"ValueRange\", */ },\n\t/*::[*/0x1020/*::]*/: { /* n:\"CatSerRange\", */ },\n\t/*::[*/0x1021/*::]*/: { /* n:\"AxisLine\", */ },\n\t/*::[*/0x1022/*::]*/: { /* n:\"CrtLink\", */ },\n\t/*::[*/0x1024/*::]*/: { /* n:\"DefaultText\", */ },\n\t/*::[*/0x1025/*::]*/: { /* n:\"Text\", */ },\n\t/*::[*/0x1026/*::]*/: { /* n:\"FontX\", */ f:parseuint16 },\n\t/*::[*/0x1027/*::]*/: { /* n:\"ObjectLink\", */ },\n\t/*::[*/0x1032/*::]*/: { /* n:\"Frame\", */ },\n\t/*::[*/0x1033/*::]*/: { /* n:\"Begin\", */ },\n\t/*::[*/0x1034/*::]*/: { /* n:\"End\", */ },\n\t/*::[*/0x1035/*::]*/: { /* n:\"PlotArea\", */ },\n\t/*::[*/0x103a/*::]*/: { /* n:\"Chart3d\", */ },\n\t/*::[*/0x103c/*::]*/: { /* n:\"PicF\", */ },\n\t/*::[*/0x103d/*::]*/: { /* n:\"DropBar\", */ },\n\t/*::[*/0x103e/*::]*/: { /* n:\"Radar\", */ },\n\t/*::[*/0x103f/*::]*/: { /* n:\"Surf\", */ },\n\t/*::[*/0x1040/*::]*/: { /* n:\"RadarArea\", */ },\n\t/*::[*/0x1041/*::]*/: { /* n:\"AxisParent\", */ },\n\t/*::[*/0x1043/*::]*/: { /* n:\"LegendException\", */ },\n\t/*::[*/0x1044/*::]*/: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t/*::[*/0x1045/*::]*/: { /* n:\"SerToCrt\", */ },\n\t/*::[*/0x1046/*::]*/: { /* n:\"AxesUsed\", */ },\n\t/*::[*/0x1048/*::]*/: { /* n:\"SBaseRef\", */ },\n\t/*::[*/0x104a/*::]*/: { /* n:\"SerParent\", */ },\n\t/*::[*/0x104b/*::]*/: { /* n:\"SerAuxTrend\", */ },\n\t/*::[*/0x104e/*::]*/: { /* n:\"IFmtRecord\", */ },\n\t/*::[*/0x104f/*::]*/: { /* n:\"Pos\", */ },\n\t/*::[*/0x1050/*::]*/: { /* n:\"AlRuns\", */ },\n\t/*::[*/0x1051/*::]*/: { /* n:\"BRAI\", */ },\n\t/*::[*/0x105b/*::]*/: { /* n:\"SerAuxErrBar\", */ },\n\t/*::[*/0x105c/*::]*/: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t/*::[*/0x105d/*::]*/: { /* n:\"SerFmt\", */ },\n\t/*::[*/0x105f/*::]*/: { /* n:\"Chart3DBarShape\", */ },\n\t/*::[*/0x1060/*::]*/: { /* n:\"Fbi\", */ },\n\t/*::[*/0x1061/*::]*/: { /* n:\"BopPop\", */ },\n\t/*::[*/0x1062/*::]*/: { /* n:\"AxcExt\", */ },\n\t/*::[*/0x1063/*::]*/: { /* n:\"Dat\", */ },\n\t/*::[*/0x1064/*::]*/: { /* n:\"PlotGrowth\", */ },\n\t/*::[*/0x1065/*::]*/: { /* n:\"SIIndex\", */ },\n\t/*::[*/0x1066/*::]*/: { /* n:\"GelFrame\", */ },\n\t/*::[*/0x1067/*::]*/: { /* n:\"BopPopCustom\", */ },\n\t/*::[*/0x1068/*::]*/: { /* n:\"Fbi2\", */ },\n\n\t/*::[*/0x0000/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BIFF2BLANK\", */ },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0007/*::]*/: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BIFF2ROW\", */ },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x000b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t/*::[*/0x001e/*::]*/: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t/*::[*/0x001f/*::]*/: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t/*::[*/0x0020/*::]*/: { /* n:\"BIFF2COLINFO\", */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0024/*::]*/: { /* n:\"COLWIDTH\", */ },\n\t/*::[*/0x0025/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x2c ??\n\t// 0x2d ??\n\t// 0x2e ??\n\t// 0x30 FONTCOUNT: number of fonts\n\t/*::[*/0x0032/*::]*/: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x35: INFOOPTS\n\t// 0x36: TABLE (BIFF2 only)\n\t// 0x37: TABLE2 (BIFF2 only)\n\t// 0x38: WNDESK\n\t// 0x39 ??\n\t// 0x3a: BEGINPREF\n\t// 0x3b: ENDPREF\n\t/*::[*/0x003e/*::]*/: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x3f ??\n\t// 0x46: SHOWSCROLL\n\t// 0x47: SHOWFORMULA\n\t// 0x48: STATUSBAR\n\t// 0x49: SHORTMENUS\n\t// 0x4A:\n\t// 0x4B:\n\t// 0x4C:\n\t// 0x4E:\n\t// 0x4F:\n\t// 0x58: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t/*::[*/0x0034/*::]*/: { /* n:\"DDEObjName\", */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BIFF2XF\", */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BIFF2FONTCLR\", */ },\n\t/*::[*/0x0056/*::]*/: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t/*::[*/0x007e/*::]*/: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t/*::[*/0x007f/*::]*/: { /* n:\"ImData\", */ f:parse_ImData },\n\t/*::[*/0x0087/*::]*/: { /* n:\"Addin\", */ },\n\t/*::[*/0x0088/*::]*/: { /* n:\"Edg\", */ },\n\t/*::[*/0x0089/*::]*/: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t// 0x8F\n\t/*::[*/0x0091/*::]*/: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t/*::[*/0x0094/*::]*/: { /* n:\"LHRecord\", */ },\n\t/*::[*/0x0095/*::]*/: { /* n:\"LHNGraph\", */ },\n\t/*::[*/0x0096/*::]*/: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t/*::[*/0x00a9/*::]*/: { /* n:\"CoordList\", */ },\n\t/*::[*/0x00ab/*::]*/: { /* n:\"GCW\", */ },\n\t/*::[*/0x00bc/*::]*/: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t/*::[*/0x00bf/*::]*/: { /* n:\"ToolbarHdr\", */ },\n\t/*::[*/0x00c0/*::]*/: { /* n:\"ToolbarEnd\", */ },\n\t/*::[*/0x00c2/*::]*/: { /* n:\"AddMenu\", */ },\n\t/*::[*/0x00c3/*::]*/: { /* n:\"DelMenu\", */ },\n\t/*::[*/0x00d6/*::]*/: { /* n:\"RString\", */ f:parse_RString },\n\t/*::[*/0x00df/*::]*/: { /* n:\"UDDesc\", */ },\n\t/*::[*/0x00ea/*::]*/: { /* n:\"TabIdConf\", */ },\n\t/*::[*/0x0162/*::]*/: { /* n:\"XL5Modify\", */ },\n\t/*::[*/0x01a5/*::]*/: { /* n:\"FileSharing2\", */ },\n\t/*::[*/0x0206/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0218/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0223/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0231/*::]*/: { /* n:\"Font\", */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BIFF3XF\", */ },\n\t/*::[*/0x0406/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BIFF4XF\", */ },\n\t/*::[*/0x086d/*::]*/: { /* n:\"FeatInfo\", */ },\n\t/*::[*/0x0873/*::]*/: { /* n:\"FeatInfo11\", */ },\n\t/*::[*/0x0881/*::]*/: { /* n:\"SXAddl12\", */ },\n\t/*::[*/0x08c0/*::]*/: { /* n:\"AutoWebPub\", */ },\n\t/*::[*/0x08c1/*::]*/: { /* n:\"ListObj\", */ },\n\t/*::[*/0x08c2/*::]*/: { /* n:\"ListField\", */ },\n\t/*::[*/0x08c3/*::]*/: { /* n:\"ListDV\", */ },\n\t/*::[*/0x08c4/*::]*/: { /* n:\"ListCondFmt\", */ },\n\t/*::[*/0x08c5/*::]*/: { /* n:\"ListCF\", */ },\n\t/*::[*/0x08c6/*::]*/: { /* n:\"FMQry\", */ },\n\t/*::[*/0x08c7/*::]*/: { /* n:\"FMSQry\", */ },\n\t/*::[*/0x08c8/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x08c9/*::]*/: { /* n:\"LnExt\", */ },\n\t/*::[*/0x08ca/*::]*/: { /* n:\"MkrExt\", */ },\n\t/*::[*/0x08cb/*::]*/: { /* n:\"CrtCoopt\", */ },\n\t/*::[*/0x08d6/*::]*/: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/*::[*/0x7262/*::]*/: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*//*::, opts*/) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v||\"\").slice(0,255)));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref/*:string*/, rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tstr = str.replace(//g, \"\");\n\tvar mtch/*:any*/ = str.match(/\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array*/ = [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_cell({r:R,c:C});\n\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tvar sp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '' + w + '';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\tif(cell.v != null) sp[\"data-v\"] = cell.v;\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"\";\n\treturn preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str.match(/[\\s\\S]*?<\\/table>/gi);\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
    \");\n\tif(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\treturn out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array*/ = [header];\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tout.push(make_html_preamble(ws, r, o));\n\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"
    \" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar rows/*:HTMLCollection*/ = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.children/*:any*/);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\") o.l = ({ Target: l });\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(//g,\" \")\n\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t.replace(//g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\treturn [v];\n}\n\nvar number_formats_ods = {\n\t/* ods name: [short ssf fmt, long ssf fmt] */\n\tday: [\"d\", \"dd\"],\n\tmonth: [\"m\", \"mm\"],\n\tyear: [\"y\", \"yy\"],\n\thours: [\"h\", \"hh\"],\n\tminutes: [\"m\", \"mm\"],\n\tseconds: [\"s\", \"ss\"],\n\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\tera: [\"e\", \"ee\"],\n\t/* there is no native representation of LO \"Q\" format */\n\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n};\n\n\nfunction parse_content_xml(d/*:string*/, _opts)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]/*:any*/) : ({}/*:any*/); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); }\n\t\t\t\t\t\t\tq.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\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\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ',\n\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t'',\n\t\t''\n\t].join(\"\");\n\n\tvar payload = '' + master_styles + '';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*//*::, opts*/)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array*/ = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push(' \\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&\")});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array*/, wb) {\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table cells, text */\n\t\to.push(' \\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('\\n');\n\t\t\to.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\"));\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('\\n');\n\t\t// o.push(' \\n');\n\t\twrite_automatic_styles_ods(o, wb);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8contains(body, search) {\n outer:\n for (var L = 0; L <= body.length - search.length; ++L) {\n for (var j = 0; j < search.length; ++j)\n if (body[L + j] != search[j])\n continue outer;\n return true;\n }\n return false;\n}\nfunction u8concat(u8a) {\n var len = u8a.reduce(function(acc, x) {\n return acc + x.length;\n }, 0);\n var out = new Uint8Array(len);\n var off = 0;\n u8a.forEach(function(u8) {\n out.set(u8, off);\n off += u8.length;\n });\n return out;\n}\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n for (var j = offset + 13; j >= offset; --j)\n mantissa = mantissa * 256 + buf[j];\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n buf[offset + i] = mantissa & 255;\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n var l = ptr ? ptr[0] : 0;\n var usz = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128)\n break varint;\n }\n if (ptr)\n ptr[0] = l;\n return usz;\n}\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n sz:\n if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n return usz.slice(0, L);\n}\nfunction varint_to_i32(buf) {\n var l = 0, i32 = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 28;\n }\n return i32;\n}\nfunction parse_shallow(buf) {\n var out = [], ptr = [0];\n while (ptr[0] < buf.length) {\n var off = ptr[0];\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = Math.floor(num / 8);\n var len = 0;\n var res;\n if (num == 0)\n break;\n switch (type) {\n case 0:\n {\n var l = ptr[0];\n while (buf[ptr[0]++] >= 128)\n ;\n res = buf.slice(l, ptr[0]);\n }\n break;\n case 5:\n len = 4;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 1:\n len = 8;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 2:\n len = parse_varint49(buf, ptr);\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n case 3:\n case 4:\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n var v = { data: res, type: type };\n if (out[num] == null)\n out[num] = [v];\n else\n out[num].push(v);\n }\n return out;\n}\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function(field, idx) {\n field.forEach(function(item) {\n if (!item.data)\n return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2)\n out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function(d) {\n return cb(d.data);\n })) || [];\n}\nfunction parse_iwa_file(buf) {\n var _a;\n var out = [], ptr = [0];\n while (ptr[0] < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function(b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf.slice(ptr[0], ptr[0] + fl)\n });\n ptr[0] += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0])\n res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n return out;\n}\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function(ia) {\n var ai = [];\n ai[1] = [{ data: write_varint49(ia.id), type: 0 }];\n ai[2] = [];\n if (ia.merge != null)\n ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n var midata = [];\n ia.messages.forEach(function(mi) {\n midata.push(mi.data);\n mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function(mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0)\n throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = [0];\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n while (ptr[0] < buf.length) {\n var tag = buf[ptr[0]] & 3;\n if (tag == 0) {\n var len = buf[ptr[0]++] >> 2;\n if (len < 60)\n ++len;\n else {\n var c = len - 59;\n len = buf[ptr[0]];\n if (c > 1)\n len |= buf[ptr[0] + 1] << 8;\n if (c > 2)\n len |= buf[ptr[0] + 2] << 16;\n if (c > 3)\n len |= buf[ptr[0] + 3] << 24;\n len >>>= 0;\n len++;\n ptr[0] += c;\n }\n chunks.push(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n continue;\n } else {\n var offset = 0, length = 0;\n if (tag == 1) {\n length = (buf[ptr[0]] >> 2 & 7) + 4;\n offset = (buf[ptr[0]++] & 224) << 3;\n offset |= buf[ptr[0]++];\n } else {\n length = (buf[ptr[0]++] >> 2) + 1;\n if (tag == 2) {\n offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;\n ptr[0] += 2;\n } else {\n offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;\n ptr[0] += 4;\n }\n }\n chunks = [u8concat(chunks)];\n if (offset == 0)\n throw new Error(\"Invalid offset 0\");\n if (offset > chunks[0].length)\n throw new Error(\"Invalid offset beyond length\");\n if (length >= offset) {\n chunks.push(chunks[0].slice(-offset));\n length -= offset;\n while (length >= chunks[chunks.length - 1].length) {\n chunks.push(chunks[chunks.length - 1]);\n length -= chunks[chunks.length - 1].length;\n }\n }\n chunks.push(chunks[0].slice(-offset, -offset + length));\n }\n }\n var o = u8concat(chunks);\n if (o.length != usz)\n throw new Error(\"Unexpected length: \".concat(o.length, \" != \").concat(usz));\n return o;\n}\nfunction decompress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));\n l += len;\n }\n if (l !== buf.length)\n throw new Error(\"data is not a valid framed stream!\");\n return u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n out.push(buf.slice(l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n return u8concat(out);\n}\nfunction parse_old_storage(buf, sst, rsst, v) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;\n var ridx = -1, sidx = -1, ieee = NaN, dt = new Date(2001, 0, 1);\n if (flags & 512) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n if (flags & 16) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n if (flags & 32) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n if (flags & 64) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n var ret;\n switch (buf[2]) {\n case 0:\n break;\n case 2:\n ret = { t: \"n\", v: ieee };\n break;\n case 3:\n ret = { t: \"s\", v: sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee / 86400 };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1)\n ret = { t: \"s\", v: rsst[ridx] };\n else if (sidx > -1)\n ret = { t: \"s\", v: sst[sidx] };\n else if (!isNaN(ieee))\n ret = { t: \"n\", v: ieee };\n else\n throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n return ret;\n}\nfunction parse_new_storage(buf, sst, rsst) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(8, true);\n var data_offset = 12;\n var ridx = -1, sidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);\n if (flags & 1) {\n d128 = readDecimal128LE(buf, data_offset);\n data_offset += 16;\n }\n if (flags & 2) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n if (flags & 4) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n if (flags & 8) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n if (flags & 16) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n var ret;\n switch (buf[1]) {\n case 0:\n break;\n case 2:\n ret = { t: \"n\", v: d128 };\n break;\n case 3:\n ret = { t: \"s\", v: sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee / 86400 };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1)\n ret = { t: \"s\", v: rsst[ridx] };\n else\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n break;\n case 10:\n ret = { t: \"n\", v: d128 };\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n return ret;\n}\nfunction write_new_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 5;\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n flags |= 1;\n l += 16;\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 2;\n l += 8;\n break;\n case \"s\":\n if (sst.indexOf(cell.v) == -1)\n throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[1] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 8;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, flags, true);\n return out.slice(0, l);\n}\nfunction write_old_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 3;\n switch (cell.t) {\n case \"n\":\n out[2] = 2;\n dv.setFloat64(l, cell.v, true);\n flags |= 32;\n l += 8;\n break;\n case \"b\":\n out[2] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 32;\n l += 8;\n break;\n case \"s\":\n if (sst.indexOf(cell.v) == -1)\n throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[2] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 16;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(4, flags, true);\n return out.slice(0, l);\n}\nfunction parse_cell_storage(buf, sst, rsst) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n return parse_old_storage(buf, sst, rsst, buf[0]);\n case 5:\n return parse_new_storage(buf, sst, rsst);\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return parse_varint49(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n var out = [];\n out[1] = [{ type: 0, data: write_varint49(idx) }];\n return write_shallow(out);\n}\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function(entry) {\n var le = parse_shallow(entry.data);\n var key = varint_to_i32(le[1][0].data) >>> 0;\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001)\n throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n data[key] = tswpsa[3].map(function(x) {\n return u8str(x.data);\n }).join(\"\");\n }\n break;\n }\n });\n return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else\n throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535)\n offsets.push([C, off]);\n }\n if (offsets.length != cnt)\n throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n for (C = 0; C < offsets.length - 1; ++C)\n cells[offsets[C][0]] = used_storage.subarray(offsets[C][1] * width, offsets[C + 1][1] * width);\n if (offsets.length >= 1)\n cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);\n return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;\n var ri = mappa(pb[5], function(u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function(acc, x) {\n if (!acc[x.R])\n acc[x.R] = [];\n x.cells.forEach(function(cell, C) {\n if (acc[x.R][C])\n throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\nfunction parse_TST_TableModelArchive(M, root, ws) {\n var _a;\n var pb = parse_shallow(root.data);\n var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0)\n throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0)\n throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var store = parse_shallow(pb[4][0].data);\n var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n tile[1].forEach(function(t) {\n var tl = parse_shallow(t.data);\n var ref = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6002)\n throw new Error(\"6001 unexpected reference to \".concat(mtype));\n var _tile = parse_TST_Tile(M, ref);\n _tile.data.forEach(function(row, R) {\n row.forEach(function(buf, C) {\n var addr = encode_cell({ r: _R + R, c: C });\n var res = parse_cell_storage(buf, sst, rsst);\n if (res)\n ws[addr] = res;\n });\n });\n _R += _tile.nrows;\n });\n}\nfunction parse_TST_TableInfoArchive(M, root) {\n var pb = parse_shallow(root.data);\n var out = { \"!ref\": \"A1\" };\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001)\n throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out);\n return out;\n}\nfunction parse_TN_SheetArchive(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3)\n out.sheets.push(parse_TST_TableInfoArchive(M, m));\n });\n });\n return out;\n}\nfunction parse_TN_DocumentArchive(M, root) {\n var out = book_new();\n var pb = parse_shallow(root.data);\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m);\n root2.sheets.forEach(function(sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0)\n throw new Error(\"Empty NUMBERS file\");\n return out;\n}\nfunction parse_numbers_iwa(cfb) {\n var _a, _b, _c, _d;\n var M = {}, indices = [];\n cfb.FullPaths.forEach(function(p) {\n if (p.match(/\\.iwpv2/))\n throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function(s) {\n if (!s.name.match(/\\.iwa$/))\n return;\n var o;\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n var packets;\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n packets.forEach(function(packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length)\n throw new Error(\"File has no messages\");\n var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot)\n indices.forEach(function(idx) {\n M[idx].forEach(function(iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n if (mtype == 1) {\n if (!docroot)\n docroot = iwam;\n else\n throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot)\n throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot);\n}\nfunction write_tile_row(tri, data, SST) {\n var _a, _b, _c, _d;\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n throw \"Mutation only works on post-BNC storages!\";\n var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;\n if (wide_offsets)\n throw \"Math only works with normal offsets\";\n var cnt = 0;\n var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535);\n continue;\n }\n dv.setUint16(C * 2, last_offset, true);\n _dv.setUint16(C * 2, _last_offset, true);\n var celload, _celload;\n switch (typeof data[C]) {\n case \"string\":\n celload = write_new_storage({ t: \"s\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"s\", v: data[C] }, SST);\n break;\n case \"number\":\n celload = write_new_storage({ t: \"n\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"n\", v: data[C] }, SST);\n break;\n case \"boolean\":\n celload = write_new_storage({ t: \"b\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"b\", v: data[C] }, SST);\n break;\n default:\n throw new Error(\"Unsupported value \" + data[C]);\n }\n cell_storage.push(celload);\n last_offset += celload.length;\n _cell_storage.push(_celload);\n _last_offset += _celload.length;\n ++cnt;\n }\n tri[2][0].data = write_varint49(cnt);\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535, true);\n }\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n return cnt;\n}\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers)\n throw new Error(\"Must pass a `numbers` option -- check the README\");\n var ws = wb.Sheets[wb.SheetNames[0]];\n if (wb.SheetNames.length > 1)\n console.error(\"The Numbers writer currently writes only the first table\");\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n if (range.e.c > 9) {\n trunc = true;\n range.e.c = 9;\n }\n if (range.e.r > 49) {\n trunc = true;\n range.e.r = 49;\n }\n if (trunc)\n console.error(\"The Numbers writer is currently limited to \".concat(encode_range(range)));\n var data = sheet_to_json(ws, { range: range, header: 1 });\n var SST = [\"~Sh33tJ5~\"];\n data.forEach(function(row) {\n return row.forEach(function(cell) {\n if (typeof cell == \"string\")\n SST.push(cell);\n });\n });\n var dependents = {};\n var indices = [];\n var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (fi.type != 2)\n return;\n if (!fi.name.match(/\\.iwa/))\n return;\n var old_content = fi.content;\n var raw1 = decompress_iwa_file(old_content);\n var x2 = parse_iwa_file(raw1);\n x2.forEach(function(packet2) {\n indices.push(packet2.id);\n dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };\n });\n });\n indices.sort(function(x2, y2) {\n return x2 - y2;\n });\n var indices_varint = indices.filter(function(x2) {\n return x2 > 1;\n }).map(function(x2) {\n return [x2, write_varint49(x2)];\n });\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (!fi.name.match(/\\.iwa/))\n return;\n var x2 = parse_iwa_file(decompress_iwa_file(fi.content));\n x2.forEach(function(ia) {\n ia.messages.forEach(function(m) {\n indices_varint.forEach(function(ivi) {\n if (ia.messages.some(function(mess) {\n return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);\n })) {\n dependents[ivi[0]].deps.push(ia.id);\n }\n });\n });\n });\n });\n function get_unique_msgid() {\n for (var i = 927262; i < 2e6; ++i)\n if (!dependents[i])\n return i;\n throw new Error(\"Too many messages\");\n }\n var entry = CFB.find(cfb, dependents[1].location);\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var docroot;\n for (var xi = 0; xi < x.length; ++xi) {\n var packet = x[xi];\n if (packet.id == 1)\n docroot = packet;\n }\n var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref)\n docroot = packet;\n }\n var pb = parse_shallow(docroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n var cruidsref = parse_TSP_Reference(pb[46][0].data);\n var oldbucket = CFB.find(cfb, dependents[cruidsref].location);\n var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n for (var j = 0; j < _x.length; ++j) {\n if (_x[j].id == cruidsref)\n break;\n }\n if (_x[j].id != cruidsref)\n throw \"Bad ColumnRowUIDMapArchive\";\n var cruids = parse_shallow(_x[j].messages[0].data);\n cruids[1] = [];\n cruids[2] = [], cruids[3] = [];\n for (var C = 0; C <= range.e.c; ++C) {\n var uuid = [];\n uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(C + 420690) }];\n cruids[1].push({ type: 2, data: write_shallow(uuid) });\n cruids[2].push({ type: 0, data: write_varint49(C) });\n cruids[3].push({ type: 0, data: write_varint49(C) });\n }\n cruids[4] = [];\n cruids[5] = [], cruids[6] = [];\n for (var R = 0; R <= range.e.r; ++R) {\n uuid = [];\n uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(R + 726270) }];\n cruids[4].push({ type: 2, data: write_shallow(uuid) });\n cruids[5].push({ type: 0, data: write_varint49(R) });\n cruids[6].push({ type: 0, data: write_varint49(R) });\n }\n _x[j].messages[0].data = write_shallow(cruids);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n store[7][0].data = write_varint49(range.e.r + 1);\n var row_headers = parse_shallow(store[1][0].data);\n var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);\n oldbucket = CFB.find(cfb, dependents[row_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != row_header_ref)\n throw \"Bad HeaderStorageBucket\";\n var base_bucket = parse_shallow(_x[0].messages[0].data);\n for (R = 0; R < data.length; ++R) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(R);\n _bucket[4][0].data = write_varint49(data[R].length);\n base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n oldbucket = CFB.find(cfb, dependents[col_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != col_header_ref)\n throw \"Bad HeaderStorageBucket\";\n base_bucket = parse_shallow(_x[0].messages[0].data);\n for (C = 0; C <= range.e.c; ++C) {\n _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var sstref = parse_TSP_Reference(store[4][0].data);\n (function() {\n var sentry = CFB.find(cfb, dependents[sstref].location);\n var sx = parse_iwa_file(decompress_iwa_file(sentry.content));\n var sstroot;\n for (var sxi = 0; sxi < sx.length; ++sxi) {\n var packet2 = sx[sxi];\n if (packet2.id == sstref)\n sstroot = packet2;\n }\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n var newsst = [];\n SST.forEach(function(str, i) {\n newsst[1] = [{ type: 0, data: write_varint49(i) }];\n newsst[2] = [{ type: 0, data: write_varint49(1) }];\n newsst[3] = [{ type: 2, data: stru8(str) }];\n sstdata[3].push({ type: 2, data: write_shallow(newsst) });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n var sy = write_iwa_file(sx);\n var raw32 = compress_iwa_file(sy);\n sentry.content = raw32;\n sentry.size = sentry.content.length;\n })();\n var tile = parse_shallow(store[3][0].data);\n {\n var t = tile[1][0];\n delete tile[2];\n var tl = parse_shallow(t.data);\n {\n var tileref = parse_TSP_Reference(tl[2][0].data);\n (function() {\n var tentry = CFB.find(cfb, dependents[tileref].location);\n var tx = parse_iwa_file(decompress_iwa_file(tentry.content));\n var tileroot;\n for (var sxi = 0; sxi < tx.length; ++sxi) {\n var packet2 = tx[sxi];\n if (packet2.id == tileref)\n tileroot = packet2;\n }\n var tiledata = parse_shallow(tileroot.messages[0].data);\n {\n delete tiledata[6];\n delete tile[7];\n var rowload = new Uint8Array(tiledata[5][0].data);\n tiledata[5] = [];\n var cnt = 0;\n for (var R2 = 0; R2 <= range.e.r; ++R2) {\n var tilerow = parse_shallow(rowload);\n cnt += write_tile_row(tilerow, data[R2], SST);\n tilerow[1][0].data = write_varint49(R2);\n tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n }\n tiledata[1] = [{ type: 0, data: write_varint49(range.e.c + 1) }];\n tiledata[2] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n tiledata[3] = [{ type: 0, data: write_varint49(cnt) }];\n tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n }\n tileroot.messages[0].data = write_shallow(tiledata);\n var ty = write_iwa_file(tx);\n var raw32 = compress_iwa_file(ty);\n tentry.content = raw32;\n tentry.size = tentry.content.length;\n })();\n }\n t.data = write_shallow(tl);\n }\n store[3][0].data = write_shallow(tile);\n }\n pb[4][0].data = write_shallow(store);\n }\n docroot.messages[0].data = write_shallow(pb);\n var y = write_iwa_file(x);\n var raw3 = compress_iwa_file(y);\n entry.content = raw3;\n entry.size = entry.content.length;\n return cfb;\n}\nfunction fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tvar comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(opts.bookType == \"numbers\") return write_numbers_iwa(wb, opts);\n\tif(opts.bookType == \"xlsb\") return write_zip_xlsxb(wb, opts);\n\treturn write_zip_xlsx(wb, opts);\n}\n\n/* XLSX and XLSB writing are very similar. Originally they were unified in one\n export function. This is horrible for tree shaking in the common case (most\n applications need to export files in one format) so this function supports\n both formats while write_zip_xlsx only handles XLSX */\nfunction write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta(f));\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".\" + wbext;\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".\" + wbext, RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\td = $cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, header/*:number*/, hdr/*:Array*/, dense/*:boolean*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw && (val.t !== \"n\" || (val.t === \"n\" && o.rawNumbers !== false)) ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar out/*:Array*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array*/ = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols/*:Array*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array*/ = [], C;\n\tvar cmds/*:Array*/ = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell/*:Cell*/;\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array*/ = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = ws_get_cell_stub(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nfunction book_new()/*:Workbook*/ {\n\treturn { SheetNames: [], Sheets: {} };\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0) {\n\t\tvar m = name.match(/(^.*?)(\\d+)$/);\n\t\ti = m && +m[2] || 0;\n\t\tvar root = m && m[1] || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row/*:?string*/ = \"\", cols/*:Array*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n set_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\n","/**\n * XLSX Preview Component\n *\n * Renders Excel spreadsheets as HTML tables using SheetJS.\n */\n\nimport { useEffect, useState, useMemo } from 'react';\nimport { Table, AlertCircle, Loader2, ChevronLeft, ChevronRight } from 'lucide-react';\nimport * as XLSX from 'xlsx';\n\ninterface XlsxPreviewProps {\n content: string; // Base64 encoded XLSX data\n fileName: string;\n}\n\ninterface SheetData {\n name: string;\n data: string[][]; // 2D array of cell values\n}\n\nexport function XlsxPreview({ content, fileName }: XlsxPreviewProps) {\n const [sheets, setSheets] = useState([]);\n const [activeSheet, setActiveSheet] = useState(0);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n async function parseXlsx() {\n setIsLoading(true);\n setError(null);\n\n try {\n // Convert base64 to binary string\n const binaryString = atob(content);\n\n // Parse the workbook\n const workbook = XLSX.read(binaryString, { type: 'binary' });\n\n // Extract data from each sheet\n const parsedSheets: SheetData[] = workbook.SheetNames.map((name) => {\n const sheet = workbook.Sheets[name];\n const data = XLSX.utils.sheet_to_json(sheet, { header: 1 });\n return { name, data: data as string[][] };\n });\n\n setSheets(parsedSheets);\n setActiveSheet(0);\n } catch (err) {\n console.error('XLSX parsing error:', err);\n setError(err instanceof Error ? err.message : 'Failed to parse spreadsheet');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content) {\n parseXlsx();\n }\n }, [content]);\n\n // Generate HTML table for current sheet\n const tableHtml = useMemo(() => {\n if (sheets.length === 0 || !sheets[activeSheet]) return '';\n\n const { data } = sheets[activeSheet];\n if (data.length === 0) return '

    Empty sheet

    ';\n\n let html = '';\n\n // First row as headers\n const headers = data[0] || [];\n headers.forEach((cell) => {\n html += ``;\n });\n html += '';\n\n // Remaining rows as data\n for (let i = 1; i < data.length; i++) {\n html += '';\n const row = data[i] || [];\n // Ensure we have same number of cells as headers\n for (let j = 0; j < headers.length; j++) {\n html += ``;\n }\n html += '';\n }\n\n html += '
    ${cell ?? ''}
    ${row[j] ?? ''}
    ';\n return html;\n }, [sheets, activeSheet]);\n\n const fullHtml = useMemo(() => {\n return `\n\n\n\n \n \n\n\n${tableHtml}\n\n`;\n }, [tableHtml]);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Excel Spreadsheet\n - {fileName}\n \n\n {/* Sheet navigation */}\n {sheets.length > 1 && (\n
    \n setActiveSheet((prev) => Math.max(0, prev - 1))}\n disabled={activeSheet === 0}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n \n {sheets[activeSheet]?.name} ({activeSheet + 1}/{sheets.length})\n \n setActiveSheet((prev) => Math.min(sheets.length - 1, prev + 1))}\n disabled={activeSheet === sheets.length - 1}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n
    \n )}\n \n\n {/* Content */}\n
    \n {isLoading && (\n
    \n \n Parsing spreadsheet...\n
    \n )}\n\n {error && (\n
    \n \n Failed to parse spreadsheet\n {error}\n
    \n )}\n\n {!isLoading && !error && sheets.length > 0 && (\n \n )}\n
    \n \n );\n}\n\nexport default XlsxPreview;\n","/**\n * PPTX Preview Component\n *\n * Renders PowerPoint presentations by:\n * 1. Attempting Docker-based PDF conversion for full fidelity (if available)\n * 2. Falling back to text extraction from slides\n */\n\nimport { useEffect, useState, useMemo, useRef } from 'react';\nimport { Presentation, AlertCircle, Loader2, ChevronLeft, ChevronRight, FileImage, FileText } from 'lucide-react';\nimport JSZip from 'jszip';\nimport PdfPreview from './PdfPreview';\n\ninterface PptxPreviewProps {\n content: string; // Base64 encoded PPTX data\n fileName: string;\n // Optional: workspace context for Docker conversion\n workspacePath?: string;\n filePath?: string;\n}\n\ninterface SlideContent {\n index: number;\n text: string[];\n notes?: string;\n}\n\ntype PreviewMode = 'auto' | 'pdf' | 'text';\n\nexport function PptxPreview({ content, fileName, workspacePath, filePath }: PptxPreviewProps) {\n const [slides, setSlides] = useState([]);\n const [activeSlide, setActiveSlide] = useState(0);\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [previewMode, setPreviewMode] = useState('auto');\n\n // PDF conversion state\n const [pdfContent, setPdfContent] = useState(null);\n const [isConverting, setIsConverting] = useState(false);\n const [dockerAvailable, setDockerAvailable] = useState(null);\n\n // AbortController for canceling in-flight requests\n const abortControllerRef = useRef(null);\n\n // Try Docker PDF conversion\n useEffect(() => {\n async function tryDockerConversion() {\n if (!workspacePath || !filePath) {\n setDockerAvailable(false);\n return;\n }\n\n // Cancel any previous conversion request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsConverting(true);\n\n try {\n const response = await fetch('/api/convert/document', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n path: filePath,\n workspace: workspacePath,\n }),\n signal: controller.signal,\n });\n\n // Check if request was aborted\n if (controller.signal.aborted) return;\n\n const data = await response.json();\n\n // Double-check abort status after parsing\n if (controller.signal.aborted) return;\n\n if (import.meta.env.DEV) {\n console.log('PPTX Docker conversion response:', {\n success: data.success,\n hasContent: !!data.content,\n contentLength: data.content?.length,\n contentPreview: data.content?.substring(0, 100),\n error: data.error,\n docker_required: data.docker_required,\n });\n }\n\n if (data.success && data.content) {\n setPdfContent(data.content);\n setDockerAvailable(true);\n if (import.meta.env.DEV) {\n console.log('PPTX PDF content set, length:', data.content.length);\n }\n } else {\n if (import.meta.env.DEV) {\n console.warn('PPTX conversion failed:', data.error);\n }\n setDockerAvailable(data.docker_required === true ? false : null);\n }\n } catch (err) {\n // Ignore abort errors - they're expected when switching files\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Docker conversion failed:', err);\n setDockerAvailable(false);\n } finally {\n // Only update loading state if this request wasn't aborted\n if (!controller.signal.aborted) {\n setIsConverting(false);\n }\n }\n }\n\n if (previewMode === 'auto' || previewMode === 'pdf') {\n tryDockerConversion();\n }\n\n // Cleanup: abort on unmount or when dependencies change\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, [workspacePath, filePath, previewMode]);\n\n // Parse PPTX for text extraction (fallback)\n useEffect(() => {\n async function parsePptx() {\n setIsLoading(true);\n setError(null);\n\n try {\n if (!content || content.length === 0) {\n throw new Error('No content provided');\n }\n\n // Try to decode base64\n let bytes: Uint8Array;\n try {\n const binaryString = atob(content);\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } catch (decodeErr) {\n console.error('Base64 decode failed:', decodeErr);\n throw new Error('File content is not valid base64 encoded data');\n }\n\n // Load PPTX as ZIP\n let zip;\n try {\n zip = await JSZip.loadAsync(bytes);\n } catch (zipErr) {\n console.error('ZIP load failed:', zipErr);\n throw new Error('Failed to parse PPTX file structure');\n }\n\n // Find all slide XML files\n const slideFiles: string[] = [];\n zip.forEach((path) => {\n if (path.match(/ppt\\/slides\\/slide\\d+\\.xml$/)) {\n slideFiles.push(path);\n }\n });\n\n if (slideFiles.length === 0) {\n throw new Error('No slides found in presentation');\n }\n\n // Sort slides by number\n slideFiles.sort((a, b) => {\n const numA = parseInt(a.match(/slide(\\d+)/)?.[1] || '0');\n const numB = parseInt(b.match(/slide(\\d+)/)?.[1] || '0');\n return numA - numB;\n });\n\n // Extract text from each slide\n const parsedSlides: SlideContent[] = await Promise.all(\n slideFiles.map(async (path, index) => {\n const xmlContent = await zip.file(path)?.async('text');\n const text: string[] = [];\n\n if (xmlContent) {\n // Extract text from elements\n const textMatches = xmlContent.matchAll(/([^<]*)<\\/a:t>/g);\n for (const match of textMatches) {\n if (match[1].trim()) {\n text.push(match[1].trim());\n }\n }\n }\n\n return {\n index: index + 1,\n text,\n };\n })\n );\n\n setSlides(parsedSlides);\n setActiveSlide(0);\n } catch (err) {\n console.error('PPTX parsing error:', err);\n setError(err instanceof Error ? err.message : 'Failed to parse presentation');\n } finally {\n setIsLoading(false);\n }\n }\n\n if (content && (previewMode === 'auto' || previewMode === 'text')) {\n parsePptx();\n }\n }, [content, previewMode]);\n\n // Generate HTML for current slide (text mode)\n const slideHtml = useMemo(() => {\n if (slides.length === 0 || !slides[activeSlide]) return '';\n\n const slide = slides[activeSlide];\n\n return `\n\n\n\n \n \n\n\n
    \n
    Slide ${slide.index} of ${slides.length}
    \n
    \n ${slide.text.map((t) => `

    ${t}

    `).join('')}\n ${slide.text.length === 0 ? '

    No text content on this slide

    ' : ''}\n
    \n
    \n\n`;\n }, [slides, activeSlide]);\n\n // Determine what to show\n const showPdf = pdfContent && (previewMode === 'pdf' || (previewMode === 'auto' && dockerAvailable));\n const showText = !showPdf && slides.length > 0;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n PowerPoint Presentation\n - {fileName}\n
    \n\n
    \n {/* Mode toggle */}\n {(pdfContent || slides.length > 0) && (\n
    \n setPreviewMode('pdf')}\n disabled={!pdfContent}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showPdf ? 'bg-orange-600 text-white' : 'text-gray-400 hover:text-gray-300'\n } ${!pdfContent ? 'opacity-50 cursor-not-allowed' : ''}`}\n title={pdfContent ? 'Full fidelity preview' : 'Docker container required for PDF preview'}\n >\n \n PDF\n \n setPreviewMode('text')}\n disabled={slides.length === 0}\n className={`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${\n showText ? 'bg-orange-600 text-white' : 'text-gray-400 hover:text-gray-300'\n }`}\n title=\"Text extraction mode\"\n >\n \n Text\n \n
    \n )}\n\n {/* Slide navigation (text mode only) */}\n {showText && slides.length > 0 && (\n
    \n setActiveSlide((prev) => Math.max(0, prev - 1))}\n disabled={activeSlide === 0}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n \n Slide {activeSlide + 1} of {slides.length}\n \n setActiveSlide((prev) => Math.min(slides.length - 1, prev + 1))}\n disabled={activeSlide === slides.length - 1}\n className=\"p-1 hover:bg-gray-700 rounded disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n \n \n
    \n )}\n
    \n
    \n\n {/* Content */}\n
    \n {/* Loading state */}\n {(isLoading || isConverting) && (\n
    \n \n {isConverting ? 'Converting to PDF...' : 'Parsing presentation...'}\n
    \n )}\n\n {/* Error state */}\n {error && !pdfContent && (\n
    \n \n Failed to parse presentation\n {error}\n
    \n )}\n\n {/* PDF preview mode */}\n {!isLoading && !isConverting && showPdf && pdfContent && (\n
    \n \n
    \n )}\n\n {/* Text preview mode */}\n {!isLoading && !isConverting && showText && (\n <>\n {/* Docker not available notice - show when not using PDF mode */}\n {!pdfContent && (\n
    \n
    \n \n \n {!workspacePath\n ? \"Full slide preview available when viewing from workspace (requires Docker).\"\n : \"Full preview requires Docker with MassGen container.\"\n } Showing text extraction.\n \n
    \n
    \n )}\n \n \n )}\n\n {/* Empty state */}\n {!isLoading && !isConverting && !error && slides.length === 0 && !pdfContent && (\n
    \n \n No slides found in presentation\n
    \n )}\n
    \n
    \n );\n}\n\nexport default PptxPreview;\n","/**\n * Video Preview Component\n *\n * Displays video files (e.g., MP4/WebM/MOV) using a HTML5 video player.\n */\n\nimport { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport { Clapperboard, RotateCw, Volume2, VolumeX } from 'lucide-react';\n\ninterface VideoPreviewProps {\n content: string; // Base64-encoded video data or data URL\n fileName: string;\n mimeType?: string;\n}\n\nexport function VideoPreview({ content, fileName, mimeType }: VideoPreviewProps) {\n const [loadError, setLoadError] = useState(null);\n const [muted, setMuted] = useState(true);\n const videoRef = useRef(null);\n\n const videoSrc = useMemo(() => {\n if (!content) return '';\n if (content.startsWith('data:')) return content;\n const type = mimeType || 'video/mp4';\n return `data:${type};base64,${content}`;\n }, [content, mimeType]);\n\n useEffect(() => {\n setLoadError(null);\n if (videoRef.current) {\n videoRef.current.currentTime = 0;\n videoRef.current.load();\n }\n }, [videoSrc]);\n\n const handleReload = useCallback(() => {\n if (!videoRef.current) return;\n videoRef.current.currentTime = 0;\n videoRef.current.play().catch(() => {\n // ignore autoplay errors (e.g., user interaction required)\n });\n }, []);\n\n const toggleMute = useCallback(() => {\n setMuted((prev) => !prev);\n }, []);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Video Preview\n - {fileName}\n
    \n\n
    \n \n {muted ? : }\n \n \n \n \n
    \n
    \n\n {/* Video area */}\n
    \n {loadError ? (\n
    \n \n

    Failed to load video

    \n

    {loadError}

    \n
    \n ) : videoSrc ? (\n setLoadError('Unsupported video format or corrupted data')}\n />\n ) : (\n
    \n \n

    No video content

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default VideoPreview;\n","var e,t=\"colors\",n=\"sizes\",r=\"space\",i={gap:r,gridGap:r,columnGap:r,gridColumnGap:r,rowGap:r,gridRowGap:r,inset:r,insetBlock:r,insetBlockEnd:r,insetBlockStart:r,insetInline:r,insetInlineEnd:r,insetInlineStart:r,margin:r,marginTop:r,marginRight:r,marginBottom:r,marginLeft:r,marginBlock:r,marginBlockEnd:r,marginBlockStart:r,marginInline:r,marginInlineEnd:r,marginInlineStart:r,padding:r,paddingTop:r,paddingRight:r,paddingBottom:r,paddingLeft:r,paddingBlock:r,paddingBlockEnd:r,paddingBlockStart:r,paddingInline:r,paddingInlineEnd:r,paddingInlineStart:r,top:r,right:r,bottom:r,left:r,scrollMargin:r,scrollMarginTop:r,scrollMarginRight:r,scrollMarginBottom:r,scrollMarginLeft:r,scrollMarginX:r,scrollMarginY:r,scrollMarginBlock:r,scrollMarginBlockEnd:r,scrollMarginBlockStart:r,scrollMarginInline:r,scrollMarginInlineEnd:r,scrollMarginInlineStart:r,scrollPadding:r,scrollPaddingTop:r,scrollPaddingRight:r,scrollPaddingBottom:r,scrollPaddingLeft:r,scrollPaddingX:r,scrollPaddingY:r,scrollPaddingBlock:r,scrollPaddingBlockEnd:r,scrollPaddingBlockStart:r,scrollPaddingInline:r,scrollPaddingInlineEnd:r,scrollPaddingInlineStart:r,fontSize:\"fontSizes\",background:t,backgroundColor:t,backgroundImage:t,borderImage:t,border:t,borderBlock:t,borderBlockEnd:t,borderBlockStart:t,borderBottom:t,borderBottomColor:t,borderColor:t,borderInline:t,borderInlineEnd:t,borderInlineStart:t,borderLeft:t,borderLeftColor:t,borderRight:t,borderRightColor:t,borderTop:t,borderTopColor:t,caretColor:t,color:t,columnRuleColor:t,fill:t,outline:t,outlineColor:t,stroke:t,textDecorationColor:t,fontFamily:\"fonts\",fontWeight:\"fontWeights\",lineHeight:\"lineHeights\",letterSpacing:\"letterSpacings\",blockSize:n,minBlockSize:n,maxBlockSize:n,inlineSize:n,minInlineSize:n,maxInlineSize:n,width:n,minWidth:n,maxWidth:n,height:n,minHeight:n,maxHeight:n,flexBasis:n,gridTemplateColumns:n,gridTemplateRows:n,borderWidth:\"borderWidths\",borderTopWidth:\"borderWidths\",borderRightWidth:\"borderWidths\",borderBottomWidth:\"borderWidths\",borderLeftWidth:\"borderWidths\",borderStyle:\"borderStyles\",borderTopStyle:\"borderStyles\",borderRightStyle:\"borderStyles\",borderBottomStyle:\"borderStyles\",borderLeftStyle:\"borderStyles\",borderRadius:\"radii\",borderTopLeftRadius:\"radii\",borderTopRightRadius:\"radii\",borderBottomRightRadius:\"radii\",borderBottomLeftRadius:\"radii\",boxShadow:\"shadows\",textShadow:\"shadows\",transition:\"transitions\",zIndex:\"zIndices\"},o=(e,t)=>\"function\"==typeof t?{\"()\":Function.prototype.toString.call(t)}:t,l=()=>{const e=Object.create(null);return(t,n,...r)=>{const i=(e=>JSON.stringify(e,o))(t);return i in e?e[i]:e[i]=n(t,...r)}},s=Symbol.for(\"sxs.internal\"),a=(e,t)=>Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)),c=e=>{for(const t in e)return!0;return!1},{hasOwnProperty:d}=Object.prototype,g=e=>e.includes(\"-\")?e:e.replace(/[A-Z]/g,(e=>\"-\"+e.toLowerCase())),p=/\\s+(?![^()]*\\))/,u=e=>t=>e(...\"string\"==typeof t?String(t).split(p):[t]),h={appearance:e=>({WebkitAppearance:e,appearance:e}),backfaceVisibility:e=>({WebkitBackfaceVisibility:e,backfaceVisibility:e}),backdropFilter:e=>({WebkitBackdropFilter:e,backdropFilter:e}),backgroundClip:e=>({WebkitBackgroundClip:e,backgroundClip:e}),boxDecorationBreak:e=>({WebkitBoxDecorationBreak:e,boxDecorationBreak:e}),clipPath:e=>({WebkitClipPath:e,clipPath:e}),content:e=>({content:e.includes('\"')||e.includes(\"'\")||/^([A-Za-z]+\\([^]*|[^]*-quote|inherit|initial|none|normal|revert|unset)$/.test(e)?e:`\"${e}\"`}),hyphens:e=>({WebkitHyphens:e,hyphens:e}),maskImage:e=>({WebkitMaskImage:e,maskImage:e}),maskSize:e=>({WebkitMaskSize:e,maskSize:e}),tabSize:e=>({MozTabSize:e,tabSize:e}),textSizeAdjust:e=>({WebkitTextSizeAdjust:e,textSizeAdjust:e}),userSelect:e=>({WebkitUserSelect:e,userSelect:e}),marginBlock:u(((e,t)=>({marginBlockStart:e,marginBlockEnd:t||e}))),marginInline:u(((e,t)=>({marginInlineStart:e,marginInlineEnd:t||e}))),maxSize:u(((e,t)=>({maxBlockSize:e,maxInlineSize:t||e}))),minSize:u(((e,t)=>({minBlockSize:e,minInlineSize:t||e}))),paddingBlock:u(((e,t)=>({paddingBlockStart:e,paddingBlockEnd:t||e}))),paddingInline:u(((e,t)=>({paddingInlineStart:e,paddingInlineEnd:t||e})))},f=/([\\d.]+)([^]*)/,m=(e,t)=>e.length?e.reduce(((e,n)=>(e.push(...t.map((e=>e.includes(\"&\")?e.replace(/&/g,/[ +>|~]/.test(n)&&/&.*&/.test(e)?`:is(${n})`:n):n+\" \"+e))),e)),[]):t,b=(e,t)=>e in S&&\"string\"==typeof t?t.replace(/^((?:[^]*[^\\w-])?)(fit-content|stretch)((?:[^\\w-][^]*)?)$/,((t,n,r,i)=>n+(\"stretch\"===r?`-moz-available${i};${g(e)}:${n}-webkit-fill-available`:`-moz-fit-content${i};${g(e)}:${n}fit-content`)+i)):String(t),S={blockSize:1,height:1,inlineSize:1,maxBlockSize:1,maxHeight:1,maxInlineSize:1,maxWidth:1,minBlockSize:1,minHeight:1,minInlineSize:1,minWidth:1,width:1},k=e=>e?e+\"-\":\"\",y=(e,t,n)=>e.replace(/([+-])?((?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)?(\\$|--)([$\\w-]+)/g,((e,r,i,o,l)=>\"$\"==o==!!i?e:(r||\"--\"==o?\"calc(\":\"\")+\"var(--\"+(\"$\"===o?k(t)+(l.includes(\"$\")?\"\":k(n))+l.replace(/\\$/g,\"-\"):l)+\")\"+(r||\"--\"==o?\"*\"+(r||\"\")+(i||\"1\")+\")\":\"\"))),B=/\\s*,\\s*(?![^()]*\\))/,$=Object.prototype.toString,x=(e,t,n,r,i)=>{let o,l,s;const a=(e,t,n)=>{let c,d;const p=e=>{for(c in e){const x=64===c.charCodeAt(0),z=x&&Array.isArray(e[c])?e[c]:[e[c]];for(d of z){const e=/[A-Z]/.test(S=c)?S:S.replace(/-[^]/g,(e=>e[1].toUpperCase())),z=\"object\"==typeof d&&d&&d.toString===$&&(!r.utils[e]||!t.length);if(e in r.utils&&!z){const t=r.utils[e];if(t!==l){l=t,p(t(d)),l=null;continue}}else if(e in h){const t=h[e];if(t!==s){s=t,p(t(d)),s=null;continue}}if(x&&(u=c.slice(1)in r.media?\"@media \"+r.media[c.slice(1)]:c,c=u.replace(/\\(\\s*([\\w-]+)\\s*(=|<|<=|>|>=)\\s*([\\w-]+)\\s*(?:(<|<=|>|>=)\\s*([\\w-]+)\\s*)?\\)/g,((e,t,n,r,i,o)=>{const l=f.test(t),s=.0625*(l?-1:1),[a,c]=l?[r,t]:[t,r];return\"(\"+(\"=\"===n[0]?\"\":\">\"===n[0]===l?\"max-\":\"min-\")+a+\":\"+(\"=\"!==n[0]&&1===n.length?c.replace(f,((e,t,r)=>Number(t)+s*(\">\"===n?1:-1)+r)):c)+(i?\") and (\"+(\">\"===i[0]?\"min-\":\"max-\")+a+\":\"+(1===i.length?o.replace(f,((e,t,n)=>Number(t)+s*(\">\"===i?-1:1)+n)):o):\"\")+\")\"}))),z){const e=x?n.concat(c):[...n],r=x?[...t]:m(t,c.split(B));void 0!==o&&i(I(...o)),o=void 0,a(d,r,e)}else void 0===o&&(o=[[],t,n]),c=x||36!==c.charCodeAt(0)?c:`--${k(r.prefix)}${c.slice(1).replace(/\\$/g,\"-\")}`,d=z?d:\"number\"==typeof d?d&&e in R?String(d)+\"px\":String(d):y(b(e,null==d?\"\":d),r.prefix,r.themeMap[e]),o[0].push(`${x?`${c} `:`${g(c)}:`}${d}`)}}var u,S};p(e),void 0!==o&&i(I(...o)),o=void 0};a(e,t,n)},I=(e,t,n)=>`${n.map((e=>`${e}{`)).join(\"\")}${t.length?`${t.join(\",\")}{`:\"\"}${e.join(\";\")}${t.length?\"}\":\"\"}${Array(n.length?n.length+1:0).join(\"}\")}`,R={animationDelay:1,animationDuration:1,backgroundSize:1,blockSize:1,border:1,borderBlock:1,borderBlockEnd:1,borderBlockEndWidth:1,borderBlockStart:1,borderBlockStartWidth:1,borderBlockWidth:1,borderBottom:1,borderBottomLeftRadius:1,borderBottomRightRadius:1,borderBottomWidth:1,borderEndEndRadius:1,borderEndStartRadius:1,borderInlineEnd:1,borderInlineEndWidth:1,borderInlineStart:1,borderInlineStartWidth:1,borderInlineWidth:1,borderLeft:1,borderLeftWidth:1,borderRadius:1,borderRight:1,borderRightWidth:1,borderSpacing:1,borderStartEndRadius:1,borderStartStartRadius:1,borderTop:1,borderTopLeftRadius:1,borderTopRightRadius:1,borderTopWidth:1,borderWidth:1,bottom:1,columnGap:1,columnRule:1,columnRuleWidth:1,columnWidth:1,containIntrinsicSize:1,flexBasis:1,fontSize:1,gap:1,gridAutoColumns:1,gridAutoRows:1,gridTemplateColumns:1,gridTemplateRows:1,height:1,inlineSize:1,inset:1,insetBlock:1,insetBlockEnd:1,insetBlockStart:1,insetInline:1,insetInlineEnd:1,insetInlineStart:1,left:1,letterSpacing:1,margin:1,marginBlock:1,marginBlockEnd:1,marginBlockStart:1,marginBottom:1,marginInline:1,marginInlineEnd:1,marginInlineStart:1,marginLeft:1,marginRight:1,marginTop:1,maxBlockSize:1,maxHeight:1,maxInlineSize:1,maxWidth:1,minBlockSize:1,minHeight:1,minInlineSize:1,minWidth:1,offsetDistance:1,offsetRotate:1,outline:1,outlineOffset:1,outlineWidth:1,overflowClipMargin:1,padding:1,paddingBlock:1,paddingBlockEnd:1,paddingBlockStart:1,paddingBottom:1,paddingInline:1,paddingInlineEnd:1,paddingInlineStart:1,paddingLeft:1,paddingRight:1,paddingTop:1,perspective:1,right:1,rowGap:1,scrollMargin:1,scrollMarginBlock:1,scrollMarginBlockEnd:1,scrollMarginBlockStart:1,scrollMarginBottom:1,scrollMarginInline:1,scrollMarginInlineEnd:1,scrollMarginInlineStart:1,scrollMarginLeft:1,scrollMarginRight:1,scrollMarginTop:1,scrollPadding:1,scrollPaddingBlock:1,scrollPaddingBlockEnd:1,scrollPaddingBlockStart:1,scrollPaddingBottom:1,scrollPaddingInline:1,scrollPaddingInlineEnd:1,scrollPaddingInlineStart:1,scrollPaddingLeft:1,scrollPaddingRight:1,scrollPaddingTop:1,shapeMargin:1,textDecoration:1,textDecorationThickness:1,textIndent:1,textUnderlineOffset:1,top:1,transitionDelay:1,transitionDuration:1,verticalAlign:1,width:1,wordSpacing:1},z=e=>String.fromCharCode(e+(e>25?39:97)),W=e=>(e=>{let t,n=\"\";for(t=Math.abs(e);t>52;t=t/52|0)n=z(t%52)+n;return z(t%52)+n})(((e,t)=>{let n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e})(5381,JSON.stringify(e))>>>0),j=[\"themed\",\"global\",\"styled\",\"onevar\",\"resonevar\",\"allvar\",\"inline\"],E=e=>{if(e.href&&!e.href.startsWith(location.origin))return!1;try{return!!e.cssRules}catch(e){return!1}},T=e=>{let t;const n=()=>{const{cssRules:e}=t.sheet;return[].map.call(e,((n,r)=>{const{cssText:i}=n;let o=\"\";if(i.startsWith(\"--sxs\"))return\"\";if(e[r-1]&&(o=e[r-1].cssText).startsWith(\"--sxs\")){if(!n.cssRules.length)return\"\";for(const e in t.rules)if(t.rules[e].group===n)return`--sxs{--sxs:${[...t.rules[e].cache].join(\" \")}}${i}`;return n.cssRules.length?`${o}${i}`:\"\"}return i})).join(\"\")},r=()=>{if(t){const{rules:e,sheet:n}=t;if(!n.deleteRule){for(;3===Object(Object(n.cssRules)[0]).type;)n.cssRules.splice(0,1);n.cssRules=[]}for(const t in e)delete e[t]}const i=Object(e).styleSheets||[];for(const e of i)if(E(e)){for(let i=0,o=e.cssRules;o[i];++i){const l=Object(o[i]);if(1!==l.type)continue;const s=Object(o[i+1]);if(4!==s.type)continue;++i;const{cssText:a}=l;if(!a.startsWith(\"--sxs\"))continue;const c=a.slice(14,-3).trim().split(/\\s+/),d=j[c[0]];d&&(t||(t={sheet:e,reset:r,rules:{},toString:n}),t.rules[d]={group:s,index:i,cache:new Set(c)})}if(t)break}if(!t){const i=(e,t)=>({type:t,cssRules:[],insertRule(e,t){this.cssRules.splice(t,0,i(e,{import:3,undefined:1}[(e.toLowerCase().match(/^@([a-z]+)/)||[])[1]]||4))},get cssText(){return\"@media{}\"===e?`@media{${[].map.call(this.cssRules,(e=>e.cssText)).join(\"\")}}`:e}});t={sheet:e?(e.head||e).appendChild(document.createElement(\"style\")).sheet:i(\"\",\"text/css\"),rules:{},reset:r,toString:n}}const{sheet:o,rules:l}=t;for(let e=j.length-1;e>=0;--e){const t=j[e];if(!l[t]){const n=j[e+1],r=l[n]?l[n].index:o.cssRules.length;o.insertRule(\"@media{}\",r),o.insertRule(`--sxs{--sxs:${e}}`,r),l[t]={group:o.cssRules[r+1],index:r,cache:new Set([e])}}v(l[t])}};return r(),t},v=e=>{const t=e.group;let n=t.cssRules.length;e.apply=e=>{try{t.insertRule(e,n),++n}catch(e){}}},M=Symbol(),w=l(),C=(e,t)=>w(e,(()=>(...n)=>{let r={type:null,composers:new Set};for(const t of n)if(null!=t)if(t[s]){null==r.type&&(r.type=t[s].type);for(const e of t[s].composers)r.composers.add(e)}else t.constructor!==Object||t.$$typeof?null==r.type&&(r.type=t):r.composers.add(P(t,e));return null==r.type&&(r.type=\"span\"),r.composers.size||r.composers.add([\"PJLV\",{},[],[],{},[]]),L(e,r,t)})),P=({variants:e,compoundVariants:t,defaultVariants:n,...r},i)=>{const o=`${k(i.prefix)}c-${W(r)}`,l=[],s=[],a=Object.create(null),g=[];for(const e in n)a[e]=String(n[e]);if(\"object\"==typeof e&&e)for(const t in e){p=a,u=t,d.call(p,u)||(a[t]=\"undefined\");const n=e[t];for(const e in n){const r={[t]:String(e)};\"undefined\"===String(e)&&g.push(t);const i=n[e],o=[r,i,!c(i)];l.push(o)}}var p,u;if(\"object\"==typeof t&&t)for(const e of t){let{css:t,...n}=e;t=\"object\"==typeof t&&t||{};for(const e in n)n[e]=String(n[e]);const r=[n,t,!c(t)];s.push(r)}return[o,r,l,s,a,g]},L=(e,t,n)=>{const[r,i,o,l]=O(t.composers),c=\"function\"==typeof t.type||t.type.$$typeof?(e=>{function t(){for(let n=0;nt.rules[e]={apply:n=>t[M].push([e,n])})),t})(n):null,d=(c||n).rules,g=`.${r}${i.length>1?`:where(.${i.slice(1).join(\".\")})`:\"\"}`,p=s=>{s=\"object\"==typeof s&&s||D;const{css:a,...p}=s,u={};for(const e in o)if(delete p[e],e in s){let t=s[e];\"object\"==typeof t&&t?u[e]={\"@initial\":o[e],...t}:(t=String(t),u[e]=\"undefined\"!==t||l.has(e)?t:o[e])}else u[e]=o[e];const h=new Set([...i]);for(const[r,i,o,l]of t.composers){n.rules.styled.cache.has(r)||(n.rules.styled.cache.add(r),x(i,[`.${r}`],[],e,(e=>{d.styled.apply(e)})));const t=A(o,u,e.media),s=A(l,u,e.media,!0);for(const i of t)if(void 0!==i)for(const[t,o,l]of i){const i=`${r}-${W(o)}-${t}`;h.add(i);const s=(l?n.rules.resonevar:n.rules.onevar).cache,a=l?d.resonevar:d.onevar;s.has(i)||(s.add(i),x(o,[`.${i}`],[],e,(e=>{a.apply(e)})))}for(const t of s)if(void 0!==t)for(const[i,o]of t){const t=`${r}-${W(o)}-${i}`;h.add(t),n.rules.allvar.cache.has(t)||(n.rules.allvar.cache.add(t),x(o,[`.${t}`],[],e,(e=>{d.allvar.apply(e)})))}}if(\"object\"==typeof a&&a){const t=`${r}-i${W(a)}-css`;h.add(t),n.rules.inline.cache.has(t)||(n.rules.inline.cache.add(t),x(a,[`.${t}`],[],e,(e=>{d.inline.apply(e)})))}for(const e of String(s.className||\"\").trim().split(/\\s+/))e&&h.add(e);const f=p.className=[...h].join(\" \");return{type:t.type,className:f,selector:g,props:p,toString:()=>f,deferredInjector:c}};return a(p,{className:r,selector:g,[s]:t,toString:()=>(n.rules.styled.cache.has(r)||p(),r)})},O=e=>{let t=\"\";const n=[],r={},i=[];for(const[o,,,,l,s]of e){\"\"===t&&(t=o),n.push(o),i.push(...s);for(const e in l){const t=l[e];(void 0===r[e]||\"undefined\"!==t||s.includes(t))&&(r[e]=t)}}return[t,n,r,new Set(i)]},A=(e,t,n,r)=>{const i=[];e:for(let[o,l,s]of e){if(s)continue;let e,a=0,c=!1;for(e in o){const r=o[e];let i=t[e];if(i!==r){if(\"object\"!=typeof i||!i)continue e;{let e,t,o=0;for(const l in i){if(r===String(i[l])){if(\"@initial\"!==l){const e=l.slice(1);(t=t||[]).push(e in n?n[e]:l.replace(/^@media ?/,\"\")),c=!0}a+=o,e=!0}++o}if(t&&t.length&&(l={[\"@media \"+t.join(\", \")]:l}),!e)continue e}}}(i[a]=i[a]||[]).push([r?\"cv\":`${e}-${o[e]}`,l,c])}return i},D={},H=l(),N=(e,t)=>H(e,(()=>(...n)=>{const r=()=>{for(let r of n){r=\"object\"==typeof r&&r||{};let n=W(r);if(!t.rules.global.cache.has(n)){if(t.rules.global.cache.add(n),\"@import\"in r){let e=[].indexOf.call(t.sheet.cssRules,t.rules.themed.group)-1;for(let n of[].concat(r[\"@import\"]))n=n.includes('\"')||n.includes(\"'\")?n:`\"${n}\"`,t.sheet.insertRule(`@import ${n};`,e++);delete r[\"@import\"]}x(r,[],[],e,(e=>{t.rules.global.apply(e)}))}}return\"\"};return a(r,{toString:r})})),V=l(),G=(e,t)=>V(e,(()=>n=>{const r=`${k(e.prefix)}k-${W(n)}`,i=()=>{if(!t.rules.global.cache.has(r)){t.rules.global.cache.add(r);const i=[];x(n,[],[],e,(e=>i.push(e)));const o=`@keyframes ${r}{${i.join(\"\")}}`;t.rules.global.apply(o)}return r};return a(i,{get name(){return i()},toString:i})})),F=class{constructor(e,t,n,r){this.token=null==e?\"\":String(e),this.value=null==t?\"\":String(t),this.scale=null==n?\"\":String(n),this.prefix=null==r?\"\":String(r)}get computedValue(){return\"var(\"+this.variable+\")\"}get variable(){return\"--\"+k(this.prefix)+k(this.scale)+this.token}toString(){return this.computedValue}},J=l(),U=(e,t)=>J(e,(()=>(n,r)=>{r=\"object\"==typeof n&&n||Object(r);const i=`.${n=(n=\"string\"==typeof n?n:\"\")||`${k(e.prefix)}t-${W(r)}`}`,o={},l=[];for(const t in r){o[t]={};for(const n in r[t]){const i=`--${k(e.prefix)}${t}-${n}`,s=y(String(r[t][n]),e.prefix,t);o[t][n]=new F(n,s,t,e.prefix),l.push(`${i}:${s}`)}}const s=()=>{if(l.length&&!t.rules.themed.cache.has(n)){t.rules.themed.cache.add(n);const i=`${r===e.theme?\":root,\":\"\"}.${n}{${l.join(\";\")}}`;t.rules.themed.apply(i)}return n};return{...o,get className(){return s()},selector:i,toString:s}})),Z=l(),X=e=>{let t=!1;const n=Z(e,(e=>{t=!0;const n=\"prefix\"in(e=\"object\"==typeof e&&e||{})?String(e.prefix):\"\",r=\"object\"==typeof e.media&&e.media||{},o=\"object\"==typeof e.root?e.root||null:globalThis.document||null,l=\"object\"==typeof e.theme&&e.theme||{},s={prefix:n,media:r,theme:l,themeMap:\"object\"==typeof e.themeMap&&e.themeMap||{...i},utils:\"object\"==typeof e.utils&&e.utils||{}},a=T(o),c={css:C(s,a),globalCss:N(s,a),keyframes:G(s,a),createTheme:U(s,a),reset(){a.reset(),c.theme.toString()},theme:{},sheet:a,config:s,prefix:n,getCssText:a.toString,toString:a.toString};return String(c.theme=c.createTheme(l)),c}));return t||n.reset(),n},Y=()=>e||(e=X()),q=(...e)=>Y().createTheme(...e),K=(...e)=>Y().globalCss(...e),Q=(...e)=>Y().keyframes(...e),_=(...e)=>Y().css(...e);export{X as createStitches,q as createTheme,_ as css,i as defaultThemeMap,K as globalCss,Q as keyframes};\n//# sourceMappingUrl=index.map","var has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nexport function dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\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\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","// src/format.ts\nvar POSITIONALS_EXP = /(%?)(%([sdjo]))/g;\nfunction serializePositional(positional, flag) {\n switch (flag) {\n case \"s\":\n return positional;\n case \"d\":\n case \"i\":\n return Number(positional);\n case \"j\":\n return JSON.stringify(positional);\n case \"o\": {\n if (typeof positional === \"string\") {\n return positional;\n }\n const json = JSON.stringify(positional);\n if (json === \"{}\" || json === \"[]\" || /^\\[object .+?\\]$/.test(json)) {\n return positional;\n }\n return json;\n }\n }\n}\nfunction format(message, ...positionals) {\n if (positionals.length === 0) {\n return message;\n }\n let positionalIndex = 0;\n let formattedMessage = message.replace(\n POSITIONALS_EXP,\n (match, isEscaped, _, flag) => {\n const positional = positionals[positionalIndex];\n const value = serializePositional(positional, flag);\n if (!isEscaped) {\n positionalIndex++;\n return value;\n }\n return match;\n }\n );\n if (positionalIndex < positionals.length) {\n formattedMessage += ` ${positionals.slice(positionalIndex).join(\" \")}`;\n }\n formattedMessage = formattedMessage.replace(/%{2,2}/g, \"%\");\n return formattedMessage;\n}\n\n// src/invariant.ts\nvar STACK_FRAMES_TO_IGNORE = 2;\nfunction cleanErrorStack(error) {\n if (!error.stack) {\n return;\n }\n const nextStack = error.stack.split(\"\\n\");\n nextStack.splice(1, STACK_FRAMES_TO_IGNORE);\n error.stack = nextStack.join(\"\\n\");\n}\nvar InvariantError = class extends Error {\n constructor(message, ...positionals) {\n super(message);\n this.message = message;\n this.name = \"Invariant Violation\";\n this.message = format(message, ...positionals);\n cleanErrorStack(this);\n }\n};\nvar invariant = (predicate, message, ...positionals) => {\n if (!predicate) {\n throw new InvariantError(message, ...positionals);\n }\n};\ninvariant.as = (ErrorConstructor, predicate, message, ...positionals) => {\n if (!predicate) {\n const isConstructor = ErrorConstructor.prototype.name != null;\n const error = isConstructor ? new ErrorConstructor(format(message, positionals)) : ErrorConstructor(format(message, positionals));\n throw error;\n }\n};\nexport {\n InvariantError,\n format,\n invariant\n};\n//# sourceMappingURL=index.mjs.map","import { invariant } from 'outvariant';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* globalThis Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nvar SandpackLogLevel;\n(function (SandpackLogLevel) {\n SandpackLogLevel[SandpackLogLevel[\"None\"] = 0] = \"None\";\n SandpackLogLevel[SandpackLogLevel[\"Error\"] = 10] = \"Error\";\n SandpackLogLevel[SandpackLogLevel[\"Warning\"] = 20] = \"Warning\";\n SandpackLogLevel[SandpackLogLevel[\"Info\"] = 30] = \"Info\";\n SandpackLogLevel[SandpackLogLevel[\"Debug\"] = 40] = \"Debug\";\n})(SandpackLogLevel || (SandpackLogLevel = {}));\n\nvar createError = function (message) {\n return \"[sandpack-client]: \".concat(message);\n};\nfunction nullthrows(value, err) {\n if (err === void 0) { err = \"Value is nullish\"; }\n invariant(value != null, createError(err));\n return value;\n}\nvar DEPENDENCY_ERROR_MESSAGE = \"\\\"dependencies\\\" was not specified - provide either a package.json or a \\\"dependencies\\\" value\";\nvar ENTRY_ERROR_MESSAGE = \"\\\"entry\\\" was not specified - provide either a package.json with the \\\"main\\\" field or an \\\"entry\\\" value\";\nfunction createPackageJSON(dependencies, devDependencies, entry) {\n if (dependencies === void 0) { dependencies = {}; }\n if (devDependencies === void 0) { devDependencies = {}; }\n if (entry === void 0) { entry = \"/index.js\"; }\n return JSON.stringify({\n name: \"sandpack-project\",\n main: entry,\n dependencies: dependencies,\n devDependencies: devDependencies,\n }, null, 2);\n}\nfunction addPackageJSONIfNeeded(files, dependencies, devDependencies, entry) {\n var _a, _b;\n var normalizedFilesPath = normalizePath(files);\n var packageJsonFile = normalizedFilesPath[\"/package.json\"];\n /**\n * Create a new package json\n */\n if (!packageJsonFile) {\n nullthrows(dependencies, DEPENDENCY_ERROR_MESSAGE);\n nullthrows(entry, ENTRY_ERROR_MESSAGE);\n normalizedFilesPath[\"/package.json\"] = {\n code: createPackageJSON(dependencies, devDependencies, entry),\n };\n return normalizedFilesPath;\n }\n /**\n * Merge package json with custom setup\n */\n if (packageJsonFile) {\n var packageJsonContent = JSON.parse(packageJsonFile.code);\n nullthrows(!(!dependencies && !packageJsonContent.dependencies), ENTRY_ERROR_MESSAGE);\n if (dependencies) {\n packageJsonContent.dependencies = __assign(__assign({}, ((_a = packageJsonContent.dependencies) !== null && _a !== void 0 ? _a : {})), (dependencies !== null && dependencies !== void 0 ? dependencies : {}));\n }\n if (devDependencies) {\n packageJsonContent.devDependencies = __assign(__assign({}, ((_b = packageJsonContent.devDependencies) !== null && _b !== void 0 ? _b : {})), (devDependencies !== null && devDependencies !== void 0 ? devDependencies : {}));\n }\n if (entry) {\n packageJsonContent.main = entry;\n }\n normalizedFilesPath[\"/package.json\"] = {\n code: JSON.stringify(packageJsonContent, null, 2),\n };\n }\n return normalizedFilesPath;\n}\nfunction extractErrorDetails(msg) {\n var _a;\n if (msg.title === \"SyntaxError\") {\n var title = msg.title, path = msg.path, message = msg.message, line = msg.line, column = msg.column;\n return { title: title, path: path, message: message, line: line, column: column };\n }\n var relevantStackFrame = getRelevantStackFrame((_a = msg.payload) === null || _a === void 0 ? void 0 : _a.frames);\n if (!relevantStackFrame) {\n return { message: msg.message };\n }\n var errorInCode = getErrorInOriginalCode(relevantStackFrame);\n var errorLocation = getErrorLocation(relevantStackFrame);\n var errorMessage = formatErrorMessage(relevantStackFrame._originalFileName, msg.message, errorLocation, errorInCode);\n return {\n message: errorMessage,\n title: msg.title,\n path: relevantStackFrame._originalFileName,\n line: relevantStackFrame._originalLineNumber,\n column: relevantStackFrame._originalColumnNumber,\n };\n}\nfunction getRelevantStackFrame(frames) {\n if (!frames) {\n return;\n }\n return frames.find(function (frame) { return !!frame._originalFileName; });\n}\nfunction getErrorLocation(errorFrame) {\n return errorFrame\n ? \" (\".concat(errorFrame._originalLineNumber, \":\").concat(errorFrame._originalColumnNumber, \")\")\n : \"\";\n}\nfunction getErrorInOriginalCode(errorFrame) {\n var lastScriptLine = errorFrame._originalScriptCode[errorFrame._originalScriptCode.length - 1];\n var numberOfLineNumberCharacters = lastScriptLine.lineNumber.toString().length;\n var leadingCharacterOffset = 2;\n var barSeparatorCharacterOffset = 3;\n var extraLineLeadingSpaces = leadingCharacterOffset +\n numberOfLineNumberCharacters +\n barSeparatorCharacterOffset +\n errorFrame._originalColumnNumber;\n return errorFrame._originalScriptCode.reduce(function (result, scriptLine) {\n var leadingChar = scriptLine.highlight ? \">\" : \" \";\n var lineNumber = scriptLine.lineNumber.toString().length === numberOfLineNumberCharacters\n ? \"\".concat(scriptLine.lineNumber)\n : \" \".concat(scriptLine.lineNumber);\n var extraLine = scriptLine.highlight\n ? \"\\n\" + \" \".repeat(extraLineLeadingSpaces) + \"^\"\n : \"\";\n return (result + // accumulator\n \"\\n\" +\n leadingChar + // > or \" \"\n \" \" +\n lineNumber + // line number on equal number of characters\n \" | \" +\n scriptLine.content + // code\n extraLine // line under the highlighed line to show the column index\n );\n }, \"\");\n}\nfunction formatErrorMessage(filePath, message, location, errorInCode) {\n return \"\".concat(filePath, \": \").concat(message).concat(location, \"\\n\").concat(errorInCode);\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar normalizePath = function (path) {\n if (typeof path === \"string\") {\n return (path.startsWith(\"/\") ? path : \"/\".concat(path));\n }\n if (Array.isArray(path)) {\n return path.map(function (p) { return (p.startsWith(\"/\") ? p : \"/\".concat(p)); });\n }\n if (typeof path === \"object\" && path !== null) {\n return Object.entries(path).reduce(function (acc, _a) {\n var key = _a[0], content = _a[1];\n var fileName = key.startsWith(\"/\") ? key : \"/\".concat(key);\n acc[fileName] = content;\n return acc;\n }, {});\n }\n return null;\n};\n\nexport { SandpackLogLevel as S, __awaiter as _, __generator as a, createPackageJSON as b, createError as c, addPackageJSONIfNeeded as d, extractErrorDetails as e, normalizePath as f, __extends as g, __assign as h, __spreadArray as i, nullthrows as n };\n","import { _ as __awaiter, a as __generator } from './utils-52664384.mjs';\nexport { S as SandpackLogLevel, d as addPackageJSONIfNeeded, c as createError, b as createPackageJSON, e as extractErrorDetails, f as normalizePath, n as nullthrows } from './utils-52664384.mjs';\nimport 'outvariant';\n\nfunction loadSandpackClient(iframeSelector, sandboxSetup, options) {\n var _a;\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var template, Client, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n template = (_a = sandboxSetup.template) !== null && _a !== void 0 ? _a : \"parcel\";\n _b = template;\n switch (_b) {\n case \"node\": return [3 /*break*/, 1];\n case \"static\": return [3 /*break*/, 3];\n }\n return [3 /*break*/, 5];\n case 1: return [4 /*yield*/, import('./clients/node/index.mjs').then(function (m) { return m.SandpackNode; })];\n case 2:\n Client = _c.sent();\n return [3 /*break*/, 7];\n case 3: return [4 /*yield*/, import('./index-599aeaf7.mjs').then(function (m) { return m.SandpackStatic; })];\n case 4:\n Client = _c.sent();\n return [3 /*break*/, 7];\n case 5: return [4 /*yield*/, import('./clients/runtime/index.mjs').then(function (m) { return m.SandpackRuntime; })];\n case 6:\n Client = _c.sent();\n _c.label = 7;\n case 7: return [2 /*return*/, new Client(iframeSelector, sandboxSetup, options)];\n }\n });\n });\n}\n\nexport { loadSandpackClient };\n","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n // Compressed representation of the Grapheme_Cluster_Break=Extend\n // information from\n // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n // Each pair of elements represents a range, as an offet from the\n // previous range and a length. Numbers are in base-36, with the empty\n // string being a shorthand for 1.\n let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n for (let i = 0, n = 0; i < numbers.length; i++)\n (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n if (code < 768) return false\n for (let from = 0, to = rangeFrom.length;;) {\n let mid = (from + to) >> 1\n if (code < rangeFrom[mid]) to = mid\n else if (code >= rangeTo[mid]) from = mid + 1\n else return true\n if (from == to) return false\n }\n}\n\nfunction isRegionalIndicator(code) {\n return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n for (let i = 0; i < rangeFrom.length; i++) {\n if (rangeTo[i] > code) return rangeFrom[i] <= code\n }\n return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n if (pos == str.length) return pos\n // If pos is in the middle of a surrogate pair, move to its start\n if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n let prev = codePointAt(str, pos)\n pos += codePointSize(prev)\n while (pos < str.length) {\n let next = codePointAt(str, pos)\n if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n pos += codePointSize(next)\n prev = next\n } else if (isRegionalIndicator(next)) {\n let countBefore = 0, i = pos - 2\n while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n if (countBefore % 2 == 0) break\n else pos += 2\n } else {\n break\n }\n }\n return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n while (pos > 0) {\n let found = nextClusterBreak(str, pos - 2, includeExtending)\n if (found < pos) return found\n pos--\n }\n return 0\n}\n\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos)\n if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n let code1 = str.charCodeAt(pos + 1)\n if (!surrogateLow(code1)) return code0\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n","import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n /**\n Get the line description around the given position.\n */\n lineAt(pos) {\n if (pos < 0 || pos > this.length)\n throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n return this.lineInner(pos, false, 1, 0);\n }\n /**\n Get the description for the given (1-based) line number.\n */\n line(n) {\n if (n < 1 || n > this.lines)\n throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n return this.lineInner(n, true, 1, 0);\n }\n /**\n Replace a range of the text with the given content.\n */\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(0, from, parts, 2 /* Open.To */);\n if (text.length)\n text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n this.decompose(to, this.length, parts, 1 /* Open.From */);\n return TextNode.from(parts, this.length - (to - from) + text.length);\n }\n /**\n Append another document to this one.\n */\n append(other) {\n return this.replace(this.length, this.length, other);\n }\n /**\n Retrieve the text between the given points.\n */\n slice(from, to = this.length) {\n [from, to] = clip(this, from, to);\n let parts = [];\n this.decompose(from, to, parts, 0);\n return TextNode.from(parts, to - from);\n }\n /**\n Test whether this text is equal to another instance.\n */\n eq(other) {\n if (other == this)\n return true;\n if (other.length != this.length || other.lines != this.lines)\n return false;\n let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n let a = new RawTextCursor(this), b = new RawTextCursor(other);\n for (let skip = start, pos = start;;) {\n a.next(skip);\n b.next(skip);\n skip = 0;\n if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n return false;\n pos += a.value.length;\n if (a.done || pos >= end)\n return true;\n }\n }\n /**\n Iterate over the text. When `dir` is `-1`, iteration happens\n from end to start. This will return lines and the breaks between\n them as separate strings.\n */\n iter(dir = 1) { return new RawTextCursor(this, dir); }\n /**\n Iterate over a range of the text. When `from` > `to`, the\n iterator will run in reverse.\n */\n iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n /**\n Return a cursor that iterates over the given range of lines,\n _without_ returning the line breaks between, and yielding empty\n strings for empty lines.\n \n When `from` and `to` are given, they should be 1-based line numbers.\n */\n iterLines(from, to) {\n let inner;\n if (from == null) {\n inner = this.iter();\n }\n else {\n if (to == null)\n to = this.lines + 1;\n let start = this.line(from).from;\n inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n }\n return new LineCursor(inner);\n }\n /**\n Return the document as a string, using newline characters to\n separate lines.\n */\n toString() { return this.sliceString(0); }\n /**\n Convert the document to an array of lines (which can be\n deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n */\n toJSON() {\n let lines = [];\n this.flatten(lines);\n return lines;\n }\n /**\n @internal\n */\n constructor() { }\n /**\n Create a `Text` instance for the given array of lines.\n */\n static of(text) {\n if (text.length == 0)\n throw new RangeError(\"A document must have at least one line\");\n if (text.length == 1 && !text[0])\n return Text.empty;\n return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n constructor(text, length = textLength(text)) {\n super();\n this.text = text;\n this.length = length;\n }\n get lines() { return this.text.length; }\n get children() { return null; }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let string = this.text[i], end = offset + string.length;\n if ((isLine ? line : end) >= target)\n return new Line(offset, end, line, string);\n offset = end + 1;\n line++;\n }\n }\n decompose(from, to, target, open) {\n let text = from <= 0 && to >= this.length ? this\n : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n if (open & 1 /* Open.From */) {\n let prev = target.pop();\n let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n if (joined.length <= 32 /* Tree.Branch */) {\n target.push(new TextLeaf(joined, prev.length + text.length));\n }\n else {\n let mid = joined.length >> 1;\n target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n }\n }\n else {\n target.push(text);\n }\n }\n replace(from, to, text) {\n if (!(text instanceof TextLeaf))\n return super.replace(from, to, text);\n [from, to] = clip(this, from, to);\n let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n let newLen = this.length + text.length - (to - from);\n if (lines.length <= 32 /* Tree.Branch */)\n return new TextLeaf(lines, newLen);\n return TextNode.from(TextLeaf.split(lines, []), newLen);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n let line = this.text[i], end = pos + line.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += line.slice(Math.max(0, from - pos), to - pos);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let line of this.text)\n target.push(line);\n }\n scanIdentical() { return 0; }\n static split(text, target) {\n let part = [], len = -1;\n for (let line of text) {\n part.push(line);\n len += line.length + 1;\n if (part.length == 32 /* Tree.Branch */) {\n target.push(new TextLeaf(part, len));\n part = [];\n len = -1;\n }\n }\n if (len > -1)\n target.push(new TextLeaf(part, len));\n return target;\n }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n constructor(children, length) {\n super();\n this.children = children;\n this.length = length;\n this.lines = 0;\n for (let child of children)\n this.lines += child.lines;\n }\n lineInner(target, isLine, line, offset) {\n for (let i = 0;; i++) {\n let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n if ((isLine ? endLine : end) >= target)\n return child.lineInner(target, isLine, line, offset);\n offset = end + 1;\n line = endLine + 1;\n }\n }\n decompose(from, to, target, open) {\n for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n if (from <= end && to >= pos) {\n let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n if (pos >= from && end <= to && !childOpen)\n target.push(child);\n else\n child.decompose(from - pos, to - pos, target, childOpen);\n }\n pos = end + 1;\n }\n }\n replace(from, to, text) {\n [from, to] = clip(this, from, to);\n if (text.lines < this.lines)\n for (let i = 0, pos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = pos + child.length;\n // Fast path: if the change only affects one child and the\n // child's size remains in the acceptable range, only update\n // that child\n if (from >= pos && to <= end) {\n let updated = child.replace(from - pos, to - pos, text);\n let totalLines = this.lines - child.lines + updated.lines;\n if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n let copy = this.children.slice();\n copy[i] = updated;\n return new TextNode(copy, this.length - (to - from) + text.length);\n }\n return super.replace(pos, end, updated);\n }\n pos = end + 1;\n }\n return super.replace(from, to, text);\n }\n sliceString(from, to = this.length, lineSep = \"\\n\") {\n [from, to] = clip(this, from, to);\n let result = \"\";\n for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n let child = this.children[i], end = pos + child.length;\n if (pos > from && i)\n result += lineSep;\n if (from < end && to > pos)\n result += child.sliceString(from - pos, to - pos, lineSep);\n pos = end + 1;\n }\n return result;\n }\n flatten(target) {\n for (let child of this.children)\n child.flatten(target);\n }\n scanIdentical(other, dir) {\n if (!(other instanceof TextNode))\n return 0;\n let length = 0;\n let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n : [this.children.length - 1, other.children.length - 1, -1, -1];\n for (;; iA += dir, iB += dir) {\n if (iA == eA || iB == eB)\n return length;\n let chA = this.children[iA], chB = other.children[iB];\n if (chA != chB)\n return length + chA.scanIdentical(chB, dir);\n length += chA.length + 1;\n }\n }\n static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n let lines = 0;\n for (let ch of children)\n lines += ch.lines;\n if (lines < 32 /* Tree.Branch */) {\n let flat = [];\n for (let ch of children)\n ch.flatten(flat);\n return new TextLeaf(flat, length);\n }\n let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n function add(child) {\n let last;\n if (child.lines > maxChunk && child instanceof TextNode) {\n for (let node of child.children)\n add(node);\n }\n else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n flush();\n chunked.push(child);\n }\n else if (child instanceof TextLeaf && currentLines &&\n (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n child.lines + last.lines <= 32 /* Tree.Branch */) {\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n }\n else {\n if (currentLines + child.lines > chunk)\n flush();\n currentLines += child.lines;\n currentLen += child.length + 1;\n currentChunk.push(child);\n }\n }\n function flush() {\n if (currentLines == 0)\n return;\n chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n currentLen = -1;\n currentLines = currentChunk.length = 0;\n }\n for (let child of children)\n add(child);\n flush();\n return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n let length = -1;\n for (let line of text)\n length += line.length + 1;\n return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n let line = text[i], end = pos + line.length;\n if (end >= from) {\n if (end > to)\n line = line.slice(0, to - pos);\n if (pos < from)\n line = line.slice(from - pos);\n if (first) {\n target[target.length - 1] += line;\n first = false;\n }\n else\n target.push(line);\n }\n pos = end + 1;\n }\n return target;\n}\nfunction sliceText(text, from, to) {\n return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n constructor(text, dir = 1) {\n this.dir = dir;\n this.done = false;\n this.lineBreak = false;\n this.value = \"\";\n this.nodes = [text];\n this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n }\n nextInner(skip, dir) {\n this.done = this.lineBreak = false;\n for (;;) {\n let last = this.nodes.length - 1;\n let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n if (offset == (dir > 0 ? size : 0)) {\n if (last == 0) {\n this.done = true;\n this.value = \"\";\n return this;\n }\n if (dir > 0)\n this.offsets[last - 1]++;\n this.nodes.pop();\n this.offsets.pop();\n }\n else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n this.offsets[last] += dir;\n if (skip == 0) {\n this.lineBreak = true;\n this.value = \"\\n\";\n return this;\n }\n skip--;\n }\n else if (top instanceof TextLeaf) {\n // Move to the next string\n let next = top.text[offset + (dir < 0 ? -1 : 0)];\n this.offsets[last] += dir;\n if (next.length > Math.max(0, skip)) {\n this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n return this;\n }\n skip -= next.length;\n }\n else {\n let next = top.children[offset + (dir < 0 ? -1 : 0)];\n if (skip > next.length) {\n skip -= next.length;\n this.offsets[last] += dir;\n }\n else {\n if (dir < 0)\n this.offsets[last]--;\n this.nodes.push(next);\n this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n }\n }\n }\n }\n next(skip = 0) {\n if (skip < 0) {\n this.nextInner(-skip, (-this.dir));\n skip = this.value.length;\n }\n return this.nextInner(skip, this.dir);\n }\n}\nclass PartialTextCursor {\n constructor(text, start, end) {\n this.value = \"\";\n this.done = false;\n this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n this.pos = start > end ? text.length : 0;\n this.from = Math.min(start, end);\n this.to = Math.max(start, end);\n }\n nextInner(skip, dir) {\n if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n this.value = \"\";\n this.done = true;\n return this;\n }\n skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n if (skip > limit)\n skip = limit;\n limit -= skip;\n let { value } = this.cursor.next(skip);\n this.pos += (value.length + skip) * dir;\n this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n this.done = !this.value;\n return this;\n }\n next(skip = 0) {\n if (skip < 0)\n skip = Math.max(skip, this.from - this.pos);\n else if (skip > 0)\n skip = Math.min(skip, this.to - this.pos);\n return this.nextInner(skip, this.cursor.dir);\n }\n get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n constructor(inner) {\n this.inner = inner;\n this.afterBreak = true;\n this.value = \"\";\n this.done = false;\n }\n next(skip = 0) {\n let { done, lineBreak, value } = this.inner.next(skip);\n if (done && this.afterBreak) {\n this.value = \"\";\n this.afterBreak = false;\n }\n else if (done) {\n this.done = true;\n this.value = \"\";\n }\n else if (lineBreak) {\n if (this.afterBreak) {\n this.value = \"\";\n }\n else {\n this.afterBreak = true;\n this.next();\n }\n }\n else {\n this.value = value;\n this.afterBreak = false;\n }\n return this;\n }\n get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n /**\n @internal\n */\n constructor(\n /**\n The position of the start of the line.\n */\n from, \n /**\n The position at the end of the line (_before_ the line break,\n or at the end of document for the last line).\n */\n to, \n /**\n This line's line number (1-based).\n */\n number, \n /**\n The line's content.\n */\n text) {\n this.from = from;\n this.to = to;\n this.number = number;\n this.text = text;\n }\n /**\n The length of the line (not including any line break after it).\n */\n get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n from = Math.max(0, Math.min(text.length, from));\n return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n let code0 = str.charCodeAt(pos);\n if (!surrogateHigh(code0) || pos + 1 == str.length)\n return code0;\n let code1 = str.charCodeAt(pos + 1);\n if (!surrogateLow(code1))\n return code0;\n return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n if (code <= 0xffff)\n return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n /**\n Map a position to a valid new position, even when its context\n was deleted.\n */\n MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n /**\n Return null if deletion happens across the position.\n */\n MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n /**\n Return null if the character _before_ the position is deleted.\n */\n MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n /**\n Return null if the character _after_ the position is deleted.\n */\n MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n // Sections are encoded as pairs of integers. The first is the\n // length in the current document, and the second is -1 for\n // unaffected sections, and the length of the replacement content\n // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n // 0), and a replacement two positive numbers.\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n sections) {\n this.sections = sections;\n }\n /**\n The length of the document before the change.\n */\n get length() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2)\n result += this.sections[i];\n return result;\n }\n /**\n The length of the document after the change.\n */\n get newLength() {\n let result = 0;\n for (let i = 0; i < this.sections.length; i += 2) {\n let ins = this.sections[i + 1];\n result += ins < 0 ? this.sections[i] : ins;\n }\n return result;\n }\n /**\n False when there are actual changes in this set.\n */\n get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n /**\n Iterate over the unchanged parts left by these changes. `posA`\n provides the position of the range in the old document, `posB`\n the new position in the changed document.\n */\n iterGaps(f) {\n for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0) {\n f(posA, posB, len);\n posB += len;\n }\n else {\n posB += ins;\n }\n posA += len;\n }\n }\n /**\n Iterate over the ranges changed by these changes. (See\n [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n variant that also provides you with the inserted text.)\n `fromA`/`toA` provides the extent of the change in the starting\n document, `fromB`/`toB` the extent of the replacement in the\n changed document.\n \n When `individual` is true, adjacent changes (which are kept\n separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n reported separately.\n */\n iterChangedRanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a description of the inverted form of these changes.\n */\n get invertedDesc() {\n let sections = [];\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n if (ins < 0)\n sections.push(len, ins);\n else\n sections.push(ins, len);\n }\n return new ChangeDesc(sections);\n }\n /**\n Compute the combined effect of applying another set of changes\n after this one. The length of the document after this set should\n match the length before `other`.\n */\n composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n /**\n Map this description, which should start with the same document\n as `other`, over another set of changes, so that it can be\n applied after it. When `before` is true, map as if the changes\n in `this` happened before the ones in `other`.\n */\n mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n let posA = 0, posB = 0;\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n if (ins < 0) {\n if (endA > pos)\n return posB + (pos - posA);\n posB += len;\n }\n else {\n if (mode != MapMode.Simple && endA >= pos &&\n (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n mode == MapMode.TrackBefore && posA < pos ||\n mode == MapMode.TrackAfter && endA > pos))\n return null;\n if (endA > pos || endA == pos && assoc < 0 && !len)\n return pos == posA || assoc < 0 ? posB : posB + ins;\n posB += ins;\n }\n posA = endA;\n }\n if (pos > posA)\n throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n return posB;\n }\n /**\n Check whether these changes touch a given range. When one of the\n changes entirely covers the range, the string `\"cover\"` is\n returned.\n */\n touchesRange(from, to = from) {\n for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n if (ins >= 0 && pos <= to && end >= from)\n return pos < from && end > to ? \"cover\" : true;\n pos = end;\n }\n return false;\n }\n /**\n @internal\n */\n toString() {\n let result = \"\";\n for (let i = 0; i < this.sections.length;) {\n let len = this.sections[i++], ins = this.sections[i++];\n result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n }\n return result;\n }\n /**\n Serialize this change desc to a JSON-representable value.\n */\n toJSON() { return this.sections; }\n /**\n Create a change desc from its JSON representation (as produced\n by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n return new ChangeDesc(json);\n }\n /**\n @internal\n */\n static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n constructor(sections, \n /**\n @internal\n */\n inserted) {\n super(sections);\n this.inserted = inserted;\n }\n /**\n Apply the changes to a document, returning the modified\n document.\n */\n apply(doc) {\n if (this.length != doc.length)\n throw new RangeError(\"Applying change set to a document with the wrong length\");\n iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n return doc;\n }\n mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n /**\n Given the document as it existed _before_ the changes, return a\n change set that represents the inverse of this set, which could\n be used to go from the document created by the changes back to\n the document as it existed before the changes.\n */\n invert(doc) {\n let sections = this.sections.slice(), inserted = [];\n for (let i = 0, pos = 0; i < sections.length; i += 2) {\n let len = sections[i], ins = sections[i + 1];\n if (ins >= 0) {\n sections[i] = ins;\n sections[i + 1] = len;\n let index = i >> 1;\n while (inserted.length < index)\n inserted.push(Text.empty);\n inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n }\n pos += len;\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n Combine two subsequent change sets into a single set. `other`\n must start in the document produced by `this`. If `this` goes\n `docA` → `docB` and `other` represents `docB` → `docC`, the\n returned value will represent the change `docA` → `docC`.\n */\n compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n /**\n Given another change set starting in the same document, maps this\n change set over the other, producing a new change set that can be\n applied to the document produced by applying `other`. When\n `before` is `true`, order changes as if `this` comes before\n `other`, otherwise (the default) treat `other` as coming first.\n \n Given two changes `A` and `B`, `A.compose(B.map(A))` and\n `B.compose(A.map(B, true))` will produce the same document. This\n provides a basic form of [operational\n transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n and can be used for collaborative editing.\n */\n map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n /**\n Iterate over the changed ranges in the document, calling `f` for\n each, with the range in the original document (`fromA`-`toA`)\n and the range that replaces it in the new document\n (`fromB`-`toB`).\n \n When `individual` is true, adjacent changes are reported\n separately.\n */\n iterChanges(f, individual = false) {\n iterChanges(this, f, individual);\n }\n /**\n Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n set.\n */\n get desc() { return ChangeDesc.create(this.sections); }\n /**\n @internal\n */\n filter(ranges) {\n let resultSections = [], resultInserted = [], filteredSections = [];\n let iter = new SectionIter(this);\n done: for (let i = 0, pos = 0;;) {\n let next = i == ranges.length ? 1e9 : ranges[i++];\n while (pos < next || pos == next && iter.len == 0) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, next - pos);\n addSection(filteredSections, len, -1);\n let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n addSection(resultSections, len, ins);\n if (ins > 0)\n addInsert(resultInserted, resultSections, iter.text);\n iter.forward(len);\n pos += len;\n }\n let end = ranges[i++];\n while (pos < end) {\n if (iter.done)\n break done;\n let len = Math.min(iter.len, end - pos);\n addSection(resultSections, len, -1);\n addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n iter.forward(len);\n pos += len;\n }\n }\n return { changes: new ChangeSet(resultSections, resultInserted),\n filtered: ChangeDesc.create(filteredSections) };\n }\n /**\n Serialize this change set to a JSON-representable value.\n */\n toJSON() {\n let parts = [];\n for (let i = 0; i < this.sections.length; i += 2) {\n let len = this.sections[i], ins = this.sections[i + 1];\n if (ins < 0)\n parts.push(len);\n else if (ins == 0)\n parts.push([len]);\n else\n parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n }\n return parts;\n }\n /**\n Create a change set for the given changes, for a document of the\n given length, using `lineSep` as line separator.\n */\n static of(changes, length, lineSep) {\n let sections = [], inserted = [], pos = 0;\n let total = null;\n function flush(force = false) {\n if (!force && !sections.length)\n return;\n if (pos < length)\n addSection(sections, length - pos, -1);\n let set = new ChangeSet(sections, inserted);\n total = total ? total.compose(set.map(total)) : set;\n sections = [];\n inserted = [];\n pos = 0;\n }\n function process(spec) {\n if (Array.isArray(spec)) {\n for (let sub of spec)\n process(sub);\n }\n else if (spec instanceof ChangeSet) {\n if (spec.length != length)\n throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n flush();\n total = total ? total.compose(spec.map(total)) : spec;\n }\n else {\n let { from, to = from, insert } = spec;\n if (from > to || from < 0 || to > length)\n throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n let insLen = insText.length;\n if (from == to && insLen == 0)\n return;\n if (from < pos)\n flush();\n if (from > pos)\n addSection(sections, from - pos, -1);\n addSection(sections, to - from, insLen);\n addInsert(inserted, sections, insText);\n pos = to;\n }\n }\n process(changes);\n flush(!total);\n return total;\n }\n /**\n Create an empty changeset of the given length.\n */\n static empty(length) {\n return new ChangeSet(length ? [length, -1] : [], []);\n }\n /**\n Create a changeset from its JSON representation (as produced by\n [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n */\n static fromJSON(json) {\n if (!Array.isArray(json))\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n let sections = [], inserted = [];\n for (let i = 0; i < json.length; i++) {\n let part = json[i];\n if (typeof part == \"number\") {\n sections.push(part, -1);\n }\n else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n }\n else if (part.length == 1) {\n sections.push(part[0], 0);\n }\n else {\n while (inserted.length < i)\n inserted.push(Text.empty);\n inserted[i] = Text.of(part.slice(1));\n sections.push(part[0], inserted[i].length);\n }\n }\n return new ChangeSet(sections, inserted);\n }\n /**\n @internal\n */\n static createSet(sections, inserted) {\n return new ChangeSet(sections, inserted);\n }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n if (len == 0 && ins <= 0)\n return;\n let last = sections.length - 2;\n if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n sections[last] += len;\n else if (last >= 0 && len == 0 && sections[last] == 0)\n sections[last + 1] += ins;\n else if (forceJoin) {\n sections[last] += len;\n sections[last + 1] += ins;\n }\n else\n sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n if (value.length == 0)\n return;\n let index = (sections.length - 2) >> 1;\n if (index < values.length) {\n values[values.length - 1] = values[values.length - 1].append(value);\n }\n else {\n while (values.length < index)\n values.push(Text.empty);\n values.push(value);\n }\n}\nfunction iterChanges(desc, f, individual) {\n let inserted = desc.inserted;\n for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n let len = desc.sections[i++], ins = desc.sections[i++];\n if (ins < 0) {\n posA += len;\n posB += len;\n }\n else {\n let endA = posA, endB = posB, text = Text.empty;\n for (;;) {\n endA += len;\n endB += ins;\n if (ins && inserted)\n text = text.append(inserted[(i - 2) >> 1]);\n if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n break;\n len = desc.sections[i++];\n ins = desc.sections[i++];\n }\n f(posA, endA, posB, endB, text);\n posA = endA;\n posB = endB;\n }\n }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n // Produce a copy of setA that applies to the document after setB\n // has been applied (assuming both start at the same document).\n let sections = [], insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n // Iterate over both sets in parallel. inserted tracks, for changes\n // in A that have to be processed piece-by-piece, whether their\n // content has been inserted already, and refers to the section\n // index.\n for (let inserted = -1;;) {\n if (a.done && b.len || b.done && a.len) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else if (a.ins == -1 && b.ins == -1) {\n // Move across ranges skipped by both sets.\n let len = Math.min(a.len, b.len);\n addSection(sections, len, -1);\n a.forward(len);\n b.forward(len);\n }\n else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n // If there's a change in B that comes before the next change in\n // A (ordered by start pos, then len, then before flag), skip\n // that (and process any changes in A it covers).\n let len = b.len;\n addSection(sections, b.ins, -1);\n while (len) {\n let piece = Math.min(a.len, len);\n if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n addSection(sections, 0, a.ins);\n if (insert)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n }\n a.forward(piece);\n len -= piece;\n }\n b.next();\n }\n else if (a.ins >= 0) {\n // Process the part of a change in A up to the start of the next\n // non-deletion change in B (if overlapping).\n let len = 0, left = a.len;\n while (left) {\n if (b.ins == -1) {\n let piece = Math.min(left, b.len);\n len += piece;\n left -= piece;\n b.forward(piece);\n }\n else if (b.ins == 0 && b.len < left) {\n left -= b.len;\n b.next();\n }\n else {\n break;\n }\n }\n addSection(sections, len, inserted < a.i ? a.ins : 0);\n if (insert && inserted < a.i)\n addInsert(insert, sections, a.text);\n inserted = a.i;\n a.forward(a.len - left);\n }\n else if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else {\n throw new Error(\"Mismatched change set lengths\");\n }\n }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n let sections = [];\n let insert = mkSet ? [] : null;\n let a = new SectionIter(setA), b = new SectionIter(setB);\n for (let open = false;;) {\n if (a.done && b.done) {\n return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n }\n else if (a.ins == 0) { // Deletion in A\n addSection(sections, a.len, 0, open);\n a.next();\n }\n else if (b.len == 0 && !b.done) { // Insertion in B\n addSection(sections, 0, b.ins, open);\n if (insert)\n addInsert(insert, sections, b.text);\n b.next();\n }\n else if (a.done || b.done) {\n throw new Error(\"Mismatched change set lengths\");\n }\n else {\n let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n if (a.ins == -1) {\n let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n addSection(sections, len, insB, open);\n if (insert && insB)\n addInsert(insert, sections, b.text);\n }\n else if (b.ins == -1) {\n addSection(sections, a.off ? 0 : a.len, len, open);\n if (insert)\n addInsert(insert, sections, a.textBit(len));\n }\n else {\n addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n if (insert && !b.off)\n addInsert(insert, sections, b.text);\n }\n open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n a.forward2(len);\n b.forward(len);\n }\n }\n}\nclass SectionIter {\n constructor(set) {\n this.set = set;\n this.i = 0;\n this.next();\n }\n next() {\n let { sections } = this.set;\n if (this.i < sections.length) {\n this.len = sections[this.i++];\n this.ins = sections[this.i++];\n }\n else {\n this.len = 0;\n this.ins = -2;\n }\n this.off = 0;\n }\n get done() { return this.ins == -2; }\n get len2() { return this.ins < 0 ? this.len : this.ins; }\n get text() {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length ? Text.empty : inserted[index];\n }\n textBit(len) {\n let { inserted } = this.set, index = (this.i - 2) >> 1;\n return index >= inserted.length && !len ? Text.empty\n : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n }\n forward(len) {\n if (len == this.len)\n this.next();\n else {\n this.len -= len;\n this.off += len;\n }\n }\n forward2(len) {\n if (this.ins == -1)\n this.forward(len);\n else if (len == this.ins)\n this.next();\n else {\n this.ins -= len;\n this.off += len;\n }\n }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n constructor(\n /**\n The lower boundary of the range.\n */\n from, \n /**\n The upper boundary of the range.\n */\n to, flags) {\n this.from = from;\n this.to = to;\n this.flags = flags;\n }\n /**\n The anchor of the range—the side that doesn't move when you\n extend it.\n */\n get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n /**\n The head of the range, which is moved when the range is\n [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n */\n get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n /**\n True when `anchor` and `head` are at the same position.\n */\n get empty() { return this.from == this.to; }\n /**\n If this is a cursor that is explicitly associated with the\n character on one of its sides, this returns the side. -1 means\n the character before its position, 1 the character after, and 0\n means no association.\n */\n get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n /**\n The bidirectional text level associated with this cursor, if\n any.\n */\n get bidiLevel() {\n let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n return level == 7 ? null : level;\n }\n /**\n The goal column (stored vertical offset) associated with a\n cursor. This is used to preserve the vertical position when\n [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n lines of different length.\n */\n get goalColumn() {\n let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n }\n /**\n Map this range through a change, producing a valid range in the\n updated document.\n */\n map(change, assoc = -1) {\n let from, to;\n if (this.empty) {\n from = to = change.mapPos(this.from, assoc);\n }\n else {\n from = change.mapPos(this.from, 1);\n to = change.mapPos(this.to, -1);\n }\n return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n }\n /**\n Extend this range to cover at least `from` to `to`.\n */\n extend(from, to = from) {\n if (from <= this.anchor && to >= this.anchor)\n return EditorSelection.range(from, to);\n let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n return EditorSelection.range(this.anchor, head);\n }\n /**\n Compare this range to another range.\n */\n eq(other, includeAssoc = false) {\n return this.anchor == other.anchor && this.head == other.head &&\n (!includeAssoc || !this.empty || this.assoc == other.assoc);\n }\n /**\n Return a JSON-serializable object representing the range.\n */\n toJSON() { return { anchor: this.anchor, head: this.head }; }\n /**\n Convert a JSON representation of a range to a `SelectionRange`\n instance.\n */\n static fromJSON(json) {\n if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n return EditorSelection.range(json.anchor, json.head);\n }\n /**\n @internal\n */\n static create(from, to, flags) {\n return new SelectionRange(from, to, flags);\n }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n constructor(\n /**\n The ranges in the selection, sorted by position. Ranges cannot\n overlap (but they may touch, if they aren't empty).\n */\n ranges, \n /**\n The index of the _main_ range in the selection (which is\n usually the range that was added last).\n */\n mainIndex) {\n this.ranges = ranges;\n this.mainIndex = mainIndex;\n }\n /**\n Map a selection through a change. Used to adjust the selection\n position for changes.\n */\n map(change, assoc = -1) {\n if (change.empty)\n return this;\n return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n }\n /**\n Compare this selection to another selection. By default, ranges\n are compared only by position. When `includeAssoc` is true,\n cursor ranges must also have the same\n [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n */\n eq(other, includeAssoc = false) {\n if (this.ranges.length != other.ranges.length ||\n this.mainIndex != other.mainIndex)\n return false;\n for (let i = 0; i < this.ranges.length; i++)\n if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n return false;\n return true;\n }\n /**\n Get the primary selection range. Usually, you should make sure\n your code applies to _all_ ranges, by using methods like\n [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n */\n get main() { return this.ranges[this.mainIndex]; }\n /**\n Make sure the selection only has one range. Returns a selection\n holding only the main range from this selection.\n */\n asSingle() {\n return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n }\n /**\n Extend this selection with an extra range.\n */\n addRange(range, main = true) {\n return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n }\n /**\n Replace a given range with another range, and then normalize the\n selection to merge and sort ranges if necessary.\n */\n replaceRange(range, which = this.mainIndex) {\n let ranges = this.ranges.slice();\n ranges[which] = range;\n return EditorSelection.create(ranges, this.mainIndex);\n }\n /**\n Convert this selection to an object that can be serialized to\n JSON.\n */\n toJSON() {\n return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n }\n /**\n Create a selection from a JSON representation.\n */\n static fromJSON(json) {\n if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n }\n /**\n Create a selection holding a single range.\n */\n static single(anchor, head = anchor) {\n return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n }\n /**\n Sort and merge the given set of ranges, creating a valid\n selection.\n */\n static create(ranges, mainIndex = 0) {\n if (ranges.length == 0)\n throw new RangeError(\"A selection needs at least one range\");\n for (let pos = 0, i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n if (range.empty ? range.from <= pos : range.from < pos)\n return EditorSelection.normalized(ranges.slice(), mainIndex);\n pos = range.to;\n }\n return new EditorSelection(ranges, mainIndex);\n }\n /**\n Create a cursor selection range at the given position. You can\n safely ignore the optional arguments in most situations.\n */\n static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n }\n /**\n Create a selection range.\n */\n static range(anchor, head, goalColumn, bidiLevel) {\n let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n }\n /**\n @internal\n */\n static normalized(ranges, mainIndex = 0) {\n let main = ranges[mainIndex];\n ranges.sort((a, b) => a.from - b.from);\n mainIndex = ranges.indexOf(main);\n for (let i = 1; i < ranges.length; i++) {\n let range = ranges[i], prev = ranges[i - 1];\n if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n let from = prev.from, to = Math.max(range.to, prev.to);\n if (i <= mainIndex)\n mainIndex--;\n ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n }\n }\n return new EditorSelection(ranges, mainIndex);\n }\n}\nfunction checkSelection(selection, docLength) {\n for (let range of selection.ranges)\n if (range.to > docLength)\n throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n constructor(\n /**\n @internal\n */\n combine, \n /**\n @internal\n */\n compareInput, \n /**\n @internal\n */\n compare, isStatic, enables) {\n this.combine = combine;\n this.compareInput = compareInput;\n this.compare = compare;\n this.isStatic = isStatic;\n /**\n @internal\n */\n this.id = nextID++;\n this.default = combine([]);\n this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n }\n /**\n Returns a facet reader for this facet, which can be used to\n [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n */\n get reader() { return this; }\n /**\n Define a new facet.\n */\n static define(config = {}) {\n return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n }\n /**\n Returns an extension that adds the given value to this facet.\n */\n of(value) {\n return new FacetProvider([], this, 0 /* Provider.Static */, value);\n }\n /**\n Create an extension that computes a value for the facet from a\n state. You must take care to declare the parts of the state that\n this value depends on, since your function is only called again\n for a new state when one of those parts changed.\n \n In cases where your value depends only on a single field, you'll\n want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n */\n compute(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n }\n /**\n Create an extension that computes zero or more values for this\n facet from a state.\n */\n computeN(deps, get) {\n if (this.isStatic)\n throw new Error(\"Can't compute a static facet\");\n return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n }\n from(field, get) {\n if (!get)\n get = x => x;\n return this.compute([field], state => get(state.field(field)));\n }\n}\nfunction sameArray(a, b) {\n return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n constructor(dependencies, facet, type, value) {\n this.dependencies = dependencies;\n this.facet = facet;\n this.type = type;\n this.value = value;\n this.id = nextID++;\n }\n dynamicSlot(addresses) {\n var _a;\n let getter = this.value;\n let compare = this.facet.compareInput;\n let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n let depDoc = false, depSel = false, depAddrs = [];\n for (let dep of this.dependencies) {\n if (dep == \"doc\")\n depDoc = true;\n else if (dep == \"selection\")\n depSel = true;\n else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n depAddrs.push(addresses[dep.id]);\n }\n return {\n create(state) {\n state.values[idx] = getter(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n let newVal = getter(state);\n if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n }\n return 0;\n },\n reconfigure: (state, oldState) => {\n let newVal, oldAddr = oldState.config.address[id];\n if (oldAddr != null) {\n let oldVal = getAddr(oldState, oldAddr);\n if (this.dependencies.every(dep => {\n return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n state.values[idx] = oldVal;\n return 0;\n }\n }\n else {\n newVal = getter(state);\n }\n state.values[idx] = newVal;\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n}\nfunction compareArray(a, b, compare) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compare(a[i], b[i]))\n return false;\n return true;\n}\nfunction ensureAll(state, addrs) {\n let changed = false;\n for (let addr of addrs)\n if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n changed = true;\n return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n let providerAddrs = providers.map(p => addresses[p.id]);\n let providerTypes = providers.map(p => p.type);\n let dynamic = providerAddrs.filter(p => !(p & 1));\n let idx = addresses[facet.id] >> 1;\n function get(state) {\n let values = [];\n for (let i = 0; i < providerAddrs.length; i++) {\n let value = getAddr(state, providerAddrs[i]);\n if (providerTypes[i] == 2 /* Provider.Multi */)\n for (let val of value)\n values.push(val);\n else\n values.push(value);\n }\n return facet.combine(values);\n }\n return {\n create(state) {\n for (let addr of providerAddrs)\n ensureAddr(state, addr);\n state.values[idx] = get(state);\n return 1 /* SlotStatus.Changed */;\n },\n update(state, tr) {\n if (!ensureAll(state, dynamic))\n return 0;\n let value = get(state);\n if (facet.compare(value, state.values[idx]))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure(state, oldState) {\n let depChanged = ensureAll(state, providerAddrs);\n let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n state.values[idx] = oldValue;\n return 0;\n }\n let value = get(state);\n if (facet.compare(value, oldValue)) {\n state.values[idx] = oldValue;\n return 0;\n }\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n }\n };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n constructor(\n /**\n @internal\n */\n id, createF, updateF, compareF, \n /**\n @internal\n */\n spec) {\n this.id = id;\n this.createF = createF;\n this.updateF = updateF;\n this.compareF = compareF;\n this.spec = spec;\n /**\n @internal\n */\n this.provides = undefined;\n }\n /**\n Define a state field.\n */\n static define(config) {\n let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n if (config.provide)\n field.provides = config.provide(field);\n return field;\n }\n create(state) {\n let init = state.facet(initField).find(i => i.field == this);\n return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n }\n /**\n @internal\n */\n slot(addresses) {\n let idx = addresses[this.id] >> 1;\n return {\n create: (state) => {\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n },\n update: (state, tr) => {\n let oldVal = state.values[idx];\n let value = this.updateF(oldVal, tr);\n if (this.compareF(oldVal, value))\n return 0;\n state.values[idx] = value;\n return 1 /* SlotStatus.Changed */;\n },\n reconfigure: (state, oldState) => {\n let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n state.values[idx] = reInit.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n if (oldState.config.address[this.id] != null) {\n state.values[idx] = oldState.field(this);\n return 0;\n }\n state.values[idx] = this.create(state);\n return 1 /* SlotStatus.Changed */;\n }\n };\n }\n /**\n Returns an extension that enables this field and overrides the\n way it is initialized. Can be useful when you need to provide a\n non-default starting value for the field.\n */\n init(create) {\n return [this, initField.of({ field: this, create })];\n }\n /**\n State field instances can be used as\n [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n given state.\n */\n get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n /**\n The highest precedence level, for extensions that should end up\n near the start of the precedence ordering.\n */\n highest: /*@__PURE__*/prec(Prec_.highest),\n /**\n A higher-than-default precedence, for extensions that should\n come before those with default precedence.\n */\n high: /*@__PURE__*/prec(Prec_.high),\n /**\n The default precedence, which is also used for extensions\n without an explicit precedence.\n */\n default: /*@__PURE__*/prec(Prec_.default),\n /**\n A lower-than-default precedence.\n */\n low: /*@__PURE__*/prec(Prec_.low),\n /**\n The lowest precedence level. Meant for things that should end up\n near the end of the extension order.\n */\n lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n constructor(inner, prec) {\n this.inner = inner;\n this.prec = prec;\n }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n /**\n Create an instance of this compartment to add to your [state\n configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n */\n of(ext) { return new CompartmentInstance(this, ext); }\n /**\n Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n reconfigures this compartment.\n */\n reconfigure(content) {\n return Compartment.reconfigure.of({ compartment: this, extension: content });\n }\n /**\n Get the current content of the compartment in the state, or\n `undefined` if it isn't present.\n */\n get(state) {\n return state.config.compartments.get(this);\n }\n}\nclass CompartmentInstance {\n constructor(compartment, inner) {\n this.compartment = compartment;\n this.inner = inner;\n }\n}\nclass Configuration {\n constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n this.base = base;\n this.compartments = compartments;\n this.dynamicSlots = dynamicSlots;\n this.address = address;\n this.staticValues = staticValues;\n this.facets = facets;\n this.statusTemplate = [];\n while (this.statusTemplate.length < dynamicSlots.length)\n this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n }\n staticFacet(facet) {\n let addr = this.address[facet.id];\n return addr == null ? facet.default : this.staticValues[addr >> 1];\n }\n static resolve(base, compartments, oldState) {\n let fields = [];\n let facets = Object.create(null);\n let newCompartments = new Map();\n for (let ext of flatten(base, compartments, newCompartments)) {\n if (ext instanceof StateField)\n fields.push(ext);\n else\n (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n }\n let address = Object.create(null);\n let staticValues = [];\n let dynamicSlots = [];\n for (let field of fields) {\n address[field.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => field.slot(a));\n }\n let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n for (let id in facets) {\n let providers = facets[id], facet = providers[0].facet;\n let oldProviders = oldFacets && oldFacets[id] || [];\n if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n address[facet.id] = (staticValues.length << 1) | 1;\n if (sameArray(oldProviders, providers)) {\n staticValues.push(oldState.facet(facet));\n }\n else {\n let value = facet.combine(providers.map(p => p.value));\n staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n }\n }\n else {\n for (let p of providers) {\n if (p.type == 0 /* Provider.Static */) {\n address[p.id] = (staticValues.length << 1) | 1;\n staticValues.push(p.value);\n }\n else {\n address[p.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => p.dynamicSlot(a));\n }\n }\n address[facet.id] = dynamicSlots.length << 1;\n dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n }\n }\n let dynamic = dynamicSlots.map(f => f(address));\n return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n }\n}\nfunction flatten(extension, compartments, newCompartments) {\n let result = [[], [], [], [], []];\n let seen = new Map();\n function inner(ext, prec) {\n let known = seen.get(ext);\n if (known != null) {\n if (known <= prec)\n return;\n let found = result[known].indexOf(ext);\n if (found > -1)\n result[known].splice(found, 1);\n if (ext instanceof CompartmentInstance)\n newCompartments.delete(ext.compartment);\n }\n seen.set(ext, prec);\n if (Array.isArray(ext)) {\n for (let e of ext)\n inner(e, prec);\n }\n else if (ext instanceof CompartmentInstance) {\n if (newCompartments.has(ext.compartment))\n throw new RangeError(`Duplicate use of compartment in extensions`);\n let content = compartments.get(ext.compartment) || ext.inner;\n newCompartments.set(ext.compartment, content);\n inner(content, prec);\n }\n else if (ext instanceof PrecExtension) {\n inner(ext.inner, ext.prec);\n }\n else if (ext instanceof StateField) {\n result[prec].push(ext);\n if (ext.provides)\n inner(ext.provides, prec);\n }\n else if (ext instanceof FacetProvider) {\n result[prec].push(ext);\n if (ext.facet.extensions)\n inner(ext.facet.extensions, Prec_.default);\n }\n else {\n let content = ext.extension;\n if (!content)\n throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n inner(content, prec);\n }\n }\n inner(extension, Prec_.default);\n return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n if (addr & 1)\n return 2 /* SlotStatus.Computed */;\n let idx = addr >> 1;\n let status = state.status[idx];\n if (status == 4 /* SlotStatus.Computing */)\n throw new Error(\"Cyclic dependency between fields and/or facets\");\n if (status & 2 /* SlotStatus.Computed */)\n return status;\n state.status[idx] = 4 /* SlotStatus.Computing */;\n let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n combine: values => values.some(v => v),\n static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : undefined,\n static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n /**\n @internal\n */\n constructor(\n /**\n The annotation type.\n */\n type, \n /**\n The value of this annotation.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Define a new type of annotation.\n */\n static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n /**\n Create an instance of this annotation.\n */\n of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n /**\n @internal\n */\n constructor(\n // The `any` types in these function types are there to work\n // around TypeScript issue #37631, where the type guard on\n // `StateEffect.is` mysteriously stops working when these properly\n // have type `Value`.\n /**\n @internal\n */\n map) {\n this.map = map;\n }\n /**\n Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n type.\n */\n of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n type, \n /**\n The value of this effect.\n */\n value) {\n this.type = type;\n this.value = value;\n }\n /**\n Map this effect through a position mapping. Will return\n `undefined` when that ends up deleting the effect.\n */\n map(mapping) {\n let mapped = this.type.map(this.value, mapping);\n return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n }\n /**\n Tells you whether this effect object is of a given\n [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n */\n is(type) { return this.type == type; }\n /**\n Define a new effect type. The type parameter indicates the type\n of values that his effect holds. It should be a type that\n doesn't include `undefined`, since that is used in\n [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n removed.\n */\n static define(spec = {}) {\n return new StateEffectType(spec.map || (v => v));\n }\n /**\n Map an array of effects through a change set.\n */\n static mapEffects(effects, mapping) {\n if (!effects.length)\n return effects;\n let result = [];\n for (let effect of effects) {\n let mapped = effect.map(mapping);\n if (mapped)\n result.push(mapped);\n }\n return result;\n }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n constructor(\n /**\n The state from which the transaction starts.\n */\n startState, \n /**\n The document changes made by this transaction.\n */\n changes, \n /**\n The selection set by this transaction, or undefined if it\n doesn't explicitly set a selection.\n */\n selection, \n /**\n The effects added to the transaction.\n */\n effects, \n /**\n @internal\n */\n annotations, \n /**\n Whether the selection should be scrolled into view after this\n transaction is dispatched.\n */\n scrollIntoView) {\n this.startState = startState;\n this.changes = changes;\n this.selection = selection;\n this.effects = effects;\n this.annotations = annotations;\n this.scrollIntoView = scrollIntoView;\n /**\n @internal\n */\n this._doc = null;\n /**\n @internal\n */\n this._state = null;\n if (selection)\n checkSelection(selection, changes.newLength);\n if (!annotations.some((a) => a.type == Transaction.time))\n this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n }\n /**\n @internal\n */\n static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n }\n /**\n The new document produced by the transaction. Contrary to\n [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n force the entire new state to be computed right away, so it is\n recommended that [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n when they need to look at the new document.\n */\n get newDoc() {\n return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n }\n /**\n The new selection produced by the transaction. If\n [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n current selection through the changes made by the transaction.\n */\n get newSelection() {\n return this.selection || this.startState.selection.map(this.changes);\n }\n /**\n The new state created by the transaction. Computed on demand\n (but retained for subsequent access), so it is recommended not to\n access it in [transaction\n filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n */\n get state() {\n if (!this._state)\n this.startState.applyTransaction(this);\n return this._state;\n }\n /**\n Get the value of the given annotation type, if any.\n */\n annotation(type) {\n for (let ann of this.annotations)\n if (ann.type == type)\n return ann.value;\n return undefined;\n }\n /**\n Indicates whether the transaction changed the document.\n */\n get docChanged() { return !this.changes.empty; }\n /**\n Indicates whether this transaction reconfigures the state\n (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n with a top-level configuration\n [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n */\n get reconfigured() { return this.startState.config != this.state.config; }\n /**\n Returns true if the transaction has a [user\n event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n or more specific than `event`. For example, if the transaction\n has `\"select.pointer\"` as user event, `\"select\"` and\n `\"select.pointer\"` will match it.\n */\n isUserEvent(event) {\n let e = this.annotation(Transaction.userEvent);\n return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n - `\"input.type\"` for typed input\n - `\"input.type.compose\"` for composition\n - `\"input.paste\"` for pasted input\n - `\"input.drop\"` when adding content with drag-and-drop\n - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n - `\"delete.selection\"` when deleting the selection\n - `\"delete.forward\"` when deleting forward from the selection\n - `\"delete.backward\"` when deleting backward from the selection\n - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n let result = [];\n for (let iA = 0, iB = 0;;) {\n let from, to;\n if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n from = a[iA++];\n to = a[iA++];\n }\n else if (iB < b.length) {\n from = b[iB++];\n to = b[iB++];\n }\n else\n return result;\n if (!result.length || result[result.length - 1] < from)\n result.push(from, to);\n else if (result[result.length - 1] < to)\n result[result.length - 1] = to;\n }\n}\nfunction mergeTransaction(a, b, sequential) {\n var _a;\n let mapForA, mapForB, changes;\n if (sequential) {\n mapForA = b.changes;\n mapForB = ChangeSet.empty(b.changes.length);\n changes = a.changes.compose(b.changes);\n }\n else {\n mapForA = b.changes.map(a.changes);\n mapForB = a.changes.mapDesc(b.changes, true);\n changes = a.changes.compose(mapForA);\n }\n return {\n changes,\n selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n scrollIntoView: a.scrollIntoView || b.scrollIntoView\n };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n let sel = spec.selection, annotations = asArray(spec.annotations);\n if (spec.userEvent)\n annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n return {\n changes: spec.changes instanceof ChangeSet ? spec.changes\n : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n effects: asArray(spec.effects),\n annotations,\n scrollIntoView: !!spec.scrollIntoView\n };\n}\nfunction resolveTransaction(state, specs, filter) {\n let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n if (specs.length && specs[0].filter === false)\n filter = false;\n for (let i = 1; i < specs.length; i++) {\n if (specs[i].filter === false)\n filter = false;\n let seq = !!specs[i].sequential;\n s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n }\n let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n let state = tr.startState;\n // Change filters\n let result = true;\n for (let filter of state.facet(changeFilter)) {\n let value = filter(tr);\n if (value === false) {\n result = false;\n break;\n }\n if (Array.isArray(value))\n result = result === true ? value : joinRanges(result, value);\n }\n if (result !== true) {\n let changes, back;\n if (result === false) {\n back = tr.changes.invertedDesc;\n changes = ChangeSet.empty(state.doc.length);\n }\n else {\n let filtered = tr.changes.filter(result);\n changes = filtered.changes;\n back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n }\n tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n }\n // Transaction filters\n let filters = state.facet(transactionFilter);\n for (let i = filters.length - 1; i >= 0; i--) {\n let filtered = filters[i](tr);\n if (filtered instanceof Transaction)\n tr = filtered;\n else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n tr = filtered[0];\n else\n tr = resolveTransaction(state, asArray(filtered), false);\n }\n return tr;\n}\nfunction extendTransaction(tr) {\n let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n for (let i = extenders.length - 1; i >= 0; i--) {\n let extension = extenders[i](tr);\n if (extension && Object.keys(extension).length)\n spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n }\n return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n /**\n Word characters.\n */\n CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n /**\n Whitespace.\n */\n CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n /**\n Anything else.\n */\n CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n if (wordChar)\n return wordChar.test(str);\n for (let i = 0; i < str.length; i++) {\n let ch = str[i];\n if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n return true;\n }\n return false;\n}\nfunction makeCategorizer(wordChars) {\n return (char) => {\n if (!/\\S/.test(char))\n return CharCategory.Space;\n if (hasWordChar(char))\n return CharCategory.Word;\n for (let i = 0; i < wordChars.length; i++)\n if (char.indexOf(wordChars[i]) > -1)\n return CharCategory.Word;\n return CharCategory.Other;\n };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n constructor(\n /**\n @internal\n */\n config, \n /**\n The current document.\n */\n doc, \n /**\n The current selection.\n */\n selection, \n /**\n @internal\n */\n values, computeSlot, tr) {\n this.config = config;\n this.doc = doc;\n this.selection = selection;\n this.values = values;\n this.status = config.statusTemplate.slice();\n this.computeSlot = computeSlot;\n // Fill in the computed state immediately, so that further queries\n // for it made during the update return this state\n if (tr)\n tr._state = this;\n for (let i = 0; i < this.config.dynamicSlots.length; i++)\n ensureAddr(this, i << 1);\n this.computeSlot = null;\n }\n field(field, require = true) {\n let addr = this.config.address[field.id];\n if (addr == null) {\n if (require)\n throw new RangeError(\"Field is not present in this state\");\n return undefined;\n }\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n can be passed. Unless\n [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n are assumed to start in the _current_ document (not the document\n produced by previous specs), and its\n [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n to the document created by its _own_ changes. The resulting\n transaction contains the combined effect of all the different\n specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n specs take precedence over earlier ones.\n */\n update(...specs) {\n return resolveTransaction(this, specs, true);\n }\n /**\n @internal\n */\n applyTransaction(tr) {\n let conf = this.config, { base, compartments } = conf;\n for (let effect of tr.effects) {\n if (effect.is(Compartment.reconfigure)) {\n if (conf) {\n compartments = new Map;\n conf.compartments.forEach((val, key) => compartments.set(key, val));\n conf = null;\n }\n compartments.set(effect.value.compartment, effect.value.extension);\n }\n else if (effect.is(StateEffect.reconfigure)) {\n conf = null;\n base = effect.value;\n }\n else if (effect.is(StateEffect.appendConfig)) {\n conf = null;\n base = asArray(base).concat(effect.value);\n }\n }\n let startValues;\n if (!conf) {\n conf = Configuration.resolve(base, compartments, this);\n let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n startValues = intermediateState.values;\n }\n else {\n startValues = tr.startState.values.slice();\n }\n let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n }\n /**\n Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n replaces every selection range with the given content.\n */\n replaceSelection(text) {\n if (typeof text == \"string\")\n text = this.toText(text);\n return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n range: EditorSelection.cursor(range.from + text.length) }));\n }\n /**\n Create a set of changes and a new selection by running the given\n function for each range in the active selection. The function\n can return an optional set of changes (in the coordinate space\n of the start document), plus an updated range (in the coordinate\n space of the document produced by the call's own changes). This\n method will merge all the changes and ranges into a single\n changeset and selection, and return it as a [transaction\n spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n */\n changeByRange(f) {\n let sel = this.selection;\n let result1 = f(sel.ranges[0]);\n let changes = this.changes(result1.changes), ranges = [result1.range];\n let effects = asArray(result1.effects);\n for (let i = 1; i < sel.ranges.length; i++) {\n let result = f(sel.ranges[i]);\n let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n for (let j = 0; j < i; j++)\n ranges[j] = ranges[j].map(newMapped);\n let mapBy = changes.mapDesc(newChanges, true);\n ranges.push(result.range.map(mapBy));\n changes = changes.compose(newMapped);\n effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n }\n return {\n changes,\n selection: EditorSelection.create(ranges, sel.mainIndex),\n effects\n };\n }\n /**\n Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n description, taking the state's document length and line\n separator into account.\n */\n changes(spec = []) {\n if (spec instanceof ChangeSet)\n return spec;\n return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n }\n /**\n Using the state's [line\n separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n */\n toText(string) {\n return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n }\n /**\n Return the given range of the document as a string.\n */\n sliceDoc(from = 0, to = this.doc.length) {\n return this.doc.sliceString(from, to, this.lineBreak);\n }\n /**\n Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n */\n facet(facet) {\n let addr = this.config.address[facet.id];\n if (addr == null)\n return facet.default;\n ensureAddr(this, addr);\n return getAddr(this, addr);\n }\n /**\n Convert this state to a JSON-serializable object. When custom\n fields should be serialized, you can pass them in as an object\n mapping property names (in the resulting object, which should\n not use `doc` or `selection`) to fields.\n */\n toJSON(fields) {\n let result = {\n doc: this.sliceDoc(),\n selection: this.selection.toJSON()\n };\n if (fields)\n for (let prop in fields) {\n let value = fields[prop];\n if (value instanceof StateField && this.config.address[value.id] != null)\n result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n }\n return result;\n }\n /**\n Deserialize a state from its JSON representation. When custom\n fields should be deserialized, pass the same object you passed\n to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n third argument.\n */\n static fromJSON(json, config = {}, fields) {\n if (!json || typeof json.doc != \"string\")\n throw new RangeError(\"Invalid JSON representation for EditorState\");\n let fieldInit = [];\n if (fields)\n for (let prop in fields) {\n if (Object.prototype.hasOwnProperty.call(json, prop)) {\n let field = fields[prop], value = json[prop];\n fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n }\n }\n return EditorState.create({\n doc: json.doc,\n selection: EditorSelection.fromJSON(json.selection),\n extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n });\n }\n /**\n Create a new state. You'll usually only need this when\n initializing an editor—updated states are created by applying\n transactions.\n */\n static create(config = {}) {\n let configuration = Configuration.resolve(config.extensions || [], new Map);\n let doc = config.doc instanceof Text ? config.doc\n : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n let selection = !config.selection ? EditorSelection.single(0)\n : config.selection instanceof EditorSelection ? config.selection\n : EditorSelection.single(config.selection.anchor, config.selection.head);\n checkSelection(selection, doc.length);\n if (!configuration.staticFacet(allowMultipleSelections))\n selection = selection.asSingle();\n return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n }\n /**\n The size (in columns) of a tab in the document, determined by\n the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n */\n get tabSize() { return this.facet(EditorState.tabSize); }\n /**\n Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n string for this state.\n */\n get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n /**\n Returns true when the editor is\n [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n */\n get readOnly() { return this.facet(readOnly); }\n /**\n Look up a translation for the given phrase (via the\n [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n original string if no translation is found.\n \n If additional arguments are passed, they will be inserted in\n place of markers like `$1` (for the first value) and `$2`, etc.\n A single `$` is equivalent to `$1`, and `$$` will produce a\n literal dollar sign.\n */\n phrase(phrase, ...insert) {\n for (let map of this.facet(EditorState.phrases))\n if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n phrase = map[phrase];\n break;\n }\n if (insert.length)\n phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n if (i == \"$\")\n return \"$\";\n let n = +(i || 1);\n return !n || n > insert.length ? m : insert[n - 1];\n });\n return phrase;\n }\n /**\n Find the values for a given language data field, provided by the\n the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n \n Examples of language data fields are...\n \n - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n comment syntax.\n - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n for providing language-specific completion sources.\n - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n characters that should be considered part of words in this\n language.\n - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n bracket closing behavior.\n */\n languageDataAt(name, pos, side = -1) {\n let values = [];\n for (let provider of this.facet(languageData)) {\n for (let result of provider(this, pos, side)) {\n if (Object.prototype.hasOwnProperty.call(result, name))\n values.push(result[name]);\n }\n }\n return values;\n }\n /**\n Return a function that can categorize strings (expected to\n represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n into one of:\n \n - Word (contains an alphanumeric character or a character\n explicitly listed in the local language's `\"wordChars\"`\n language data, which should be a string)\n - Space (contains only whitespace)\n - Other (anything else)\n */\n charCategorizer(at) {\n return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n }\n /**\n Find the word at the given position, meaning the range\n containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n around it. If no word characters are adjacent to the position,\n this returns null.\n */\n wordAt(pos) {\n let { text, from, length } = this.doc.lineAt(pos);\n let cat = this.charCategorizer(pos);\n let start = pos - from, end = pos - from;\n while (start > 0) {\n let prev = findClusterBreak(text, start, false);\n if (cat(text.slice(prev, start)) != CharCategory.Word)\n break;\n start = prev;\n }\n while (end < length) {\n let next = findClusterBreak(text, end);\n if (cat(text.slice(end, next)) != CharCategory.Word)\n break;\n end = next;\n }\n return start == end ? null : EditorSelection.range(start + from, end + from);\n }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n compare(a, b) {\n let kA = Object.keys(a), kB = Object.keys(b);\n return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n let result = {};\n for (let config of configs)\n for (let key of Object.keys(config)) {\n let value = config[key], current = result[key];\n if (current === undefined)\n result[key] = value;\n else if (current === value || value === undefined) ; // No conflict\n else if (Object.hasOwnProperty.call(combine, key))\n result[key] = combine[key](current, value);\n else\n throw new Error(\"Config merge conflict for field \" + key);\n }\n for (let key in defaults)\n if (result[key] === undefined)\n result[key] = defaults[key];\n return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n /**\n Compare this value with another value. Used when comparing\n rangesets. The default implementation compares by identity.\n Unless you are only creating a fixed number of unique instances\n of your value type, it is a good idea to implement this\n properly.\n */\n eq(other) { return this == other; }\n /**\n Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n */\n range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n constructor(\n /**\n The range's start position.\n */\n from, \n /**\n Its end position.\n */\n to, \n /**\n The value associated with this range.\n */\n value) {\n this.from = from;\n this.to = to;\n this.value = value;\n }\n /**\n @internal\n */\n static create(from, to, value) {\n return new Range(from, to, value);\n }\n}\nfunction cmpRange(a, b) {\n return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n constructor(from, to, value, \n // Chunks are marked with the largest point that occurs\n // in them (or -1 for no points), so that scans that are\n // only interested in points (such as the\n // heightmap-related logic) can skip range-only chunks.\n maxPoint) {\n this.from = from;\n this.to = to;\n this.value = value;\n this.maxPoint = maxPoint;\n }\n get length() { return this.to[this.to.length - 1]; }\n // Find the index of the given position and side. Use the ranges'\n // `from` pos when `end == false`, `to` when `end == true`.\n findIndex(pos, side, end, startAt = 0) {\n let arr = end ? this.to : this.from;\n for (let lo = startAt, hi = arr.length;;) {\n if (lo == hi)\n return lo;\n let mid = (lo + hi) >> 1;\n let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n if (mid == lo)\n return diff >= 0 ? lo : hi;\n if (diff >= 0)\n hi = mid;\n else\n lo = mid + 1;\n }\n }\n between(offset, from, to, f) {\n for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n return false;\n }\n map(offset, changes) {\n let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n for (let i = 0; i < this.value.length; i++) {\n let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n if (curFrom == curTo) {\n let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n if (mapped == null)\n continue;\n newFrom = newTo = mapped;\n if (val.startSide != val.endSide) {\n newTo = changes.mapPos(curFrom, val.endSide);\n if (newTo < newFrom)\n continue;\n }\n }\n else {\n newFrom = changes.mapPos(curFrom, val.startSide);\n newTo = changes.mapPos(curTo, val.endSide);\n if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n continue;\n }\n if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n continue;\n if (newPos < 0)\n newPos = newFrom;\n if (val.point)\n maxPoint = Math.max(maxPoint, newTo - newFrom);\n value.push(val);\n from.push(newFrom - newPos);\n to.push(newTo - newPos);\n }\n return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n constructor(\n /**\n @internal\n */\n chunkPos, \n /**\n @internal\n */\n chunk, \n /**\n @internal\n */\n nextLayer, \n /**\n @internal\n */\n maxPoint) {\n this.chunkPos = chunkPos;\n this.chunk = chunk;\n this.nextLayer = nextLayer;\n this.maxPoint = maxPoint;\n }\n /**\n @internal\n */\n static create(chunkPos, chunk, nextLayer, maxPoint) {\n return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n }\n /**\n @internal\n */\n get length() {\n let last = this.chunk.length - 1;\n return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n }\n /**\n The number of ranges in the set.\n */\n get size() {\n if (this.isEmpty)\n return 0;\n let size = this.nextLayer.size;\n for (let chunk of this.chunk)\n size += chunk.value.length;\n return size;\n }\n /**\n @internal\n */\n chunkEnd(index) {\n return this.chunkPos[index] + this.chunk[index].length;\n }\n /**\n Update the range set, optionally adding new ranges or filtering\n out existing ones.\n \n (Note: The type parameter is just there as a kludge to work\n around TypeScript variance issues that prevented `RangeSet`\n from being a subtype of `RangeSet` when `X` is a subtype of\n `Y`.)\n */\n update(updateSpec) {\n let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n let filter = updateSpec.filter;\n if (add.length == 0 && !filter)\n return this;\n if (sort)\n add = add.slice().sort(cmpRange);\n if (this.isEmpty)\n return add.length ? RangeSet.of(add) : this;\n let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n let builder = new RangeSetBuilder();\n while (cur.value || i < add.length) {\n if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n let range = add[i++];\n if (!builder.addInner(range.from, range.to, range.value))\n spill.push(range);\n }\n else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n cur.nextChunk();\n }\n else {\n if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n if (!builder.addInner(cur.from, cur.to, cur.value))\n spill.push(Range.create(cur.from, cur.to, cur.value));\n }\n cur.next();\n }\n }\n return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n }\n /**\n Map this range set through a set of changes, return the new set.\n */\n map(changes) {\n if (changes.empty || this.isEmpty)\n return this;\n let chunks = [], chunkPos = [], maxPoint = -1;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n let touch = changes.touchesRange(start, start + chunk.length);\n if (touch === false) {\n maxPoint = Math.max(maxPoint, chunk.maxPoint);\n chunks.push(chunk);\n chunkPos.push(changes.mapPos(start));\n }\n else if (touch === true) {\n let { mapped, pos } = chunk.map(start, changes);\n if (mapped) {\n maxPoint = Math.max(maxPoint, mapped.maxPoint);\n chunks.push(mapped);\n chunkPos.push(pos);\n }\n }\n }\n let next = this.nextLayer.map(changes);\n return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n }\n /**\n Iterate over the ranges that touch the region `from` to `to`,\n calling `f` for each. There is no guarantee that the ranges will\n be reported in any specific order. When the callback returns\n `false`, iteration stops.\n */\n between(from, to, f) {\n if (this.isEmpty)\n return;\n for (let i = 0; i < this.chunk.length; i++) {\n let start = this.chunkPos[i], chunk = this.chunk[i];\n if (to >= start && from <= start + chunk.length &&\n chunk.between(start, from - start, to - start, f) === false)\n return;\n }\n this.nextLayer.between(from, to, f);\n }\n /**\n Iterate over the ranges in this set, in order, including all\n ranges that end at or after `from`.\n */\n iter(from = 0) {\n return HeapCursor.from([this]).goto(from);\n }\n /**\n @internal\n */\n get isEmpty() { return this.nextLayer == this; }\n /**\n Iterate over the ranges in a collection of sets, in order,\n starting from `from`.\n */\n static iter(sets, from = 0) {\n return HeapCursor.from(sets).goto(from);\n }\n /**\n Iterate over two groups of sets, calling methods on `comparator`\n to notify it of possible differences.\n */\n static compare(oldSets, newSets, \n /**\n This indicates how the underlying data changed between these\n ranges, and is needed to synchronize the iteration.\n */\n textDiff, comparator, \n /**\n Can be used to ignore all non-point ranges, and points below\n the given size. When -1, all ranges are compared.\n */\n minPointSize = -1) {\n let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n let sharedChunks = findSharedChunks(a, b, textDiff);\n let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n if (textDiff.empty && textDiff.length == 0)\n compare(sideA, 0, sideB, 0, 0, comparator);\n }\n /**\n Compare the contents of two groups of range sets, returning true\n if they are equivalent in the given range.\n */\n static eq(oldSets, newSets, from = 0, to) {\n if (to == null)\n to = 1000000000 /* C.Far */ - 1;\n let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n if (a.length != b.length)\n return false;\n if (!a.length)\n return true;\n let sharedChunks = findSharedChunks(a, b);\n let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n for (;;) {\n if (sideA.to != sideB.to ||\n !sameValues(sideA.active, sideB.active) ||\n sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n return false;\n if (sideA.to > to)\n return true;\n sideA.next();\n sideB.next();\n }\n }\n /**\n Iterate over a group of range sets at the same time, notifying\n the iterator about the ranges covering every given piece of\n content. Returns the open count (see\n [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n of the iteration.\n */\n static spans(sets, from, to, iterator, \n /**\n When given and greater than -1, only points of at least this\n size are taken into account.\n */\n minPointSize = -1) {\n let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n let openRanges = cursor.openStart;\n for (;;) {\n let curTo = Math.min(cursor.to, to);\n if (cursor.point) {\n let active = cursor.activeForPoint(cursor.to);\n let openCount = cursor.pointFrom < from ? active.length + 1\n : cursor.point.startSide < 0 ? active.length\n : Math.min(active.length, openRanges);\n iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n openRanges = Math.min(cursor.openEnd(curTo), active.length);\n }\n else if (curTo > pos) {\n iterator.span(pos, curTo, cursor.active, openRanges);\n openRanges = cursor.openEnd(curTo);\n }\n if (cursor.to > to)\n return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n pos = cursor.to;\n cursor.next();\n }\n }\n /**\n Create a range set for the given range or array of ranges. By\n default, this expects the ranges to be _sorted_ (by start\n position and, if two start at the same position,\n `value.startSide`). You can pass `true` as second argument to\n cause the method to sort them.\n */\n static of(ranges, sort = false) {\n let build = new RangeSetBuilder();\n for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n build.add(range.from, range.to, range.value);\n return build.finish();\n }\n /**\n Join an array of range sets into a single set.\n */\n static join(sets) {\n if (!sets.length)\n return RangeSet.empty;\n let result = sets[sets.length - 1];\n for (let i = sets.length - 2; i >= 0; i--) {\n for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n }\n return result;\n }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n if (ranges.length > 1)\n for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n let cur = ranges[i];\n if (cmpRange(prev, cur) > 0)\n return ranges.slice().sort(cmpRange);\n prev = cur;\n }\n return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n finishChunk(newArrays) {\n this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n this.chunkPos.push(this.chunkStart);\n this.chunkStart = -1;\n this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n this.maxPoint = -1;\n if (newArrays) {\n this.from = [];\n this.to = [];\n this.value = [];\n }\n }\n /**\n Create an empty builder.\n */\n constructor() {\n this.chunks = [];\n this.chunkPos = [];\n this.chunkStart = -1;\n this.last = null;\n this.lastFrom = -1000000000 /* C.Far */;\n this.lastTo = -1000000000 /* C.Far */;\n this.from = [];\n this.to = [];\n this.value = [];\n this.maxPoint = -1;\n this.setMaxPoint = -1;\n this.nextLayer = null;\n }\n /**\n Add a range. Ranges should be added in sorted (by `from` and\n `value.startSide`) order.\n */\n add(from, to, value) {\n if (!this.addInner(from, to, value))\n (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n }\n /**\n @internal\n */\n addInner(from, to, value) {\n let diff = from - this.lastTo || value.startSide - this.last.endSide;\n if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n if (diff < 0)\n return false;\n if (this.from.length == 250 /* C.ChunkSize */)\n this.finishChunk(true);\n if (this.chunkStart < 0)\n this.chunkStart = from;\n this.from.push(from - this.chunkStart);\n this.to.push(to - this.chunkStart);\n this.last = value;\n this.lastFrom = from;\n this.lastTo = to;\n this.value.push(value);\n if (value.point)\n this.maxPoint = Math.max(this.maxPoint, to - from);\n return true;\n }\n /**\n @internal\n */\n addChunk(from, chunk) {\n if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n return false;\n if (this.from.length)\n this.finishChunk(true);\n this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n this.chunks.push(chunk);\n this.chunkPos.push(from);\n let last = chunk.value.length - 1;\n this.last = chunk.value[last];\n this.lastFrom = chunk.from[last] + from;\n this.lastTo = chunk.to[last] + from;\n return true;\n }\n /**\n Finish the range set. Returns the new set. The builder can't be\n used anymore after this has been called.\n */\n finish() { return this.finishInner(RangeSet.empty); }\n /**\n @internal\n */\n finishInner(next) {\n if (this.from.length)\n this.finishChunk(false);\n if (this.chunks.length == 0)\n return next;\n let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n this.from = null; // Make sure further `add` calls produce errors\n return result;\n }\n}\nfunction findSharedChunks(a, b, textDiff) {\n let inA = new Map();\n for (let set of a)\n for (let i = 0; i < set.chunk.length; i++)\n if (set.chunk[i].maxPoint <= 0)\n inA.set(set.chunk[i], set.chunkPos[i]);\n let shared = new Set();\n for (let set of b)\n for (let i = 0; i < set.chunk.length; i++) {\n let known = inA.get(set.chunk[i]);\n if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n shared.add(set.chunk[i]);\n }\n return shared;\n}\nclass LayerCursor {\n constructor(layer, skip, minPoint, rank = 0) {\n this.layer = layer;\n this.skip = skip;\n this.minPoint = minPoint;\n this.rank = rank;\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n get endSide() { return this.value ? this.value.endSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.chunkIndex = this.rangeIndex = 0;\n this.gotoInner(pos, side, false);\n return this;\n }\n gotoInner(pos, side, forward) {\n while (this.chunkIndex < this.layer.chunk.length) {\n let next = this.layer.chunk[this.chunkIndex];\n if (!(this.skip && this.skip.has(next) ||\n this.layer.chunkEnd(this.chunkIndex) < pos ||\n next.maxPoint < this.minPoint))\n break;\n this.chunkIndex++;\n forward = false;\n }\n if (this.chunkIndex < this.layer.chunk.length) {\n let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n if (!forward || this.rangeIndex < rangeIndex)\n this.setRangeIndex(rangeIndex);\n }\n this.next();\n }\n forward(pos, side) {\n if ((this.to - pos || this.endSide - side) < 0)\n this.gotoInner(pos, side, true);\n }\n next() {\n for (;;) {\n if (this.chunkIndex == this.layer.chunk.length) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n break;\n }\n else {\n let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n let from = chunkPos + chunk.from[this.rangeIndex];\n this.from = from;\n this.to = chunkPos + chunk.to[this.rangeIndex];\n this.value = chunk.value[this.rangeIndex];\n this.setRangeIndex(this.rangeIndex + 1);\n if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n break;\n }\n }\n }\n setRangeIndex(index) {\n if (index == this.layer.chunk[this.chunkIndex].value.length) {\n this.chunkIndex++;\n if (this.skip) {\n while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n this.chunkIndex++;\n }\n this.rangeIndex = 0;\n }\n else {\n this.rangeIndex = index;\n }\n }\n nextChunk() {\n this.chunkIndex++;\n this.rangeIndex = 0;\n this.next();\n }\n compare(other) {\n return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n this.to - other.to || this.endSide - other.endSide;\n }\n}\nclass HeapCursor {\n constructor(heap) {\n this.heap = heap;\n }\n static from(sets, skip = null, minPoint = -1) {\n let heap = [];\n for (let i = 0; i < sets.length; i++) {\n for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n if (cur.maxPoint >= minPoint)\n heap.push(new LayerCursor(cur, skip, minPoint, i));\n }\n }\n return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n }\n get startSide() { return this.value ? this.value.startSide : 0; }\n goto(pos, side = -1000000000 /* C.Far */) {\n for (let cur of this.heap)\n cur.goto(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n this.next();\n return this;\n }\n forward(pos, side) {\n for (let cur of this.heap)\n cur.forward(pos, side);\n for (let i = this.heap.length >> 1; i >= 0; i--)\n heapBubble(this.heap, i);\n if ((this.to - pos || this.value.endSide - side) < 0)\n this.next();\n }\n next() {\n if (this.heap.length == 0) {\n this.from = this.to = 1000000000 /* C.Far */;\n this.value = null;\n this.rank = -1;\n }\n else {\n let top = this.heap[0];\n this.from = top.from;\n this.to = top.to;\n this.value = top.value;\n this.rank = top.rank;\n if (top.value)\n top.next();\n heapBubble(this.heap, 0);\n }\n }\n}\nfunction heapBubble(heap, index) {\n for (let cur = heap[index];;) {\n let childIndex = (index << 1) + 1;\n if (childIndex >= heap.length)\n break;\n let child = heap[childIndex];\n if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n child = heap[childIndex + 1];\n childIndex++;\n }\n if (cur.compare(child) < 0)\n break;\n heap[childIndex] = cur;\n heap[index] = child;\n index = childIndex;\n }\n}\nclass SpanCursor {\n constructor(sets, skip, minPoint) {\n this.minPoint = minPoint;\n this.active = [];\n this.activeTo = [];\n this.activeRank = [];\n this.minActive = -1;\n // A currently active point range, if any\n this.point = null;\n this.pointFrom = 0;\n this.pointRank = 0;\n this.to = -1000000000 /* C.Far */;\n this.endSide = 0;\n // The amount of open active ranges at the start of the iterator.\n // Not including points.\n this.openStart = -1;\n this.cursor = HeapCursor.from(sets, skip, minPoint);\n }\n goto(pos, side = -1000000000 /* C.Far */) {\n this.cursor.goto(pos, side);\n this.active.length = this.activeTo.length = this.activeRank.length = 0;\n this.minActive = -1;\n this.to = pos;\n this.endSide = side;\n this.openStart = -1;\n this.next();\n return this;\n }\n forward(pos, side) {\n while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n this.removeActive(this.minActive);\n this.cursor.forward(pos, side);\n }\n removeActive(index) {\n remove(this.active, index);\n remove(this.activeTo, index);\n remove(this.activeRank, index);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n addActive(trackOpen) {\n let i = 0, { value, to, rank } = this.cursor;\n // Organize active marks by rank first, then by size\n while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n i++;\n insert(this.active, i, value);\n insert(this.activeTo, i, to);\n insert(this.activeRank, i, rank);\n if (trackOpen)\n insert(trackOpen, i, this.cursor.from);\n this.minActive = findMinIndex(this.active, this.activeTo);\n }\n // After calling this, if `this.point` != null, the next range is a\n // point. Otherwise, it's a regular range, covered by `this.active`.\n next() {\n let from = this.to, wasPoint = this.point;\n this.point = null;\n let trackOpen = this.openStart < 0 ? [] : null;\n for (;;) {\n let a = this.minActive;\n if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n if (this.activeTo[a] > from) {\n this.to = this.activeTo[a];\n this.endSide = this.active[a].endSide;\n break;\n }\n this.removeActive(a);\n if (trackOpen)\n remove(trackOpen, a);\n }\n else if (!this.cursor.value) {\n this.to = this.endSide = 1000000000 /* C.Far */;\n break;\n }\n else if (this.cursor.from > from) {\n this.to = this.cursor.from;\n this.endSide = this.cursor.startSide;\n break;\n }\n else {\n let nextVal = this.cursor.value;\n if (!nextVal.point) { // Opening a range\n this.addActive(trackOpen);\n this.cursor.next();\n }\n else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n // Ignore any non-empty points that end precisely at the end of the prev point\n this.cursor.next();\n }\n else { // New point\n this.point = nextVal;\n this.pointFrom = this.cursor.from;\n this.pointRank = this.cursor.rank;\n this.to = this.cursor.to;\n this.endSide = nextVal.endSide;\n this.cursor.next();\n this.forward(this.to, this.endSide);\n break;\n }\n }\n }\n if (trackOpen) {\n this.openStart = 0;\n for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n this.openStart++;\n }\n }\n activeForPoint(to) {\n if (!this.active.length)\n return this.active;\n let active = [];\n for (let i = this.active.length - 1; i >= 0; i--) {\n if (this.activeRank[i] < this.pointRank)\n break;\n if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n active.push(this.active[i]);\n }\n return active.reverse();\n }\n openEnd(to) {\n let open = 0;\n for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n open++;\n return open;\n }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n a.goto(startA);\n b.goto(startB);\n let endB = startB + length;\n let pos = startB, dPos = startB - startA;\n for (;;) {\n let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n if (a.point || b.point) {\n if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n comparator.comparePoint(pos, clipEnd, a.point, b.point);\n }\n else {\n if (clipEnd > pos && !sameValues(a.active, b.active))\n comparator.compareRange(pos, clipEnd, a.active, b.active);\n }\n if (end > endB)\n break;\n if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)\n comparator.boundChange(end);\n pos = end;\n if (diff <= 0)\n a.next();\n if (diff >= 0)\n b.next();\n }\n}\nfunction sameValues(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] != b[i] && !a[i].eq(b[i]))\n return false;\n return true;\n}\nfunction remove(array, index) {\n for (let i = index, e = array.length - 1; i < e; i++)\n array[i] = array[i + 1];\n array.pop();\n}\nfunction insert(array, index, value) {\n for (let i = array.length - 1; i >= index; i--)\n array[i + 1] = array[i];\n array[index] = value;\n}\nfunction findMinIndex(value, array) {\n let found = -1, foundPos = 1000000000 /* C.Far */;\n for (let i = 0; i < array.length; i++)\n if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n found = i;\n foundPos = array[i];\n }\n return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n let n = 0;\n for (let i = 0; i < to && i < string.length;) {\n if (string.charCodeAt(i) == 9) {\n n += tabSize - (n % tabSize);\n i++;\n }\n else {\n n++;\n i = findClusterBreak(string, i);\n }\n }\n return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n for (let i = 0, n = 0;;) {\n if (n >= col)\n return i;\n if (i == string.length)\n break;\n n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n i = findClusterBreak(string, i);\n }\n return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n","const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n // :: (Object\",\n },\n \".env\": {\n code: \"ASTRO_TELEMETRY_DISABLED=\\\"1\\\"\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n astro: \"^1.6.12\",\n \"esbuild-wasm\": \"^0.15.16\",\n },\n scripts: {\n dev: \"astro dev\",\n start: \"astro dev\",\n build: \"astro build\",\n preview: \"astro preview\",\n astro: \"astro\",\n },\n }),\n },\n },\n main: \"/src/pages/index.astro\",\n environment: \"node\",\n};\n\nvar NEXTJS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/pages/_app.js\": {\n code: \"import '../styles.css'\\n\\nexport default function MyApp({ Component, pageProps }) {\\n return \\n}\",\n }, \"/pages/index.js\": {\n code: \"export default function Home({ data }) {\\n return (\\n
    \\n

    Hello {data}

    \\n
    \\n );\\n}\\n \\nexport function getServerSideProps() {\\n return {\\n props: { data: \\\"world\\\" },\\n }\\n}\\n\",\n }, \"/next.config.js\": {\n code: \"/** @type {import('next').NextConfig} */\\nconst nextConfig = {\\n reactStrictMode: true,\\n swcMinify: true,\\n}\\n\\nmodule.exports = nextConfig\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n name: \"my-app\",\n version: \"0.1.0\",\n private: true,\n scripts: {\n dev: \"NEXT_TELEMETRY_DISABLED=1 next dev\",\n build: \"next build\",\n start: \"next start\",\n lint: \"next lint\",\n },\n dependencies: {\n next: \"12.1.6\",\n react: \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"@next/swc-wasm-nodejs\": \"12.1.6\",\n },\n }),\n } }),\n main: \"/pages/index.js\",\n environment: \"node\",\n};\n\nvar NODE_TEMPLATE = {\n files: {\n \"/index.js\": {\n code: \"const http = require('http');\\n\\nconst hostname = '127.0.0.1';\\nconst port = 3000;\\n\\nconst server = http.createServer((req, res) => {\\n res.statusCode = 200;\\n res.setHeader('Content-Type', 'text/html');\\n res.end('Hello world');\\n});\\n\\nserver.listen(port, hostname, () => {\\n console.log(`Server running at http://${hostname}:${port}/`);\\n});\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n scripts: { start: \"node index.js\" },\n main: \"index.js\",\n }),\n },\n },\n main: \"/index.js\",\n environment: \"node\",\n};\n\nvar VITE_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.js\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n devDependencies: {\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n } }),\n main: \"/index.js\",\n environment: \"node\",\n};\n\nvar VITE_PREACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.jsx\": {\n code: \"export default function App() {\\n const data = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.jsx\": {\n code: \"import { render } from \\\"preact\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = document.getElementById(\\\"root\\\");\\nrender(, root);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n preact: \"^10.16.0\",\n },\n devDependencies: {\n \"@preact/preset-vite\": \"^2.5.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n }, \"/vite.config.js\": {\n code: \"import { defineConfig } from \\\"vite\\\";\\nimport preact from '@preact/preset-vite'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [preact()],\\n});\\n\",\n } }),\n main: \"/App.jsx\",\n environment: \"node\",\n};\n\nvar VITE_PREACT_TS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"export default function App() {\\n const data: string = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import { render } from \\\"preact\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = document.getElementById(\\\"root\\\") as HTMLElement;\\nrender(, root);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n lib: [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n allowJs: false,\n skipLibCheck: true,\n esModuleInterop: false,\n allowSyntheticDefaultImports: true,\n strict: true,\n forceConsistentCasingInFileNames: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n jsx: \"react-jsx\",\n jsxImportSource: \"preact\",\n },\n include: [\"src\"],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n }, \"/tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n preact: \"^10.16.0\",\n },\n devDependencies: {\n \"@preact/preset-vite\": \"^2.5.0\",\n typescript: \"^4.9.5\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n }, \"/vite-env.d.ts\": {\n code: '/// ',\n }, \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport preact from '@preact/preset-vite'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [preact()],\\n})\\n\",\n } }),\n main: \"/App.tsx\",\n environment: \"node\",\n};\n\nvar VITE_REACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.jsx\": {\n code: \"export default function App() {\\n const data = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.jsx\": {\n code: \"import { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n react: \"^18.2.0\",\n \"react-dom\": \"^18.2.0\",\n },\n devDependencies: {\n \"@vitejs/plugin-react\": \"3.1.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n }, \"/vite.config.js\": {\n code: \"import { defineConfig } from \\\"vite\\\";\\nimport react from \\\"@vitejs/plugin-react\\\";\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [react()],\\n});\\n\",\n } }),\n main: \"/App.jsx\",\n environment: \"node\",\n};\n\nvar VITE_REACT_TS_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"export default function App() {\\n const data: string = \\\"world\\\"\\n\\n return

    Hello {data}

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\nimport React from \\\"react\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\") as HTMLElement);\\nroot.render(\\n \\n \\n \\n);\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n }, \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n lib: [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n allowJs: false,\n skipLibCheck: true,\n esModuleInterop: false,\n allowSyntheticDefaultImports: true,\n strict: true,\n forceConsistentCasingInFileNames: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n jsx: \"react-jsx\",\n },\n include: [\"src\"],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n }, \"/tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n }, \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.8\",\n \"@types/react-dom\": \"^19.0.3\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n typescript: \"^4.9.5\",\n vite: \"4.2.0\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n }, \"/vite-env.d.ts\": {\n code: '/// ',\n }, \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport react from '@vitejs/plugin-react'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [react()],\\n})\\n\",\n } }),\n main: \"/App.tsx\",\n environment: \"node\",\n};\n\nvar VITE_SVELTE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.svelte\": {\n code: \"\\n\\n

    Hello {data}

    \\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import App from './App.svelte'\\nimport \\\"./styles.css\\\"\\n\\nconst app = new App({\\n target: document.getElementById('app'),\\n})\\n\\nexport default app\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite.config.js\": {\n code: \"import { defineConfig } from 'vite'\\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [svelte()],\\n})\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n type: \"module\",\n scripts: {\n dev: \"vite\",\n },\n devDependencies: {\n \"@sveltejs/vite-plugin-svelte\": \"^2.0.2\",\n svelte: \"^3.55.1\",\n vite: \"4.0.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }),\n },\n },\n main: \"/src/App.svelte\",\n environment: \"node\",\n};\n\nvar VITE_SVELTE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.svelte\": {\n code: \"\\n\\n

    Hello {data}

    \\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import App from './App.svelte'\\nimport \\\"./styles.css\\\"\\n\\nconst app = new App({\\n target: document.getElementById('app'),\\n})\\n\\nexport default app\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite-env.d.ts\": {\n code: \"/// \\n/// \",\n },\n \"svelte.config.js\": {\n code: \"import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\\n\\nexport default {\\n // Consult https://svelte.dev/docs#compile-time-svelte-preprocess\\n // for more information about preprocessors\\n preprocess: vitePreprocess(),\\n}\\n\",\n },\n \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [svelte()],\\n})\",\n },\n \"tsconfig.json\": {\n code: JSON.stringify({\n extends: \"@tsconfig/svelte/tsconfig.json\",\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n module: \"ESNext\",\n resolveJsonModule: true,\n allowJs: true,\n checkJs: true,\n isolatedModules: true,\n },\n include: [\n \"src/**/*.d.ts\",\n \"src/**/*.ts\",\n \"src/**/*.js\",\n \"src/**/*.svelte\",\n ],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n },\n \"tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n },\n \"/package.json\": {\n code: JSON.stringify({\n type: \"module\",\n scripts: {\n dev: \"vite\",\n },\n devDependencies: {\n \"@sveltejs/vite-plugin-svelte\": \"^2.0.2\",\n \"@tsconfig/svelte\": \"^3.0.0\",\n svelte: \"^3.55.1\",\n \"svelte-check\": \"^2.10.3\",\n tslib: \"^2.5.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n },\n },\n main: \"/src/App.svelte\",\n environment: \"node\",\n};\n\nvar VITE_VUE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\"\\n \\ncreateApp(App).mount('#app') \\n\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite.config.js\": {\n code: \"import { defineConfig } from 'vite'\\nimport vue from '@vitejs/plugin-vue'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [vue()]\\n})\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vitejs/plugin-vue\": \"3.2.0\",\n vite: \"4.1.4\",\n \"esbuild-wasm\": \"0.17.12\",\n },\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"node\",\n};\n\nvar VITE_VUE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\"\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/index.html\": {\n code: \"\\n\\n \\n \\n \\n Vite App\\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/vite-env.d.ts\": {\n code: '/// ',\n },\n \"/vite.config.ts\": {\n code: \"import { defineConfig } from 'vite'\\nimport vue from '@vitejs/plugin-vue'\\n\\n// https://vitejs.dev/config/\\nexport default defineConfig({\\n plugins: [vue()]\\n})\\n\",\n },\n \"tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"ESNext\",\n useDefineForClassFields: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n strict: true,\n jsx: \"preserve\",\n resolveJsonModule: true,\n isolatedModules: true,\n esModuleInterop: true,\n lib: [\"ESNext\", \"DOM\"],\n skipLibCheck: true,\n noEmit: true,\n },\n include: [\n \"src/**/*.ts\",\n \"src/**/*.d.ts\",\n \"src/**/*.tsx\",\n \"src/**/*.vue\",\n ],\n references: [{ path: \"./tsconfig.node.json\" }],\n }, null, 2),\n },\n \"tsconfig.node.json\": {\n code: JSON.stringify({\n compilerOptions: {\n composite: true,\n module: \"ESNext\",\n moduleResolution: \"Node\",\n allowSyntheticDefaultImports: true,\n },\n include: [\"vite.config.ts\"],\n }, null, 2),\n },\n \"/package.json\": {\n code: JSON.stringify({\n scripts: {\n dev: \"vite\",\n build: \"tsc && vite build\",\n preview: \"vite preview\",\n },\n dependencies: {\n vue: \"^3.2.47\",\n },\n devDependencies: {\n \"@vitejs/plugin-vue\": \"^4.0.0\",\n vite: \"4.1.4\",\n \"vue-tsc\": \"^1.2.0\",\n typescript: \"^4.9.5\",\n \"esbuild-wasm\": \"^0.17.12\",\n },\n }, null, 2),\n },\n },\n main: \"/src/App.vue\",\n environment: \"node\",\n};\n\nvar ANGULAR_TEMPLATE = {\n files: {\n \"/src/app/app.component.css\": commonFiles[\"/styles.css\"],\n \"/src/app/app.component.html\": {\n code: \"
    \\n

    {{ helloWorld }}

    \\n
    \\n\",\n },\n \"/src/app/app.component.ts\": {\n code: \"import { Component } from \\\"@angular/core\\\";\\n\\n@Component({\\n selector: \\\"app-root\\\",\\n templateUrl: \\\"./app.component.html\\\",\\n styleUrls: [\\\"./app.component.css\\\"]\\n})\\nexport class AppComponent {\\n helloWorld = \\\"Hello world\\\";\\n} \\n\",\n },\n \"/src/app/app.module.ts\": {\n code: \"import { BrowserModule } from \\\"@angular/platform-browser\\\";\\nimport { NgModule } from \\\"@angular/core\\\";\\n \\nimport { AppComponent } from \\\"./app.component\\\";\\n \\n@NgModule({\\n declarations: [AppComponent],\\n imports: [BrowserModule],\\n providers: [],\\n bootstrap: [AppComponent]\\n})\\nexport class AppModule {} \\n\",\n },\n \"/src/index.html\": {\n code: \"\\n\\n \\n\\n \\n Angular\\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { enableProdMode } from \\\"@angular/core\\\";\\nimport { platformBrowserDynamic } from \\\"@angular/platform-browser-dynamic\\\";\\n \\nimport { AppModule } from \\\"./app/app.module\\\"; \\n\\nplatformBrowserDynamic()\\n .bootstrapModule(AppModule)\\n .catch(err => console.log(err));\\n \\n\",\n },\n \"/src/polyfills.ts\": {\n code: \"import \\\"core-js/proposals/reflect-metadata\\\"; \\n import \\\"zone.js/dist/zone\\\";\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n \"@angular/core\": \"^11.2.0\",\n \"@angular/platform-browser\": \"^11.2.0\",\n \"@angular/platform-browser-dynamic\": \"^11.2.0\",\n \"@angular/common\": \"^11.2.0\",\n \"@angular/compiler\": \"^11.2.0\",\n \"zone.js\": \"0.11.3\",\n \"core-js\": \"3.8.3\",\n rxjs: \"6.6.3\",\n },\n main: \"/src/main.ts\",\n }),\n },\n },\n main: \"/src/app/app.component.ts\",\n environment: \"angular-cli\",\n};\n\nvar REACT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.js\": {\n code: \"export default function App() {\\n return

    Hello world

    \\n}\\n\",\n }, \"/index.js\": {\n code: \"import React, { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n Document\\n \\n \\n
    \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-scripts\": \"^5.0.0\",\n },\n main: \"/index.js\",\n }),\n } }),\n main: \"/App.js\",\n environment: \"create-react-app\",\n};\n\nvar REACT_TYPESCRIPT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"tsconfig.json\": {\n code: \"{\\n \\\"include\\\": [\\n \\\"./**/*\\\"\\n ],\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"esModuleInterop\\\": true,\\n \\\"lib\\\": [ \\\"dom\\\", \\\"es2015\\\" ],\\n \\\"jsx\\\": \\\"react-jsx\\\"\\n }\\n}\",\n }, \"/App.tsx\": {\n code: \"export default function App(): JSX.Element {\\n return

    Hello world

    \\n}\\n\",\n }, \"/index.tsx\": {\n code: \"import React, { StrictMode } from \\\"react\\\";\\nimport { createRoot } from \\\"react-dom/client\\\";\\nimport \\\"./styles.css\\\";\\n\\nimport App from \\\"./App\\\";\\n\\nconst root = createRoot(document.getElementById(\\\"root\\\"));\\nroot.render(\\n \\n \\n \\n);\",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n Document\\n \\n \\n
    \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-scripts\": \"^4.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n typescript: \"^4.0.0\",\n },\n main: \"/index.tsx\",\n }),\n } }),\n main: \"/App.tsx\",\n environment: \"create-react-app\",\n};\n\nvar SOLID_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.tsx\": {\n code: \"import { Component } from \\\"solid-js\\\";\\n\\nconst App: Component = () => {\\n return

    Hello world

    \\n};\\n\\nexport default App;\",\n }, \"/index.tsx\": {\n code: \"import { render } from \\\"solid-js/web\\\";\\nimport App from \\\"./App\\\";\\n\\nimport \\\"./styles.css\\\";\\n\\nrender(() => , document.getElementById(\\\"app\\\"));\",\n }, \"/index.html\": {\n code: \"\\n\\n Parcel Sandbox\\n \\n\\n\\n
    \\n \\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n \"solid-js\": \"1.3.15\",\n },\n main: \"/index.tsx\",\n }),\n } }),\n main: \"/App.tsx\",\n environment: \"solid\",\n};\n\nvar SVELTE_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/App.svelte\": {\n code: \"\\n\\n\\n\\n
    \\n

    Hello {name}

    \\n
    \",\n }, \"/index.js\": {\n code: \"import App from \\\"./App.svelte\\\";\\nimport \\\"./styles.css\\\";\\n\\nconst app = new App({\\n target: document.body\\n});\\n\\nexport default app;\\n \",\n }, \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n\\n Svelte app\\n\\n \\n \\n\\n \\n \\n \\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {\n svelte: \"^3.0.0\",\n },\n main: \"/index.js\",\n }),\n } }),\n main: \"/App.svelte\",\n environment: \"svelte\",\n};\n\nvar TEST_TYPESCRIPT_TEMPLATE = {\n files: {\n \"tsconfig.json\": {\n code: \"{\\n \\\"include\\\": [\\n \\\"./**/*\\\"\\n ],\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"esModuleInterop\\\": true,\\n \\\"lib\\\": [ \\\"dom\\\", \\\"es2015\\\" ],\\n \\\"jsx\\\": \\\"react-jsx\\\"\\n }\\n}\",\n },\n \"/add.ts\": {\n code: \"export const add = (a: number, b: number): number => a + b;\",\n },\n \"/add.test.ts\": {\n code: \"import { add } from './add';\\n\\ndescribe('add', () => {\\n test('Commutative Law of Addition', () => {\\n expect(add(1, 2)).toBe(add(2, 1));\\n });\\n});\",\n },\n \"package.json\": {\n code: JSON.stringify({\n dependencies: {},\n devDependencies: { typescript: \"^4.0.0\" },\n main: \"/add.ts\",\n }),\n },\n },\n main: \"/add.test.ts\",\n environment: \"parcel\",\n mode: \"tests\",\n};\n\nvar VANILLA_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.js\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n\\n\\n\\n
    \\n\\n \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n main: \"/index.js\",\n }),\n } }),\n main: \"/index.js\",\n environment: \"parcel\",\n};\n\nvar VANILLA_TYPESCRIPT_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"tsconfig.json\": {\n code: \"{\\n \\\"compilerOptions\\\": {\\n \\\"strict\\\": true,\\n \\\"module\\\": \\\"commonjs\\\",\\n \\\"jsx\\\": \\\"preserve\\\",\\n \\\"esModuleInterop\\\": true,\\n \\\"sourceMap\\\": true,\\n \\\"allowJs\\\": true,\\n \\\"lib\\\": [\\n \\\"es6\\\",\\n \\\"dom\\\"\\n ],\\n \\\"rootDir\\\": \\\"src\\\",\\n \\\"moduleResolution\\\": \\\"node\\\"\\n }\\n}\",\n }, \"/index.ts\": {\n code: \"import \\\"./styles.css\\\";\\n\\ndocument.getElementById(\\\"app\\\").innerHTML = `\\n

    Hello world

    \\n`;\\n\",\n }, \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n\\n\\n\\n
    \\n\\n \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n devDependencies: {\n typescript: \"^4.0.0\",\n },\n main: \"/index.ts\",\n }),\n } }),\n main: \"/index.ts\",\n environment: \"parcel\",\n};\n\nvar VUE_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\",\n },\n \"/src/main.js\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\";\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n \\n codesandbox\\n \\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n name: \"vue3\",\n version: \"0.1.0\",\n private: true,\n main: \"/src/main.js\",\n scripts: {\n serve: \"vue-cli-service serve\",\n build: \"vue-cli-service build\",\n },\n dependencies: {\n \"core-js\": \"^3.26.1\",\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vue/cli-plugin-babel\": \"^5.0.8\",\n \"@vue/cli-service\": \"^5.0.8\",\n },\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"vue-cli\",\n};\n\nvar VUE_TS_TEMPLATE = {\n files: {\n \"/src/styles.css\": commonFiles[\"/styles.css\"],\n \"/src/App.vue\": {\n code: \"\\n\\n\",\n },\n \"/src/main.ts\": {\n code: \"import { createApp } from 'vue'\\nimport App from './App.vue'\\nimport \\\"./styles.css\\\";\\n\\ncreateApp(App).mount('#app')\\n\",\n },\n \"/src/shims-vue.d.ts\": \"/* eslint-disable */\\ndeclare module \\\"*.vue\\\" {\\n import type { DefineComponent } from \\\"vue\\\";\\n const component: DefineComponent<{}, {}, any>;\\n export default component;\\n}\",\n \"/public/index.html\": {\n code: \"\\n\\n \\n \\n \\n \\n codesandbox\\n \\n \\n \\n
    \\n \\n \\n\\n\",\n },\n \"/package.json\": {\n code: JSON.stringify({\n name: \"vue3-ts\",\n version: \"0.1.0\",\n private: true,\n main: \"/src/main.ts\",\n scripts: {\n serve: \"vue-cli-service serve\",\n build: \"vue-cli-service build\",\n },\n dependencies: {\n \"core-js\": \"^3.26.1\",\n vue: \"^3.2.45\",\n },\n devDependencies: {\n \"@vue/cli-plugin-babel\": \"^5.0.8\",\n \"@vue/cli-plugin-typescript\": \"^5.0.8\",\n \"@vue/cli-service\": \"^5.0.8\",\n typescript: \"^4.9.3\",\n },\n }),\n },\n \"/tsconfig.json\": {\n code: JSON.stringify({\n compilerOptions: {\n target: \"esnext\",\n module: \"esnext\",\n strict: true,\n jsx: \"preserve\",\n moduleResolution: \"node\",\n experimentalDecorators: true,\n skipLibCheck: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n forceConsistentCasingInFileNames: true,\n useDefineForClassFields: true,\n sourceMap: false,\n baseUrl: \".\",\n types: [\"webpack-env\"],\n paths: {\n \"@/*\": [\"src/*\"],\n },\n lib: [\"esnext\", \"dom\", \"dom.iterable\", \"scripthost\"],\n },\n include: [\n \"src/**/*.ts\",\n \"src/**/*.tsx\",\n \"src/**/*.vue\",\n \"tests/**/*.ts\",\n \"tests/**/*.tsx\",\n ],\n exclude: [\"node_modules\"],\n }),\n },\n },\n main: \"/src/App.vue\",\n environment: \"vue-cli\",\n};\n\nvar STATIC_TEMPLATE = {\n files: __assign(__assign({}, commonFiles), { \"/index.html\": {\n code: \"\\n\\n\\n\\n Parcel Sandbox\\n \\n \\n\\n\\n\\n

    Hello world

    \\n\\n\\n\",\n }, \"/package.json\": {\n code: JSON.stringify({\n dependencies: {},\n main: \"/index.html\",\n }),\n } }),\n main: \"/index.html\",\n environment: \"static\",\n};\n\nvar SANDBOX_TEMPLATES = {\n static: STATIC_TEMPLATE,\n angular: ANGULAR_TEMPLATE,\n react: REACT_TEMPLATE,\n \"react-ts\": REACT_TYPESCRIPT_TEMPLATE,\n solid: SOLID_TEMPLATE,\n svelte: SVELTE_TEMPLATE,\n \"test-ts\": TEST_TYPESCRIPT_TEMPLATE,\n \"vanilla-ts\": VANILLA_TYPESCRIPT_TEMPLATE,\n vanilla: VANILLA_TEMPLATE,\n vue: VUE_TEMPLATE,\n \"vue-ts\": VUE_TS_TEMPLATE,\n node: NODE_TEMPLATE,\n nextjs: NEXTJS_TEMPLATE,\n vite: VITE_TEMPLATE,\n \"vite-react\": VITE_REACT_TEMPLATE,\n \"vite-react-ts\": VITE_REACT_TS_TEMPLATE,\n \"vite-preact\": VITE_PREACT_TEMPLATE,\n \"vite-preact-ts\": VITE_PREACT_TS_TEMPLATE,\n \"vite-vue\": VITE_VUE_TEMPLATE,\n \"vite-vue-ts\": VITE_VUE_TS_TEMPLATE,\n \"vite-svelte\": VITE_SVELTE_TEMPLATE,\n \"vite-svelte-ts\": VITE_SVELTE_TS_TEMPLATE,\n astro: ASTRO_TEMPLATE,\n};\n\n/**\n * Creates a standard sandpack state given the setup,\n * options, and files props. Using this function is\n * the reliable way to ensure a consistent and predictable\n * sandpack-content throughout application\n */\nvar getSandpackStateFromProps = function (props) {\n var _a, _b, _c, _d, _e, _f;\n var normalizedFilesPath = normalizePath(props.files);\n // Merge predefined template with custom setup\n var projectSetup = combineTemplateFilesToSetup({\n template: props.template,\n customSetup: props.customSetup,\n files: normalizedFilesPath,\n });\n // visibleFiles and activeFile override the setup flags\n var visibleFiles = normalizePath((_b = (_a = props.options) === null || _a === void 0 ? void 0 : _a.visibleFiles) !== null && _b !== void 0 ? _b : []);\n var activeFile = ((_c = props.options) === null || _c === void 0 ? void 0 : _c.activeFile)\n ? resolveFile((_d = props.options) === null || _d === void 0 ? void 0 : _d.activeFile, projectSetup.files)\n : undefined;\n if (visibleFiles.length === 0 && normalizedFilesPath) {\n // extract open and active files from the custom input files\n Object.keys(normalizedFilesPath).forEach(function (filePath) {\n var file = normalizedFilesPath[filePath];\n if (typeof file === \"string\") {\n visibleFiles.push(filePath);\n return;\n }\n if (!activeFile && file.active) {\n activeFile = filePath;\n if (file.hidden === true) {\n // active file needs to be available even if someone sets it as hidden by accident\n visibleFiles.push(filePath);\n }\n }\n if (!file.hidden) {\n visibleFiles.push(filePath);\n }\n });\n }\n if (visibleFiles.length === 0) {\n // If no files are received, use the project setup / template\n visibleFiles = [projectSetup.main];\n }\n // Make sure it resolves the entry file\n if (projectSetup.entry && !projectSetup.files[projectSetup.entry]) {\n /* eslint-disable */\n // @ts-ignore\n projectSetup.entry = resolveFile(projectSetup.entry, projectSetup.files);\n /* eslint-enable */\n }\n if (!activeFile && projectSetup.main) {\n activeFile = projectSetup.main;\n }\n // If no activeFile is specified, use the first open file\n if (!activeFile || !projectSetup.files[activeFile]) {\n activeFile = visibleFiles[0];\n }\n // If for whatever reason the active path was not set as open, set it\n if (!visibleFiles.includes(activeFile)) {\n visibleFiles.push(activeFile);\n }\n var files = addPackageJSONIfNeeded(projectSetup.files, (_e = projectSetup.dependencies) !== null && _e !== void 0 ? _e : {}, (_f = projectSetup.devDependencies) !== null && _f !== void 0 ? _f : {}, projectSetup.entry);\n var existOpenPath = visibleFiles.filter(function (path) { return files[path]; });\n return {\n visibleFiles: existOpenPath,\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n activeFile: activeFile,\n files: files,\n environment: projectSetup.environment,\n shouldUpdatePreview: true,\n };\n};\n/**\n * Given a file tree and a file, it uses a couple of rules\n * to tweak the filename to match with one of the inside of file tree\n *\n * - Adds the leading slash;\n * - Tries to find the same filename with different extensions (js only);\n * - Returns `null` if it doesn't satisfy any rule\n */\nvar resolveFile = function (path, files) {\n var normalizedFilesPath = normalizePath(files);\n var normalizedPath = normalizePath(path);\n if (normalizedPath in normalizedFilesPath) {\n return normalizedPath;\n }\n if (!path) {\n return null;\n }\n var resolvedPath = null;\n var index = 0;\n var strategies = [\".js\", \".jsx\", \".ts\", \".tsx\"];\n while (!resolvedPath && index < strategies.length) {\n var removeExtension = normalizedPath.split(\".\")[0];\n var attemptPath = \"\".concat(removeExtension).concat(strategies[index]);\n if (normalizedFilesPath[attemptPath] !== undefined) {\n resolvedPath = attemptPath;\n }\n index++;\n }\n return resolvedPath;\n};\n/**\n * The template is predefined (eg: react, vue, vanilla)\n * The setup can overwrite anything from the template\n * (eg: files, dependencies, environment, etc.)\n */\nvar combineTemplateFilesToSetup = function (_a) {\n var files = _a.files, template = _a.template, customSetup = _a.customSetup;\n if (!template) {\n // If not input, default to vanilla\n if (!customSetup) {\n var defaultTemplate = SANDBOX_TEMPLATES.vanilla;\n return __assign(__assign({}, defaultTemplate), { files: __assign(__assign({}, defaultTemplate.files), convertedFilesToBundlerFiles(files)) });\n }\n if (!files || Object.keys(files).length === 0) {\n throw new Error(\"[sandpack-react]: without a template, you must pass at least one file\");\n }\n // If not template specified, use the setup entirely\n return __assign(__assign({}, customSetup), { files: convertedFilesToBundlerFiles(files) });\n }\n var baseTemplate = SANDBOX_TEMPLATES[template];\n if (!baseTemplate) {\n throw new Error(\"[sandpack-react]: invalid template \\\"\".concat(template, \"\\\" provided\"));\n }\n // If no setup and not files, the template is used entirely\n if (!customSetup && !files) {\n return baseTemplate;\n }\n // Merge the setup on top of the template\n return {\n /**\n * The input setup might have files in the simple form Record\n * so we convert them to the sandbox template format\n */\n files: convertedFilesToBundlerFiles(__assign(__assign({}, baseTemplate.files), files)),\n /**\n * Merge template dependencies and user custom dependencies.\n * As a rule, the custom dependencies must overwrite the template ones.\n */\n dependencies: __assign(__assign({}, baseTemplate.dependencies), customSetup === null || customSetup === void 0 ? void 0 : customSetup.dependencies),\n devDependencies: __assign(__assign({}, baseTemplate.devDependencies), customSetup === null || customSetup === void 0 ? void 0 : customSetup.devDependencies),\n entry: normalizePath(customSetup === null || customSetup === void 0 ? void 0 : customSetup.entry),\n main: baseTemplate.main,\n environment: (customSetup === null || customSetup === void 0 ? void 0 : customSetup.environment) || baseTemplate.environment,\n };\n};\n/**\n * Transform an regular object, which contain files to\n * an object that sandpack-client can understand\n *\n * From: Record\n * To: Record\n */\nvar convertedFilesToBundlerFiles = function (files) {\n if (!files)\n return {};\n return Object.keys(files).reduce(function (acc, key) {\n if (typeof files[key] === \"string\") {\n acc[key] = { code: files[key] };\n }\n else {\n acc[key] = files[key];\n }\n return acc;\n }, {});\n};\n\nvar useAppState = function (props, files) {\n var _a = useState({\n editorState: \"pristine\",\n }), state = _a[0], setState = _a[1];\n var originalStateFromProps = getSandpackStateFromProps(props);\n var editorState = dequal(originalStateFromProps.files, files)\n ? \"pristine\"\n : \"dirty\";\n if (editorState !== state.editorState) {\n setState(function (prev) { return (__assign(__assign({}, prev), { editorState: editorState })); });\n }\n return state;\n};\n\nvar useSandpackId = function () {\n if (typeof useId === \"function\") {\n /* eslint-disable-next-line */\n return useId();\n }\n else {\n return generateRandomId();\n }\n};\n/**\n * This is a hard constraint to make URLs shorter.\n * For example, this id will be used to mount SW in the iframe\n * so, to keep the URL valid, this must be an 9 character long string\n */\nvar MAX_ID_LENGTH = 9;\nvar sandpackClientVersion = \"2.19.8\";\nvar useAsyncSandpackId = function (files) {\n if (typeof useId === \"function\") {\n /* eslint-disable-next-line react-hooks/rules-of-hooks */\n var reactDomId_1 = useId();\n return function () { return __awaiter(void 0, void 0, void 0, function () {\n var allCode, sha;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n allCode = Object.entries(files)\n .map(function (path, code) { return path + \"|\" + code; })\n .join(\"|||\");\n return [4 /*yield*/, generateShortId(allCode + reactDomId_1 + sandpackClientVersion)];\n case 1:\n sha = _a.sent();\n return [2 /*return*/, ensureLength(sha.replace(/:/g, \"sp\").replace(/[^a-zA-Z]/g, \"\"), MAX_ID_LENGTH)];\n }\n });\n }); };\n }\n else {\n return function () { return ensureLength(generateRandomId(), MAX_ID_LENGTH); };\n }\n};\nfunction ensureLength(str, length) {\n if (str.length > length) {\n return str.slice(0, length);\n }\n else {\n return str.padEnd(length, \"s\");\n }\n}\nfunction generateShortId(input) {\n return __awaiter(this, void 0, void 0, function () {\n var encoder, data, hashBuffer, hashArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n encoder = new TextEncoder();\n data = encoder.encode(input);\n return [4 /*yield*/, crypto.subtle.digest(\"SHA-256\", data)];\n case 1:\n hashBuffer = _a.sent();\n hashArray = Array.from(new Uint8Array(hashBuffer));\n return [2 /*return*/, btoa(String.fromCharCode.apply(String, hashArray))];\n }\n });\n });\n}\n\nvar BUNDLER_TIMEOUT = 40000;\nvar useClient = function (_a, filesState) {\n var _b, _c, _d;\n var options = _a.options, customSetup = _a.customSetup, teamId = _a.teamId, sandboxId = _a.sandboxId;\n options !== null && options !== void 0 ? options : (options = {});\n customSetup !== null && customSetup !== void 0 ? customSetup : (customSetup = {});\n var initModeFromProps = (options === null || options === void 0 ? void 0 : options.initMode) || \"lazy\";\n var _e = useState({\n startRoute: options === null || options === void 0 ? void 0 : options.startRoute,\n bundlerState: undefined,\n error: null,\n initMode: initModeFromProps,\n reactDevTools: undefined,\n status: ((_b = options === null || options === void 0 ? void 0 : options.autorun) !== null && _b !== void 0 ? _b : true) ? \"initial\" : \"idle\",\n }), state = _e[0], setState = _e[1];\n var intersectionObserverCallback = useRef();\n var intersectionObserver = useRef(null);\n var lazyAnchorRef = useRef(null);\n var registeredIframes = useRef({});\n var clients = useRef({});\n var timeoutHook = useRef(null);\n var unsubscribeClientListeners = useRef({});\n var unsubscribe = useRef();\n var queuedListeners = useRef({ global: {} });\n var debounceHook = useRef();\n var prevEnvironment = useRef(filesState.environment);\n var asyncSandpackId = useAsyncSandpackId(filesState.files);\n /**\n * Callbacks\n */\n var createClient = useCallback(function (iframe, clientId, clientPropsOverride) { return __awaiter(void 0, void 0, void 0, function () {\n var timeOut, shouldSetTimeout, getStableServiceWorkerId, client, _a, _b, globalListeners;\n var _c;\n var _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0:\n // Clean up any existing clients that\n // have been created with the given id\n if (clients.current[clientId]) {\n clients.current[clientId].destroy();\n }\n options !== null && options !== void 0 ? options : (options = {});\n customSetup !== null && customSetup !== void 0 ? customSetup : (customSetup = {});\n timeOut = (_d = options === null || options === void 0 ? void 0 : options.bundlerTimeOut) !== null && _d !== void 0 ? _d : BUNDLER_TIMEOUT;\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n shouldSetTimeout = typeof unsubscribe.current !== \"function\";\n if (shouldSetTimeout) {\n timeoutHook.current = setTimeout(function () {\n unregisterAllClients();\n setState(function (prev) { return (__assign(__assign({}, prev), { status: \"timeout\" })); });\n }, timeOut);\n }\n getStableServiceWorkerId = function () { return __awaiter(void 0, void 0, void 0, function () {\n var key, fixedId;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(options === null || options === void 0 ? void 0 : options.experimental_enableStableServiceWorkerId)) return [3 /*break*/, 3];\n key = \"SANDPACK_INTERNAL:URL-CONSISTENT-ID\";\n fixedId = localStorage.getItem(key);\n if (!!fixedId) return [3 /*break*/, 2];\n return [4 /*yield*/, asyncSandpackId()];\n case 1:\n fixedId = _a.sent();\n localStorage.setItem(key, fixedId);\n _a.label = 2;\n case 2: return [2 /*return*/, fixedId];\n case 3: return [4 /*yield*/, asyncSandpackId()];\n case 4: return [2 /*return*/, _a.sent()];\n }\n });\n }); };\n _a = loadSandpackClient;\n _b = [iframe,\n {\n files: filesState.files,\n template: filesState.environment,\n }];\n _c = {\n externalResources: options.externalResources,\n bundlerURL: options.bundlerURL,\n startRoute: (_e = clientPropsOverride === null || clientPropsOverride === void 0 ? void 0 : clientPropsOverride.startRoute) !== null && _e !== void 0 ? _e : options.startRoute,\n fileResolver: options.fileResolver,\n skipEval: (_f = options.skipEval) !== null && _f !== void 0 ? _f : false,\n logLevel: options.logLevel,\n showOpenInCodeSandbox: false,\n showErrorScreen: true,\n showLoadingScreen: false,\n reactDevTools: state.reactDevTools,\n customNpmRegistries: customSetup === null || customSetup === void 0 ? void 0 : customSetup.npmRegistries,\n teamId: teamId,\n experimental_enableServiceWorker: !!(options === null || options === void 0 ? void 0 : options.experimental_enableServiceWorker)\n };\n return [4 /*yield*/, getStableServiceWorkerId()];\n case 1: return [4 /*yield*/, _a.apply(void 0, _b.concat([(_c.experimental_stableServiceWorkerId = _g.sent(),\n _c.sandboxId = sandboxId,\n _c)]))];\n case 2:\n client = _g.sent();\n if (typeof unsubscribe.current !== \"function\") {\n unsubscribe.current = client.listen(handleMessage);\n }\n unsubscribeClientListeners.current[clientId] =\n unsubscribeClientListeners.current[clientId] || {};\n /**\n * Register any potential listeners that subscribed before sandpack ran\n */\n if (queuedListeners.current[clientId]) {\n Object.keys(queuedListeners.current[clientId]).forEach(function (listenerId) {\n var listener = queuedListeners.current[clientId][listenerId];\n var unsubscribe = client.listen(listener);\n unsubscribeClientListeners.current[clientId][listenerId] =\n unsubscribe;\n });\n // Clear the queued listeners after they were registered\n queuedListeners.current[clientId] = {};\n }\n globalListeners = Object.entries(queuedListeners.current.global);\n globalListeners.forEach(function (_a) {\n var listenerId = _a[0], listener = _a[1];\n var unsubscribe = client.listen(listener);\n unsubscribeClientListeners.current[clientId][listenerId] = unsubscribe;\n /**\n * Important: Do not clean the global queue\n * Instead of cleaning the queue, keep it there for the\n * following clients that might be created\n */\n });\n clients.current[clientId] = client;\n return [2 /*return*/];\n }\n });\n }); }, [filesState.environment, filesState.files, state.reactDevTools]);\n var unregisterAllClients = useCallback(function () {\n Object.keys(clients.current).map(unregisterBundler);\n if (typeof unsubscribe.current === \"function\") {\n unsubscribe.current();\n unsubscribe.current = undefined;\n }\n }, []);\n var runSandpack = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(Object.entries(registeredIframes.current).map(function (_a) {\n var clientId = _a[0], _b = _a[1], iframe = _b.iframe, _c = _b.clientPropsOverride, clientPropsOverride = _c === void 0 ? {} : _c;\n return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, createClient(iframe, clientId, clientPropsOverride)];\n case 1:\n _d.sent();\n return [2 /*return*/];\n }\n });\n });\n }))];\n case 1:\n _a.sent();\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null, status: \"running\" })); });\n return [2 /*return*/];\n }\n });\n }); }, [createClient]);\n intersectionObserverCallback.current = function (entries) {\n if (entries.some(function (entry) { return entry.isIntersecting; })) {\n runSandpack();\n }\n else {\n unregisterAllClients();\n }\n };\n var initializeSandpackIframe = useCallback(function () {\n var _a, _b, _c;\n var autorun = (_a = options === null || options === void 0 ? void 0 : options.autorun) !== null && _a !== void 0 ? _a : true;\n if (!autorun) {\n return;\n }\n var observerOptions = (_b = options === null || options === void 0 ? void 0 : options.initModeObserverOptions) !== null && _b !== void 0 ? _b : {\n rootMargin: \"1000px 0px\",\n };\n if (intersectionObserver.current && lazyAnchorRef.current) {\n (_c = intersectionObserver.current) === null || _c === void 0 ? void 0 : _c.unobserve(lazyAnchorRef.current);\n }\n if (lazyAnchorRef.current && state.initMode === \"lazy\") {\n // If any component registered a lazy anchor ref component, use that for the intersection observer\n intersectionObserver.current = new IntersectionObserver(function (entries) {\n var _a, _b;\n if (entries.some(function (entry) { return entry.isIntersecting; })) {\n // Trigger it once\n if (entries.some(function (entry) { return entry.isIntersecting; }) &&\n lazyAnchorRef.current) {\n (_a = intersectionObserverCallback.current) === null || _a === void 0 ? void 0 : _a.call(intersectionObserverCallback, entries);\n (_b = intersectionObserver.current) === null || _b === void 0 ? void 0 : _b.unobserve(lazyAnchorRef.current);\n }\n }\n }, observerOptions);\n intersectionObserver.current.observe(lazyAnchorRef.current);\n }\n else if (lazyAnchorRef.current && state.initMode === \"user-visible\") {\n intersectionObserver.current = new IntersectionObserver(function (entries) {\n var _a;\n (_a = intersectionObserverCallback.current) === null || _a === void 0 ? void 0 : _a.call(intersectionObserverCallback, entries);\n }, observerOptions);\n intersectionObserver.current.observe(lazyAnchorRef.current);\n }\n else {\n runSandpack();\n }\n }, [\n options === null || options === void 0 ? void 0 : options.autorun,\n options === null || options === void 0 ? void 0 : options.initModeObserverOptions,\n runSandpack,\n state.initMode,\n unregisterAllClients,\n ]);\n var registerBundler = useCallback(function (iframe, clientId, clientPropsOverride) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Store the iframe info so it can be\n // used later to manually run sandpack\n registeredIframes.current[clientId] = {\n iframe: iframe,\n clientPropsOverride: clientPropsOverride,\n };\n if (!(state.status === \"running\")) return [3 /*break*/, 2];\n return [4 /*yield*/, createClient(iframe, clientId, clientPropsOverride)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); }, [createClient, state.status]);\n var unregisterBundler = function (clientId) {\n var _a, _b;\n var client = clients.current[clientId];\n if (client) {\n client.destroy();\n (_a = client.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.location.replace(\"about:blank\");\n client.iframe.removeAttribute(\"src\");\n delete clients.current[clientId];\n }\n else {\n delete registeredIframes.current[clientId];\n }\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n var unsubscribeQueuedClients = Object.values((_b = unsubscribeClientListeners.current[clientId]) !== null && _b !== void 0 ? _b : {});\n // Unsubscribing all listener registered\n unsubscribeQueuedClients.forEach(function (listenerOfClient) {\n var listenerFunctions = Object.values(listenerOfClient);\n listenerFunctions.forEach(function (unsubscribe) { return unsubscribe(); });\n });\n // Keep running if it still have clients\n var status = Object.keys(clients.current).length > 0 ? \"running\" : \"idle\";\n setState(function (prev) { return (__assign(__assign({}, prev), { status: status })); });\n };\n var handleMessage = function (msg) {\n if (msg.type === \"start\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null })); });\n }\n else if (msg.type === \"state\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { bundlerState: msg.state })); });\n }\n else if ((msg.type === \"done\" && !msg.compilatonError) ||\n msg.type === \"connected\") {\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n setState(function (prev) { return (__assign(__assign({}, prev), { error: null })); });\n }\n else if (msg.type === \"action\" && msg.action === \"show-error\") {\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n setState(function (prev) { return (__assign(__assign({}, prev), { error: extractErrorDetails(msg) })); });\n }\n else if (msg.type === \"action\" &&\n msg.action === \"notification\" &&\n msg.notificationType === \"error\") {\n setState(function (prev) { return (__assign(__assign({}, prev), { error: { message: msg.title } })); });\n }\n };\n var registerReactDevTools = function (value) {\n setState(function (prev) { return (__assign(__assign({}, prev), { reactDevTools: value })); });\n };\n var recompileMode = (_c = options === null || options === void 0 ? void 0 : options.recompileMode) !== null && _c !== void 0 ? _c : \"delayed\";\n var recompileDelay = (_d = options === null || options === void 0 ? void 0 : options.recompileDelay) !== null && _d !== void 0 ? _d : 200;\n var dispatchMessage = function (message, clientId) {\n if (state.status !== \"running\") {\n console.warn(\"[sandpack-react]: dispatch cannot be called while in idle mode\");\n return;\n }\n if (clientId) {\n clients.current[clientId].dispatch(message);\n }\n else {\n Object.values(clients.current).forEach(function (client) {\n client.dispatch(message);\n });\n }\n };\n var addListener = function (listener, clientId) {\n if (clientId) {\n if (clients.current[clientId]) {\n var unsubscribeListener = clients.current[clientId].listen(listener);\n return unsubscribeListener;\n }\n else {\n /**\n * When listeners are added before the client is instantiated, they are stored with an unique id\n * When the client is eventually instantiated, the listeners are registered on the spot\n * Their unsubscribe functions are stored in unsubscribeClientListeners for future cleanup\n */\n var listenerId_1 = generateRandomId();\n queuedListeners.current[clientId] =\n queuedListeners.current[clientId] || {};\n unsubscribeClientListeners.current[clientId] =\n unsubscribeClientListeners.current[clientId] || {};\n queuedListeners.current[clientId][listenerId_1] = listener;\n var unsubscribeListener = function () {\n if (queuedListeners.current[clientId][listenerId_1]) {\n /**\n * Unsubscribe was called before the client was instantiated\n * common example - a component with autorun=false that unmounted\n */\n delete queuedListeners.current[clientId][listenerId_1];\n }\n else if (unsubscribeClientListeners.current[clientId][listenerId_1]) {\n /**\n * unsubscribe was called for a listener that got added before the client was instantiated\n * call the unsubscribe function and remove it from memory\n */\n unsubscribeClientListeners.current[clientId][listenerId_1]();\n delete unsubscribeClientListeners.current[clientId][listenerId_1];\n }\n };\n return unsubscribeListener;\n }\n }\n else {\n // Push to the **global** queue\n var listenerId_2 = generateRandomId();\n queuedListeners.current.global[listenerId_2] = listener;\n // Add to the current clients\n var clientsList = Object.values(clients.current);\n var currentClientUnsubscribeListeners_1 = clientsList.map(function (client) {\n return client.listen(listener);\n });\n var unsubscribeListener = function () {\n // Unsubscribing from the clients already created\n currentClientUnsubscribeListeners_1.forEach(function (unsubscribe) {\n return unsubscribe();\n });\n delete queuedListeners.current.global[listenerId_2];\n // Unsubscribe in case it was added later from `global`\n Object.values(unsubscribeClientListeners.current).forEach(function (client) {\n var _a;\n (_a = client === null || client === void 0 ? void 0 : client[listenerId_2]) === null || _a === void 0 ? void 0 : _a.call(client);\n });\n };\n return unsubscribeListener;\n }\n };\n /**\n * Effects\n */\n useEffect(function watchFileChanges() {\n if (state.status !== \"running\" || !filesState.shouldUpdatePreview) {\n return;\n }\n /**\n * When the environment changes, Sandpack needs to make sure\n * to create a new client and the proper bundler\n */\n if (prevEnvironment.current !== filesState.environment) {\n prevEnvironment.current = filesState.environment;\n Object.entries(clients.current).forEach(function (_a) {\n var key = _a[0], client = _a[1];\n registerBundler(client.iframe, key);\n });\n }\n if (recompileMode === \"immediate\") {\n Object.values(clients.current).forEach(function (client) {\n /**\n * Avoid concurrency\n */\n if (client.status === \"done\") {\n client.updateSandbox({\n files: filesState.files,\n template: filesState.environment,\n });\n }\n });\n }\n if (recompileMode === \"delayed\") {\n if (typeof window === \"undefined\")\n return;\n window.clearTimeout(debounceHook.current);\n debounceHook.current = window.setTimeout(function () {\n Object.values(clients.current).forEach(function (client) {\n /**\n * Avoid concurrency\n */\n if (client.status === \"done\") {\n client.updateSandbox({\n files: filesState.files,\n template: filesState.environment,\n });\n }\n });\n }, recompileDelay);\n }\n return function () {\n window.clearTimeout(debounceHook.current);\n };\n }, [\n filesState.files,\n filesState.environment,\n filesState.shouldUpdatePreview,\n recompileDelay,\n recompileMode,\n registerBundler,\n state.status,\n ]);\n useEffect(function watchInitMode() {\n if (initModeFromProps !== state.initMode) {\n setState(function (prev) { return (__assign(__assign({}, prev), { initMode: initModeFromProps })); });\n initializeSandpackIframe();\n }\n }, [initModeFromProps, initializeSandpackIframe, state.initMode]);\n useEffect(function () {\n return function unmountClient() {\n if (typeof unsubscribe.current === \"function\") {\n unsubscribe.current();\n }\n if (timeoutHook.current) {\n clearTimeout(timeoutHook.current);\n }\n if (debounceHook.current) {\n clearTimeout(debounceHook.current);\n }\n if (intersectionObserver.current) {\n intersectionObserver.current.disconnect();\n }\n };\n }, []);\n return [\n state,\n {\n clients: clients.current,\n initializeSandpackIframe: initializeSandpackIframe,\n runSandpack: runSandpack,\n registerBundler: registerBundler,\n unregisterBundler: unregisterBundler,\n registerReactDevTools: registerReactDevTools,\n addListener: addListener,\n dispatchMessage: dispatchMessage,\n lazyAnchorRef: lazyAnchorRef,\n unsubscribeClientListenersRef: unsubscribeClientListeners,\n queuedListenersRef: queuedListeners,\n },\n ];\n};\n\nvar useFiles = function (props) {\n var originalStateFromProps = getSandpackStateFromProps(props);\n var _a = useState(originalStateFromProps), state = _a[0], setState = _a[1];\n var isMountedRef = useRef(false);\n useEffect(function () {\n if (isMountedRef.current) {\n setState(getSandpackStateFromProps(props));\n }\n else {\n isMountedRef.current = true;\n }\n }, [props.files, props.customSetup, props.template]);\n var updateFile = function (pathOrFiles, code, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n setState(function (prev) {\n var _a;\n var files = prev.files;\n if (typeof pathOrFiles === \"string\" && typeof code === \"string\") {\n files = __assign(__assign({}, files), (_a = {}, _a[pathOrFiles] = __assign(__assign({}, files[pathOrFiles]), { code: code }), _a));\n }\n else if (typeof pathOrFiles === \"object\") {\n files = __assign(__assign({}, files), convertedFilesToBundlerFiles(pathOrFiles));\n }\n return __assign(__assign({}, prev), { files: normalizePath(files), shouldUpdatePreview: shouldUpdatePreview });\n });\n };\n var operations = {\n openFile: function (path) {\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, rest = __rest(_a, [\"visibleFiles\"]);\n var newPaths = visibleFiles.includes(path)\n ? visibleFiles\n : __spreadArray(__spreadArray([], visibleFiles, true), [path], false);\n return __assign(__assign({}, rest), { activeFile: path, visibleFiles: newPaths });\n });\n },\n resetFile: function (path) {\n setState(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), { files: __assign(__assign({}, prevState.files), (_a = {}, _a[path] = originalStateFromProps.files[path], _a)) }));\n });\n },\n resetAllFiles: function () {\n setState(function (prev) { return (__assign(__assign({}, prev), { files: originalStateFromProps.files })); });\n },\n setActiveFile: function (activeFile) {\n if (state.files[activeFile]) {\n setState(function (prev) { return (__assign(__assign({}, prev), { activeFile: activeFile })); });\n }\n },\n updateCurrentFile: function (code, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n updateFile(state.activeFile, code, shouldUpdatePreview);\n },\n updateFile: updateFile,\n addFile: updateFile,\n closeFile: function (path) {\n if (state.visibleFiles.length === 1) {\n return;\n }\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, activeFile = _a.activeFile, prev = __rest(_a, [\"visibleFiles\", \"activeFile\"]);\n var indexOfRemovedPath = visibleFiles.indexOf(path);\n var newPaths = visibleFiles.filter(function (openPath) { return openPath !== path; });\n return __assign(__assign({}, prev), { activeFile: path === activeFile\n ? indexOfRemovedPath === 0\n ? visibleFiles[1]\n : visibleFiles[indexOfRemovedPath - 1]\n : activeFile, visibleFiles: newPaths });\n });\n },\n deleteFile: function (path, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n setState(function (_a) {\n var visibleFiles = _a.visibleFiles, files = _a.files, activeFile = _a.activeFile, rest = __rest(_a, [\"visibleFiles\", \"files\", \"activeFile\"]);\n var newFiles = __assign({}, files);\n delete newFiles[path];\n var remainingVisibleFiles = visibleFiles.filter(function (openPath) { return openPath !== path; });\n var deletedLastVisibleFile = remainingVisibleFiles.length === 0;\n if (deletedLastVisibleFile) {\n var nextFile = Object.keys(files)[Object.keys(files).length - 1];\n return __assign(__assign({}, rest), { visibleFiles: [nextFile], activeFile: nextFile, files: newFiles, shouldUpdatePreview: shouldUpdatePreview });\n }\n return __assign(__assign({}, rest), { visibleFiles: remainingVisibleFiles, activeFile: path === activeFile\n ? remainingVisibleFiles[remainingVisibleFiles.length - 1]\n : activeFile, files: newFiles, shouldUpdatePreview: shouldUpdatePreview });\n });\n },\n };\n return [\n __assign(__assign({}, state), { visibleFilesFromProps: originalStateFromProps.visibleFiles }),\n operations,\n ];\n};\n\nvar Sandpack$1 = React.createContext(null);\nvar SandpackProvider = function (props) {\n var _a, _b, _c;\n var children = props.children, options = props.options, style = props.style, className = props.className, theme = props.theme;\n var _d = useFiles(props), fileState = _d[0], fileOperations = _d[1];\n var _e = useClient(props, fileState), clientState = _e[0], _f = _e[1], dispatchMessage = _f.dispatchMessage, addListener = _f.addListener, clientOperations = __rest(_f, [\"dispatchMessage\", \"addListener\"]);\n var appState = useAppState(props, fileState.files);\n React.useEffect(function () {\n clientOperations.initializeSandpackIframe();\n }, []);\n return (jsx(Sandpack$1.Provider, { value: __assign(__assign(__assign(__assign(__assign(__assign({}, fileState), clientState), appState), fileOperations), clientOperations), { autoReload: (_b = (_a = props.options) === null || _a === void 0 ? void 0 : _a.autoReload) !== null && _b !== void 0 ? _b : true, teamId: props === null || props === void 0 ? void 0 : props.teamId, exportOptions: (_c = props === null || props === void 0 ? void 0 : props.customSetup) === null || _c === void 0 ? void 0 : _c.exportOptions, listen: addListener, dispatch: dispatchMessage }), children: jsx(ClassNamesProvider, { classes: options === null || options === void 0 ? void 0 : options.classes, children: jsx(SandpackThemeProvider, { className: className, style: style, theme: theme, children: children }) }) }));\n};\n/**\n * @category Provider\n */\nvar SandpackConsumer = Sandpack$1.Consumer;\n\n/**\n * @category Hooks\n */\nfunction useSandpack() {\n var sandpack = React.useContext(Sandpack$1);\n if (sandpack === null) {\n throw new Error(\"[sandpack-react]: \\\"useSandpack\\\" must be wrapped by a \\\"SandpackProvider\\\"\");\n }\n var dispatch = sandpack.dispatch, listen = sandpack.listen, rest = __rest(sandpack, [\"dispatch\", \"listen\"]);\n return {\n sandpack: __assign({}, rest),\n dispatch: dispatch,\n listen: listen,\n };\n}\n\n/**\n * This returns the current state of the active file\n * and a method to update its content.\n *\n * @category Hooks\n */\nvar useActiveCode = function () {\n var _a, _b, _c;\n var sandpack = useSandpack().sandpack;\n return {\n code: (_a = sandpack.files[sandpack.activeFile]) === null || _a === void 0 ? void 0 : _a.code,\n readOnly: (_c = (_b = sandpack.files[sandpack.activeFile]) === null || _b === void 0 ? void 0 : _b.readOnly) !== null && _c !== void 0 ? _c : false,\n updateCode: sandpack.updateCurrentFile,\n };\n};\n\nvar _a$8, _b$2, _c;\nvar iconStandaloneClassName = css({\n svg: { margin: \"auto\" },\n});\nvar buttonClassName = css((_a$8 = {\n appearance: \"none\",\n outline: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n backgroundColor: \"transparent\",\n transition: \"color $default, background $default\",\n cursor: \"pointer\",\n color: \"$colors$clickable\",\n border: 0,\n textDecoration: \"none\",\n \"&:disabled\": { color: \"$colors$disabled\" },\n \"&:hover:not(:disabled,[data-active='true'])\": { color: \"$colors$hover\" },\n '&[data-active=\"true\"]': { color: \"$colors$accent\" },\n svg: {\n minWidth: \"$space$4\",\n width: \"$space$4\",\n height: \"$space$4\",\n }\n },\n _a$8[\"&.\".concat(iconStandaloneClassName)] = {\n padding: \"$space$1\",\n height: \"$space$7\",\n display: \"flex\",\n },\n // If there's a children besides the icon\n _a$8[\"&.\".concat(iconStandaloneClassName, \"&:not(:has(span))\")] = {\n width: \"$space$7\",\n },\n _a$8[\"&.\".concat(iconStandaloneClassName, \"&:has(svg + span)\")] = {\n paddingRight: \"$space$3\",\n paddingLeft: \"$space$2\",\n gap: \"$space$1\",\n },\n _a$8));\nvar roundedButtonClassName = css({\n backgroundColor: \"$colors$surface2\",\n borderRadius: \"99999px\",\n border: \"1px solid $colors$surface3\",\n '&[data-active=\"true\"]': {\n color: \"$colors$surface1\",\n background: \"$colors$accent\",\n },\n \"&:hover:not(:disabled,[data-active='true'])\": {\n backgroundColor: \"$colors$surface3\",\n },\n});\nvar iconClassName = css({ padding: 0 });\nvar fadeIn = keyframes({\n \"0%\": {\n opacity: 0,\n },\n \"100%\": {\n opacity: 1,\n },\n});\nvar absoluteClassName = css({\n position: \"absolute\",\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n top: \"0\",\n margin: \"0\",\n overflow: \"auto\",\n height: \"100%\",\n zIndex: \"$top\",\n});\nvar errorClassName = css((_b$2 = {\n whiteSpace: \"pre-wrap\",\n padding: \"$space$10\",\n backgroundColor: \"$colors$surface1\",\n display: \"flex\",\n gap: \"$space$2\",\n flexDirection: \"column\"\n },\n _b$2[\".\".concat(buttonClassName)] = {\n width: \"auto\",\n gap: \"$space$2\",\n padding: \"0 $space$3 0 $space$2\",\n marginTop: \"$space$1\",\n },\n _b$2.variants = {\n solidBg: {\n true: {\n backgroundColor: \"$colors$errorSurface\",\n },\n },\n },\n _b$2));\nvar errorBundlerClassName = css((_c = {\n padding: \"$space$10\",\n backgroundColor: \"$colors$surface1\"\n },\n _c[\".\".concat(buttonClassName)] = {\n marginTop: \"$space$6\",\n width: \"auto\",\n gap: \"$space$2\",\n padding: \"0 $space$3 0 $space$2\",\n },\n _c));\nvar errorMessageClassName = css({\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n color: \"$colors$error\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"$space$3\",\n variants: {\n errorCode: { true: { fontFamily: \"$font$mono\" } },\n },\n a: {\n color: \"inherit\",\n },\n p: {\n margin: 0,\n },\n});\n\nvar _a$7;\nvar tabsClassName = css({\n borderBottom: \"1px solid $colors$surface2\",\n background: \"$colors$surface1\",\n});\nvar tabsScrollableClassName = css({\n padding: \"0 $space$2\",\n overflow: \"auto\",\n display: \"flex\",\n flexWrap: \"nowrap\",\n alignItems: \"stretch\",\n minHeight: \"40px\",\n marginBottom: \"-1px\",\n});\nvar tabContainer = css({\n display: \"flex\",\n alignItems: \"center\",\n outline: \"none\",\n position: \"relative\",\n paddingRight: \"20px\",\n margin: \"1px 0\",\n \"&:has(button:focus)\": {\n outline: \"$colors$accent auto 1px\",\n },\n});\nvar closeButtonClassName = css({\n padding: \"0 $space$1 0 $space$1\",\n borderRadius: \"$border$radius\",\n marginLeft: \"$space$1\",\n width: \"$space$5\",\n visibility: \"hidden\",\n cursor: \"pointer\",\n position: \"absolute\",\n right: \"0px\",\n svg: {\n width: \"$space$3\",\n height: \"$space$3\",\n display: \"block\",\n position: \"relative\",\n top: 1,\n },\n});\nvar tabButton = css((_a$7 = {\n padding: \"0 $space$2\",\n height: \"$layout$headerHeight\",\n whiteSpace: \"nowrap\",\n \"&:focus\": {\n outline: \"none\",\n }\n },\n _a$7[\"&:hover ~ .\".concat(closeButtonClassName)] = { visibility: \"visible\" },\n _a$7));\n/**\n * FileTabs is a list of all open files, the active file, and its state.\n */\nvar FileTabs = function (_a) {\n var closableTabs = _a.closableTabs, className = _a.className, activeFileUniqueId = _a.activeFileUniqueId, props = __rest(_a, [\"closableTabs\", \"className\", \"activeFileUniqueId\"]);\n var sandpack = useSandpack().sandpack;\n var classNames = useClassNames();\n var activeFile = sandpack.activeFile, visibleFiles = sandpack.visibleFiles, setActiveFile = sandpack.setActiveFile;\n var _b = React.useState(null), hoveredIndex = _b[0], setIsHoveredIndex = _b[1];\n var getTriggerText = function (currentPath) {\n var documentFileName = getFileName(currentPath);\n var pathsWithDuplicateFileNames = visibleFiles.reduce(function (prev, curr) {\n if (curr === currentPath) {\n return prev;\n }\n var fileName = getFileName(curr);\n if (fileName === documentFileName) {\n prev.push(curr);\n return prev;\n }\n return prev;\n }, []);\n if (pathsWithDuplicateFileNames.length === 0) {\n return documentFileName;\n }\n else {\n return calculateNearestUniquePath(currentPath, pathsWithDuplicateFileNames);\n }\n };\n var onKeyDown = function (_a) {\n var _b, _c, _d, _e;\n var e = _a.e, index = _a.index;\n var target = e.currentTarget;\n switch (e.key) {\n case \"ArrowLeft\":\n {\n var leftSibling = target.previousElementSibling;\n if (leftSibling) {\n (_b = leftSibling.querySelector(\"button\")) === null || _b === void 0 ? void 0 : _b.focus();\n setActiveFile(visibleFiles[index - 1]);\n }\n }\n break;\n case \"ArrowRight\":\n {\n var rightSibling = target.nextElementSibling;\n if (rightSibling) {\n (_c = rightSibling.querySelector(\"button\")) === null || _c === void 0 ? void 0 : _c.focus();\n setActiveFile(visibleFiles[index + 1]);\n }\n }\n break;\n case \"Home\": {\n var parent_1 = target.parentElement;\n var firstChild = parent_1.firstElementChild;\n (_d = firstChild.querySelector(\"button\")) === null || _d === void 0 ? void 0 : _d.focus();\n setActiveFile(visibleFiles[0]);\n break;\n }\n case \"End\": {\n var parent_2 = target.parentElement;\n var lastChild = parent_2.lastElementChild;\n (_e = lastChild.querySelector(\"button\")) === null || _e === void 0 ? void 0 : _e.focus();\n setActiveFile(visibleFiles[-1]);\n break;\n }\n }\n };\n return (jsx(\"div\", __assign({ className: classNames(\"tabs\", [tabsClassName, className]), translate: \"no\" }, props, { children: jsx(\"div\", { \"aria-label\": \"Select active file\", className: classNames(\"tabs-scrollable-container\", [\n tabsScrollableClassName,\n ]), role: \"tablist\", children: visibleFiles.map(function (filePath, index) { return (jsxs(\"div\", { \"aria-controls\": \"\".concat(filePath, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), \"aria-selected\": filePath === activeFile, className: classNames(\"tab-container\", [tabContainer]), onKeyDown: function (e) { return onKeyDown({ e: e, index: index }); }, onMouseEnter: function () { return setIsHoveredIndex(index); }, onMouseLeave: function () { return setIsHoveredIndex(null); }, role: \"tab\", children: [jsx(\"button\", { className: classNames(\"tab-button\", [buttonClassName, tabButton]), \"data-active\": filePath === activeFile, id: \"\".concat(filePath, \"-\").concat(activeFileUniqueId, \"-tab\"), onClick: function () { return setActiveFile(filePath); }, tabIndex: filePath === activeFile ? 0 : -1, title: filePath, type: \"button\", children: getTriggerText(filePath) }), closableTabs && visibleFiles.length > 1 && (jsx(\"span\", { className: classNames(\"close-button\", [closeButtonClassName]), onClick: function (ev) {\n ev.stopPropagation();\n sandpack.closeFile(filePath);\n }, style: {\n visibility: filePath === activeFile || hoveredIndex === index\n ? \"visible\"\n : \"hidden\",\n }, tabIndex: filePath === activeFile ? 0 : -1, children: jsx(CloseIcon, {}) }))] }, filePath)); }) }) })));\n};\n\nvar RoundedButton = function (_a) {\n var onClick = _a.onClick, className = _a.className, children = _a.children;\n var classNames = useClassNames();\n return (jsx(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n className,\n ]), onClick: onClick, type: \"button\", children: children }));\n};\n\nvar runButtonClassName = css({\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n paddingRight: \"$space$3\",\n});\nvar RunButton$1 = function (_a) {\n _a.className; var onClick = _a.onClick, props = __rest(_a, [\"className\", \"onClick\"]);\n var sandpack = useSandpack().sandpack;\n return (jsxs(RoundedButton, __assign({ className: runButtonClassName.toString(), onClick: function (event) {\n sandpack.runSandpack();\n onClick === null || onClick === void 0 ? void 0 : onClick(event);\n } }, props, { children: [jsx(RunIcon, {}), jsx(\"span\", { children: \"Run\" })] })));\n};\n\nvar _a$6;\nvar stackClassName = css((_a$6 = {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n position: \"relative\",\n backgroundColor: \"$colors$surface1\",\n gap: 1\n },\n _a$6[\"&:has(.\".concat(THEME_PREFIX, \"-stack)\")] = {\n backgroundColor: \"$colors$surface2\",\n },\n _a$6));\nvar SandpackStack = function (_a) {\n var className = _a.className, props = __rest(_a, [\"className\"]);\n var classNames = useClassNames();\n return (jsx(\"div\", __assign({ className: classNames(\"stack\", [stackClassName, className]) }, props)));\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackTheme = function () {\n var _a = React.useContext(SandpackThemeContext), theme = _a.theme, id = _a.id, mode = _a.mode;\n return { theme: theme, themeId: id, themeMode: mode };\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar shallowEqual = function (a, b) {\n if (a.length !== b.length)\n return false;\n var result = true;\n for (var index = 0; index < a.length; index++) {\n if (a[index] !== b[index]) {\n result = false;\n break;\n }\n }\n return result;\n};\n\nvar getCodeMirrorPosition = function (doc, _a) {\n var line = _a.line, column = _a.column;\n return doc.line(line).from + (column !== null && column !== void 0 ? column : 0) - 1;\n};\nvar getEditorTheme = function () {\n return EditorView.theme({\n \"&\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface1)\"),\n color: \"var(--\".concat(THEME_PREFIX, \"-syntax-color-plain)\"),\n height: \"100%\",\n },\n \".cm-matchingBracket, .cm-nonmatchingBracket, &.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n color: \"inherit\",\n backgroundColor: \"rgba(128,128,128,.25)\",\n backgroundBlendMode: \"difference\",\n },\n \"&.cm-editor.cm-focused\": {\n outline: \"none\",\n },\n \"& .cm-activeLine\": {\n backgroundColor: \"transparent\",\n },\n \"&.cm-editor.cm-focused .cm-activeLine\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface3)\"),\n borderRadius: \"var(--\".concat(THEME_PREFIX, \"-border-radius)\"),\n },\n \".cm-errorLine\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-errorSurface)\"),\n borderRadius: \"var(--\".concat(THEME_PREFIX, \"-border-radius)\"),\n },\n \".cm-content\": {\n caretColor: \"var(--\".concat(THEME_PREFIX, \"-colors-accent)\"),\n padding: \"0 var(--\".concat(THEME_PREFIX, \"-space-4)\"),\n },\n \".cm-scroller\": {\n fontFamily: \"var(--\".concat(THEME_PREFIX, \"-font-mono)\"),\n lineHeight: \"var(--\".concat(THEME_PREFIX, \"-font-lineHeight)\"),\n },\n \".cm-gutters\": {\n backgroundColor: \"var(--\".concat(THEME_PREFIX, \"-colors-surface1)\"),\n color: \"var(--\".concat(THEME_PREFIX, \"-colors-disabled)\"),\n border: \"none\",\n paddingLeft: \"var(--\".concat(THEME_PREFIX, \"-space-1)\"),\n },\n \".cm-gutter.cm-lineNumbers\": {\n fontSize: \".6em\",\n },\n \".cm-lineNumbers .cm-gutterElement\": {\n lineHeight: \"var(--\".concat(THEME_PREFIX, \"-font-lineHeight)\"),\n minWidth: \"var(--\".concat(THEME_PREFIX, \"-space-5)\"),\n },\n \".cm-content .cm-line\": { paddingLeft: \"var(--\".concat(THEME_PREFIX, \"-space-1)\") },\n \".cm-content.cm-readonly .cm-line\": { paddingLeft: 0 },\n });\n};\nvar classNameToken = function (name) {\n return \"\".concat(THEME_PREFIX, \"-syntax-\").concat(name);\n};\nvar styleTokens = function () {\n var syntaxHighLightTokens = [\n \"string\",\n \"plain\",\n \"comment\",\n \"keyword\",\n \"definition\",\n \"punctuation\",\n \"property\",\n \"tag\",\n \"static\",\n ];\n return syntaxHighLightTokens.reduce(function (acc, token) {\n var _a;\n return __assign(__assign({}, acc), (_a = {}, _a[\".\".concat(classNameToken(token))] = {\n color: \"$syntax$color$\".concat(token),\n fontStyle: \"$syntax$fontStyle$\".concat(token),\n }, _a));\n }, {});\n};\nvar getSyntaxHighlight = function (theme) {\n return HighlightStyle.define([\n { tag: tags.link, textDecoration: \"underline\" },\n { tag: tags.emphasis, fontStyle: \"italic\" },\n { tag: tags.strong, fontWeight: \"bold\" },\n {\n tag: tags.keyword,\n class: classNameToken(\"keyword\"),\n },\n {\n tag: [tags.atom, tags.number, tags.bool],\n class: classNameToken(\"static\"),\n },\n {\n tag: tags.variableName,\n class: classNameToken(\"plain\"),\n },\n {\n // Standard tags, e.g

    \n tag: tags.standard(tags.tagName),\n class: classNameToken(\"tag\"),\n },\n {\n tag: [\n // Highlight function call\n tags.function(tags.variableName),\n // Highlight function definition differently (eg: functional component def in React)\n tags.definition(tags.function(tags.variableName)),\n // \"Custom tags\", meaning React component\n tags.tagName,\n ],\n class: classNameToken(\"definition\"),\n },\n {\n tag: tags.propertyName,\n class: classNameToken(\"property\"),\n },\n {\n tag: [tags.literal, tags.inserted],\n class: classNameToken(theme.syntax.string ? \"string\" : \"static\"),\n },\n {\n tag: tags.punctuation,\n class: classNameToken(\"punctuation\"),\n },\n {\n tag: [tags.comment, tags.quote],\n class: classNameToken(\"comment\"),\n },\n ]);\n};\nvar getLanguageFromFile = function (filePath, fileType, additionalLanguages) {\n if (!filePath && !fileType)\n return \"javascript\";\n var extension = fileType;\n if (!extension && filePath) {\n var extensionDotIndex = filePath.lastIndexOf(\".\");\n extension = filePath.slice(extensionDotIndex + 1);\n }\n for (var _i = 0, additionalLanguages_1 = additionalLanguages; _i < additionalLanguages_1.length; _i++) {\n var additionalLanguage = additionalLanguages_1[_i];\n if (extension === additionalLanguage.name ||\n additionalLanguage.extensions.includes(extension || \"\")) {\n return additionalLanguage.name;\n }\n }\n switch (extension) {\n case \"ts\":\n case \"tsx\":\n return \"typescript\";\n case \"html\":\n case \"svelte\":\n case \"vue\":\n case \"astro\":\n return \"html\";\n case \"css\":\n case \"less\":\n case \"scss\":\n return \"css\";\n case \"js\":\n case \"jsx\":\n case \"json\":\n default:\n return \"javascript\";\n }\n};\nvar getCodeMirrorLanguage = function (extension, additionalLanguages) {\n var options = {\n javascript: javascript({ jsx: true, typescript: false }),\n typescript: javascript({ jsx: true, typescript: true }),\n html: html(),\n css: css$1(),\n };\n for (var _i = 0, additionalLanguages_2 = additionalLanguages; _i < additionalLanguages_2.length; _i++) {\n var additionalLanguage = additionalLanguages_2[_i];\n if (extension === additionalLanguage.name) {\n return additionalLanguage.language;\n }\n }\n return options[extension];\n};\nvar useCombinedRefs = function () {\n var refs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n refs[_i] = arguments[_i];\n }\n return React.useCallback(function (element) {\n return refs.forEach(function (ref) {\n if (!ref) {\n return;\n }\n // Ref can have two types - a function or an object. We treat each case.\n if (typeof ref === \"function\") {\n return ref(element);\n }\n // As per https://github.com/facebook/react/issues/13029\n // it should be fine to set current this way.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref.current = element;\n });\n }, \n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n};\n\nfunction highlightDecorators(positions) {\n return ViewPlugin.fromClass(/** @class */ (function () {\n function class_1(view) {\n this.decorations = this.getDecoration(view);\n }\n class_1.prototype.update = function (update) {\n return;\n };\n class_1.prototype.getDecoration = function (view) {\n if (!positions)\n return Decoration.none;\n var rangesDecorators = positions.map(function (item) {\n var _a, _b, _c;\n var lineDeco = Decoration.line({\n attributes: { class: (_a = item.className) !== null && _a !== void 0 ? _a : \"\" },\n });\n var markDeco = Decoration.mark({\n class: (_b = item.className) !== null && _b !== void 0 ? _b : \"\",\n attributes: (_c = item.elementAttributes) !== null && _c !== void 0 ? _c : undefined,\n });\n var positionLineStart = getCodeMirrorPosition(view.state.doc, {\n line: item.line,\n column: item.startColumn,\n }) + 1;\n if (item.startColumn && item.endColumn) {\n var positionLineEnd = getCodeMirrorPosition(view.state.doc, {\n line: item.line,\n column: item.endColumn,\n }) + 1;\n return markDeco.range(positionLineStart, positionLineEnd);\n }\n return lineDeco.range(positionLineStart);\n });\n return Decoration.set(rangesDecorators);\n };\n return class_1;\n }()), {\n decorations: function (v) { return v.decorations; },\n });\n}\n\nfunction highlightInlineError() {\n return activeLineHighlighter;\n}\nvar lineDeco = Decoration.line({ attributes: { class: \"cm-errorLine\" } });\nvar activeLineHighlighter = ViewPlugin.fromClass(/** @class */ (function () {\n function class_1() {\n this.decorations = Decoration.none;\n }\n class_1.prototype.update = function (update) {\n var _this = this;\n update.transactions.forEach(function (trans) {\n // @ts-ignore\n var errorValue = trans.annotation(\"show-error\");\n if (errorValue !== undefined) {\n var position = getCodeMirrorPosition(update.view.state.doc, {\n line: errorValue,\n }) + 1;\n _this.decorations = Decoration.set([lineDeco.range(position)]);\n // @ts-ignore\n }\n else if (trans.annotation(\"remove-errors\")) {\n _this.decorations = Decoration.none;\n }\n });\n };\n return class_1;\n}()), {\n decorations: function (v) { return v.decorations; },\n});\n\nvar _a$5, _b$1;\nvar placeholderClassName = css({\n margin: \"0\",\n display: \"block\",\n fontFamily: \"$font$mono\",\n fontSize: \"$font$size\",\n color: \"$syntax$color$plain\",\n lineHeight: \"$font$lineHeight\",\n});\nvar tokensClassName = css(styleTokens());\nvar editorClassName = css((_a$5 = {\n flex: 1,\n position: \"relative\",\n overflow: \"auto\",\n background: \"$colors$surface1\",\n \".cm-scroller\": {\n padding: \"$space$4 0\",\n }\n },\n _a$5[\".\".concat(placeholderClassName)] = {\n padding: \"$space$4 0\",\n },\n /**\n * For iOS: prevent browser zoom when clicking on sandbox.\n * Does NOT apply to code blocks.\n */\n _a$5[\"@media screen and (max-width: 768px)\"] = {\n \"@supports (-webkit-overflow-scrolling: touch)\": {\n \".cm-content\": { fontSize: \"16px\" },\n },\n },\n _a$5));\nvar cmClassName = css({\n margin: \"0\",\n outline: \"none\",\n height: \"100%\",\n});\nvar readOnlyClassName = css((_b$1 = {\n fontFamily: \"$font$mono\",\n fontSize: \"0.8em\",\n position: \"absolute\",\n right: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n backgroundColor: \"$colors$surface2\",\n borderRadius: \"99999px\",\n padding: \"calc($space$1 / 2) $space$2\"\n },\n _b$1[\"& + .\".concat(buttonClassName)] = {\n right: \"calc($space$11 * 2)\",\n },\n _b$1));\n\nvar useSyntaxHighlight = function (_a) {\n var langSupport = _a.langSupport, highlightTheme = _a.highlightTheme, _b = _a.code, code = _b === void 0 ? \"\" : _b;\n var tree = langSupport.language.parser.parse(code);\n var offSet = 0;\n var codeElementsRender = [];\n var addElement = function (to, className) {\n if (to > offSet) {\n var children = code.slice(offSet, to);\n codeElementsRender.push(className\n ? createElement(\"span\", {\n children: children,\n className: className,\n key: \"\".concat(to).concat(offSet),\n })\n : children);\n offSet = to;\n }\n };\n highlightTree(tree, highlightTheme, function (from, to, className) {\n addElement(from, \"\");\n addElement(to, className);\n });\n /**\n * The language parse doesn't look consistent.\n * The final syntax highlight used by CodeMirror\n * includes an end empty line, and the parse here doesn't,\n * so let's add it manually.\n */\n if (offSet < code.length && (code === null || code === void 0 ? void 0 : code.includes(\"\\n\"))) {\n codeElementsRender.push(\"\\n\\n\");\n }\n return codeElementsRender;\n};\n\nvar CodeMirror = React.forwardRef(function (_a, ref) {\n var _b = _a.code, code = _b === void 0 ? \"\" : _b, filePath = _a.filePath, fileType = _a.fileType, onCodeUpdate = _a.onCodeUpdate, _c = _a.showLineNumbers, showLineNumbers = _c === void 0 ? false : _c, _d = _a.showInlineErrors, showInlineErrors = _d === void 0 ? false : _d, _e = _a.wrapContent, wrapContent = _e === void 0 ? false : _e, _f = _a.editorState, editorState = _f === void 0 ? \"pristine\" : _f, _g = _a.readOnly, readOnly = _g === void 0 ? false : _g, _h = _a.showReadOnly, showReadOnly = _h === void 0 ? true : _h, decorators = _a.decorators, _j = _a.initMode, initMode = _j === void 0 ? \"lazy\" : _j, _k = _a.extensions, extensions = _k === void 0 ? [] : _k, _l = _a.extensionsKeymap, extensionsKeymap = _l === void 0 ? [] : _l, _m = _a.additionalLanguages, additionalLanguages = _m === void 0 ? [] : _m;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var wrapper = React.useRef(null);\n var combinedRef = useCombinedRefs(wrapper, ref);\n var cmView = React.useRef();\n var _o = useSandpackTheme(), theme = _o.theme, themeId = _o.themeId;\n var _p = React.useState(code), internalCode = _p[0], setInternalCode = _p[1];\n var _q = React.useState(initMode === \"immediate\"), shouldInitEditor = _q[0], setShouldInitEditor = _q[1];\n var classNames = useClassNames();\n var _r = useSandpack(), listen = _r.listen, autoReload = _r.sandpack.autoReload;\n var prevExtension = React.useRef([]);\n var prevExtensionKeymap = React.useRef([]);\n var isIntersecting = useIntersectionObserver(wrapper, {\n rootMargin: \"600px 0px\",\n threshold: 0.2,\n }).isIntersecting;\n React.useImperativeHandle(ref, function () { return ({\n getCodemirror: function () { return cmView.current; },\n }); });\n React.useEffect(function () {\n var mode = initMode === \"lazy\" || initMode === \"user-visible\";\n if (mode && isIntersecting) {\n setShouldInitEditor(true);\n }\n }, [initMode, isIntersecting]);\n var languageExtension = getLanguageFromFile(filePath, fileType, additionalLanguages);\n var langSupport = getCodeMirrorLanguage(languageExtension, additionalLanguages);\n var highlightTheme = getSyntaxHighlight(theme);\n var syntaxHighlightRender = useSyntaxHighlight({\n langSupport: langSupport,\n highlightTheme: highlightTheme,\n code: code,\n });\n // decorators need to be sorted by `line`, otherwise it will throw error\n // see https://github.com/codesandbox/sandpack/issues/383\n var sortedDecorators = React.useMemo(function () {\n return decorators\n ? decorators.sort(function (d1, d2) { return d1.line - d2.line; })\n : decorators;\n }, [decorators]);\n var useStaticReadOnly = readOnly && ((decorators === null || decorators === void 0 ? void 0 : decorators.length) === 0 || decorators === undefined);\n React.useEffect(function () {\n if (!wrapper.current || !shouldInitEditor || useStaticReadOnly) {\n return;\n }\n var parentDiv = wrapper.current;\n var existingPlaceholder = parentDiv.querySelector(\".sp-pre-placeholder\");\n if (existingPlaceholder) {\n parentDiv.removeChild(existingPlaceholder);\n }\n var view = new EditorView({\n doc: code,\n extensions: [],\n parent: parentDiv,\n });\n view.contentDOM.setAttribute(\"data-gramm\", \"false\");\n view.contentDOM.setAttribute(\"data-lt-active\", \"false\");\n view.contentDOM.setAttribute(\"aria-label\", filePath ? \"Code Editor for \".concat(getFileName(filePath)) : \"Code Editor\");\n view.contentDOM.setAttribute(\"tabIndex\", \"-1\");\n cmView.current = view;\n return function () {\n var _a;\n (_a = cmView.current) === null || _a === void 0 ? void 0 : _a.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldInitEditor, readOnly, useStaticReadOnly]);\n React.useEffect(function () {\n if (useStaticReadOnly) {\n return;\n }\n if (cmView.current) {\n var customCommandsKeymap = [\n {\n key: \"Tab\",\n run: function (view) {\n var _a, _b;\n indentMore(view);\n var customKey = extensionsKeymap.find(function (_a) {\n var key = _a.key;\n return key === \"Tab\";\n });\n return (_b = (_a = customKey === null || customKey === void 0 ? void 0 : customKey.run) === null || _a === void 0 ? void 0 : _a.call(customKey, view)) !== null && _b !== void 0 ? _b : true;\n },\n },\n {\n key: \"Shift-Tab\",\n run: function (view) {\n var _a, _b;\n indentLess({ state: view.state, dispatch: view.dispatch });\n var customKey = extensionsKeymap.find(function (_a) {\n var key = _a.key;\n return key === \"Shift-Tab\";\n });\n return (_b = (_a = customKey === null || customKey === void 0 ? void 0 : customKey.run) === null || _a === void 0 ? void 0 : _a.call(customKey, view)) !== null && _b !== void 0 ? _b : true;\n },\n },\n {\n key: \"Escape\",\n run: function () {\n if (readOnly)\n return true;\n if (wrapper.current) {\n wrapper.current.focus();\n }\n return true;\n },\n },\n {\n key: \"mod-Backspace\",\n run: deleteGroupBackward,\n },\n ];\n var extensionList = __spreadArray(__spreadArray([\n highlightSpecialChars(),\n history(),\n closeBrackets()\n ], extensions, true), [\n keymap.of(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], closeBracketsKeymap, true), defaultKeymap, true), historyKeymap, true), customCommandsKeymap, true), extensionsKeymap, true)),\n langSupport,\n getEditorTheme(),\n syntaxHighlighting(highlightTheme),\n EditorView.updateListener.of(function (update) {\n if (update.docChanged) {\n var newCode = update.state.doc.toString();\n setInternalCode(newCode);\n onCodeUpdate === null || onCodeUpdate === void 0 ? void 0 : onCodeUpdate(newCode);\n }\n }),\n ], false);\n if (readOnly) {\n extensionList.push(EditorState.readOnly.of(true));\n extensionList.push(EditorView.editable.of(false));\n }\n else {\n extensionList.push(bracketMatching());\n extensionList.push(highlightActiveLine());\n }\n if (sortedDecorators) {\n extensionList.push(highlightDecorators(sortedDecorators));\n }\n if (wrapContent) {\n extensionList.push(EditorView.lineWrapping);\n }\n if (showLineNumbers) {\n extensionList.push(lineNumbers());\n }\n if (showInlineErrors) {\n extensionList.push(highlightInlineError());\n }\n // Add new hightlight decorators\n cmView.current.dispatch({\n effects: StateEffect.reconfigure.of(extensionList),\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shouldInitEditor,\n sortedDecorators,\n showLineNumbers,\n wrapContent,\n themeId,\n readOnly,\n useStaticReadOnly,\n autoReload,\n ]);\n React.useEffect(function applyExtensions() {\n var view = cmView.current;\n var dependenciesAreDiff = !shallowEqual(extensions, prevExtension.current) ||\n !shallowEqual(extensionsKeymap, prevExtensionKeymap.current);\n if (view && dependenciesAreDiff) {\n view.dispatch({\n effects: StateEffect.appendConfig.of(extensions),\n });\n view.dispatch({\n effects: StateEffect.appendConfig.of(keymap.of(__spreadArray([], extensionsKeymap, true))),\n });\n prevExtension.current = extensions;\n prevExtensionKeymap.current = extensionsKeymap;\n }\n }, [extensions, extensionsKeymap]);\n React.useEffect(function () {\n // When the user clicks on a tab button on a larger screen\n // Avoid autofocus on mobile as it leads to a bad experience and an unexpected layout shift\n if (cmView.current &&\n editorState === \"dirty\" &&\n window.matchMedia(\"(min-width: 768px)\").matches) {\n cmView.current.contentDOM.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Update editor when code passed as prop from outside sandpack changes\n React.useEffect(function () {\n if (cmView.current && typeof code === \"string\" && code !== internalCode) {\n var view = cmView.current;\n var selection = view.state.selection.ranges.some(function (_a) {\n var to = _a.to, from = _a.from;\n return to > code.length || from > code.length;\n })\n ? EditorSelection.cursor(code.length)\n : view.state.selection;\n var changes = { from: 0, to: view.state.doc.length, insert: code };\n view.dispatch({ changes: changes, selection: selection });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code]);\n React.useEffect(function messageToInlineError() {\n if (!showInlineErrors)\n return;\n var unsubscribe = listen(function (message) {\n var view = cmView.current;\n if (message.type === \"success\") {\n view === null || view === void 0 ? void 0 : view.dispatch({\n // @ts-ignore\n annotations: [new Annotation(\"remove-errors\", true)],\n });\n }\n else if (message.type === \"action\" &&\n message.action === \"show-error\" &&\n message.path === filePath &&\n message.line) {\n view === null || view === void 0 ? void 0 : view.dispatch({\n // @ts-ignore\n annotations: [new Annotation(\"show-error\", message.line)],\n });\n }\n });\n return function () { return unsubscribe(); };\n }, [listen, showInlineErrors]);\n var handleContainerKeyDown = function (evt) {\n if (evt.key === \"Enter\" && cmView.current) {\n evt.preventDefault();\n cmView.current.contentDOM.focus();\n }\n };\n var gutterLineOffset = function () {\n // padding-left\n var offset = 4;\n if (showLineNumbers) {\n // line-number-gutter-width + gutter-padding\n offset += 6;\n }\n // line-padding\n if (!readOnly) {\n offset += 1;\n }\n return \"var(--\".concat(THEME_PREFIX, \"-space-\").concat(offset, \")\");\n };\n if (useStaticReadOnly) {\n return (jsxs(Fragment, { children: [jsx(\"pre\", { ref: combinedRef, className: classNames(\"cm\", [\n classNames(editorState),\n classNames(languageExtension),\n cmClassName,\n tokensClassName,\n ]), translate: \"no\", children: jsx(\"code\", { className: classNames(\"pre-placeholder\", [placeholderClassName]), style: { marginLeft: gutterLineOffset() }, children: syntaxHighlightRender }) }), readOnly && showReadOnly && (jsx(\"span\", __assign({ className: classNames(\"read-only\", [readOnlyClassName]) }, ({}), { children: \"Read-only\" })))] }));\n }\n return (jsx(\"div\", { ref: combinedRef, \"aria-autocomplete\": \"list\", \"aria-label\": filePath ? \"Code Editor for \".concat(getFileName(filePath)) : \"Code Editor\", \"aria-multiline\": \"true\", className: classNames(\"cm\", [\n classNames(editorState),\n classNames(languageExtension),\n cmClassName,\n tokensClassName,\n ]), onKeyDown: handleContainerKeyDown, role: \"textbox\", tabIndex: 0, translate: \"no\", suppressHydrationWarning: true, children: jsx(\"pre\", { className: classNames(\"pre-placeholder\", [placeholderClassName]), style: { marginLeft: gutterLineOffset() }, children: syntaxHighlightRender }) }));\n});\n\nvar SandpackCodeEditor = forwardRef(function (_a, ref) {\n var showTabs = _a.showTabs, _b = _a.showLineNumbers, showLineNumbers = _b === void 0 ? false : _b, _c = _a.showInlineErrors, showInlineErrors = _c === void 0 ? false : _c, _d = _a.showRunButton, showRunButton = _d === void 0 ? true : _d, _e = _a.wrapContent, wrapContent = _e === void 0 ? false : _e, _f = _a.closableTabs, closableTabs = _f === void 0 ? false : _f, initMode = _a.initMode, extensions = _a.extensions, extensionsKeymap = _a.extensionsKeymap, readOnly = _a.readOnly, showReadOnly = _a.showReadOnly, additionalLanguages = _a.additionalLanguages, className = _a.className, props = __rest(_a, [\"showTabs\", \"showLineNumbers\", \"showInlineErrors\", \"showRunButton\", \"wrapContent\", \"closableTabs\", \"initMode\", \"extensions\", \"extensionsKeymap\", \"readOnly\", \"showReadOnly\", \"additionalLanguages\", \"className\"]);\n var sandpack = useSandpack().sandpack;\n var _g = useActiveCode(), code = _g.code, updateCode = _g.updateCode, readOnlyFile = _g.readOnly;\n var activeFile = sandpack.activeFile, status = sandpack.status, editorState = sandpack.editorState;\n var shouldShowTabs = showTabs !== null && showTabs !== void 0 ? showTabs : sandpack.visibleFiles.length > 1;\n var classNames = useClassNames();\n var handleCodeUpdate = function (newCode, shouldUpdatePreview) {\n if (shouldUpdatePreview === void 0) { shouldUpdatePreview = true; }\n updateCode(newCode, shouldUpdatePreview);\n };\n var activeFileUniqueId = useSandpackId();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"editor\", [className]) }, props, { children: [shouldShowTabs && (jsx(FileTabs, { activeFileUniqueId: activeFileUniqueId, closableTabs: closableTabs })), jsxs(\"div\", { \"aria-labelledby\": \"\".concat(activeFile, \"-\").concat(activeFileUniqueId, \"-tab\"), className: classNames(\"code-editor\", [editorClassName]), id: \"\".concat(activeFile, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), role: \"tabpanel\", children: [jsx(CodeMirror, { ref: ref, additionalLanguages: additionalLanguages, code: code, editorState: editorState, extensions: extensions, extensionsKeymap: extensionsKeymap, filePath: activeFile, initMode: initMode || sandpack.initMode, onCodeUpdate: function (newCode) { var _a; return handleCodeUpdate(newCode, (_a = sandpack.autoReload) !== null && _a !== void 0 ? _a : true); }, readOnly: readOnly || readOnlyFile, showInlineErrors: showInlineErrors, showLineNumbers: showLineNumbers, showReadOnly: showReadOnly, wrapContent: wrapContent }, activeFile), showRunButton && (!sandpack.autoReload || status === \"idle\") ? (jsx(RunButton$1, {})) : null] })] })));\n});\n\nvar SandpackCodeViewer = React.forwardRef(function (_a, ref) {\n var showTabs = _a.showTabs, showLineNumbers = _a.showLineNumbers, decorators = _a.decorators, propCode = _a.code, initMode = _a.initMode, wrapContent = _a.wrapContent, additionalLanguages = _a.additionalLanguages, props = __rest(_a, [\"showTabs\", \"showLineNumbers\", \"decorators\", \"code\", \"initMode\", \"wrapContent\", \"additionalLanguages\"]);\n var sandpack = useSandpack().sandpack;\n var code = useActiveCode().code;\n var classNames = useClassNames();\n var shouldShowTabs = showTabs !== null && showTabs !== void 0 ? showTabs : sandpack.visibleFiles.length > 1;\n var activeFileUniqueId = useSandpackId();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"editor-viewer\") }, props, { children: [shouldShowTabs ? (jsx(FileTabs, { activeFileUniqueId: activeFileUniqueId })) : null, jsx(\"div\", { \"aria-labelledby\": \"\".concat(sandpack.activeFile, \"-\").concat(activeFileUniqueId, \"-tab\"), className: classNames(\"code-editor\", [editorClassName]), id: \"\".concat(sandpack.activeFile, \"-\").concat(activeFileUniqueId, \"-tab-panel\"), role: \"tabpanel\", children: jsx(CodeMirror, { ref: ref, additionalLanguages: additionalLanguages, code: propCode !== null && propCode !== void 0 ? propCode : code, decorators: decorators, filePath: sandpack.activeFile, initMode: initMode || sandpack.initMode, showLineNumbers: showLineNumbers, showReadOnly: false, wrapContent: wrapContent, readOnly: true }) }), sandpack.status === \"idle\" ? jsx(RunButton$1, {}) : null] })));\n});\n\nvar _a$4, _b;\nvar layoutClassName = css((_a$4 = {\n border: \"1px solid $colors$surface2\",\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"stretch\",\n borderRadius: \"$border$radius\",\n overflow: \"hidden\",\n position: \"relative\",\n backgroundColor: \"$colors$surface2\",\n gap: 1\n },\n _a$4[\"> .\".concat(stackClassName)] = {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0\",\n height: \"$layout$height\",\n overflow: \"hidden\",\n \"@media print\": {\n height: \"auto\",\n display: \"block\",\n },\n \"@media screen and (max-width: 768px)\": (_b = {},\n _b[\"&:not(.\".concat(THEME_PREFIX, \"-preview, .\").concat(THEME_PREFIX, \"-editor, .\").concat(THEME_PREFIX, \"-preset-column)\")] = {\n height: \"calc($layout$height / 2)\",\n },\n /* triggers the layout break at the 768px breakpoint, not when the component is less then 700px */\n _b.minWidth = \"100%;\",\n _b),\n },\n _a$4[\"> .\".concat(THEME_PREFIX, \"-file-explorer\")] = {\n flex: 0.2,\n minWidth: 200,\n \"@media screen and (max-width: 768px)\": {\n flex: 1,\n },\n },\n _a$4));\nvar SandpackLayout = React.forwardRef(function (_a, ref) {\n var children = _a.children, className = _a.className, props = __rest(_a, [\"children\", \"className\"]);\n var sandpack = useSandpack().sandpack;\n var classNames = useClassNames();\n var combinedRef = useCombinedRefs(sandpack.lazyAnchorRef, ref);\n return (jsx(\"div\", __assign({ ref: combinedRef, className: classNames(\"layout\", [layoutClassName, className]) }, props, { children: children })));\n});\n\n/**\n * @category Hooks\n */\nvar useErrorMessage = function () {\n var _a;\n var sandpack = useSandpack().sandpack;\n var error = sandpack.error;\n return (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : null;\n};\n\nvar FADE_ANIMATION_DURATION = 200;\n/**\n * @category Hooks\n */\nvar useLoadingOverlayState = function (clientId, externalLoading) {\n var _a = useSandpack(), sandpack = _a.sandpack, listen = _a.listen;\n var _b = React.useState(\"LOADING\"), state = _b[0], setState = _b[1];\n /**\n * Sandpack listener\n */\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\" && message.firstLoad === true) {\n setState(\"LOADING\");\n }\n if (message.type === \"done\") {\n setState(function (prev) {\n return prev === \"LOADING\" ? \"PRE_FADING\" : \"HIDDEN\";\n });\n }\n }, clientId);\n return function () {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clientId, sandpack.status === \"idle\"]);\n /**\n * Fading transient state\n */\n React.useEffect(function () {\n var fadeTimeout;\n if (state === \"PRE_FADING\" && !externalLoading) {\n setState(\"FADING\");\n }\n else if (state === \"FADING\") {\n fadeTimeout = setTimeout(function () { return setState(\"HIDDEN\"); }, FADE_ANIMATION_DURATION);\n }\n return function () {\n clearTimeout(fadeTimeout);\n };\n }, [state, externalLoading]);\n if (sandpack.status === \"timeout\") {\n return \"TIMEOUT\";\n }\n if (sandpack.status !== \"running\") {\n return \"HIDDEN\";\n }\n return state;\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackNavigation = function (clientId) {\n var dispatch = useSandpack().dispatch;\n return {\n refresh: function () { return dispatch({ type: \"refresh\" }, clientId); },\n back: function () { return dispatch({ type: \"urlback\" }, clientId); },\n forward: function () { return dispatch({ type: \"urlforward\" }, clientId); },\n };\n};\n\nfunction getTranspiledCode(sandpack) {\n var _a, _b;\n var activeFile = sandpack.activeFile, bundlerState = sandpack.bundlerState;\n if (bundlerState == null) {\n return null;\n }\n var tModule = bundlerState.transpiledModules[activeFile + \":\"];\n return (_b = (_a = tModule === null || tModule === void 0 ? void 0 : tModule.source) === null || _a === void 0 ? void 0 : _a.compiledCode) !== null && _b !== void 0 ? _b : null;\n}\n/**\n * @category Hooks\n */\nvar useTranspiledCode = function () {\n var sandpack = useSandpack().sandpack;\n if (sandpack.status !== \"running\") {\n return null;\n }\n return getTranspiledCode(sandpack);\n};\n\n/**\n * It registers a new sandpack client and returns its instance,\n * listeners, and dispatch function. Using it when creating a custom\n * component to interact directly with the client is recommended.\n * For other cases, use `useSandpack` instead.\n *\n * @category Hooks\n */\nvar useSandpackClient = function (clientPropsOverride) {\n var _a = useSandpack(), sandpack = _a.sandpack, listen = _a.listen, dispatch = _a.dispatch;\n var iframeRef = React.useRef(null);\n var clientId = React.useRef(generateRandomId());\n React.useEffect(function () {\n var iframeElement = iframeRef.current;\n var clientIdValue = clientId.current;\n if (iframeElement !== null) {\n sandpack.registerBundler(iframeElement, clientIdValue, clientPropsOverride);\n }\n return function () { return sandpack.unregisterBundler(clientIdValue); };\n }, []);\n var getClient = function () {\n return sandpack.clients[clientId.current] || null;\n };\n return {\n sandpack: sandpack,\n getClient: getClient,\n clientId: clientId.current,\n iframe: iframeRef,\n listen: function (listener) {\n return listen(listener, clientId.current);\n },\n dispatch: function (message) { return dispatch(message, clientId.current); },\n };\n};\n\n/**\n * @category Hooks\n */\nvar useSandpackShell = function (clientId) {\n var dispatch = useSandpack().dispatch;\n return {\n restart: function () { return dispatch({ type: \"shell/restart\" }, clientId); },\n openPreview: function () { return dispatch({ type: \"shell/openPreview\" }, clientId); },\n };\n};\n\nvar mapProgressMessage = function (originalMessage, firstTotalPending) {\n var _a;\n switch (originalMessage.state) {\n case \"downloading_manifest\":\n return \"[1/3] Downloading manifest\";\n case \"downloaded_module\":\n return \"[2/3] Downloaded \".concat(originalMessage.name, \" (\").concat(firstTotalPending - originalMessage.totalPending, \"/\").concat(firstTotalPending, \")\");\n case \"starting_command\":\n return \"[3/3] Starting command\";\n case \"command_running\":\n return \"[3/3] Running \\\"\".concat((_a = originalMessage.command) === null || _a === void 0 ? void 0 : _a.trim(), \"\\\"\");\n }\n};\nvar useSandpackPreviewProgress = function (props) {\n var _a = React.useState(false), isReady = _a[0], setIsReady = _a[1];\n var _b = React.useState(), totalDependencies = _b[0], setTotalDependencies = _b[1];\n var _c = React.useState(null), loadingMessage = _c[0], setLoadingMessage = _c[1];\n var timeout = props === null || props === void 0 ? void 0 : props.timeout;\n var clientId = props === null || props === void 0 ? void 0 : props.clientId;\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var timer;\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\" && message.firstLoad) {\n setIsReady(false);\n }\n if (timeout) {\n timer = setTimeout(function () {\n setLoadingMessage(null);\n }, timeout);\n }\n if (message.type === \"dependencies\") {\n setLoadingMessage(function () {\n switch (message.data.state) {\n case \"downloading_manifest\":\n return \"[1/3] Downloading manifest\";\n case \"downloaded_module\":\n return \"[2/3] Downloaded \".concat(message.data.name, \" (\").concat(message.data.progress, \"/\").concat(message.data.total, \")\");\n case \"starting\":\n return \"[3/3] Starting\";\n }\n return null;\n });\n }\n else if (message.type === \"shell/progress\" && !isReady) {\n if (!totalDependencies && message.data.state === \"downloaded_module\") {\n setTotalDependencies(message.data.totalPending);\n }\n if (totalDependencies !== undefined) {\n setLoadingMessage(mapProgressMessage(message.data, totalDependencies));\n }\n }\n if (message.type === \"done\" && message.compilatonError === false) {\n setLoadingMessage(null);\n setIsReady(true);\n clearTimeout(timer);\n }\n }, clientId);\n return function () {\n if (timer) {\n clearTimeout(timer);\n }\n unsubscribe();\n };\n }, [clientId, isReady, totalDependencies, timeout]);\n return loadingMessage;\n};\n\nvar MAX_MESSAGE_COUNT$1 = 400 * 2;\nvar useSandpackShellStdout = function (_a) {\n var clientId = _a.clientId, _b = _a.maxMessageCount, maxMessageCount = _b === void 0 ? MAX_MESSAGE_COUNT$1 : _b; _a.resetOnPreviewRestart;\n var _d = React.useState([]), logs = _d[0], setLogs = _d[1];\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"start\") {\n setLogs([]);\n }\n else if (message.type === \"stdout\" &&\n message.payload.data &&\n Boolean(message.payload.data.trim())) {\n setLogs(function (prev) {\n var messages = __spreadArray(__spreadArray([], prev, true), [\n { data: message.payload.data, id: generateRandomId() },\n ], false);\n while (messages.length > maxMessageCount) {\n messages.shift();\n }\n return messages;\n });\n }\n }, clientId);\n return unsubscribe;\n }, [maxMessageCount, clientId]);\n return { logs: logs, reset: function () { return setLogs([]); } };\n};\n\nvar mapBundlerErrors = function (originalMessage) {\n var errorMessage = originalMessage.replace(\"[sandpack-client]: \", \"\");\n if (/process.exit/.test(errorMessage)) {\n var exitCode = errorMessage.match(/process.exit\\((\\d+)\\)/);\n if (!exitCode)\n return errorMessage;\n // Crash\n if (Number(exitCode[1]) === 0) {\n return \"Server is not running, would you like to start it again?\";\n }\n return \"Server has crashed with status code \".concat(exitCode[1], \", would you like to restart the server?\");\n }\n return errorMessage;\n};\nvar ErrorOverlay = function (props) {\n var children = props.children, className = props.className, otherProps = __rest(props, [\"children\", \"className\"]);\n var errorMessage = useErrorMessage();\n var restart = useSandpackShell().restart;\n var classNames = useClassNames();\n var _a = useSandpack().sandpack, runSandpack = _a.runSandpack, teamId = _a.teamId;\n var dispatch = useSandpack().dispatch;\n if (!errorMessage && !children) {\n return null;\n }\n var isSandpackBundlerError = errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.startsWith(\"[sandpack-client]\");\n var privateDependencyError = errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.includes(\"NPM_REGISTRY_UNAUTHENTICATED_REQUEST\");\n var onSignIn = function () {\n if (teamId) {\n dispatch({ type: \"sign-in\", teamId: teamId });\n }\n };\n if (privateDependencyError) {\n return (jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorBundlerClassName,\n className,\n ]) }, props, { children: [jsx(\"p\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsx(\"strong\", { children: \"Unable to fetch required dependency.\" }) }), jsx(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsxs(\"p\", { children: [\"Authentication required. Please sign in to your account (make sure to allow pop-ups to this page) and try again. If the issue persists, contact\", \" \", jsx(\"a\", { href: \"mailto:hello@codesandbox.io?subject=Sandpack Timeout Error\", children: \"support\" }), \" \", \"for further assistance.\"] }) }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: onSignIn, children: [jsx(SignInIcon, {}), jsx(\"span\", { children: \"Sign in\" })] }) })] })));\n }\n if (isSandpackBundlerError && errorMessage) {\n return (jsx(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorBundlerClassName,\n className,\n ]) }, otherProps, { children: jsxs(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: [jsx(\"p\", { className: classNames(\"error-title\", [css({ fontWeight: \"bold\" })]), children: \"Couldn't connect to server\" }), jsx(\"p\", { children: mapBundlerErrors(errorMessage) }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: function () {\n restart();\n runSandpack();\n }, title: \"Restart script\", type: \"button\", children: [jsx(RestartIcon, {}), \" \", jsx(\"span\", { children: \"Restart\" })] }) })] }) })));\n }\n return (jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorClassName({ solidBg: true }),\n className,\n ]), translate: \"no\" }, otherProps, { children: [jsx(\"p\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsx(\"strong\", { children: \"Something went wrong\" }) }), jsx(\"p\", { className: classNames(\"error-message\", [\n errorMessageClassName({ errorCode: true }),\n ]), children: errorMessage || children })] })));\n};\n\n/**\n * Stole from https://github.com/nteract/ansi-to-react/blob/master/src/index.ts\n */\n/**\n * Converts ANSI strings into JSON output.\n * @name ansiToJSON\n * @function\n * @param {String} input The input string.\n * @param {boolean} use_classes If `true`, HTML classes will be appended\n * to the HTML output.\n * @return {Array} The parsed input.\n */\nfunction ansiToJSON(input, use_classes) {\n if (use_classes === void 0) { use_classes = false; }\n input = escapeCarriageReturn(fixBackspace(input));\n return Anser.ansiToJson(input, {\n json: true,\n remove_empty: true,\n use_classes: use_classes,\n });\n}\n/**\n * Create a class string.\n * @name createClass\n * @function\n * @param {AnserJsonEntry} bundle\n * @return {String} class name(s)\n */\nfunction createClass(bundle) {\n var classNames = \"\";\n if (bundle.bg) {\n classNames += \"\".concat(bundle.bg, \"-bg \");\n }\n if (bundle.fg) {\n classNames += \"\".concat(bundle.fg, \"-fg \");\n }\n if (bundle.decoration) {\n classNames += \"ansi-\".concat(bundle.decoration, \" \");\n }\n if (classNames === \"\") {\n return null;\n }\n classNames = classNames.substring(0, classNames.length - 1);\n return classNames;\n}\n/**\n * Create the style attribute.\n * @name createStyle\n * @function\n * @param {AnserJsonEntry} bundle\n * @return {Object} returns the style object\n */\nfunction createStyle(bundle) {\n var style = {};\n if (bundle.bg) {\n style.backgroundColor = \"rgb(\".concat(bundle.bg, \")\");\n }\n if (bundle.fg) {\n style.color = \"rgb(\".concat(bundle.fg, \")\");\n }\n switch (bundle.decoration) {\n case \"bold\":\n style.fontWeight = \"bold\";\n break;\n case \"dim\":\n style.opacity = \"0.5\";\n break;\n case \"italic\":\n style.fontStyle = \"italic\";\n break;\n case \"hidden\":\n style.visibility = \"hidden\";\n break;\n case \"strikethrough\":\n style.textDecoration = \"line-through\";\n break;\n case \"underline\":\n style.textDecoration = \"underline\";\n break;\n case \"blink\":\n style.textDecoration = \"blink\";\n break;\n }\n return style;\n}\n/**\n * Converts an Anser bundle into a React Node.\n * @param linkify whether links should be converting into clickable anchor tags.\n * @param useClasses should render the span with a class instead of style.\n * @param bundle Anser output.\n * @param key\n */\nfunction convertBundleIntoReact(linkify, useClasses, bundle, key) {\n var style = useClasses ? null : createStyle(bundle);\n var className = useClasses ? createClass(bundle) : null;\n if (!linkify) {\n return React.createElement(\"span\", { style: style, key: key, className: className }, bundle.content);\n }\n var content = [];\n var linkRegex = /(\\s|^)(https?:\\/\\/(?:www\\.|(?!www))[^\\s.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/g;\n var index = 0;\n var match;\n while ((match = linkRegex.exec(bundle.content)) !== null) {\n var pre = match[1], url = match[2];\n var startIndex = match.index + pre.length;\n if (startIndex > index) {\n content.push(bundle.content.substring(index, startIndex));\n }\n // Make sure the href we generate from the link is fully qualified. We assume http\n // if it starts with a www because many sites don't support https\n var href = url.startsWith(\"www.\") ? \"http://\".concat(url) : url;\n content.push(React.createElement(\"a\", {\n key: index,\n href: href,\n target: \"_blank\",\n }, \"\".concat(url)));\n index = linkRegex.lastIndex;\n }\n if (index < bundle.content.length) {\n content.push(bundle.content.substring(index));\n }\n return React.createElement(\"span\", { style: style, key: key, className: className }, content);\n}\nfunction Ansi(props) {\n var className = props.className, useClasses = props.useClasses, children = props.children, linkify = props.linkify;\n return React.createElement(\"code\", { className: className }, ansiToJSON(children !== null && children !== void 0 ? children : \"\", useClasses !== null && useClasses !== void 0 ? useClasses : false).map(convertBundleIntoReact.bind(null, linkify !== null && linkify !== void 0 ? linkify : false, useClasses !== null && useClasses !== void 0 ? useClasses : false)));\n}\n// This is copied from the Jupyter Classic source code\n// notebook/static/base/js/utils.js to handle \\b in a way\n// that is **compatible with Jupyter classic**. One can\n// argue that this behavior is questionable:\n// https://stackoverflow.com/questions/55440152/multiple-b-doesnt-work-as-expected-in-jupyter#\nfunction fixBackspace(txt) {\n var tmp = txt;\n do {\n txt = tmp;\n // Cancel out anything-but-newline followed by backspace\n // eslint-disable-next-line no-control-regex\n tmp = txt.replace(/[^\\n]\\x08/gm, \"\");\n } while (tmp.length < txt.length);\n return txt;\n}\n\nvar StdoutList = function (_a) {\n var data = _a.data;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: data.map(function (_a) {\n var data = _a.data, id = _a.id;\n return (jsx(\"div\", { className: classNames(\"console-item\", [consoleItemClassName$1]), children: jsx(Ansi, { children: data }) }, id));\n }) }));\n};\nvar consoleItemClassName$1 = css({\n width: \"100%\",\n padding: \"$space$3 $space$2\",\n fontSize: \".85em\",\n position: \"relative\",\n whiteSpace: \"pre\",\n \"&:not(:first-child):after\": {\n content: \"\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n height: 1,\n background: \"$colors$surface3\",\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar getParameters = function (parameters) {\n return LZString.compressToBase64(JSON.stringify(parameters))\n .replace(/\\+/g, \"-\") // Convert '+' to '-'\n .replace(/\\//g, \"_\") // Convert '/' to '_'\n .replace(/=+$/, \"\");\n}; /* Remove ending '='*/\nvar CSB_URL = \"https://codesandbox.io/api/v1/sandboxes/define\";\nvar getFileParameters = function (files, environment) {\n var normalizedFiles = Object.keys(files).reduce(function (prev, next) {\n var _a;\n var fileName = next.replace(\"/\", \"\");\n var value = {\n content: files[next].code,\n isBinary: false,\n };\n return __assign(__assign({}, prev), (_a = {}, _a[fileName] = value, _a));\n }, {});\n return getParameters(__assign({ files: normalizedFiles }, (environment ? { template: environment } : null)));\n};\nvar UnstyledOpenInCodeSandboxButton = function (props) {\n var sandpack = useSandpack().sandpack;\n if (sandpack.exportOptions) {\n return jsx(ExportToWorkspaceButton, __assign({ state: sandpack }, props));\n }\n return jsx(RegularExportButton, __assign({ state: sandpack }, props));\n};\nvar ExportToWorkspaceButton = function (_a) {\n var children = _a.children, state = _a.state, props = __rest(_a, [\"children\", \"state\"]);\n var submit = function () { return __awaiter(void 0, void 0, void 0, function () {\n var normalizedFiles, response, data;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!((_a = state.exportOptions) === null || _a === void 0 ? void 0 : _a.apiToken)) {\n throw new Error(\"Missing `apiToken` property\");\n }\n normalizedFiles = Object.keys(state.files).reduce(function (prev, next) {\n var _a;\n var fileName = next.replace(\"/\", \"\");\n return __assign(__assign({}, prev), (_a = {}, _a[fileName] = state.files[next], _a));\n }, {});\n return [4 /*yield*/, fetch(\"https://api.codesandbox.io/sandbox\", {\n method: \"POST\",\n body: JSON.stringify({\n template: state.environment,\n files: normalizedFiles,\n privacy: state.exportOptions.privacy === \"public\" ? 0 : 2,\n }),\n headers: {\n Authorization: \"Bearer \".concat(state.exportOptions.apiToken),\n \"Content-Type\": \"application/json\",\n \"X-CSB-API-Version\": \"2023-07-01\",\n },\n })];\n case 1:\n response = _b.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _b.sent();\n window.open(\"https://codesandbox.io/p/sandbox/\".concat(data.data.alias, \"?file=/\").concat(state.activeFile, \"&utm-source=storybook-addon\"), \"_blank\");\n return [2 /*return*/];\n }\n });\n }); };\n return (jsx(\"button\", __assign({ onClick: submit, title: \"Export to workspace in CodeSandbox\", type: \"button\" }, props, { children: children })));\n};\nvar RegularExportButton = function (_a) {\n var _b, _c, _d;\n var children = _a.children, state = _a.state, props = __rest(_a, [\"children\", \"state\"]);\n var formRef = React.useRef(null);\n var _e = React.useState(), paramsValues = _e[0], setParamsValues = _e[1];\n React.useEffect(function debounce() {\n var timer = setTimeout(function () {\n var params = getFileParameters(state.files, state.environment);\n var searchParams = new URLSearchParams({\n parameters: params,\n query: new URLSearchParams({\n file: state.activeFile,\n utm_medium: \"sandpack\",\n }).toString(),\n });\n setParamsValues(searchParams);\n }, 600);\n return function () {\n clearTimeout(timer);\n };\n }, [state.activeFile, state.environment, state.files]);\n /**\n * This is a safe limit to avoid too long requests (401),\n * as all parameters are attached in the URL\n */\n if (((_d = (_c = (_b = paramsValues === null || paramsValues === void 0 ? void 0 : paramsValues.get) === null || _b === void 0 ? void 0 : _b.call(paramsValues, \"parameters\")) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 1500) {\n return (jsxs(\"button\", __assign({ onClick: function () { var _a; return (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.submit(); }, title: \"Open in CodeSandbox\", type: \"button\" }, props, { children: [jsxs(\"form\", { ref: formRef, action: CSB_URL, method: \"POST\", style: { visibility: \"hidden\" }, target: \"_blank\", children: [jsx(\"input\", { name: \"environment\", type: \"hidden\", value: state.environment === \"node\" ? \"server\" : state.environment }), Array.from(paramsValues, function (_a) {\n var key = _a[0], value = _a[1];\n return (jsx(\"input\", { name: key, type: \"hidden\", value: value }, key));\n })] }), children] })));\n }\n return (jsx(\"a\", __assign({ href: \"\".concat(CSB_URL, \"?\").concat(paramsValues === null || paramsValues === void 0 ? void 0 : paramsValues.toString(), \"&environment=\").concat(state.environment === \"node\" ? \"server\" : state.environment), rel: \"noreferrer noopener\", target: \"_blank\", title: \"Open in CodeSandbox\" }, props, { children: children })));\n};\n\nvar OpenInCodeSandboxButton = function () {\n var classNames = useClassNames();\n return (jsxs(UnstyledOpenInCodeSandboxButton, { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), children: [jsx(ExportIcon, {}), jsx(\"span\", { children: \"Open Sandbox\" })] }));\n};\n\nvar _a$3;\nvar cubeClassName = css({\n transform: \"translate(-4px, 9px) scale(0.13, 0.13)\",\n \"*\": { position: \"absolute\", width: \"96px\", height: \"96px\" },\n});\nvar wrapperClassName$2 = css((_a$3 = {\n position: \"absolute\",\n right: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n width: \"32px\",\n height: \"32px\",\n borderRadius: \"$border$radius\"\n },\n _a$3[\".\".concat(cubeClassName)] = { display: \"flex\" },\n _a$3[\".sp-button.\".concat(buttonClassName)] = { display: \"none\" },\n _a$3[\"&:hover .sp-button.\".concat(buttonClassName)] = { display: \"flex\" },\n _a$3[\"&:hover .sp-button.\".concat(buttonClassName, \" > span\")] = { display: \"none\" },\n _a$3[\"&:hover .\".concat(cubeClassName)] = { display: \"none\" },\n _a$3));\nvar cubeRotate = keyframes({\n \"0%\": {\n transform: \"rotateX(-25.5deg) rotateY(45deg)\",\n },\n \"100%\": {\n transform: \"rotateX(-25.5deg) rotateY(405deg)\",\n },\n});\nvar sidesClassNames = css({\n animation: \"\".concat(cubeRotate, \" 1s linear infinite\"),\n animationFillMode: \"forwards\",\n transformStyle: \"preserve-3d\",\n transform: \"rotateX(-25.5deg) rotateY(45deg)\",\n \"*\": {\n border: \"10px solid $colors$clickable\",\n borderRadius: \"8px\",\n background: \"$colors$surface1\",\n },\n \".top\": {\n transform: \"rotateX(90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".bottom\": {\n transform: \"rotateX(-90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".front\": {\n transform: \"rotateY(0deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".back\": {\n transform: \"rotateY(-180deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".left\": {\n transform: \"rotateY(-90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n \".right\": {\n transform: \"rotateY(90deg) translateZ(44px)\",\n transformOrigin: \"50% 50%\",\n },\n});\nvar Loading = function (_a) {\n var className = _a.className, showOpenInCodeSandbox = _a.showOpenInCodeSandbox, props = __rest(_a, [\"className\", \"showOpenInCodeSandbox\"]);\n var classNames = useClassNames();\n return (jsxs(\"div\", __assign({ className: classNames(\"cube-wrapper\", [wrapperClassName$2, className]), title: \"Open in CodeSandbox\" }, props, { children: [showOpenInCodeSandbox && jsx(OpenInCodeSandboxButton, {}), jsx(\"div\", { className: classNames(\"cube\", [cubeClassName]), children: jsxs(\"div\", { className: classNames(\"sides\", [sidesClassNames]), children: [jsx(\"div\", { className: \"top\" }), jsx(\"div\", { className: \"right\" }), jsx(\"div\", { className: \"bottom\" }), jsx(\"div\", { className: \"left\" }), jsx(\"div\", { className: \"front\" }), jsx(\"div\", { className: \"back\" })] }) })] })));\n};\n\nvar loadingClassName = css({\n backgroundColor: \"$colors$surface1\",\n});\nvar LoadingOverlay = function (_a) {\n var clientId = _a.clientId, loading = _a.loading, className = _a.className, style = _a.style, showOpenInCodeSandbox = _a.showOpenInCodeSandbox, props = __rest(_a, [\"clientId\", \"loading\", \"className\", \"style\", \"showOpenInCodeSandbox\"]);\n var classNames = useClassNames();\n var _b = useSandpack().sandpack, runSandpack = _b.runSandpack, environment = _b.environment;\n var _c = React.useState(false), shouldShowStdout = _c[0], setShouldShowStdout = _c[1];\n var loadingOverlayState = useLoadingOverlayState(clientId, loading);\n var progressMessage = useSandpackPreviewProgress({ clientId: clientId });\n var stdoutData = useSandpackShellStdout({ clientId: clientId }).logs;\n React.useEffect(function () {\n var timer;\n if (progressMessage === null || progressMessage === void 0 ? void 0 : progressMessage.includes(\"Running\")) {\n timer = setTimeout(function () {\n setShouldShowStdout(true);\n }, 3000);\n }\n return function () {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [progressMessage]);\n if (loadingOverlayState === \"HIDDEN\") {\n return null;\n }\n if (loadingOverlayState === \"TIMEOUT\") {\n return (jsx(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"error\"),\n absoluteClassName,\n errorClassName,\n errorBundlerClassName,\n className,\n ]) }, props, { children: jsxs(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: [jsx(\"p\", { className: classNames(\"error-title\", [css({ fontWeight: \"bold\" })]), children: \"Couldn't connect to server\" }), jsx(\"div\", { className: classNames(\"error-message\", [errorMessageClassName]), children: jsxs(\"p\", { children: [\"This means sandpack cannot connect to the runtime or your network is having some issues. Please check the network tab in your browser and try again. If the problem persists, report it via\", \" \", jsx(\"a\", { href: \"mailto:hello@codesandbox.io?subject=Sandpack Timeout Error\", children: \"email\" }), \" \", \"or submit an issue on\", \" \", jsx(\"a\", { href: \"https://github.com/codesandbox/sandpack/issues\", rel: \"noreferrer noopener\", target: \"_blank\", children: \"GitHub.\" })] }) }), jsxs(\"p\", { className: classNames(\"error-message\", [\n errorMessageClassName({ errorCode: true }),\n ]), children: [\"ENV: \", environment, jsx(\"br\", {}), \"ERROR: TIME_OUT\"] }), jsx(\"div\", { children: jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: runSandpack, title: \"Restart script\", type: \"button\", children: [jsx(RestartIcon, {}), \" \", jsx(\"span\", { children: \"Try again\" })] }) })] }) })));\n }\n var stillLoading = loadingOverlayState === \"LOADING\" || loadingOverlayState === \"PRE_FADING\";\n return (jsxs(Fragment, { children: [jsxs(\"div\", __assign({ className: classNames(\"overlay\", [\n classNames(\"loading\"),\n absoluteClassName,\n loadingClassName,\n className,\n ]), style: __assign(__assign({}, style), { opacity: stillLoading ? 1 : 0, transition: \"opacity \".concat(FADE_ANIMATION_DURATION, \"ms ease-out\") }) }, props, { children: [shouldShowStdout && (jsx(\"div\", { className: stdoutPreview.toString(), children: jsx(StdoutList, { data: stdoutData }) })), jsx(Loading, { showOpenInCodeSandbox: showOpenInCodeSandbox })] })), progressMessage && (jsx(\"div\", { className: progressClassName$1.toString(), children: jsx(\"p\", { children: progressMessage }) }))] }));\n};\nvar stdoutPreview = css({\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: \"$space$8\",\n overflow: \"auto\",\n opacity: 0.5,\n overflowX: \"hidden\",\n});\nvar progressClassName$1 = css({\n position: \"absolute\",\n left: \"$space$5\",\n bottom: \"$space$4\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n fontFamily: \"$font$mono\",\n fontSize: \".8em\",\n width: \"75%\",\n p: {\n whiteSpace: \"nowrap\",\n margin: 0,\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n});\n\nvar DependenciesProgress = function (_a) {\n var clientId = _a.clientId;\n var progressMessage = useSandpackPreviewProgress({\n timeout: 3000,\n clientId: clientId,\n });\n if (!progressMessage) {\n return null;\n }\n return (jsx(\"div\", { className: progressClassName.toString(), children: jsx(\"p\", { children: progressMessage }) }));\n};\nvar progressClassName = css({\n position: \"absolute\",\n left: \"$space$5\",\n bottom: \"$space$4\",\n zIndex: \"$top\",\n color: \"$colors$clickable\",\n animation: \"\".concat(fadeIn, \" 150ms ease\"),\n fontFamily: \"$font$mono\",\n fontSize: \".8em\",\n width: \"75%\",\n p: {\n whiteSpace: \"nowrap\",\n margin: 0,\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n});\n\nvar explorerClassName = css({\n borderRadius: \"0\",\n width: \"100%\",\n padding: 0,\n marginBottom: \"$space$2\",\n span: {\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n },\n svg: {\n marginRight: \"$space$1\",\n },\n});\nvar File = function (_a) {\n var selectFile = _a.selectFile, path = _a.path, active = _a.active, onClick = _a.onClick, depth = _a.depth, isDirOpen = _a.isDirOpen;\n var classNames = useClassNames();\n var onClickButton = function (event) {\n if (selectFile) {\n selectFile(path);\n }\n onClick === null || onClick === void 0 ? void 0 : onClick(event);\n };\n var fileName = path.split(\"/\").filter(Boolean).pop();\n var getIcon = function () {\n if (selectFile)\n return jsx(FileIcon, {});\n return isDirOpen ? jsx(DirectoryIconOpen, {}) : jsx(DirectoryIconClosed, {});\n };\n return (jsxs(\"button\", { className: classNames(\"button\", [\n classNames(\"explorer\"),\n buttonClassName,\n explorerClassName,\n ]), \"data-active\": active, onClick: onClickButton, style: { paddingLeft: 18 * depth + \"px\" }, title: fileName, type: \"button\", children: [getIcon(), jsx(\"span\", { children: fileName })] }));\n};\n\nvar Directory = function (_a) {\n var prefixedPath = _a.prefixedPath, files = _a.files, selectFile = _a.selectFile, activeFile = _a.activeFile, depth = _a.depth, autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, initialCollapsedFolder = _a.initialCollapsedFolder;\n var _b = React.useState(!(initialCollapsedFolder === null || initialCollapsedFolder === void 0 ? void 0 : initialCollapsedFolder.includes(prefixedPath))), open = _b[0], setOpen = _b[1];\n var toggle = function () { return setOpen(function (prev) { return !prev; }); };\n return (jsxs(\"div\", { children: [jsx(File, { depth: depth, isDirOpen: open, onClick: toggle, path: prefixedPath + \"/\" }), open && (jsx(ModuleList, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, depth: depth + 1, files: files, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: prefixedPath, selectFile: selectFile, visibleFiles: visibleFiles }))] }, prefixedPath));\n};\n\nvar fromPropsToModules = function (_a) {\n var autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, files = _a.files, prefixedPath = _a.prefixedPath;\n var hasVisibleFilesOption = visibleFiles.length > 0;\n /**\n * When visibleFiles or activeFile are set, the hidden and active flags on the files prop are ignored.\n */\n var filterByHiddenProperty = autoHiddenFiles && !hasVisibleFilesOption;\n var filterByVisibleFilesOption = autoHiddenFiles && !!hasVisibleFilesOption;\n var fileListWithoutPrefix = Object.keys(files)\n .filter(function (filePath) {\n var _a;\n var isValidatedPath = filePath.startsWith(prefixedPath);\n if (filterByVisibleFilesOption) {\n return isValidatedPath && visibleFiles.includes(filePath);\n }\n if (filterByHiddenProperty) {\n return isValidatedPath && !((_a = files[filePath]) === null || _a === void 0 ? void 0 : _a.hidden);\n }\n return isValidatedPath;\n })\n .map(function (file) { return file.substring(prefixedPath.length); });\n var directories = new Set(fileListWithoutPrefix\n .filter(function (file) { return file.includes(\"/\"); })\n .map(function (file) { return \"\".concat(prefixedPath).concat(file.split(\"/\")[0], \"/\"); }));\n var modules = fileListWithoutPrefix\n .filter(function (file) { return !file.includes(\"/\"); })\n .map(function (file) { return \"\".concat(prefixedPath).concat(file); });\n return { directories: Array.from(directories), modules: modules };\n};\n\nvar ModuleList = function (_a) {\n var _b = _a.depth, depth = _b === void 0 ? 0 : _b, activeFile = _a.activeFile, selectFile = _a.selectFile, prefixedPath = _a.prefixedPath, files = _a.files, autoHiddenFiles = _a.autoHiddenFiles, visibleFiles = _a.visibleFiles, initialCollapsedFolder = _a.initialCollapsedFolder;\n var _c = fromPropsToModules({\n visibleFiles: visibleFiles,\n autoHiddenFiles: autoHiddenFiles,\n prefixedPath: prefixedPath,\n files: files,\n }), directories = _c.directories, modules = _c.modules;\n return (jsxs(\"div\", { children: [directories.map(function (dir) { return (jsx(Directory, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, depth: depth, files: files, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: dir, selectFile: selectFile, visibleFiles: visibleFiles }, dir)); }), modules.map(function (file) { return (jsx(File, { active: activeFile === file, depth: depth, path: file, selectFile: selectFile }, file)); })] }));\n};\n\nvar fileExplorerClassName = css({\n padding: \"$space$3\",\n overflow: \"auto\",\n height: \"100%\",\n});\nvar SandpackFileExplorer = function (_a) {\n var className = _a.className, _b = _a.autoHiddenFiles, autoHiddenFiles = _b === void 0 ? false : _b, _c = _a.initialCollapsedFolder, initialCollapsedFolder = _c === void 0 ? [] : _c, props = __rest(_a, [\"className\", \"autoHiddenFiles\", \"initialCollapsedFolder\"]);\n var _d = useSandpack(), _e = _d.sandpack, status = _e.status, updateFile = _e.updateFile, deleteFile = _e.deleteFile, activeFile = _e.activeFile, files = _e.files, openFile = _e.openFile, visibleFilesFromProps = _e.visibleFilesFromProps, listen = _d.listen;\n var classNames = useClassNames();\n React.useEffect(function watchFSFilesChanges() {\n if (status !== \"running\")\n return;\n var unsubscribe = listen(function (message) {\n if (message.type === \"fs/change\") {\n updateFile(message.path, message.content, false);\n }\n if (message.type === \"fs/remove\") {\n deleteFile(message.path, false);\n }\n });\n return unsubscribe;\n }, [status]);\n var orderedFiles = Object.keys(files)\n .sort()\n .reduce(function (obj, key) {\n obj[key] = files[key];\n return obj;\n }, {});\n return (jsx(\"div\", __assign({ className: classNames(\"file-explorer\", [stackClassName, className]) }, props, { children: jsx(\"div\", { className: classNames(\"file-explorer-list\", [fileExplorerClassName]), children: jsx(ModuleList, { activeFile: activeFile, autoHiddenFiles: autoHiddenFiles, files: orderedFiles, initialCollapsedFolder: initialCollapsedFolder, prefixedPath: \"/\", selectFile: openFile, visibleFiles: visibleFilesFromProps }) }) })));\n};\n\nvar splitUrl = function (url) {\n var match = url.match(/(https?:\\/\\/.*?)\\//);\n if (match && match[1]) {\n return [match[1], url.replace(match[1], \"\")];\n }\n return [url, \"/\"];\n};\n\nvar navigatorClassName = css({\n display: \"flex\",\n alignItems: \"center\",\n height: \"$layout$headerHeight\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"$space$3 $space$2\",\n background: \"$colors$surface1\",\n});\nvar inputClassName = css({\n backgroundColor: \"$colors$surface2\",\n color: \"$colors$clickable\",\n padding: \"$space$1 $space$3\",\n borderRadius: \"99999px\",\n border: \"1px solid $colors$surface2\",\n height: \"24px\",\n lineHeight: \"24px\",\n fontSize: \"inherit\",\n outline: \"none\",\n flex: 1,\n marginLeft: \"$space$4\",\n width: \"0\",\n transition: \"background $transitions$default\",\n \"&:hover\": {\n backgroundColor: \"$colors$surface3\",\n },\n \"&:focus\": {\n backgroundColor: \"$surface1\",\n border: \"1px solid $colors$accent\",\n color: \"$colors$base\",\n },\n});\nvar Navigator = function (_a) {\n var _b;\n var clientId = _a.clientId, onURLChange = _a.onURLChange, className = _a.className, startRoute = _a.startRoute, props = __rest(_a, [\"clientId\", \"onURLChange\", \"className\", \"startRoute\"]);\n var _c = React.useState(\"\"), baseUrl = _c[0], setBaseUrl = _c[1];\n var _d = useSandpack(), sandpack = _d.sandpack, dispatch = _d.dispatch, listen = _d.listen;\n var _e = React.useState((_b = startRoute !== null && startRoute !== void 0 ? startRoute : sandpack.startRoute) !== null && _b !== void 0 ? _b : \"/\"), relativeUrl = _e[0], setRelativeUrl = _e[1];\n var _f = React.useState(false), backEnabled = _f[0], setBackEnabled = _f[1];\n var _g = React.useState(false), forwardEnabled = _g[0], setForwardEnabled = _g[1];\n var classNames = useClassNames();\n React.useEffect(function () {\n var unsub = listen(function (message) {\n if (message.type === \"urlchange\") {\n var url = message.url, back = message.back, forward = message.forward;\n var _a = splitUrl(url), newBaseUrl = _a[0], newRelativeUrl = _a[1];\n setBaseUrl(newBaseUrl);\n setRelativeUrl(newRelativeUrl);\n setBackEnabled(back);\n setForwardEnabled(forward);\n }\n }, clientId);\n return function () { return unsub(); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n var handleInputChange = function (e) {\n var path = e.target.value.startsWith(\"/\")\n ? e.target.value\n : \"/\".concat(e.target.value);\n setRelativeUrl(path);\n };\n var handleKeyDown = function (e) {\n if (e.code === \"Enter\") {\n // Enter\n e.preventDefault();\n e.stopPropagation();\n if (typeof onURLChange === \"function\") {\n onURLChange(baseUrl + e.currentTarget.value);\n }\n }\n };\n var handleRefresh = function () {\n dispatch({ type: \"refresh\" });\n };\n var handleBack = function () {\n dispatch({ type: \"urlback\" });\n };\n var handleForward = function () {\n dispatch({ type: \"urlforward\" });\n };\n var buttonsClassNames = classNames(\"button\", [\n classNames(\"icon\"),\n buttonClassName,\n iconClassName,\n css({\n minWidth: \"$space$6\",\n justifyContent: \"center\",\n }),\n ]);\n return (jsxs(\"div\", __assign({ className: classNames(\"navigator\", [navigatorClassName, className]) }, props, { children: [jsx(\"button\", { \"aria-label\": \"Go back one page\", className: buttonsClassNames, disabled: !backEnabled, onClick: handleBack, type: \"button\", children: jsx(BackwardIcon, {}) }), jsx(\"button\", { \"aria-label\": \"Go forward one page\", className: buttonsClassNames, disabled: !forwardEnabled, onClick: handleForward, type: \"button\", children: jsx(ForwardIcon, {}) }), jsx(\"button\", { \"aria-label\": \"Refresh page\", className: buttonsClassNames, onClick: handleRefresh, type: \"button\", children: jsx(RefreshIcon, {}) }), jsx(\"input\", { \"aria-label\": \"Current Sandpack URL\", className: classNames(\"input\", [inputClassName]), name: \"Current Sandpack URL\", onChange: handleInputChange, onKeyDown: handleKeyDown, type: \"text\", value: relativeUrl })] })));\n};\n\nvar _a$2;\nvar previewClassName = css((_a$2 = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n background: \"white\",\n overflow: \"auto\",\n position: \"relative\"\n },\n _a$2[\".\".concat(THEME_PREFIX, \"-bridge-frame\")] = {\n border: 0,\n position: \"absolute\",\n left: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n height: 12,\n width: \"30%\",\n mixBlendMode: \"multiply\",\n pointerEvents: \"none\",\n },\n _a$2));\nvar previewIframe = css({\n border: \"0\",\n outline: \"0\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"160px\",\n maxHeight: \"2000px\",\n flex: 1,\n});\nvar previewActionsClassName$1 = css({\n display: \"flex\",\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n zIndex: \"$overlay\",\n gap: \"$space$2\",\n});\nvar SandpackPreview = React.forwardRef(function (_a, ref) {\n var _b = _a.showNavigator, showNavigator = _b === void 0 ? false : _b, _c = _a.showRefreshButton, showRefreshButton = _c === void 0 ? true : _c, _d = _a.showOpenInCodeSandbox, showOpenInCodeSandbox = _d === void 0 ? true : _d, _e = _a.showSandpackErrorOverlay, showSandpackErrorOverlay = _e === void 0 ? true : _e; _a.showOpenNewtab; var _g = _a.showRestartButton, showRestartButton = _g === void 0 ? true : _g, _h = _a.actionsChildren, actionsChildren = _h === void 0 ? jsx(Fragment, {}) : _h, children = _a.children, className = _a.className, _j = _a.startRoute, startRoute = _j === void 0 ? \"/\" : _j, props = __rest(_a, [\"showNavigator\", \"showRefreshButton\", \"showOpenInCodeSandbox\", \"showSandpackErrorOverlay\", \"showOpenNewtab\", \"showRestartButton\", \"actionsChildren\", \"children\", \"className\", \"startRoute\"]);\n var _k = useSandpackClient({ startRoute: startRoute }), sandpack = _k.sandpack, listen = _k.listen, iframe = _k.iframe, getClient = _k.getClient, clientId = _k.clientId, dispatch = _k.dispatch;\n var _l = React.useState(null), iframeComputedHeight = _l[0], setComputedAutoHeight = _l[1];\n var status = sandpack.status;\n var refresh = useSandpackNavigation(clientId).refresh;\n var restart = useSandpackShell(clientId).restart;\n var classNames = useClassNames();\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (message.type === \"resize\") {\n setComputedAutoHeight(message.height);\n }\n });\n return unsubscribe;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useImperativeHandle(ref, function () { return ({\n clientId: clientId,\n getClient: getClient,\n }); }, [getClient, clientId]);\n var handleNewURL = function (newUrl) {\n if (!iframe.current) {\n return;\n }\n iframe.current.src = newUrl;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n };\n return (jsxs(SandpackStack, __assign({ className: classNames(\"preview\", [className]) }, props, { children: [showNavigator && (jsx(Navigator, { clientId: clientId, onURLChange: handleNewURL, startRoute: startRoute })), jsxs(\"div\", { className: classNames(\"preview-container\", [previewClassName]), children: [jsx(\"iframe\", { ref: iframe, className: classNames(\"preview-iframe\", [previewIframe]), style: {\n // set height based on the content only in auto mode\n // and when the computed height was returned by the bundler\n height: iframeComputedHeight ? iframeComputedHeight : undefined,\n }, title: \"Sandpack Preview\" }), jsxs(\"div\", { className: classNames(\"preview-actions\", [previewActionsClassName$1]), children: [actionsChildren, showRestartButton && sandpack.environment === \"node\" && (jsx(RoundedButton, { onClick: restart, children: jsx(RestartIcon, {}) })), !showNavigator && showRefreshButton && status === \"running\" && (jsx(RoundedButton, { onClick: refresh, children: jsx(RefreshIcon, {}) })), sandpack.teamId && (jsx(\"button\", { className: classNames(\"button\", [\n classNames(\"icon-standalone\"),\n buttonClassName,\n iconStandaloneClassName,\n roundedButtonClassName,\n ]), onClick: function () { return dispatch({ type: \"sign-out\" }); }, title: \"Sign out\", type: \"button\", children: jsx(SignOutIcon, {}) })), showOpenInCodeSandbox && jsx(OpenInCodeSandboxButton, {})] }), jsx(LoadingOverlay, { clientId: clientId, showOpenInCodeSandbox: showOpenInCodeSandbox }), showSandpackErrorOverlay && jsx(ErrorOverlay, {}), children] })] })));\n});\n\nvar _a$1;\nvar transpiledCodeClassName = css((_a$1 = {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"auto\",\n minHeight: \"160px\",\n flex: 1\n },\n _a$1[\".\".concat(THEME_PREFIX, \"-stack\")] = {\n height: \"100%\",\n },\n _a$1));\nvar SandpackTranspiledCode = function (_a) {\n var className = _a.className, props = __rest(_a, [\"className\"]);\n var sandpack = useSandpack().sandpack;\n var transpiledCode = useTranspiledCode();\n var classNames = useClassNames();\n var hiddenIframeRef = React.useRef(null);\n React.useEffect(function () {\n var hiddenIframe = hiddenIframeRef.current;\n if (hiddenIframe) {\n sandpack.registerBundler(hiddenIframe, \"hidden\");\n }\n return function () {\n sandpack.unregisterBundler(\"hidden\");\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (jsxs(\"div\", __assign({ className: classNames(\"transpiled-code\", [\n stackClassName,\n transpiledCodeClassName,\n className,\n ]) }, props, { children: [jsx(SandpackCodeViewer, __assign({ code: transpiledCode !== null && transpiledCode !== void 0 ? transpiledCode : \"\", initMode: sandpack.initMode }, props)), jsx(\"iframe\", { ref: hiddenIframeRef, style: { display: \"none\" }, title: \"transpiled sandpack code\" }), jsx(ErrorOverlay, {}), jsx(LoadingOverlay, { clientId: \"hidden\", showOpenInCodeSandbox: false })] })));\n};\n\nvar wrapperClassName$1 = css({\n justifyContent: \"space-between\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"0 $space$2\",\n fontFamily: \"$font$mono\",\n height: \"$layout$headerHeight\",\n minHeight: \"$layout$headerHeight\",\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n});\nvar flexClassName$1 = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"$space$2\",\n});\nvar Header$1 = function (_a) {\n var status = _a.status, suiteOnly = _a.suiteOnly, setSuiteOnly = _a.setSuiteOnly, setVerbose = _a.setVerbose, verbose = _a.verbose, watchMode = _a.watchMode, setWatchMode = _a.setWatchMode, showSuitesOnly = _a.showSuitesOnly, showWatchButton = _a.showWatchButton, showVerboseButton = _a.showVerboseButton, hideTestsAndSupressLogs = _a.hideTestsAndSupressLogs;\n var classNames = useClassNames();\n var buttonsClassName = classNames(\"test-header-button\", [\n buttonClassName,\n roundedButtonClassName,\n css({ padding: \"$space$1 $space$3\" }),\n ]);\n return (jsxs(\"div\", { className: classNames(\"test-header\", [wrapperClassName$1, flexClassName$1]), children: [jsx(\"div\", { className: classNames(\"test-header-wrapper\", [flexClassName$1]), children: jsxs(\"p\", { className: classNames(\"test-header-title\", [\n css({\n lineHeight: 1,\n margin: 0,\n color: \"$colors$base\",\n fontSize: \"$font$size\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"$space$2\",\n }),\n ]), children: [jsx(ConsoleIcon, {}), \"Tests\"] }) }), jsxs(\"div\", { className: classNames(\"test-header-actions\", [flexClassName$1]), children: [showSuitesOnly && (jsx(\"button\", { className: buttonsClassName, \"data-active\": suiteOnly, disabled: status === \"initialising\", onClick: setSuiteOnly, type: \"button\", children: \"Suite only\" })), showVerboseButton && (jsx(\"button\", { className: buttonsClassName, \"data-active\": verbose, disabled: status === \"initialising\" || hideTestsAndSupressLogs, onClick: setVerbose, type: \"button\", children: \"Verbose\" })), showWatchButton && (jsx(\"button\", { className: buttonsClassName, \"data-active\": watchMode, disabled: status === \"initialising\", onClick: setWatchMode, type: \"button\", children: \"Watch\" }))] })] }));\n};\n\nvar RunButton = function (_a) {\n var onClick = _a.onClick;\n return (jsx(RoundedButton, { onClick: onClick, title: \"Run tests\", children: jsx(RunIcon, {}) }));\n};\n\nvar setTestTheme = function (isDark) { return ({\n \"--test-pass\": isDark ? \"#18df16\" : \"#15c213\",\n \"--test-fail\": isDark ? \"#df162b\" : \"#c21325\",\n \"--test-skip\": isDark ? \"#eace2b\" : \"#c2a813\",\n \"--test-run\": isDark ? \"#eace2b\" : \"#c2a813\",\n \"--test-title\": isDark ? \"#3fbabe\" : \"#256c6f\",\n}); };\nvar color = css({\n variants: {\n status: {\n pass: { color: \"var(--test-pass)\" },\n fail: { color: \"var(--test-fail)\" },\n skip: { color: \"var(--test-skip)\" },\n title: { color: \"var(--test-title)\" },\n },\n },\n});\nvar passTextClassName = color({ status: \"pass\" });\nvar failTextClassName = color({ status: \"fail\" });\nvar skipTextClassName = color({ status: \"skip\" });\nvar titleTextClassName = color({ status: \"title\" });\nvar background = css({\n variants: {\n status: {\n pass: { background: \"var(--test-pass)\", color: \"$colors$surface1\" },\n fail: { background: \"var(--test-fail)\", color: \"$colors$surface1\" },\n run: { background: \"var(--test-run)\", color: \"$colors$surface1\" },\n },\n },\n});\nvar runBackgroundClassName = background({ status: \"run\" });\nvar passBackgroundClassName = background({ status: \"pass\" });\nvar failBackgroundClassName = background({ status: \"fail\" });\n\nvar testContainerClassName = css({\n marginLeft: \"$space$4\",\n});\nvar containerClassName$4 = css({\n marginBottom: \"$space$2\",\n color: \"$colors$clickable\",\n});\nvar testClassName = css({\n marginBottom: \"$space$2\",\n color: \"$colors$hover\",\n});\nvar durationClassName = css({\n marginLeft: \"$space$2\",\n});\nvar gapRightClassName = css({\n marginRight: \"$space$2\",\n});\nvar Tests = function (_a) {\n var tests = _a.tests; _a.style;\n var classNames = useClassNames();\n return (jsx(\"div\", { className: classNames(\"test\", [testContainerClassName]), children: tests.map(function (test) { return (jsxs(\"div\", { className: classNames(\"test-result\", [containerClassName$4]), children: [test.status === \"pass\" && (jsx(\"span\", { className: classNames(\"test-pass-text\", [\n passTextClassName,\n gapRightClassName,\n ]), children: \"\\u2713\" })), test.status === \"fail\" && (jsx(\"span\", { className: classNames(\"test-fail-text\", [\n failTextClassName,\n gapRightClassName,\n ]), children: \"\\u2715\" })), test.status === \"idle\" && (jsx(\"span\", { className: classNames(\"test-idle-text\", [\n skipTextClassName,\n gapRightClassName,\n ]), children: \"\\u25CB\" })), jsx(\"span\", { className: classNames(\"test-name-text\", [testClassName]), children: test.name }), test.duration !== undefined && (jsxs(\"span\", { className: classNames(\"test-duration-text\", [durationClassName]), children: [\"(\", test.duration, \" ms)\"] }))] }, test.name)); }) }));\n};\n\nvar getTests = function (block) {\n var _a;\n var _b, _c;\n return (_a = Object.values((_b = block.tests) !== null && _b !== void 0 ? _b : {})).concat.apply(_a, Object.values((_c = block.describes) !== null && _c !== void 0 ? _c : {}).map(getTests));\n};\nvar getFailingTests = function (block) {\n return getTests(block).filter(function (t) { return t.status === \"fail\"; });\n};\nvar getAllTestResults = function (specs) {\n return specs.map(getSpecTestResults).reduce(function (acc, stats) {\n return {\n pass: acc.pass + stats.pass,\n fail: acc.fail + stats.fail,\n skip: acc.skip + stats.skip,\n total: acc.total + stats.total,\n };\n }, { pass: 0, skip: 0, fail: 0, total: 0 });\n};\nvar getSpecTestResults = function (spec) {\n return getTests(spec).reduce(function (acc, test) {\n return {\n pass: test.status === \"pass\" ? acc.pass + 1 : acc.pass,\n fail: test.status === \"fail\" ? acc.fail + 1 : acc.fail,\n skip: test.status === \"idle\" || test.status === \"running\"\n ? acc.skip + 1\n : acc.skip,\n total: acc.total + 1,\n };\n }, { pass: 0, fail: 0, skip: 0, total: 0 });\n};\nvar getAllSuiteResults = function (specs) {\n return specs\n .filter(function (spec) {\n var _a, _b;\n return Object.values((_a = spec.describes) !== null && _a !== void 0 ? _a : {}).length > 0 ||\n Object.values((_b = spec.tests) !== null && _b !== void 0 ? _b : {}).length > 0;\n })\n .map(getSpecTestResults)\n .reduce(function (acc, stats) {\n return {\n pass: acc.pass + (stats.fail === 0 ? 1 : 0),\n fail: acc.fail + (stats.fail > 0 ? 1 : 0),\n total: acc.total + 1,\n };\n }, { pass: 0, fail: 0, total: 0 });\n};\nvar getDuration = function (specs) {\n return flatMap(specs, getTests).reduce(function (acc, test) { return acc + (test.duration || 0); }, 0);\n};\nvar isEmpty = function (block) {\n var _a, _b;\n return Object.values((_a = block.describes) !== null && _a !== void 0 ? _a : {}).length === 0 &&\n Object.values((_b = block.tests) !== null && _b !== void 0 ? _b : {}).length === 0;\n};\nvar splitTail = function (as) {\n var lastIndex = as.length - 1;\n var head = as.slice(0, lastIndex);\n var tail = as[lastIndex];\n return [head, tail];\n};\nvar flatMap = function (as, f) {\n return as.map(f).reduce(function (acc, next) { return acc.concat(next); }, []);\n};\nvar set = function (path, value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (object) {\n return cleanSet(object, path, value);\n };\n};\n\nvar nameClassName = css({\n color: \"$colors$hover\",\n marginBottom: \"$space$2\",\n});\nvar containerClassName$3 = css({\n marginLeft: \"$space$4\",\n});\nvar Describes = function (_a) {\n var describes = _a.describes;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: describes.map(function (describe) {\n var _a, _b;\n if (isEmpty(describe)) {\n return null;\n }\n var tests = Object.values((_a = describe.tests) !== null && _a !== void 0 ? _a : {});\n var describes = Object.values((_b = describe.describes) !== null && _b !== void 0 ? _b : {});\n return (jsxs(\"div\", { className: classNames(\"test-describe\", [containerClassName$3]), children: [jsx(\"div\", { className: classNames(\"test-name\", [nameClassName]), children: describe.name }), jsx(Tests, { tests: tests }), jsx(Describes, { describes: describes })] }, describe.name));\n }) }));\n};\n\nvar containerClassName$2 = css({\n color: \"$colors$hover\",\n fontSize: \"$font$size\",\n padding: \"$space$2\",\n whiteSpace: \"pre-wrap\",\n});\nvar FormattedError = function (_a) {\n var error = _a.error, path = _a.path;\n var classNames = useClassNames();\n return (jsx(\"div\", { className: classNames(\"test-error\", [containerClassName$2]), dangerouslySetInnerHTML: { __html: formatDiffMessage(error, path) } }));\n};\nvar escapeHtml = function (unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\nvar formatDiffMessage = function (error, path) {\n var _a, _b;\n var finalMessage = \"\";\n if (error.matcherResult) {\n finalMessage = \"\".concat(escapeHtml((_a = error.message) !== null && _a !== void 0 ? _a : \"\")\n .replace(/(expected)/m, \"$1\"))\n .replace(/(received)/m, \"$1\"))\n .replace(/(Difference:)/m, \"$1\")\n .replace(/(Expected:)(.*)/m, \"$1$2\"))\n .replace(/(Received:)(.*)/m, \"$1$2\"))\n .replace(/^(-.*)/gm, \"$1\"))\n .replace(/^(\\+.*)/gm, \"$1\")), \"\");\n }\n else {\n finalMessage = escapeHtml((_b = error.message) !== null && _b !== void 0 ? _b : \"\");\n }\n if (error.mappedErrors &&\n error.mappedErrors[0] &&\n error.mappedErrors[0].fileName.endsWith(path) &&\n error.mappedErrors[0]._originalScriptCode) {\n var mappedError = error.mappedErrors[0];\n var _originalScriptCode = mappedError._originalScriptCode || [];\n var widestNumber_1 = Math.max.apply(Math, _originalScriptCode.map(function (code) { return (code.lineNumber + \"\").length; })) + 2;\n var margin_1 = Array.from({ length: widestNumber_1 }).map(function () { return \" \"; });\n finalMessage += \"
    \";\n finalMessage += \"
    \";\n finalMessage += \"
    \";\n _originalScriptCode\n .filter(function (s) { return s.content.trim(); })\n .forEach(function (code) {\n var currentLineMargin = (code.lineNumber + \"\").length;\n var newMargin = __spreadArray([], margin_1, true);\n newMargin.length -= currentLineMargin;\n if (code.highlight) {\n newMargin.length -= 2;\n }\n var toBeIndex = code.content.indexOf(\".to\");\n var toBeMargin = Array.from({ length: margin_1.length + toBeIndex - (widestNumber_1 - 1) }, function () { return \" \"; });\n var content = escapeHtml(code.content)\n .replace(/(describe|test|it)(\\()('|"|`)(.*)('|"|`)/m, \"$1$2$3$4$5\"))\n .replace(/(expect\\()(.*)(\\)\\..*)(to[\\w\\d]*)(\\()(.*)(\\))/m, \"$1$2$3$4$5$6$7\"));\n finalMessage +=\n \"
    \") +\n (code.highlight\n ? \"> \")\n : \"\") +\n newMargin.join(\"\") +\n escapeHtml(\"\" + code.lineNumber) +\n \" | \" +\n content +\n \"
    \" +\n (code.highlight\n ? \"
    \" +\n margin_1.join(\"\") +\n \" | \" +\n toBeMargin.join(\"\") +\n \"^\") +\n \"
    \"\n : \"\");\n });\n finalMessage += \"
    \";\n }\n return finalMessage.replace(/(?:\\r\\n|\\r|\\n)/g, \"
    \");\n};\n\nvar fileContainer = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginBottom: \"$space$2\",\n});\nvar gapBottomClassName$1 = css({\n marginBottom: \"$space$2\",\n});\nvar failTestClassName = css({\n fontWeight: \"bold\",\n});\nvar labelClassName$1 = css({\n borderRadius: \"calc($border$radius / 2)\",\n});\nvar specLabelClassName = css({\n padding: \"$space$1 $space$2\",\n fontFamily: \"$font$mono\",\n textTransform: \"uppercase\",\n marginRight: \"$space$2\",\n});\nvar filePathButtonClassName = css({\n fontFamily: \"$font$mono\",\n cursor: \"pointer\",\n display: \"inline-block\",\n});\nvar filePathClassName = css({\n color: \"$colors$clickable\",\n textDecorationStyle: \"dotted\",\n textDecorationLine: \"underline\",\n});\nvar fileNameClassName = css({\n color: \"$colors$hover\",\n fontWeight: \"bold\",\n textDecorationStyle: \"dotted\",\n textDecorationLine: \"underline\",\n});\nvar Specs = function (_a) {\n var specs = _a.specs, openSpec = _a.openSpec, status = _a.status, verbose = _a.verbose, hideTestsAndSupressLogs = _a.hideTestsAndSupressLogs;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: specs.map(function (spec) {\n if (spec.error) {\n return (jsxs(\"div\", { className: classNames(\"test-spec\", [gapBottomClassName$1]), children: [jsx(SpecLabel, { className: classNames(\"test-spec-error\", [\n labelClassName$1,\n failBackgroundClassName,\n ]), children: \"Error\" }), jsx(FilePath, { onClick: function () { return openSpec(spec.name); }, path: spec.name }), jsx(FormattedError, { error: spec.error, path: spec.name })] }, spec.name));\n }\n if (isEmpty(spec)) {\n return null;\n }\n var tests = Object.values(spec.tests);\n var describes = Object.values(spec.describes);\n var stats = getSpecTestResults(spec);\n return (jsxs(\"div\", { className: classNames(\"test-spec-name\", [gapBottomClassName$1]), children: [jsxs(\"div\", { className: classNames(\"test-spec-name-container\", [\n fileContainer,\n ]), children: [status === \"complete\" ? (stats.fail > 0 ? (jsx(SpecLabel, { className: classNames(\"test-spec-complete\", [\n labelClassName$1,\n failBackgroundClassName,\n ]), children: \"Fail\" })) : (jsx(SpecLabel, { className: classNames(\"test-spec-pass\", [\n labelClassName$1,\n passBackgroundClassName,\n ]), children: \"Pass\" }))) : (jsx(SpecLabel, { className: classNames(\"test-spec-run\", [\n labelClassName$1,\n runBackgroundClassName,\n ]), children: \"Run\" })), jsx(FilePath, { onClick: function () {\n if (!hideTestsAndSupressLogs) {\n openSpec(spec.name);\n }\n }, path: spec.name })] }), verbose && !hideTestsAndSupressLogs && jsx(Tests, { tests: tests }), verbose && !hideTestsAndSupressLogs && (jsx(Describes, { describes: describes })), !hideTestsAndSupressLogs &&\n getFailingTests(spec).map(function (test) {\n return (jsxs(\"div\", { className: classNames(\"test-spec-error\", [\n gapBottomClassName$1,\n ]), children: [jsxs(\"div\", { className: classNames(\"test-spec-error-text\", [\n failTestClassName,\n failTextClassName,\n ]), children: [\"\\u25CF \", test.blocks.join(\" › \"), \" \\u203A \", test.name] }), test.errors.map(function (e) { return (jsx(FormattedError, { error: e, path: test.path }, \"failing-\".concat(test.name, \"-error\"))); })] }, \"failing-\".concat(test.name)));\n })] }, spec.name));\n }) }));\n};\nvar SpecLabel = function (_a) {\n var children = _a.children, className = _a.className;\n var classNames = useClassNames();\n return (jsx(\"span\", { className: classNames(\"test-spec-label\", [specLabelClassName, className]), children: children }));\n};\nvar FilePath = function (_a) {\n var onClick = _a.onClick, path = _a.path;\n var parts = path.split(\"/\");\n var basePath = parts.slice(0, parts.length - 1).join(\"/\") + \"/\";\n var fileName = parts[parts.length - 1];\n var classNames = useClassNames();\n return (jsxs(\"button\", { className: classNames(\"test-filename\", [\n buttonClassName,\n filePathButtonClassName,\n ]), onClick: onClick, type: \"button\", children: [jsx(\"span\", { className: classNames(\"test-filename-base\", [filePathClassName]), children: basePath }), jsx(\"span\", { className: classNames(\"test-filename-file\", [fileNameClassName]), children: fileName })] }));\n};\n\nvar gapBottomClassName = css({\n marginBottom: \"$space$2\",\n});\nvar labelClassName = css({\n fontWeight: \"bold\",\n color: \"$colors$hover\",\n whiteSpace: \"pre-wrap\",\n});\nvar containerClassName$1 = css({\n fontWeight: \"bold\",\n color: \"$colors$clickable\",\n});\nvar Summary = function (_a) {\n var suites = _a.suites, tests = _a.tests, duration = _a.duration;\n var widestLabel = \"Test suites: \";\n var withMargin = function (label) {\n var difference = widestLabel.length - label.length;\n var margin = Array.from({ length: difference }, function () { return \" \"; }).join(\"\");\n return label + margin;\n };\n var classNames = useClassNames();\n return (jsxs(\"div\", { className: classNames(\"test-summary\", [containerClassName$1]), children: [jsxs(\"div\", { className: classNames(\"test-summary\", [gapBottomClassName]), children: [jsx(\"span\", { className: classNames(\"test-summary-suites-label\", [labelClassName]), children: widestLabel }), suites.fail > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-suites-fail\", [\n failTextClassName,\n ]), children: [suites.fail, \" failed,\", \" \"] })), suites.pass > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-suites-pass\", [\n passTextClassName,\n ]), children: [suites.pass, \" passed,\", \" \"] })), jsxs(\"span\", { children: [suites.total, \" total\"] })] }), jsxs(\"div\", { className: classNames(\"test-summary\", [gapBottomClassName]), children: [jsx(\"span\", { className: classNames(\"test-summary-label\", [labelClassName]), children: withMargin(\"Tests:\") }), tests.fail > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-fail\", [failTextClassName]), children: [tests.fail, \" failed,\", \" \"] })), tests.skip > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-skip\", [skipTextClassName]), children: [tests.skip, \" skipped,\", \" \"] })), tests.pass > 0 && (jsxs(\"span\", { className: classNames(\"test-summary-pass\", [passTextClassName]), children: [tests.pass, \" passed,\", \" \"] })), jsxs(\"span\", { children: [tests.total, \" total\"] })] }), jsxs(\"div\", { className: classNames(\"test-summary-curation\", [labelClassName]), children: [withMargin(\"Time:\"), duration / 1000, \"s\"] })] }));\n};\n\nvar previewActionsClassName = css({\n display: \"flex\",\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n zIndex: \"$overlay\",\n \"> *\": { marginLeft: \"$space$2\" },\n});\nvar INITIAL_STATE = {\n specs: {},\n status: \"initialising\",\n verbose: false,\n watchMode: true,\n suiteOnly: false,\n specsCount: 0,\n};\nvar SandpackTests = function (_a) {\n var _b = _a.verbose, verbose = _b === void 0 ? false : _b, _c = _a.watchMode, watchMode = _c === void 0 ? true : _c, style = _a.style, className = _a.className, onComplete = _a.onComplete, actionsChildren = _a.actionsChildren, _d = _a.showVerboseButton, showVerboseButton = _d === void 0 ? true : _d, _e = _a.showWatchButton, showWatchButton = _e === void 0 ? true : _e, _f = _a.hideTestsAndSupressLogs, hideTestsAndSupressLogs = _f === void 0 ? false : _f, props = __rest(_a, [\"verbose\", \"watchMode\", \"style\", \"className\", \"onComplete\", \"actionsChildren\", \"showVerboseButton\", \"showWatchButton\", \"hideTestsAndSupressLogs\"]);\n var theme = useSandpackTheme();\n var _g = useSandpackClient(), getClient = _g.getClient, iframe = _g.iframe, listen = _g.listen, sandpack = _g.sandpack;\n var _h = React.useState(__assign(__assign({}, INITIAL_STATE), { verbose: verbose, watchMode: watchMode })), state = _h[0], setState = _h[1];\n var runAllTests = React.useCallback(function () {\n setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\", specs: {} })); });\n var client = getClient();\n if (client) {\n client.dispatch({ type: \"run-all-tests\" });\n }\n }, [getClient]);\n var runSpec = React.useCallback(function () {\n setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\", specs: {} })); });\n var client = getClient();\n if (client) {\n client.dispatch({ type: \"run-tests\", path: sandpack.activeFile });\n }\n }, [getClient, sandpack.activeFile]);\n var testFileRegex = /.*\\.(test|spec)\\.[tj]sx?$/;\n var isSpecOpen = sandpack.activeFile.match(testFileRegex) !== null;\n React.useEffect(function () {\n var currentDescribeBlocks = [];\n var currentSpec = \"\";\n var unsubscribe = listen(function (data) {\n // Note: short-circuit if message isn't for the currently active spec when `suiteOnly` is true\n if (state.suiteOnly &&\n ((\"path\" in data && data.path !== sandpack.activeFile) ||\n (\"test\" in data &&\n \"path\" in data.test &&\n data.test.path !== sandpack.activeFile))) {\n return;\n }\n if (data.type === \"action\" &&\n data.action === \"clear-errors\" &&\n data.source === \"jest\") {\n currentSpec = data.path;\n return;\n }\n if (data.type === \"test\") {\n if (data.event === \"initialize_tests\") {\n currentDescribeBlocks = [];\n currentSpec = \"\";\n if (state.watchMode) {\n return runAllTests();\n }\n else {\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"idle\", specs: {} })); });\n }\n }\n if (data.event === \"test_count\") {\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { specsCount: data.count })); });\n }\n if (data.event === \"total_test_start\") {\n currentDescribeBlocks = [];\n return setState(function (oldState) { return (__assign(__assign({}, oldState), { status: \"running\" })); });\n }\n if (data.event === \"total_test_end\") {\n return setState(function (oldState) {\n if (onComplete !== undefined) {\n onComplete(oldState.specs);\n }\n return __assign(__assign({}, oldState), { status: \"complete\" });\n });\n }\n if (data.event === \"add_file\") {\n return setState(set([\"specs\", data.path], {\n describes: {},\n tests: {},\n name: data.path,\n }));\n }\n if (data.event === \"remove_file\") {\n return setState(function (oldState) {\n var specs = Object.entries(oldState.specs).reduce(function (acc, _a) {\n var _b;\n var key = _a[0], value = _a[1];\n if (key === data.path) {\n return acc;\n }\n else {\n return __assign(__assign({}, acc), (_b = {}, _b[key] = value, _b));\n }\n }, {});\n return __assign(__assign({}, oldState), { specs: specs });\n });\n }\n if (data.event === \"file_error\") {\n return setState(set([\"specs\", data.path, \"error\"], data.error));\n }\n if (data.event === \"describe_start\") {\n currentDescribeBlocks.push(data.blockName);\n var _a = splitTail(currentDescribeBlocks), describePath = _a[0], currentDescribe = _a[1];\n var spec = currentSpec;\n if (currentDescribe === undefined) {\n return;\n }\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n spec,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n ], false), {\n name: data.blockName,\n tests: {},\n describes: {},\n }));\n }\n if (data.event === \"describe_end\") {\n currentDescribeBlocks.pop();\n return;\n }\n if (data.event === \"add_test\") {\n var _b = splitTail(currentDescribeBlocks), describePath = _b[0], currentDescribe = _b[1];\n var test_1 = {\n status: \"idle\",\n errors: [],\n name: data.testName,\n blocks: __spreadArray([], currentDescribeBlocks, true),\n path: data.path,\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", data.path, \"tests\", data.testName], test_1));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n data.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n data.testName,\n ], false), test_1));\n }\n }\n if (data.event === \"test_start\") {\n var test_2 = data.test;\n var _c = splitTail(test_2.blocks), describePath = _c[0], currentDescribe = _c[1];\n var startedTest = {\n status: \"running\",\n name: test_2.name,\n blocks: test_2.blocks,\n path: test_2.path,\n errors: [],\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", test_2.path, \"tests\", test_2.name], startedTest));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n test_2.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n test_2.name,\n ], false), startedTest));\n }\n }\n if (data.event === \"test_end\") {\n var test_3 = data.test;\n var _d = splitTail(test_3.blocks), describePath = _d[0], currentDescribe = _d[1];\n var endedTest = {\n status: test_3.status,\n errors: test_3.errors,\n duration: test_3.duration,\n name: test_3.name,\n blocks: test_3.blocks,\n path: test_3.path,\n };\n if (currentDescribe === undefined) {\n return setState(set([\"specs\", test_3.path, \"tests\", test_3.name], endedTest));\n }\n else {\n return setState(set(__spreadArray(__spreadArray([\n \"specs\",\n test_3.path,\n \"describes\"\n ], flatMap(describePath, function (name) { return [name, \"describes\"]; }), true), [\n currentDescribe,\n \"tests\",\n test_3.name,\n ], false), endedTest));\n }\n }\n }\n });\n return unsubscribe;\n }, [state.suiteOnly, state.watchMode, sandpack.activeFile]);\n React.useEffect(function watchMode() {\n var unsunscribe = listen(function (_a) {\n var type = _a.type;\n if (type === \"done\" && state.watchMode) {\n if (isSpecOpen) {\n runSpec();\n }\n else {\n runAllTests();\n }\n }\n });\n return unsunscribe;\n }, [runSpec, runAllTests, state.watchMode, isSpecOpen]);\n var openSpec = function (file) {\n sandpack.setActiveFile(file);\n };\n var specs = Object.values(state.specs);\n var duration = getDuration(specs);\n var testResults = getAllTestResults(specs);\n var suiteResults = getAllSuiteResults(specs);\n var classNames = useClassNames();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"tests\", [className]), style: __assign(__assign({}, setTestTheme(theme.themeMode === \"dark\")), style) }, props, { children: [jsx(\"iframe\", { ref: iframe, style: { display: \"none\" }, title: \"Sandpack Tests\" }), jsx(Header$1, { hideTestsAndSupressLogs: hideTestsAndSupressLogs, setSuiteOnly: function () {\n return setState(function (s) { return (__assign(__assign({}, s), { suiteOnly: !s.suiteOnly })); });\n }, setVerbose: function () {\n return setState(function (s) { return (__assign(__assign({}, s), { verbose: !s.verbose })); });\n }, setWatchMode: function () {\n setState(function (s) { return (__assign(__assign({}, s), { watchMode: !s.watchMode })); });\n }, showSuitesOnly: state.specsCount > 1, showVerboseButton: showVerboseButton, showWatchButton: showWatchButton, status: state.status, suiteOnly: state.suiteOnly, verbose: state.verbose, watchMode: state.watchMode }), state.status === \"running\" || state.status === \"initialising\" ? (jsx(Loading, { showOpenInCodeSandbox: false })) : (jsxs(\"div\", { className: previewActionsClassName.toString(), children: [actionsChildren, jsx(RunButton, { onClick: state.suiteOnly ? runSpec : runAllTests })] })), jsx(\"div\", { className: containerClassName.toString(), children: specs.length === 0 && state.status === \"complete\" ? (jsxs(\"div\", { className: fileErrorContainerClassName.toString(), children: [jsx(\"p\", { children: \"No test files found.\" }), jsxs(\"p\", { children: [\"Test match:\", \" \", jsx(\"span\", { className: failTextClassName.toString(), children: testFileRegex.toString() })] })] })) : (jsxs(Fragment, { children: [jsx(Specs, { hideTestsAndSupressLogs: hideTestsAndSupressLogs, openSpec: openSpec, specs: specs, status: state.status, verbose: state.verbose }), state.status === \"complete\" && testResults.total > 0 && (jsx(Summary, { duration: duration, suites: suiteResults, tests: testResults }))] })) })] })));\n};\nvar containerClassName = css({\n padding: \"$space$4\",\n height: \"100%\",\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n fontFamily: \"$font$mono\",\n});\nvar fileErrorContainerClassName = css({\n fontWeight: \"bold\",\n color: \"$colors$base\",\n});\n\nvar SYNTAX_ERROR_PATTERN = [\"SyntaxError: \", \"Error in sandbox:\"];\nvar CLEAR_LOG = {\n id: \"random\",\n method: \"clear\",\n data: [\"Console was cleared\"],\n};\nvar TRANSFORMED_TYPE_KEY = \"@t\";\nvar TRANSFORMED_TYPE_KEY_ALTERNATE = \"#@t\";\nvar CIRCULAR_REF_KEY = \"@r\";\nvar MAX_LENGTH_STRING = 10000;\nvar MAX_NEST_LEVEL = 2;\nvar MAX_KEYS = 400;\nvar MAX_MESSAGE_COUNT = MAX_KEYS * 2;\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Const\nvar GLOBAL = (function getGlobal() {\n if (typeof globalThis !== \"undefined\")\n return globalThis; // modern standard\n if (typeof window !== \"undefined\")\n return window; // browser\n if (typeof global !== \"undefined\")\n return global; // Node.js\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== \"undefined\")\n return self; // Web Worker\n throw Error(\"Unable to locate global object\");\n})();\nvar ARRAY_BUFFER_SUPPORTED = typeof ArrayBuffer === \"function\";\nvar MAP_SUPPORTED = typeof Map === \"function\";\nvar SET_SUPPORTED = typeof Set === \"function\";\nvar Arithmetic;\n(function (Arithmetic) {\n Arithmetic[Arithmetic[\"infinity\"] = 0] = \"infinity\";\n Arithmetic[Arithmetic[\"minusInfinity\"] = 1] = \"minusInfinity\";\n Arithmetic[Arithmetic[\"minusZero\"] = 2] = \"minusZero\";\n})(Arithmetic || (Arithmetic = {}));\nvar transformers = {\n Arithmetic: function (data) {\n if (data === Arithmetic.infinity)\n return Infinity;\n if (data === Arithmetic.minusInfinity)\n return -Infinity;\n if (data === Arithmetic.minusZero)\n return -0;\n return data;\n },\n HTMLElement: function (data) {\n var sandbox = document.implementation.createHTMLDocument(\"sandbox\");\n try {\n var element = sandbox.createElement(data.tagName);\n element.innerHTML = data.innerHTML;\n for (var _i = 0, _a = Object.keys(data.attributes); _i < _a.length; _i++) {\n var attribute = _a[_i];\n try {\n element.setAttribute(attribute, data.attributes[attribute]);\n }\n catch (_b) {\n //\n }\n }\n return element;\n }\n catch (e) {\n return data;\n }\n },\n Function: function (data) {\n var tempFun = function () { };\n Object.defineProperty(tempFun, \"toString\", {\n value: function () { return \"function \".concat(data.name, \"() {\").concat(data.body, \"}\"); },\n });\n return tempFun;\n },\n \"[[NaN]]\": function () {\n return NaN;\n },\n \"[[undefined]]\": function () {\n return void 0;\n },\n \"[[Date]]\": function (val) {\n var date = new Date();\n date.setTime(val);\n return date;\n },\n \"[[RegExp]]\": function (val) {\n return new RegExp(val.src, val.flags);\n },\n \"[[Error]]\": function (val) {\n var Ctor = GLOBAL[val.name] || Error;\n var err = new Ctor(val.message);\n err.stack = val.stack;\n return err;\n },\n \"[[ArrayBuffer]]\": function (val) {\n if (ARRAY_BUFFER_SUPPORTED) {\n var buffer = new ArrayBuffer(val.length);\n var view = new Int8Array(buffer);\n view.set(val);\n return buffer;\n }\n return val;\n },\n \"[[TypedArray]]\": function (val) {\n return typeof GLOBAL[val.ctorName] === \"function\"\n ? new GLOBAL[val.ctorName](val.arr)\n : val.arr;\n },\n \"[[Map]]\": function (val) {\n if (MAP_SUPPORTED) {\n // NOTE: new Map(iterable) is not supported by all browsers\n var map = new Map();\n for (var i = 0; i < val.length; i += 2)\n map.set(val[i], val[i + 1]);\n return map;\n }\n var kvArr = [];\n // @ts-ignore\n for (var j = 0; j < val.length; j += 2)\n kvArr.push([val[i], val[i + 1]]);\n return kvArr;\n },\n \"[[Set]]\": function (val) {\n if (SET_SUPPORTED) {\n // NOTE: new Set(iterable) is not supported by all browsers\n var set = new Set();\n for (var i = 0; i < val.length; i++)\n set.add(val[i]);\n return set;\n }\n return val;\n },\n};\n\n/* eslint-disable @typescript-eslint/array-type */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar formatSymbols = function (message) {\n var _a;\n if (typeof message === \"string\" ||\n typeof message === \"number\" ||\n message === null) {\n return message;\n }\n else if (Array.isArray(message)) {\n return message.map(formatSymbols);\n }\n else if (typeof message == \"object\" && TRANSFORMED_TYPE_KEY in message) {\n var type = message[TRANSFORMED_TYPE_KEY];\n var transform = transformers[type];\n return transform(message.data);\n }\n else if (typeof message == \"object\" &&\n TRANSFORMED_TYPE_KEY_ALTERNATE in message) {\n var type = message[TRANSFORMED_TYPE_KEY_ALTERNATE];\n var transform = transformers[type];\n return transform(message.data);\n }\n else if (typeof message == \"object\" &&\n ((_a = message.constructor) === null || _a === void 0 ? void 0 : _a.name) === \"NodeList\") {\n var NodeList_1 = {};\n Object.entries(message).forEach(function (_a) {\n var key = _a[0], value = _a[1];\n // @ts-ignore\n NodeList_1[key] = formatSymbols(value);\n });\n return NodeList_1;\n }\n return message;\n};\nvar arrayToString = function (output, references, level) {\n var mergeArray = output.reduce(function (acc, curr, index) {\n return \"\".concat(acc).concat(index ? \", \" : \"\").concat(fromConsoleToString(curr, references, level));\n }, \"\");\n return \"[\".concat(mergeArray, \"]\");\n};\nvar objectToString = function (output, references, level) {\n var constructorName = output.constructor.name !== \"Object\" ? \"\".concat(output.constructor.name, \" \") : \"\";\n if (level > MAX_NEST_LEVEL) {\n return constructorName;\n }\n var entries = Object.entries(output);\n var formattedObject = Object.entries(output).reduce(function (acc, _a, index) {\n var key = _a[0], value = _a[1];\n var comma = index === 0 ? \"\" : \", \";\n var breakLine = entries.length > 10 ? \"\\n \" : \"\";\n var formatted = fromConsoleToString(value, references, level);\n if (index === MAX_KEYS) {\n return acc + breakLine + \"...\";\n }\n else if (index > MAX_KEYS) {\n return acc;\n }\n return acc + \"\".concat(comma).concat(breakLine).concat(key, \": \") + formatted;\n }, \"\");\n return \"\".concat(constructorName, \"{ \").concat(formattedObject).concat(entries.length > 10 ? \"\\n\" : \" \", \"}\");\n};\nvar fromConsoleToString = function (message, references, level) {\n var _a;\n if (level === void 0) { level = 0; }\n try {\n var output_1 = formatSymbols(message);\n if (Array.isArray(output_1)) {\n return arrayToString(output_1, references, level + 1);\n }\n switch (typeof output_1) {\n case \"string\":\n return \"\\\"\".concat(output_1, \"\\\"\").slice(0, MAX_LENGTH_STRING);\n case \"number\":\n case \"function\":\n case \"symbol\":\n return output_1.toString();\n case \"boolean\":\n return String(output_1);\n case \"undefined\":\n return \"undefined\";\n case \"object\":\n default:\n if (output_1 instanceof RegExp ||\n output_1 instanceof Error ||\n output_1 instanceof Date) {\n return output_1.toString();\n }\n if (output_1 === null) {\n return String(null);\n }\n if (output_1 instanceof HTMLElement) {\n return output_1.outerHTML.slice(0, MAX_LENGTH_STRING);\n }\n if (Object.entries(output_1).length === 0) {\n return \"{}\";\n }\n if (CIRCULAR_REF_KEY in output_1) {\n if (level > MAX_NEST_LEVEL) {\n return \"Unable to print information\";\n }\n var newMessage = references[output_1[CIRCULAR_REF_KEY]];\n return fromConsoleToString(newMessage, references, level + 1);\n }\n if (((_a = output_1.constructor) === null || _a === void 0 ? void 0 : _a.name) === \"NodeList\") {\n var length_1 = output_1.length;\n var nodes = new Array(length_1).fill(null).map(function (_, index) {\n return fromConsoleToString(output_1[index], references);\n });\n return \"NodeList(\".concat(output_1.length, \")[\").concat(nodes, \"]\");\n }\n return objectToString(output_1, references, level + 1);\n }\n }\n catch (_b) {\n return \"Unable to print information\";\n }\n};\n\nvar getType = function (message) {\n switch (message) {\n case \"warn\":\n return \"warning\";\n case \"clear\":\n return \"clear\";\n case \"error\":\n return \"error\";\n case \"log\":\n case \"info\":\n default:\n return \"info\";\n }\n};\n\nvar _a;\nvar ConsoleList = function (_a) {\n var data = _a.data;\n var classNames = useClassNames();\n return (jsx(Fragment, { children: data.map(function (_a, logIndex, references) {\n var data = _a.data, id = _a.id, method = _a.method;\n if (!data)\n return null;\n if (Array.isArray(data)) {\n return (jsx(React.Fragment, { children: data.map(function (msg, msgIndex) {\n var fixReferences = references.slice(logIndex, references.length);\n return (jsx(\"div\", { className: classNames(\"console-item\", [\n consoleItemClassName({ variant: getType(method) }),\n ]), children: jsx(CodeMirror, { code: method === \"clear\"\n ? msg\n : fromConsoleToString(msg, fixReferences), fileType: \"js\", initMode: \"user-visible\", showReadOnly: false, readOnly: true, wrapContent: true }) }, \"\".concat(id, \"-\").concat(msgIndex)));\n }) }, id));\n }\n return null;\n }) }));\n};\nvar consoleItemClassName = css((_a = {\n width: \"100%\",\n padding: \"$space$3 $space$2\",\n fontSize: \".8em\",\n position: \"relative\",\n \"&:not(:first-child):after\": {\n content: \"\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n height: 1,\n background: \"$colors$surface3\",\n },\n /**\n * Editor reset\n */\n \".sp-cm\": {\n padding: 0,\n },\n \".cm-editor\": {\n background: \"none\",\n },\n \".cm-content\": {\n padding: 0,\n }\n },\n _a[\".\".concat(THEME_PREFIX, \"-pre-placeholder\")] = {\n margin: \"0 !important\",\n fontSize: \"1em\",\n },\n _a.variants = {\n variant: {\n error: {\n color: \"$colors$error\",\n background: \"$colors$errorSurface\",\n \"&:not(:first-child):after\": {\n background: \"$colors$error\",\n opacity: 0.07,\n },\n },\n warning: {\n color: \"$colors$warning\",\n background: \"$colors$warningSurface\",\n \"&:not(:first-child):after\": {\n background: \"$colors$warning\",\n opacity: 0.07,\n },\n },\n clear: {\n fontStyle: \"italic\",\n },\n info: {},\n },\n },\n _a));\n\nvar wrapperClassName = css({\n justifyContent: \"space-between\",\n borderBottom: \"1px solid $colors$surface2\",\n padding: \"0 $space$2\",\n fontFamily: \"$font$mono\",\n height: \"$layout$headerHeight\",\n minHeight: \"$layout$headerHeight\",\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n});\nvar flexClassName = css({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"$space$2\",\n});\nvar Header = function (_a) {\n var currentTab = _a.currentTab, setCurrentTab = _a.setCurrentTab, node = _a.node;\n var classNames = useClassNames();\n var buttonsClassName = classNames(\"console-header-button\", [\n buttonClassName,\n roundedButtonClassName,\n css({ padding: \"$space$1 $space$3\" }),\n ]);\n return (jsxs(\"div\", { className: classNames(\"console-header\", [\n wrapperClassName,\n flexClassName,\n ]), children: [jsxs(\"p\", { className: classNames(\"console-header-title\", [\n css({\n lineHeight: 1,\n margin: 0,\n color: \"$colors$base\",\n fontSize: \"$font$size\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"$space$2\",\n }),\n ]), children: [jsx(ConsoleIcon, {}), jsx(\"span\", { children: \"Terminal\" })] }), node && (jsxs(\"div\", { className: classNames(\"console-header-actions\", [flexClassName]), children: [jsx(\"button\", { className: buttonsClassName, \"data-active\": currentTab === \"server\", onClick: function () { return setCurrentTab(\"server\"); }, type: \"button\", children: \"Server\" }), jsx(\"button\", { className: buttonsClassName, \"data-active\": currentTab === \"client\", onClick: function () { return setCurrentTab(\"client\"); }, type: \"button\", children: \"Client\" })] }))] }));\n};\n\n/**\n * It provides an interface to consume the logs from a sandpack client.\n *\n * @category Hooks\n */\nvar useSandpackConsole = function (_a) {\n var clientId = _a.clientId, _b = _a.maxMessageCount, maxMessageCount = _b === void 0 ? MAX_MESSAGE_COUNT : _b, _c = _a.showSyntaxError, showSyntaxError = _c === void 0 ? false : _c, _d = _a.resetOnPreviewRestart, resetOnPreviewRestart = _d === void 0 ? false : _d;\n var _e = React.useState([]), logs = _e[0], setLogs = _e[1];\n var listen = useSandpack().listen;\n React.useEffect(function () {\n var unsubscribe = listen(function (message) {\n if (resetOnPreviewRestart && message.type === \"start\") {\n setLogs([]);\n }\n else if (message.type === \"console\" && message.codesandbox) {\n var payloadLog = Array.isArray(message.log)\n ? message.log\n : [message.log];\n if (payloadLog.find(function (_a) {\n var method = _a.method;\n return method === \"clear\";\n })) {\n return setLogs([CLEAR_LOG]);\n }\n var logsMessages_1 = showSyntaxError\n ? payloadLog\n : payloadLog.filter(function (messageItem) {\n var _a, _b, _c;\n var messagesWithoutSyntaxErrors = (_c = (_b = (_a = messageItem === null || messageItem === void 0 ? void 0 : messageItem.data) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.call(_a, function (dataItem) {\n if (typeof dataItem !== \"string\")\n return true;\n var matches = SYNTAX_ERROR_PATTERN.filter(function (lookFor) {\n return dataItem.startsWith(lookFor);\n });\n return matches.length === 0;\n })) !== null && _c !== void 0 ? _c : [];\n return messagesWithoutSyntaxErrors.length > 0;\n });\n if (!logsMessages_1)\n return;\n setLogs(function (prev) {\n var messages = __spreadArray(__spreadArray([], prev, true), logsMessages_1, true).filter(function (value, index, self) {\n return index === self.findIndex(function (s) { return s.id === value.id; });\n });\n while (messages.length > maxMessageCount) {\n messages.shift();\n }\n return messages;\n });\n }\n }, clientId);\n return unsubscribe;\n }, [showSyntaxError, maxMessageCount, clientId, resetOnPreviewRestart]);\n return { logs: logs, reset: function () { return setLogs([]); } };\n};\n\n/**\n * `SandpackConsole` is a Sandpack devtool that allows printing\n * the console logs from a Sandpack client. It is designed to be\n * a light version of a browser console, which means that it's\n * limited to a set of common use cases you may encounter when coding.\n */\nvar SandpackConsole = React.forwardRef(function (_a, ref) {\n var _b;\n var _c = _a.showHeader, showHeader = _c === void 0 ? true : _c, _d = _a.showSyntaxError, showSyntaxError = _d === void 0 ? false : _d, maxMessageCount = _a.maxMessageCount, onLogsChange = _a.onLogsChange, className = _a.className; _a.showSetupProgress; var _f = _a.showResetConsoleButton, showResetConsoleButton = _f === void 0 ? true : _f, _g = _a.showRestartButton, showRestartButton = _g === void 0 ? true : _g, _h = _a.resetOnPreviewRestart, resetOnPreviewRestart = _h === void 0 ? false : _h, _j = _a.actionsChildren, actionsChildren = _j === void 0 ? jsx(Fragment, {}) : _j, _k = _a.standalone, standalone = _k === void 0 ? false : _k, props = __rest(_a, [\"showHeader\", \"showSyntaxError\", \"maxMessageCount\", \"onLogsChange\", \"className\", \"showSetupProgress\", \"showResetConsoleButton\", \"showRestartButton\", \"resetOnPreviewRestart\", \"actionsChildren\", \"standalone\"]);\n var environment = useSandpack().sandpack.environment;\n var _l = useSandpackClient(), iframe = _l.iframe, internalClientId = _l.clientId;\n var restart = useSandpackShell().restart;\n var _m = React.useState(environment === \"node\" ? \"server\" : \"client\"), currentTab = _m[0], setCurrentTab = _m[1];\n var clientId = standalone ? internalClientId : undefined;\n var _o = useSandpackConsole({\n maxMessageCount: maxMessageCount,\n showSyntaxError: showSyntaxError,\n resetOnPreviewRestart: resetOnPreviewRestart,\n clientId: clientId,\n }), consoleData = _o.logs, resetConsole = _o.reset;\n var _p = useSandpackShellStdout({\n maxMessageCount: maxMessageCount,\n resetOnPreviewRestart: resetOnPreviewRestart,\n clientId: clientId,\n }), stdoutData = _p.logs, resetStdout = _p.reset;\n var wrapperRef = React.useRef(null);\n React.useEffect(function () {\n onLogsChange === null || onLogsChange === void 0 ? void 0 : onLogsChange(consoleData);\n if (wrapperRef.current) {\n wrapperRef.current.scrollTop = wrapperRef.current.scrollHeight;\n }\n }, [onLogsChange, consoleData, stdoutData, currentTab]);\n var isServerTab = currentTab === \"server\";\n var isNodeEnvironment = environment === \"node\";\n React.useImperativeHandle(ref, function () { return ({\n reset: function () {\n resetConsole();\n resetStdout();\n },\n }); });\n var classNames = useClassNames();\n return (jsxs(SandpackStack, __assign({ className: classNames(\"console\", [\n css((_b = {\n height: \"100%\",\n background: \"$surface1\",\n iframe: { display: \"none\" }\n },\n _b[\".\".concat(THEME_PREFIX, \"-bridge-frame\")] = {\n display: \"block\",\n border: 0,\n position: \"absolute\",\n left: \"$space$2\",\n bottom: \"$space$2\",\n zIndex: \"$top\",\n height: 12,\n width: \"30%\",\n mixBlendMode: \"multiply\",\n pointerEvents: \"none\",\n },\n _b)),\n className,\n ]) }, props, { children: [showHeader && isNodeEnvironment && (jsx(Header, { currentTab: currentTab, node: isNodeEnvironment, setCurrentTab: setCurrentTab })), jsx(\"div\", { ref: wrapperRef, className: classNames(\"console-list\", [\n css({ overflow: \"auto\", scrollBehavior: \"smooth\" }),\n ]), children: isServerTab ? (jsx(StdoutList, { data: stdoutData })) : (jsx(ConsoleList, { data: consoleData })) }), jsxs(\"div\", { className: classNames(\"console-actions\", [\n css({\n position: \"absolute\",\n bottom: \"$space$2\",\n right: \"$space$2\",\n display: \"flex\",\n gap: \"$space$2\",\n }),\n ]), children: [actionsChildren, showRestartButton && isServerTab && (jsx(RoundedButton, { onClick: function () {\n restart();\n resetConsole();\n resetStdout();\n }, children: jsx(RestartIcon, {}) })), showResetConsoleButton && (jsx(RoundedButton, { onClick: function () {\n if (currentTab === \"client\") {\n resetConsole();\n }\n else {\n resetStdout();\n }\n }, children: jsx(CleanIcon, {}) }))] }), standalone && (jsxs(Fragment, { children: [jsx(DependenciesProgress, { clientId: clientId }), jsx(\"iframe\", { ref: iframe })] }))] })));\n});\n\nvar Sandpack = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j;\n var options = _a.options, template = _a.template, customSetup = _a.customSetup, files = _a.files, theme = _a.theme, props = __rest(_a, [\"options\", \"template\", \"customSetup\", \"files\", \"theme\"]);\n options !== null && options !== void 0 ? options : (options = {});\n (_b = options.resizablePanels) !== null && _b !== void 0 ? _b : (options.resizablePanels = true);\n (_c = options.editorWidthPercentage) !== null && _c !== void 0 ? _c : (options.editorWidthPercentage = 50);\n (_d = options.showConsole) !== null && _d !== void 0 ? _d : (options.showConsole = false);\n var rtlLayout = (_e = options === null || options === void 0 ? void 0 : options.rtl) !== null && _e !== void 0 ? _e : false;\n var codeEditorOptions = {\n showTabs: options.showTabs,\n showLineNumbers: options.showLineNumbers,\n showInlineErrors: options.showInlineErrors,\n wrapContent: options.wrapContent,\n closableTabs: options.closableTabs,\n initMode: options.initMode,\n extensions: (_f = options.codeEditor) === null || _f === void 0 ? void 0 : _f.extensions,\n extensionsKeymap: (_g = options.codeEditor) === null || _g === void 0 ? void 0 : _g.extensionsKeymap,\n readOnly: options.readOnly,\n showReadOnly: options.showReadOnly,\n additionalLanguages: (_h = options.codeEditor) === null || _h === void 0 ? void 0 : _h.additionalLanguages,\n };\n var providerOptions = {\n /**\n * TS-why: Type 'string | number | symbol' is not assignable to type 'string'\n */\n activeFile: options.activeFile,\n visibleFiles: options.visibleFiles,\n recompileMode: options.recompileMode,\n recompileDelay: options.recompileDelay,\n autorun: options.autorun,\n autoReload: options.autoReload,\n bundlerURL: options.bundlerURL,\n startRoute: options.startRoute,\n skipEval: options.skipEval,\n fileResolver: options.fileResolver,\n initMode: options.initMode,\n initModeObserverOptions: options.initModeObserverOptions,\n externalResources: options.externalResources,\n logLevel: options.logLevel,\n classes: options.classes,\n experimental_enableServiceWorker: options.experimental_enableServiceWorker,\n experimental_enableStableServiceWorkerId: options.experimental_enableStableServiceWorkerId,\n };\n /**\n * Console\n */\n var _k = React.useState(options.showConsole), consoleVisibility = _k[0], setConsoleVisibility = _k[1];\n var _l = React.useState(0), counter = _l[0], setCounter = _l[1];\n var hasRightColumn = options.showConsole || options.showConsoleButton;\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n var templateFiles = (_j = SANDBOX_TEMPLATES[template]) !== null && _j !== void 0 ? _j : {};\n var mode = ((options === null || options === void 0 ? void 0 : options.layout)\n ? options === null || options === void 0 ? void 0 : options.layout\n : \"mode\" in templateFiles\n ? templateFiles.mode\n : \"preview\");\n var actionsChildren = options.showConsoleButton ? (jsx(ConsoleCounterButton, { counter: counter, onClick: function () { return setConsoleVisibility(function (prev) { return !prev; }); } })) : undefined;\n /**\n * Resizable\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var dragEventTargetRef = React.useRef(null);\n var _m = React.useState(options.editorWidthPercentage), horizontalSize = _m[0], setHorizontalSize = _m[1];\n var _o = React.useState(70), verticalSize = _o[0], setVerticalSize = _o[1];\n var RightColumn = hasRightColumn ? SandpackStack : React.Fragment;\n var rightColumnStyle = {\n flexGrow: 100 - horizontalSize,\n flexShrink: 100 - horizontalSize,\n flexBasis: 0,\n width: 100 - horizontalSize + \"%\",\n gap: consoleVisibility ? 1 : 0,\n height: options.editorHeight, // use the original editor height\n };\n var topRowStyle = hasRightColumn\n ? {\n flexGrow: verticalSize,\n flexShrink: verticalSize,\n flexBasis: 0,\n overflow: \"hidden\",\n }\n : rightColumnStyle;\n var onDragMove = function (event) {\n if (!dragEventTargetRef.current)\n return;\n var container = dragEventTargetRef.current.parentElement;\n if (!container)\n return;\n var direction = dragEventTargetRef.current.dataset.direction;\n var isHorizontal = direction === \"horizontal\";\n var _a = container.getBoundingClientRect(), left = _a.left, top = _a.top, height = _a.height, width = _a.width;\n var offset = isHorizontal\n ? ((event.clientX - left) / width) * 100\n : ((event.clientY - top) / height) * 100;\n var boundaries = Math.min(Math.max(offset, 25), 75);\n if (isHorizontal) {\n setHorizontalSize(rtlLayout ? 100 - boundaries : boundaries);\n }\n else {\n setVerticalSize(boundaries);\n }\n container.querySelectorAll(\".\".concat(THEME_PREFIX, \"-stack\")).forEach(function (item) {\n item.style.pointerEvents = \"none\";\n });\n };\n var stopDragging = function () {\n var _a;\n var container = (_a = dragEventTargetRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;\n if (!container)\n return;\n container.querySelectorAll(\".\".concat(THEME_PREFIX, \"-stack\")).forEach(function (item) {\n item.style.pointerEvents = \"\";\n });\n dragEventTargetRef.current = null;\n };\n React.useEffect(function () {\n if (!(options === null || options === void 0 ? void 0 : options.resizablePanels))\n return;\n document.body.addEventListener(\"mousemove\", onDragMove);\n document.body.addEventListener(\"mouseup\", stopDragging);\n return function () {\n document.body.removeEventListener(\"mousemove\", onDragMove);\n document.body.removeEventListener(\"mouseup\", stopDragging);\n };\n }, [options]);\n React.useEffect(function () {\n var _a;\n setConsoleVisibility((_a = options === null || options === void 0 ? void 0 : options.showConsole) !== null && _a !== void 0 ? _a : false);\n }, [options.showConsole]);\n var rightColumnProps = hasRightColumn\n ? { className: THEME_PREFIX + \"-preset-column\", style: rightColumnStyle }\n : {};\n var classNames = useClassNames();\n return (jsx(SandpackProvider, __assign({ customSetup: customSetup, files: files, options: providerOptions, template: template, theme: theme }, props, { children: jsxs(SandpackLayout, { className: rtlLayout ? classNames(\"rtl-layout\", [rtlLayoutClassName]) : \"\", children: [jsx(SandpackCodeEditor, __assign({}, codeEditorOptions, { style: {\n height: options.editorHeight,\n flexGrow: horizontalSize,\n flexShrink: horizontalSize,\n flexBasis: 0,\n overflow: \"hidden\",\n } })), options.resizablePanels && (jsx(\"div\", { className: classNames(\"resize-handler\", [\n dragHandler({ direction: \"horizontal\" }),\n ]), \"data-direction\": \"horizontal\", onMouseDown: function (event) {\n dragEventTargetRef.current = event.target;\n }, style: {\n left: \"calc(\".concat(rtlLayout ? 100 - horizontalSize : horizontalSize, \"% - 5px)\"),\n } })), jsxs(RightColumn, __assign({}, rightColumnProps, { children: [mode === \"preview\" && (jsx(SandpackPreview, { actionsChildren: actionsChildren, showNavigator: options.showNavigator, showRefreshButton: options.showRefreshButton, style: topRowStyle })), mode === \"tests\" && (jsx(SandpackTests, { actionsChildren: actionsChildren, style: topRowStyle })), mode === \"console\" && (jsx(SandpackConsole, { actionsChildren: actionsChildren, style: topRowStyle, standalone: true })), (options.showConsoleButton || consoleVisibility) && (jsxs(Fragment, { children: [options.resizablePanels && consoleVisibility && (jsx(\"div\", { className: classNames(\"resize-handler\", [\n dragHandler({ direction: \"vertical\" }),\n ]), \"data-direction\": \"vertical\", onMouseDown: function (event) {\n dragEventTargetRef.current = event.target;\n }, style: { top: \"calc(\".concat(verticalSize, \"% - 5px)\") } })), jsx(\"div\", { className: classNames(\"console-wrapper\", [consoleWrapper]), style: {\n flexGrow: consoleVisibility ? 100 - verticalSize : 0,\n flexShrink: consoleVisibility ? 100 - verticalSize : 0,\n flexBasis: 0,\n }, children: jsx(SandpackConsole, { onLogsChange: function (logs) { return setCounter(logs.length); }, showHeader: false }) })] }))] }))] }) }), template));\n};\nvar dragHandler = css({\n position: \"absolute\",\n zIndex: \"$top\",\n variants: {\n direction: {\n vertical: {\n right: 0,\n left: 0,\n height: 10,\n cursor: \"ns-resize\",\n },\n horizontal: {\n top: 0,\n bottom: 0,\n width: 10,\n cursor: \"ew-resize\",\n },\n },\n },\n \"@media screen and (max-width: 768px)\": {\n display: \"none\",\n },\n});\nvar ConsoleCounterButton = function (_a) {\n var onClick = _a.onClick, counter = _a.counter;\n return (jsxs(RoundedButton, { className: buttonCounter.toString(), onClick: onClick, children: [jsx(ConsoleIcon, {}), counter > 0 && jsx(\"strong\", { children: counter })] }));\n};\nvar buttonCounter = css({\n position: \"relative\",\n strong: {\n background: \"$colors$clickable\",\n color: \"$colors$surface1\",\n minWidth: 12,\n height: 12,\n padding: \"0 2px\",\n borderRadius: 12,\n fontSize: 8,\n lineHeight: \"12px\",\n position: \"absolute\",\n top: 0,\n right: 0,\n fontWeight: \"normal\",\n },\n});\nvar consoleWrapper = css({\n width: \"100%\",\n overflow: \"hidden\",\n});\nvar rtlLayoutClassName = css({\n flexDirection: \"row-reverse\",\n \"@media screen and (max-width: 768px)\": {\n flexFlow: \"wrap-reverse !important\",\n flexDirection: \"initial\",\n },\n});\n\nexport { ANGULAR_TEMPLATE, ASTRO_TEMPLATE, BackwardIcon, CleanIcon, CloseIcon, CodeMirror as CodeEditor, ConsoleIcon, DependenciesProgress, DirectoryIconClosed, DirectoryIconOpen, ErrorOverlay, ExportIcon, FADE_ANIMATION_DURATION, FileIcon, FileTabs, ForwardIcon, LoadingOverlay, Navigator, OpenInCodeSandboxButton, REACT_TEMPLATE, REACT_TYPESCRIPT_TEMPLATE, RefreshIcon, RestartIcon, RoundedButton, RunButton$1 as RunButton, RunIcon, SANDBOX_TEMPLATES, SANDPACK_THEMES, SOLID_TEMPLATE, SVELTE_TEMPLATE, Sandpack, SandpackCodeEditor, SandpackCodeViewer, SandpackConsole, SandpackConsumer, SandpackFileExplorer, SandpackLayout, SandpackPreview, SandpackProvider, Sandpack$1 as SandpackReactContext, SandpackStack, SandpackTests, SandpackThemeConsumer, SandpackThemeContext, SandpackThemeProvider, SandpackTranspiledCode, SignInIcon, SignOutIcon, TEST_TYPESCRIPT_TEMPLATE, UnstyledOpenInCodeSandboxButton, VANILLA_TEMPLATE, VANILLA_TYPESCRIPT_TEMPLATE, VUE_TEMPLATE, defaultDark, defaultLight, getCssText as getSandpackCssText, layoutClassName, stackClassName, tabButton, useActiveCode, useClassNames, useErrorMessage, useLoadingOverlayState, useSandpack, useSandpackClient, useSandpackConsole, useSandpackNavigation, useSandpackPreviewProgress, useSandpackShell, useSandpackShellStdout, useSandpackTheme, useTranspiledCode };\n","var amethyst = {\n colors: {\n surface1: \"#000000\",\n surface2: \"#0a0a23\",\n surface3: \"#3b3b4f\",\n clickable: \"#dfdfe2\",\n base: \"#ffffff\",\n disabled: \"#858591\",\n hover: \"#ffffff\",\n accent: \"#a26cd6\",\n error: \"#ffffff\",\n errorSurface: \"#3b3b4f\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#858591\",\n fontStyle: \"italic\"\n },\n keyword: \"#a26cdd\",\n tag: \"#f07178\",\n punctuation: \"#99c9ff\",\n definition: \"#ffffff\",\n property: \"#99c9ff\",\n static: \"#f78c6c\",\n string: \"#57d1b7\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"12px\",\n lineHeight: \"18px\"\n }\n};\n\nvar aquaBlue = {\n colors: {\n surface1: \"#f8f9fb\",\n surface2: \"#EBEDF0\",\n surface3: \"#e4e7eb\",\n clickable: \"#737373\",\n base: \"#323232\",\n disabled: \"#C5C5C5\",\n hover: \"#1f2933\",\n accent: \"#2e7692\"\n },\n syntax: {\n plain: \"#1F2933\",\n comment: { color: \"#A7B6C2\", fontStyle: \"italic\" },\n keyword: \"#1A56DB\",\n tag: \"#1A56DB\",\n punctuation: \"#394b59\",\n definition: \"#A23DAD\",\n property: \"#2e7692\",\n static: \"#1A56DB\",\n string: \"#1992D4\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar atomDark = {\n colors: {\n surface1: \"#282c34\",\n surface2: \"#21252b\",\n surface3: \"#2c313c\",\n clickable: \"#a8b1c2\",\n base: \"#a8b1c2\",\n disabled: \"#4d4d4d\",\n hover: \"#e8effc\",\n accent: \"#c678dd\",\n error: \"#e06c75\",\n errorSurface: \"#ffeceb\"\n },\n syntax: {\n plain: \"#a8b1c2\",\n comment: {\n color: \"#757575\",\n fontStyle: \"italic\"\n },\n keyword: \"#c678dd\",\n tag: \"#e06c75\",\n punctuation: \"#a8b1c2\",\n definition: \"#62aeef\",\n property: \"#d19a66\",\n static: \"#a8b1c2\",\n string: \"#98c379\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar cobalt2 = {\n colors: {\n surface1: \"#193549\",\n surface2: \"#0d3a58\",\n surface3: \"#1f4662\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#C5C5C5\",\n hover: \"#ffffff\",\n accent: \"#ffc600\",\n error: \"#a22929\",\n errorSurface: \"#0d3a58\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#0088ff\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff9d00\",\n tag: \"#9effff\",\n punctuation: \"#e1efff\",\n definition: \"#ffc600\",\n property: \"#ffc600\",\n static: \"#ffee80\",\n string: \"#a5ff90\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Operator Mono\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar cyberpunk = {\n colors: {\n surface1: \"#051c30\",\n surface2: \"#042f40\",\n surface3: \"#042f40\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#C5C5C5\",\n hover: \"#ffffff\",\n accent: \"#fdf500\",\n error: \"#ff003c\",\n errorSurface: \"#051c30\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#1ac5b0\",\n fontStyle: \"italic\"\n },\n keyword: \"#fdf500\",\n tag: \"#ffc600\",\n punctuation: \"#afd7fa\",\n definition: \"#ffc600\",\n property: \"#fdf500\",\n static: \"#e455ae\",\n string: \"#37ebf3\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar dracula = {\n colors: {\n surface1: \"#282a36\",\n surface2: \"#44475a\",\n surface3: \"#44475a\",\n clickable: \"#6272a4\",\n base: \"#f8f8f2\",\n disabled: \"#6272a4\",\n hover: \"#f8f8f2\",\n accent: \"#bd93f9\",\n error: \"#f8f8f2\",\n errorSurface: \"#44475a\"\n },\n syntax: {\n plain: \"#f8f8f2\",\n comment: {\n color: \"#6272a4\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff79c6\",\n tag: \"#ff79c6\",\n punctuation: \"#ff79c6\",\n definition: \"#f8f8f2\",\n property: \"#50fa7b\",\n static: \"#bd93f9\",\n string: \"#f1fa8c\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// ecoLight is inspired by love for green and associative environmental colors\nvar ecoLight = {\n colors: {\n surface1: \"#eae8e8\",\n surface2: \"#00997761\",\n surface3: \"#ffffff5e\",\n clickable: \"#421010\",\n base: \"#421010\",\n disabled: \"#C5C5C5\",\n hover: \"#4D4D4D\",\n accent: \"#009977\",\n error: \"#ff453a\",\n errorSurface: \"#e8cac6\"\n },\n syntax: {\n plain: \"#151515\",\n comment: {\n color: \"#a9a7a7\",\n fontStyle: \"italic\"\n },\n keyword: \"#0971F1\",\n tag: \"#097104\",\n punctuation: \"#3B3B3B\",\n definition: \"#042d60\",\n property: \"#9013fe\",\n static: \"#FF453A\",\n string: \"#f5a623\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar freeCodeCampDark = {\n colors: {\n surface1: \"#2a2a40\",\n surface2: \"#0a0a23\",\n surface3: \"#3b3b4f\",\n clickable: \"#dfdfe2\",\n base: \"#ffffff\",\n disabled: \"#858591\",\n hover: \"#ffffff\",\n accent: \"#dbb8ff\",\n error: \"#ffffff\",\n errorSurface: \"#3b3b4f\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#858591\",\n fontStyle: \"italic\"\n },\n keyword: \"#dbb8ff\",\n tag: \"#f07178\",\n punctuation: \"#99c9ff\",\n definition: \"#ffffff\",\n property: \"#99c9ff\",\n static: \"#f78c6c\",\n string: \"#acd157\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar githubLight = {\n colors: {\n surface1: \"#ffffff\",\n surface2: \"#F3F3F3\",\n surface3: \"#f5f5f5\",\n clickable: \"#959da5\",\n base: \"#24292e\",\n disabled: \"#d1d4d8\",\n hover: \"#24292e\",\n accent: \"#24292e\"\n },\n syntax: {\n keyword: \"#d73a49\",\n property: \"#005cc5\",\n plain: \"#24292e\",\n static: \"#032f62\",\n string: \"#032f62\",\n definition: \"#6f42c1\",\n punctuation: \"#24292e\",\n tag: \"#22863a\",\n comment: {\n color: \"#6a737d\",\n fontStyle: \"normal\"\n }\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// Reference: https://github.com/gruvbox-community/gruvbox\nvar gruvboxDark = {\n colors: {\n surface1: \"#282828\",\n surface2: \"#3c3836\",\n surface3: \"#3c3836\",\n clickable: \"#ebdbb2\",\n base: \"#ebdbb2\",\n disabled: \"#928374\",\n hover: \"#fe8019\",\n accent: \"#d65d0e\",\n error: \"#ff453a\",\n errorSurface: \"#3c3836\"\n },\n syntax: {\n plain: \"#ebdbb2\",\n comment: {\n color: \"#928374\",\n fontStyle: \"italic\"\n },\n keyword: \"#ff453a\",\n tag: \"#83a598\",\n punctuation: \"#ebdbb2\",\n definition: \"#83a598\",\n property: \"#fabd2f\",\n static: \"#ebdbb2\",\n string: \"#b8bb26\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\n// Reference: https://github.com/gruvbox-community/gruvbox\nvar gruvboxLight = {\n colors: {\n surface1: \"#fbf1c7\",\n surface2: \"#ebdbb2\",\n surface3: \"#ebdbb2\",\n clickable: \"#808080\",\n base: \"#3c3836\",\n disabled: \"#928374\",\n hover: \"#af3a03\",\n accent: \"#d65d0e\",\n error: \"#9d0006\",\n errorSurface: \"#ebdbb2\"\n },\n syntax: {\n plain: \"#3c3836\",\n comment: {\n color: \"#928374\",\n fontStyle: \"italic\"\n },\n keyword: \"#9d0006\",\n tag: \"#076678\",\n punctuation: \"#3c3836\",\n definition: \"#076678\",\n property: \"#b57614\",\n static: \"#3c3836\",\n string: \"#79740e\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar levelUp = {\n colors: {\n surface1: \"#191324\",\n surface2: \"#261e33\",\n surface3: \"#524763\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#aaaaaa\",\n hover: \"#ffffff\",\n accent: \"#82d8d8\",\n error: \"#e54b4b\",\n errorSurface: \"#191324\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#82d8d8\",\n fontStyle: \"italic\"\n },\n keyword: \"#e54b4b\",\n tag: \"#ff26be\",\n punctuation: \"#9588aa\",\n definition: \"#82d8d8\",\n property: \"#82d8d8\",\n static: \"#82d8d8\",\n string: \"#a8fe39\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"MonoLisa\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar monokaiPro = {\n colors: {\n surface1: \"#2D2A2E\",\n surface2: \"#444344\",\n surface3: \"#484747\",\n clickable: \"#939293\",\n base: \"#C1C0C1\",\n disabled: \"#444344\",\n hover: \"#FCFCFA\",\n accent: \"#FFD866\",\n error: \"#ffcdca\",\n errorSurface: \"#c24038\"\n },\n syntax: {\n plain: \"rgb(252, 252, 250)\",\n comment: { color: \"#757575\", fontStyle: \"italic\" },\n keyword: \"rgb(255, 97, 136)\",\n tag: \"rgb(120, 220, 232)\",\n punctuation: \"rgb(147, 146, 147)\",\n definition: \"rgb(169, 220, 118)\",\n property: { color: \"rgb(120, 220, 232)\", fontStyle: \"italic\" },\n static: \"rgb(171, 157, 242)\",\n string: \"rgb(255, 216, 102)\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar neoCyan = {\n colors: {\n surface1: \"#2b3935\",\n surface2: \"#191324\",\n surface3: \"#524763\",\n clickable: \"#aaaaaa\",\n base: \"#ffffff\",\n disabled: \"#aaaaaa\",\n hover: \"#ffffff\",\n accent: \"#82d8d8\",\n error: \"#e54b4b\",\n errorSurface: \"#191324\"\n },\n syntax: {\n plain: \"#ffffff\",\n comment: {\n color: \"#82d8d8\",\n fontStyle: \"italic\"\n },\n keyword: \"#e54b4b\",\n tag: \"#ff26be\",\n punctuation: \"#9588aa\",\n definition: \"#82d8d8\",\n property: \"#82d8d8\",\n static: \"#82d8d8\",\n string: \"#a8fe39\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"MonoLisa\", \"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"12px\",\n lineHeight: \"18px\"\n }\n};\n\nvar nightOwl = {\n colors: {\n surface1: \"#011627\",\n surface2: \"#243b4c\",\n surface3: \"#112331\",\n clickable: \"#6988a1\",\n base: \"#808080\",\n disabled: \"#4D4D4D\",\n hover: \"#c5e4fd\",\n accent: \"#c5e4fd\",\n error: \"#ffcdca\",\n errorSurface: \"#811e18\"\n },\n syntax: {\n plain: \"#d6deeb\",\n comment: { color: \"#999999\", fontStyle: \"italic\" },\n keyword: { color: \"#c792ea\", fontStyle: \"italic\" },\n tag: \"#7fdbca\",\n punctuation: \"#7fdbca\",\n definition: \"#82aaff\",\n property: { color: \"#addb67\", fontStyle: \"italic\" },\n static: \"#f78c6c\",\n string: \"#ecc48d\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nvar sandpackDark = {\n colors: {\n surface1: \"#151515\",\n surface2: \"#252525\",\n surface3: \"#2F2F2F\",\n clickable: \"#999999\",\n base: \"#808080\",\n disabled: \"#4D4D4D\",\n hover: \"#C5C5C5\",\n accent: \"#90e86f\",\n error: \"#E1CFF8\",\n errorSurface: \"#b08df8\"\n },\n syntax: {\n plain: \"#f0fdaf\",\n comment: {\n color: \"#757575\",\n fontStyle: \"italic\"\n },\n keyword: \"#e5fd78\",\n tag: \"#f0fdaf\",\n punctuation: \"#ffffff\",\n definition: \"#eeeeee\",\n property: \"#90e86f\",\n static: \"#ffffff\",\n string: \"#dafecf\"\n },\n font: {\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n mono: '\"Fira Mono\", \"DejaVu Sans Mono\", Menlo, Consolas, \"Liberation Mono\", Monaco, \"Lucida Console\", monospace',\n size: \"13px\",\n lineHeight: \"20px\"\n }\n};\n\nexport { amethyst, aquaBlue, atomDark, cobalt2, cyberpunk, dracula, ecoLight, freeCodeCampDark, githubLight, gruvboxDark, gruvboxLight, levelUp, monokaiPro, neoCyan, nightOwl, sandpackDark };\n","/**\n * Sandpack Preview Component\n *\n * Renders React/Vue/TypeScript components using CodeSandbox's Sandpack.\n * Provides a full bundled preview with live updates.\n */\n\nimport { useMemo } from 'react';\nimport {\n SandpackProvider,\n SandpackLayout,\n SandpackPreview as SandpackPreviewPane,\n SandpackCodeEditor,\n} from '@codesandbox/sandpack-react';\nimport { atomDark } from '@codesandbox/sandpack-themes';\nimport { Code2 } from 'lucide-react';\n\ninterface SandpackPreviewProps {\n content: string;\n fileName: string;\n files?: Record; // Additional files for multi-file projects\n}\n\ntype SandpackTemplate = 'react' | 'react-ts' | 'vue' | 'vue-ts' | 'vanilla' | 'vanilla-ts';\n\nexport function SandpackPreview({ content, fileName, files = {} }: SandpackPreviewProps) {\n // Determine the template based on file extension\n const template = useMemo((): SandpackTemplate => {\n const ext = fileName.split('.').pop()?.toLowerCase();\n\n switch (ext) {\n case 'tsx':\n return 'react-ts';\n case 'jsx':\n return 'react';\n case 'vue':\n return 'vue';\n default:\n return 'react';\n }\n }, [fileName]);\n\n // Prepare files for Sandpack\n const sandpackFiles = useMemo(() => {\n const result: Record = {};\n\n // Add the main file\n const mainPath = fileName.startsWith('/') ? fileName : `/${fileName}`;\n result[mainPath] = content;\n\n // Add additional files\n Object.entries(files).forEach(([path, fileContent]) => {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n result[normalizedPath] = fileContent;\n });\n\n // If this is a React component without App.tsx, wrap it\n if (template.startsWith('react') && !result['/App.tsx'] && !result['/App.jsx']) {\n const ext = template === 'react-ts' ? 'tsx' : 'jsx';\n\n // Check if the content exports a default component\n if (content.includes('export default') || content.includes('export function')) {\n result[`/App.${ext}`] = `\nimport Component from '${mainPath.replace(/\\.(tsx|jsx)$/, '')}';\n\nexport default function App() {\n return ;\n}\n`;\n }\n }\n\n return result;\n }, [content, fileName, files, template]);\n\n // Determine entry file\n const entryFile = useMemo(() => {\n if (sandpackFiles['/App.tsx']) return '/App.tsx';\n if (sandpackFiles['/App.jsx']) return '/App.jsx';\n if (sandpackFiles['/App.vue']) return '/App.vue';\n return fileName.startsWith('/') ? fileName : `/${fileName}`;\n }, [sandpackFiles, fileName]);\n\n return (\n
    \n {/* Header */}\n
    \n \n \n {template.includes('react') ? 'React' : template.includes('vue') ? 'Vue' : 'JavaScript'} Preview\n \n - {fileName}\n
    \n\n {/* Sandpack */}\n
    \n \n \n \n \n \n \n
    \n
    \n );\n}\n\nexport default SandpackPreview;\n","/**\n * ArtifactPreviewModal Component\n *\n * Modal dialog for previewing various artifact types.\n * Automatically detects file type and renders appropriate preview.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, Eye, Code, Download, Copy, Check } from 'lucide-react';\nimport { codeToHtml } from 'shiki';\nimport { useFileContent } from '../hooks/useFileContent';\nimport { detectArtifactType, getArtifactConfig, type ArtifactType } from '../utils/artifactTypes';\nimport type { FileContentResponse } from '../types';\nimport {\n HtmlPreview,\n SvgPreview,\n ImagePreview,\n MarkdownPreview,\n PdfPreview,\n MermaidPreview,\n DocxPreview,\n XlsxPreview,\n PptxPreview,\n VideoPreview,\n SandpackPreview,\n} from './artifactRenderers';\n\ninterface ArtifactPreviewModalProps {\n isOpen: boolean;\n onClose: () => void;\n filePath: string;\n workspacePath: string;\n}\n\ntype ViewMode = 'preview' | 'source';\n\n// Get file name from path\nfunction getFileName(path: string): string {\n return path.split('/').pop() || path;\n}\n\nfunction base64ToBlob(base64: string, mimeType?: string): Blob | null {\n try {\n const byteChars = atob(base64);\n const byteNumbers = new Array(byteChars.length);\n for (let i = 0; i < byteChars.length; i++) {\n byteNumbers[i] = byteChars.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType || 'application/octet-stream' });\n } catch (err) {\n console.error('Failed to decode base64 content for download', err);\n return null;\n }\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Check if a file is a web asset (CSS or JS)\n */\nfunction isWebAsset(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ext === 'css' || ext === 'js';\n}\n\n/**\n * Fetch workspace file list\n */\nasync function fetchWorkspaceFiles(workspacePath: string): Promise {\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n if (!response.ok) return [];\n const data = await response.json();\n // Extract file paths from the response\n return (data.files || []).map((f: { path: string }) => f.path);\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch a single file from workspace\n */\nasync function fetchSingleFile(filePath: string, workspacePath: string): Promise {\n try {\n const params = new URLSearchParams({\n path: filePath,\n workspace: workspacePath,\n });\n const response = await fetch(`/api/workspace/file?${params}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nexport function ArtifactPreviewModal({\n isOpen,\n onClose,\n filePath,\n workspacePath,\n}: ArtifactPreviewModalProps) {\n const { content, isLoading, error, fetchFile, clearContent } = useFileContent();\n const [viewMode, setViewMode] = useState('preview');\n const [copied, setCopied] = useState(false);\n const [highlightedHtml, setHighlightedHtml] = useState('');\n const [isHighlighting, setIsHighlighting] = useState(false);\n const [relatedFiles, setRelatedFiles] = useState>({});\n\n // Detect artifact type\n const artifactType = useMemo((): ArtifactType => {\n if (!content) return 'code';\n const detected = detectArtifactType(filePath, content.mimeType, content.content);\n const lowerPath = filePath.toLowerCase();\n if (\n content.binary &&\n (content.mimeType?.startsWith('video') ||\n lowerPath.endsWith('.mp4') ||\n lowerPath.endsWith('.webm') ||\n lowerPath.endsWith('.mov'))\n ) {\n return 'video';\n }\n return detected;\n }, [filePath, content]);\n\n const artifactConfig = useMemo(() => getArtifactConfig(artifactType), [artifactType]);\n\n // Fetch file when modal opens\n useEffect(() => {\n if (isOpen && filePath && workspacePath) {\n fetchFile(filePath, workspacePath);\n setViewMode('preview'); // Default to preview mode\n }\n }, [isOpen, filePath, workspacePath, fetchFile]);\n\n // Ensure binary videos snap back to preview mode when detected\n useEffect(() => {\n if (artifactType === 'video') {\n setViewMode('preview');\n }\n }, [artifactType]);\n\n // Clear content when modal closes\n useEffect(() => {\n if (!isOpen) {\n clearContent();\n setHighlightedHtml('');\n setCopied(false);\n setRelatedFiles({});\n }\n }, [isOpen, clearContent]);\n\n // Fetch ALL CSS/JS files from workspace for HTML previews\n // This handles any project structure without complex path resolution\n useEffect(() => {\n async function fetchAllWebAssets() {\n if (!content?.content || artifactType !== 'html') {\n return;\n }\n\n // Get list of all files in workspace\n const allFiles = await fetchWorkspaceFiles(workspacePath);\n\n // Filter for CSS and JS files\n const webAssets = allFiles.filter(isWebAsset);\n if (webAssets.length === 0) return;\n\n const fileMap: Record = {};\n\n // Fetch all CSS/JS files\n await Promise.all(\n webAssets.map(async (assetPath) => {\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (fileData?.content) {\n // Store by multiple keys for flexible matching:\n // 1. Full path (e.g., \"css/style.css\")\n // 2. Just filename (e.g., \"style.css\")\n // 3. Path without leading slash\n const fileName = assetPath.split('/').pop() || assetPath;\n fileMap[assetPath] = fileData.content;\n fileMap[fileName] = fileData.content;\n // Also store without leading ./\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = fileData.content;\n }\n })\n );\n\n setRelatedFiles(fileMap);\n }\n\n fetchAllWebAssets();\n }, [content, artifactType, workspacePath]);\n\n // Apply syntax highlighting for source view\n useEffect(() => {\n async function highlight() {\n if (!content || content.binary || !content.content || viewMode !== 'source') {\n return;\n }\n\n setIsHighlighting(true);\n try {\n const languageMap: Record = {\n plaintext: 'text',\n gitignore: 'text',\n dotenv: 'shell',\n dockerfile: 'docker',\n };\n\n const lang = languageMap[content.language] || content.language;\n const html = await codeToHtml(content.content, {\n lang,\n theme: 'github-dark',\n });\n setHighlightedHtml(html);\n } catch (err) {\n console.warn('Syntax highlighting failed:', err);\n setHighlightedHtml('');\n } finally {\n setIsHighlighting(false);\n }\n }\n\n highlight();\n }, [content, viewMode]);\n\n // Handle copy to clipboard\n const handleCopy = useCallback(async () => {\n if (!content?.content) return;\n\n try {\n await navigator.clipboard.writeText(content.content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [content]);\n\n // Handle download\n const handleDownload = useCallback(() => {\n if (!content?.content) return;\n\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (!blob) return;\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = getFileName(filePath);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, [content, filePath]);\n\n // Handle keyboard shortcuts\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose]);\n\n // Render preview based on artifact type\n const renderPreview = useCallback(() => {\n if (!content?.content) return null;\n\n const fileName = getFileName(filePath);\n\n switch (artifactType) {\n case 'html':\n return ;\n case 'svg':\n return ;\n case 'image':\n return (\n \n );\n case 'markdown':\n return ;\n case 'pdf':\n return ;\n case 'mermaid':\n return ;\n case 'docx':\n return ;\n case 'xlsx':\n return ;\n case 'pptx':\n return ;\n case 'video':\n return ;\n case 'react':\n return ;\n default:\n // Fallback to source view for unsupported types\n return null;\n }\n }, [content, filePath, artifactType, relatedFiles]);\n\n // Render source code view\n const renderSource = useCallback(() => {\n if (!content?.content) return null;\n\n if (isHighlighting) {\n return (\n
    \n Applying syntax highlighting...\n
    \n );\n }\n\n if (highlightedHtml) {\n return (\n \n );\n }\n\n return (\n
    \n        {content.content}\n      
    \n );\n }, [content, highlightedHtml, isHighlighting]);\n\n if (!isOpen) return null;\n\n return (\n \n {isOpen && (\n <>\n {/* Backdrop */}\n \n\n {/* Modal */}\n \n {/* Header */}\n
    \n
    \n {artifactConfig.icon}\n
    \n

    \n {getFileName(filePath)}\n

    \n
    \n \n {artifactConfig.label}\n \n {content && (\n <>\n \n {formatFileSize(content.size)}\n \n )}\n
    \n
    \n
    \n\n
    \n {/* View mode toggle */}\n {artifactConfig.canPreview && (\n
    \n setViewMode('preview')}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-md transition-colors ${\n viewMode === 'preview'\n ? 'bg-gray-600 text-gray-100'\n : 'text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Preview\n \n setViewMode('source')}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-md transition-colors ${\n viewMode === 'source'\n ? 'bg-gray-600 text-gray-100'\n : 'text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Source\n \n
    \n )}\n\n {/* Copy button */}\n {content && !content.binary && content.content && (\n \n {copied ? (\n <>\n \n Copied\n \n ) : (\n <>\n \n Copy\n \n )}\n \n )}\n\n {/* Download button */}\n {content && content.content && (\n \n \n Download\n \n )}\n\n {/* Close button */}\n \n \n \n
    \n
    \n\n {/* Content */}\n
    \n {isLoading && (\n
    \n Loading file...\n
    \n )}\n\n {error && (\n
    \n Failed to load file\n {error}\n
    \n )}\n\n {!isLoading && !error && content && (\n <>\n {viewMode === 'preview' && artifactConfig.canPreview ? (\n renderPreview() || renderSource()\n ) : (\n renderSource()\n )}\n \n )}\n
    \n \n \n )}\n
    \n );\n}\n\nexport default ArtifactPreviewModal;\n","/**\n * InlineArtifactPreview Component\n *\n * Renders artifact preview inline (not in modal).\n * Used for split-view workspace browsing.\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { Loader2, AlertCircle, Eye, Code, X, Download, Copy, Check, Maximize2, ExternalLink } from 'lucide-react';\nimport { codeToHtml } from 'shiki';\nimport { useFileContent } from '../hooks/useFileContent';\nimport { detectArtifactType, getArtifactConfig, type ArtifactType } from '../utils/artifactTypes';\nimport type { FileContentResponse } from '../types';\nimport {\n HtmlPreview,\n SvgPreview,\n ImagePreview,\n MarkdownPreview,\n PdfPreview,\n MermaidPreview,\n DocxPreview,\n XlsxPreview,\n PptxPreview,\n VideoPreview,\n SandpackPreview,\n} from './artifactRenderers';\n\ninterface InlineArtifactPreviewProps {\n filePath: string;\n workspacePath: string;\n onClose?: () => void;\n onFullscreen?: () => void;\n // Optional: Enable live HTML preview with working relative links\n sessionId?: string;\n agentId?: string;\n // Optional: Called when file is not found (404) - parent can clear selection\n onFileNotFound?: () => void;\n}\n\ntype ViewMode = 'preview' | 'source';\n\n// Get file name from path\nfunction getFileName(path: string): string {\n return path.split('/').pop() || path;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Check if a file is a web asset (CSS or JS)\n */\nfunction isWebAsset(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ext === 'css' || ext === 'js';\n}\n\n/**\n * Check if a file is an image\n */\nfunction isImageFile(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase();\n return ['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'ico', 'bmp'].includes(ext || '');\n}\n\n/**\n * Convert base64-encoded content into a Blob for downloads.\n */\nfunction base64ToBlob(base64: string, mimeType?: string): Blob | null {\n try {\n const byteChars = atob(base64);\n const byteNumbers = new Array(byteChars.length);\n for (let i = 0; i < byteChars.length; i++) {\n byteNumbers[i] = byteChars.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType || 'application/octet-stream' });\n } catch (err) {\n console.error('Failed to decode base64 content for download', err);\n return null;\n }\n}\n\n/**\n * Fetch workspace file list\n */\nasync function fetchWorkspaceFiles(workspacePath: string): Promise {\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n if (!response.ok) return [];\n const data = await response.json();\n return (data.files || []).map((f: { path: string }) => f.path);\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch a single file from workspace\n */\nasync function fetchSingleFile(filePath: string, workspacePath: string): Promise {\n try {\n const params = new URLSearchParams({\n path: filePath,\n workspace: workspacePath,\n });\n const response = await fetch(`/api/workspace/file?${params}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nexport function InlineArtifactPreview({\n filePath,\n workspacePath,\n onClose,\n onFullscreen,\n sessionId,\n agentId,\n onFileNotFound,\n}: InlineArtifactPreviewProps) {\n const { content, isLoading, error, fetchFile, clearContent } = useFileContent();\n const [viewMode, setViewMode] = useState('preview');\n const [copied, setCopied] = useState(false);\n const [highlightedHtml, setHighlightedHtml] = useState('');\n const [isHighlighting, setIsHighlighting] = useState(false);\n const [relatedFiles, setRelatedFiles] = useState>({});\n\n // Track scheduled 404 callbacks to prevent stale 404s from clearing selection\n const scheduledNotFoundRef = useRef(null);\n\n // Detect artifact type\n const artifactType = useMemo((): ArtifactType => {\n if (!content) return 'code';\n const detected = detectArtifactType(filePath, content.mimeType, content.content);\n // Force video rendering for binary video payloads even if detection fails\n const lowerPath = filePath.toLowerCase();\n if (\n content.binary &&\n (content.mimeType?.startsWith('video') ||\n lowerPath.endsWith('.mp4') ||\n lowerPath.endsWith('.webm') ||\n lowerPath.endsWith('.mov'))\n ) {\n return 'video';\n }\n return detected;\n }, [filePath, content]);\n\n const artifactConfig = useMemo(() => getArtifactConfig(artifactType), [artifactType]);\n\n // Track previous workspace to detect workspace changes\n const prevWorkspaceRef = useRef(null);\n\n // Fetch file when path changes\n useEffect(() => {\n if (filePath && workspacePath) {\n // Detect if workspace changed (not just file path)\n const workspaceChanged = prevWorkspaceRef.current !== null &&\n prevWorkspaceRef.current !== workspacePath;\n prevWorkspaceRef.current = workspacePath;\n\n // Clear previous state before fetching new file\n setHighlightedHtml('');\n setCopied(false);\n setRelatedFiles({});\n\n // Cancel any pending 404 callbacks from previous workspace\n // This prevents stale 404s from clearing the new workspace's file selection\n if (workspaceChanged) {\n scheduledNotFoundRef.current = null;\n }\n\n // Skip cache if workspace changed to ensure fresh data\n fetchFile(filePath, workspacePath, workspaceChanged);\n setViewMode('preview');\n }\n }, [filePath, workspacePath, fetchFile]);\n // Force preview for detected videos to avoid raw base64 view\n useEffect(() => {\n if (artifactType === 'video') {\n setViewMode('preview');\n }\n }, [artifactType]);\n\n // Clear content when component unmounts or path becomes empty\n useEffect(() => {\n if (!filePath) {\n clearContent();\n setRelatedFiles({});\n }\n }, [filePath, clearContent]);\n\n // AbortController for canceling web asset fetches when file changes\n const webAssetAbortRef = useRef(null);\n\n // Fetch CSS/JS/image files for HTML previews\n useEffect(() => {\n // Cancel any previous web asset fetches\n if (webAssetAbortRef.current) {\n webAssetAbortRef.current.abort();\n }\n\n async function fetchAllWebAssets() {\n if (!content?.content || artifactType !== 'html') {\n return;\n }\n\n const controller = new AbortController();\n webAssetAbortRef.current = controller;\n\n try {\n const allFiles = await fetchWorkspaceFiles(workspacePath);\n if (controller.signal.aborted) return;\n\n const webAssets = allFiles.filter(isWebAsset);\n const imageAssets = allFiles.filter(isImageFile);\n\n if (webAssets.length === 0 && imageAssets.length === 0) return;\n\n const fileMap: Record = {};\n\n // Fetch CSS/JS files (text content)\n await Promise.all(\n webAssets.map(async (assetPath) => {\n if (controller.signal.aborted) return;\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (controller.signal.aborted) return;\n if (fileData?.content) {\n const fileName = assetPath.split('/').pop() || assetPath;\n fileMap[assetPath] = fileData.content;\n fileMap[fileName] = fileData.content;\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = fileData.content;\n }\n })\n );\n\n if (controller.signal.aborted) return;\n\n // Fetch image files (binary content as base64 data URLs)\n await Promise.all(\n imageAssets.map(async (assetPath) => {\n if (controller.signal.aborted) return;\n const fileData = await fetchSingleFile(assetPath, workspacePath);\n if (controller.signal.aborted) return;\n if (fileData?.content && fileData.binary) {\n const fileName = assetPath.split('/').pop() || assetPath;\n const mimeType = fileData.mimeType || 'image/png';\n const dataUrl = `data:${mimeType};base64,${fileData.content}`;\n // Store as data URL for all path variations\n fileMap[assetPath] = dataUrl;\n fileMap[fileName] = dataUrl;\n fileMap[`./${assetPath}`] = dataUrl;\n fileMap[`./${fileName}`] = dataUrl;\n const cleanPath = assetPath.replace(/^\\.?\\//, '');\n fileMap[cleanPath] = dataUrl;\n }\n })\n );\n\n if (controller.signal.aborted) return;\n setRelatedFiles(fileMap);\n } catch (err) {\n // Ignore abort errors\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Failed to fetch web assets:', err);\n }\n }\n\n fetchAllWebAssets();\n\n // Cleanup on unmount or when dependencies change\n return () => {\n if (webAssetAbortRef.current) {\n webAssetAbortRef.current.abort();\n }\n };\n }, [content, artifactType, workspacePath]);\n\n // Apply syntax highlighting for source view\n useEffect(() => {\n async function highlight() {\n if (!content || content.binary || !content.content || viewMode !== 'source') {\n return;\n }\n\n setIsHighlighting(true);\n try {\n const languageMap: Record = {\n plaintext: 'text',\n gitignore: 'text',\n dotenv: 'shell',\n dockerfile: 'docker',\n };\n\n const lang = languageMap[content.language] || content.language;\n const html = await codeToHtml(content.content, {\n lang,\n theme: 'github-dark',\n });\n setHighlightedHtml(html);\n } catch (err) {\n console.warn('Syntax highlighting failed:', err);\n setHighlightedHtml('');\n } finally {\n setIsHighlighting(false);\n }\n }\n\n highlight();\n }, [content, viewMode]);\n\n // Handle copy to clipboard\n const handleCopy = useCallback(async () => {\n if (!content?.content) return;\n\n try {\n await navigator.clipboard.writeText(content.content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [content]);\n\n // Handle download\n const handleDownload = useCallback(() => {\n if (!content?.content) return;\n\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (!blob) return;\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = getFileName(filePath);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, [content, filePath]);\n\n // Handle open in new tab\n const handleOpenInNewTab = useCallback(() => {\n if (!content?.content) return;\n\n // For HTML files, open as rendered HTML\n if (artifactType === 'html') {\n const blob = new Blob([content.content], { type: 'text/html' });\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n // Note: Can't revoke immediately as it's opened in new tab\n return;\n }\n\n // For images, open the image directly\n if (artifactType === 'image' && content.binary) {\n const blob = base64ToBlob(content.content, content.mimeType);\n if (blob) {\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n }\n return;\n }\n\n // For other files, open as plain text/source\n const blob = content.binary\n ? base64ToBlob(content.content, content.mimeType)\n : new Blob([content.content], { type: content.mimeType || 'text/plain' });\n if (blob) {\n const url = URL.createObjectURL(blob);\n window.open(url, '_blank');\n }\n }, [content, artifactType]);\n\n // Render preview based on artifact type\n const renderPreview = useCallback(() => {\n if (!content) return null;\n\n // For binary files, content.content may be base64 encoded\n if (!content.content && !content.binary) {\n return (\n
    \n \n No content available\n
    \n );\n }\n\n const fileName = getFileName(filePath);\n\n switch (artifactType) {\n case 'html':\n return (\n \n );\n case 'svg':\n return ;\n case 'image':\n return (\n \n );\n case 'markdown':\n return ;\n case 'pdf':\n return ;\n case 'mermaid':\n return ;\n case 'docx':\n return (\n \n );\n case 'xlsx':\n return ;\n case 'pptx':\n return (\n \n );\n case 'video':\n return (\n \n );\n case 'react':\n return ;\n case 'code':\n default:\n // For code/unknown types, show source with syntax highlighting\n if (highlightedHtml) {\n return (\n \n );\n }\n return (\n
    \n            {content.content}\n          
    \n );\n }\n }, [content, artifactType, filePath, highlightedHtml, relatedFiles, workspacePath]);\n\n // Loading state\n if (isLoading) {\n return (\n
    \n \n Loading preview...\n
    \n );\n }\n\n // Error state - silently recover from 404s, show error for other failures\n if (error) {\n const is404 = error.toLowerCase().includes('not found') || error.includes('404');\n\n // For 404s: silently clear selection and show empty state\n // This handles race conditions where file was deleted after appearing in list\n if (is404 && onFileNotFound) {\n // Only schedule callback if we haven't already for this file+workspace combo\n // This prevents stale 404s from clearing selection when workspace is changing\n const currentKey = `${workspacePath}:${filePath}`;\n if (scheduledNotFoundRef.current !== currentKey) {\n scheduledNotFoundRef.current = currentKey;\n // Call the callback to clear selection in parent\n // Use setTimeout to avoid state update during render\n setTimeout(() => {\n // Double-check the error is still for this same file/workspace\n // If workspace changed, don't clear selection\n if (scheduledNotFoundRef.current === currentKey) {\n onFileNotFound();\n }\n scheduledNotFoundRef.current = null;\n }, 0);\n }\n // Return empty state while parent updates\n return (\n
    \n \n Select a file to preview\n
    \n );\n }\n\n // For other errors, show error UI\n return (\n
    \n \n Failed to load file\n {error}\n
    \n );\n }\n\n // No file selected\n if (!filePath) {\n return (\n
    \n \n Select a file to preview\n
    \n );\n }\n\n const fileName = getFileName(filePath);\n\n return (\n
    \n {/* Header */}\n
    \n
    \n {artifactConfig.icon}\n \n {fileName}\n \n {content && (\n \n ({formatFileSize(content.size)})\n \n )}\n
    \n\n
    \n {/* View mode toggle (for previewable types) */}\n {artifactConfig.canPreview && content && !content.binary && (\n
    \n setViewMode('preview')}\n className={`p-1.5 rounded transition-colors ${\n viewMode === 'preview'\n ? 'bg-blue-600 text-white'\n : 'text-gray-400 hover:text-gray-200 hover:bg-gray-700'\n }`}\n title=\"Preview\"\n >\n \n \n setViewMode('source')}\n className={`p-1.5 rounded transition-colors ${\n viewMode === 'source'\n ? 'bg-blue-600 text-white'\n : 'text-gray-400 hover:text-gray-200 hover:bg-gray-700'\n }`}\n title=\"Source\"\n >\n \n \n
    \n )}\n\n {/* Copy button */}\n {content && !content.binary && (\n \n {copied ? : }\n \n )}\n\n {/* Download button */}\n {content && (\n \n \n \n )}\n\n {/* Open in new tab button */}\n {content && (\n \n \n \n )}\n\n {/* Fullscreen button */}\n {onFullscreen && (\n \n \n \n )}\n\n {/* Close button */}\n {onClose && (\n \n \n \n )}\n
    \n
    \n\n {/* Preview Content */}\n
    \n {viewMode === 'preview' && artifactConfig.canPreview ? (\n renderPreview()\n ) : (\n // Source view\n
    \n {isHighlighting ? (\n
    \n \n
    \n ) : highlightedHtml ? (\n \n ) : content?.content ? (\n
    \n                {content.content}\n              
    \n ) : null}\n
    \n )}\n
    \n
    \n );\n}\n\nexport default InlineArtifactPreview;\n","/**\n * Agent Colors Utility\n *\n * Provides consistent identity colors for agents throughout the UI.\n * Each agent gets a unique color based on their order in the session.\n */\n\nexport interface AgentColor {\n /** Background color class (e.g., 'bg-blue-600') */\n bg: string;\n /** Lighter background for hover/subtle states */\n bgLight: string;\n /** Text color class (e.g., 'text-blue-400') */\n text: string;\n /** Border color class */\n border: string;\n /** Focus ring color class */\n ring: string;\n /** Raw hex value for SVG fills */\n hex: string;\n /** Lighter hex for gradients/secondary use */\n hexLight: string;\n}\n\n/**\n * Predefined color palette for up to 9 agents.\n * Colors are chosen to be visually distinct and accessible.\n */\nconst AGENT_COLORS: AgentColor[] = [\n {\n bg: 'bg-blue-600',\n bgLight: 'bg-blue-600/20',\n text: 'text-blue-400',\n border: 'border-blue-500',\n ring: 'ring-blue-500',\n hex: '#3B82F6',\n hexLight: '#60A5FA',\n },\n {\n bg: 'bg-emerald-600',\n bgLight: 'bg-emerald-600/20',\n text: 'text-emerald-400',\n border: 'border-emerald-500',\n ring: 'ring-emerald-500',\n hex: '#10B981',\n hexLight: '#34D399',\n },\n {\n bg: 'bg-violet-600',\n bgLight: 'bg-violet-600/20',\n text: 'text-violet-400',\n border: 'border-violet-500',\n ring: 'ring-violet-500',\n hex: '#8B5CF6',\n hexLight: '#A78BFA',\n },\n {\n bg: 'bg-orange-600',\n bgLight: 'bg-orange-600/20',\n text: 'text-orange-400',\n border: 'border-orange-500',\n ring: 'ring-orange-500',\n hex: '#F97316',\n hexLight: '#FB923C',\n },\n {\n bg: 'bg-pink-600',\n bgLight: 'bg-pink-600/20',\n text: 'text-pink-400',\n border: 'border-pink-500',\n ring: 'ring-pink-500',\n hex: '#EC4899',\n hexLight: '#F472B6',\n },\n {\n bg: 'bg-cyan-600',\n bgLight: 'bg-cyan-600/20',\n text: 'text-cyan-400',\n border: 'border-cyan-500',\n ring: 'ring-cyan-500',\n hex: '#06B6D4',\n hexLight: '#22D3EE',\n },\n {\n bg: 'bg-amber-600',\n bgLight: 'bg-amber-600/20',\n text: 'text-amber-400',\n border: 'border-amber-500',\n ring: 'ring-amber-500',\n hex: '#F59E0B',\n hexLight: '#FBBF24',\n },\n {\n bg: 'bg-rose-600',\n bgLight: 'bg-rose-600/20',\n text: 'text-rose-400',\n border: 'border-rose-500',\n ring: 'ring-rose-500',\n hex: '#F43F5E',\n hexLight: '#FB7185',\n },\n {\n bg: 'bg-indigo-600',\n bgLight: 'bg-indigo-600/20',\n text: 'text-indigo-400',\n border: 'border-indigo-500',\n ring: 'ring-indigo-500',\n hex: '#6366F1',\n hexLight: '#818CF8',\n },\n];\n\n/**\n * Get the color configuration for an agent based on their position in the agent order.\n *\n * @param agentId - The agent's ID\n * @param agentOrder - Array of agent IDs in order\n * @returns AgentColor configuration, cycling through palette if more than 9 agents\n */\nexport function getAgentColor(agentId: string, agentOrder: string[]): AgentColor {\n const index = agentOrder.indexOf(agentId);\n if (index === -1) {\n // Unknown agent, return first color as fallback\n return AGENT_COLORS[0];\n }\n return AGENT_COLORS[index % AGENT_COLORS.length];\n}\n\n/**\n * Get color by index directly (useful when you have the index already)\n */\nexport function getAgentColorByIndex(index: number): AgentColor {\n return AGENT_COLORS[index % AGENT_COLORS.length];\n}\n\n/**\n * Get the total number of unique colors available\n */\nexport function getColorCount(): number {\n return AGENT_COLORS.length;\n}\n\n/**\n * Get all agent colors (useful for legends/documentation)\n */\nexport function getAllAgentColors(): AgentColor[] {\n return [...AGENT_COLORS];\n}\n","/**\n * TimelineNode Component\n *\n * Renders a single node on the timeline (answer, vote, or final).\n * Color-coded by agent (for answers) or type (for votes/final) with hover effects and tooltips.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport type { TimelineNode as TimelineNodeType } from '../../types';\nimport { getAgentColor } from '../../utils/agentColors';\n\ninterface TimelineNodeProps {\n node: TimelineNodeType;\n x: number;\n y: number;\n size: number;\n agentOrder?: string[];\n isSuperseded?: boolean; // For vote nodes: true if this vote was superseded by a new answer\n onClick?: () => void;\n}\n\n// Track which nodes have been animated to prevent re-animation\nconst animatedNodes = new Set();\n\n// Node colors by type (for votes and final)\nconst nodeColors = {\n vote: {\n fill: 'url(#voteGradient)',\n stroke: '#FBBF24',\n glow: 'rgba(245, 158, 11, 0.4)',\n },\n voteSuperseded: {\n fill: 'url(#voteSupersededGradient)',\n stroke: '#6B7280',\n glow: 'rgba(107, 114, 128, 0.3)',\n },\n final: {\n fill: 'url(#finalGradient)',\n stroke: '#FDE047',\n glow: 'rgba(234, 179, 8, 0.5)',\n },\n};\n\nexport function TimelineNode({ node, x, y, size, agentOrder = [], isSuperseded = false, onClick }: TimelineNodeProps) {\n const [isHovered, setIsHovered] = useState(false);\n const radius = size / 2;\n\n // Get agent-specific color for answer nodes\n const colors = useMemo(() => {\n if (node.type === 'answer') {\n const agentColor = getAgentColor(node.agentId, agentOrder);\n return {\n fill: `url(#agent-${node.agentId}-gradient)`,\n stroke: agentColor.hexLight,\n glow: `${agentColor.hex}66`,\n hex: agentColor.hex,\n hexLight: agentColor.hexLight,\n };\n }\n // Use superseded colors for invalidated votes\n if (node.type === 'vote' && isSuperseded) {\n return nodeColors.voteSuperseded;\n }\n return nodeColors[node.type];\n }, [node.type, node.agentId, agentOrder, isSuperseded]);\n\n // Only animate nodes that haven't been seen before\n const shouldAnimate = !animatedNodes.has(node.id);\n useEffect(() => {\n animatedNodes.add(node.id);\n }, [node.id]);\n\n // Format timestamp for tooltip\n const formatTime = (timestamp: number) => {\n if (!timestamp) return '';\n const date = new Date(timestamp);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n };\n\n return (\n setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={onClick}\n style={{ cursor: onClick ? 'pointer' : 'default' }}\n >\n {/* Gradient definitions */}\n \n {/* Agent-specific gradient for answer nodes */}\n {node.type === 'answer' && 'hex' in colors && (\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 {/* Glow effect on hover */}\n {isHovered && (\n \n )}\n\n {/* Main node circle */}\n \n\n {/* Icon inside node */}\n \n {node.type === 'answer' && 'A'}\n {node.type === 'vote' && 'V'}\n {node.type === 'final' && '★'}\n \n\n {/* Label below node */}\n \n {node.label}{isSuperseded ? ' ✗' : ''}\n \n\n {/* Tooltip on hover */}\n {isHovered && (\n \n {/* Calculate tooltip dimensions based on content */}\n {(() => {\n const tooltipX = x + radius + 10;\n const tooltipY = y - 40;\n const lineHeight = 14;\n let currentY = tooltipY + 16;\n\n // Calculate height based on content\n let contentLines = 2; // label + timestamp\n if (node.type === 'vote' && node.votedFor) contentLines += 1;\n if (node.type === 'vote' && node.contextSources.length > 0) {\n contentLines += 1; // \"Options:\" header\n contentLines += node.contextSources.length; // Each option on its own line\n } else if (node.contextSources.length > 0) {\n contentLines += 1; // \"Context:\" header\n contentLines += Math.min(node.contextSources.length, 4); // Limit displayed\n }\n\n const tooltipHeight = 20 + contentLines * lineHeight;\n const tooltipWidth = 150;\n\n return (\n <>\n \n {/* Label */}\n \n {node.label}\n \n {/* Timestamp */}\n \n {formatTime(node.timestamp)}\n \n {/* Vote target (for vote nodes) */}\n {node.type === 'vote' && node.votedFor && (\n \n Voted: {node.votedFor}\n \n )}\n {/* Vote options (context sources for vote nodes) */}\n {node.type === 'vote' && node.contextSources.length > 0 && (\n <>\n \n Options:\n \n {node.contextSources.map((source) => {\n const isSelected = source === node.votedFor || source.includes(node.votedFor || '');\n return (\n \n {isSelected ? '● ' : '○ '}{source}\n \n );\n })}\n \n )}\n {/* Context sources (for non-vote nodes) */}\n {node.type !== 'vote' && node.contextSources.length > 0 && (\n <>\n \n Context:\n \n {node.contextSources.slice(0, 4).map((source) => (\n \n ← {source}\n \n ))}\n {node.contextSources.length > 4 && (\n \n +{node.contextSources.length - 4} more...\n \n )}\n \n )}\n \n );\n })()}\n \n )}\n \n );\n}\n\nexport default TimelineNode;\n","/**\n * TimelineArrow Component\n *\n * Renders curved arrows connecting timeline nodes.\n * Different styles for context dependencies vs vote arrows.\n */\n\nimport { useMemo } from 'react';\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface TimelineArrowProps {\n from: Point;\n to: Point;\n type: 'context' | 'vote';\n}\n\n// Arrow colors\nconst arrowColors = {\n context: {\n stroke: '#3B82F6',\n fill: '#3B82F6',\n },\n vote: {\n stroke: '#F59E0B',\n fill: '#F59E0B',\n },\n};\n\nexport function TimelineArrow({ from, to, type }: TimelineArrowProps) {\n const colors = arrowColors[type];\n\n // Calculate curved path using quadratic bezier\n const path = useMemo(() => {\n // Control point for curve\n const midX = (from.x + to.x) / 2;\n const midY = (from.y + to.y) / 2;\n\n // Curve direction based on relative positions\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n\n // Offset control point perpendicular to the line\n const curveOffset = Math.min(50, Math.abs(dx) * 0.3);\n const controlX = midX;\n const controlY = dy > 0 ? midY - curveOffset : midY + curveOffset;\n\n // If same column, curve to the side\n if (Math.abs(dx) < 10) {\n const sideOffset = 40;\n return `M ${from.x} ${from.y} Q ${from.x + sideOffset} ${midY} ${to.x} ${to.y}`;\n }\n\n return `M ${from.x} ${from.y} Q ${controlX} ${controlY} ${to.x} ${to.y}`;\n }, [from, to]);\n\n // Unique ID for this arrow's marker\n const markerId = `arrowhead-${type}-${from.x}-${from.y}-${to.x}-${to.y}`;\n\n return (\n \n {/* Arrowhead marker definition */}\n \n \n \n \n \n\n {/* Arrow path */}\n \n \n );\n}\n\nexport default TimelineArrow;\n","/**\n * TimelineLegend Component\n *\n * Displays a legend explaining the different node and arrow types\n * used in the timeline visualization.\n */\n\nexport function TimelineLegend() {\n return (\n
    \n {/* Node types */}\n
    \n Nodes:\n\n {/* Answer node */}\n
    \n
    \n Answer\n
    \n\n {/* Vote node */}\n
    \n
    \n Vote\n
    \n\n {/* Final node */}\n
    \n
    \n Final\n
    \n
    \n\n {/* Divider */}\n
    \n\n {/* Arrow types */}\n
    \n Arrows:\n\n {/* Context arrow */}\n
    \n \n \n \n \n \n \n \n \n Context\n
    \n\n {/* Vote arrow */}\n
    \n \n \n \n \n \n \n \n \n Vote\n
    \n
    \n
    \n );\n}\n\nexport default TimelineLegend;\n","/**\n * TimelineView Component\n *\n * Vertical swimlane visualization showing the coordination flow.\n * Each agent has a column, with nodes for answers/votes/final answer\n * and arrows showing context dependencies.\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { Loader2, GitBranch, CheckCircle2 } from 'lucide-react';\nimport { useAgentStore, selectIsComplete } from '../../stores/agentStore';\nimport type { TimelineNode as TimelineNodeType, TimelineData } from '../../types';\nimport { TimelineNode } from './TimelineNode';\nimport { TimelineArrow } from './TimelineArrow';\nimport { TimelineLegend } from './TimelineLegend';\nimport { getAgentColor } from '../../utils/agentColors';\n\ninterface TimelineViewProps {\n onNodeClick?: (node: TimelineNodeType) => void;\n}\n\n// Node dimensions for layout calculations\nconst NODE_SIZE = 40;\nconst NODE_GAP_Y = 80;\nconst COLUMN_WIDTH = 150;\nconst HEADER_HEIGHT = 60;\nconst PADDING = 40;\n\nexport function TimelineView({ onNodeClick }: TimelineViewProps) {\n const [timelineData, setTimelineData] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(null);\n const sessionId = useAgentStore((state) => state.sessionId);\n const isComplete = useAgentStore(selectIsComplete);\n\n // Check if timeline has a final node\n const hasFinalNode = useMemo(() => {\n return timelineData?.nodes.some(n => n.type === 'final') ?? false;\n }, [timelineData]);\n\n // Fetch timeline data\n const fetchTimeline = useCallback(async () => {\n if (!sessionId) {\n setIsLoading(false);\n return;\n }\n\n // Only show loading on first fetch\n if (!timelineData) {\n setIsLoading(true);\n }\n setError(null);\n\n try {\n const response = await fetch(`/api/sessions/${sessionId}/timeline`);\n if (!response.ok) {\n throw new Error('Failed to fetch timeline');\n }\n const data: TimelineData = await response.json();\n setTimelineData(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load timeline');\n } finally {\n setIsLoading(false);\n }\n }, [sessionId, timelineData]);\n\n // Initial fetch and auto-refresh every 3 seconds\n useEffect(() => {\n fetchTimeline();\n const interval = setInterval(fetchTimeline, 3000);\n return () => clearInterval(interval);\n }, [sessionId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Calculate node positions based on agent and timestamp\n const nodePositions = useMemo(() => {\n if (!timelineData || timelineData.nodes.length === 0) {\n return new Map();\n }\n\n const positions = new Map();\n const { nodes, agents } = timelineData;\n\n // Group nodes by agent\n const nodesByAgent = new Map();\n agents.forEach(agentId => nodesByAgent.set(agentId, []));\n\n nodes.forEach(node => {\n const agentNodes = nodesByAgent.get(node.agentId);\n if (agentNodes) {\n agentNodes.push(node);\n }\n });\n\n // Calculate Y position based on order within agent column\n agents.forEach((agentId, agentIndex) => {\n const agentNodes = nodesByAgent.get(agentId) || [];\n // Sort by timestamp\n agentNodes.sort((a, b) => a.timestamp - b.timestamp);\n\n agentNodes.forEach((node, nodeIndex) => {\n const x = PADDING + agentIndex * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n const y = HEADER_HEIGHT + PADDING + nodeIndex * NODE_GAP_Y;\n positions.set(node.id, { x, y });\n });\n });\n\n return positions;\n }, [timelineData]);\n\n // Calculate SVG dimensions\n const svgDimensions = useMemo(() => {\n if (!timelineData) {\n return { width: 600, height: 400 };\n }\n\n const width = Math.max(600, PADDING * 2 + timelineData.agents.length * COLUMN_WIDTH);\n\n // Find max Y position\n let maxY = HEADER_HEIGHT + PADDING;\n nodePositions.forEach(pos => {\n maxY = Math.max(maxY, pos.y);\n });\n\n const height = Math.max(400, maxY + NODE_GAP_Y + PADDING);\n\n return { width, height };\n }, [timelineData, nodePositions]);\n\n // Render loading state\n if (isLoading) {\n return (\n
    \n \n

    Loading timeline...

    \n
    \n );\n }\n\n // Render error state (will auto-retry)\n if (error) {\n return (\n
    \n \n

    Failed to load timeline

    \n

    {error}

    \n

    Retrying automatically...

    \n
    \n );\n }\n\n // Render empty state\n if (!sessionId) {\n return (\n
    \n \n

    No active session

    \n

    \n Start a coordination to see the timeline\n

    \n
    \n );\n }\n\n if (!timelineData || timelineData.nodes.length === 0) {\n return (\n
    \n \n

    No timeline data yet

    \n

    \n Timeline will populate as agents submit answers and votes\n

    \n
    \n );\n }\n\n return (\n
    \n {/* Legend */}\n \n\n {/* Completion Banner */}\n {(isComplete || hasFinalNode) && (\n
    \n \n
    \n

    Coordination Complete

    \n

    Final answer has been selected

    \n
    \n
    \n )}\n\n {/* Timeline Container */}\n
    \n \n {/* Background grid lines for swimlanes */}\n {timelineData.agents.map((_, index) => (\n \n ))}\n\n {/* Agent column headers */}\n {timelineData.agents.map((agentId, index) => {\n const x = PADDING + index * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n const agentIndex = index + 1;\n const agentColor = getAgentColor(agentId, timelineData.agents);\n return (\n \n \n \n Agent {agentIndex}\n \n \n );\n })}\n\n {/* Draw context arrows (behind nodes) */}\n {/* Context arrows show which ANSWERS provided context to other nodes */}\n {/* Votes never provide context, so we skip arrows FROM vote nodes */}\n {/* We also skip arrows TO vote nodes - votes have contextSources but those */}\n {/* represent \"available options\", not actual context dependency */}\n {timelineData.nodes\n .filter(node => node.type !== 'vote') // Only draw context arrows TO non-vote nodes\n .map(node => {\n const nodePos = nodePositions.get(node.id);\n if (!nodePos) return null;\n\n // Draw arrows from context sources\n return node.contextSources.map(sourceLabel => {\n // Find the source node by label\n const sourceNode = timelineData.nodes.find(n => n.label === sourceLabel);\n // Skip if source doesn't exist or is a vote (votes don't provide context)\n if (!sourceNode || sourceNode.type === 'vote') return null;\n\n // IMPORTANT: Only show context arrow if source existed BEFORE target\n // This filters out incorrect arrows where the API returns all answers\n // but the agent only had access to earlier ones when creating their answer\n if (sourceNode.timestamp >= node.timestamp) return null;\n\n const sourcePos = nodePositions.get(sourceNode.id);\n if (!sourcePos) return null;\n\n return (\n \n );\n });\n })}\n\n {/* Draw vote arrows (showing which answer received the vote) */}\n {timelineData.nodes\n .filter(n => n.type === 'vote' && n.votedFor)\n .map(node => {\n const nodePos = nodePositions.get(node.id);\n if (!nodePos || !node.votedFor) return null;\n\n // votedFor can be either an answer label (e.g., \"agent2.3\") or an agent ID (e.g., \"agent_b\")\n // Try to find by answer label first, then fall back to agent ID\n let targetAnswer = timelineData.nodes.find(\n n => n.type === 'answer' && n.label === node.votedFor\n );\n\n // Fallback: try matching by agent ID (old format)\n if (!targetAnswer) {\n targetAnswer = timelineData.nodes.find(\n n => n.type === 'answer' && n.agentId === node.votedFor\n );\n }\n\n if (!targetAnswer) {\n // Final fallback: point to the agent's column if no answer node found\n // Extract agent from label like \"agent2.3\" -> find agent at index 1 (agent2)\n const labelMatch = node.votedFor.match(/agent(\\d+)/);\n let targetAgentIndex = -1;\n if (labelMatch) {\n targetAgentIndex = parseInt(labelMatch[1], 10) - 1;\n } else {\n targetAgentIndex = timelineData.agents.indexOf(node.votedFor);\n }\n if (targetAgentIndex === -1 || targetAgentIndex >= timelineData.agents.length) return null;\n const targetX = PADDING + targetAgentIndex * COLUMN_WIDTH + COLUMN_WIDTH / 2;\n return (\n \n );\n }\n\n const targetPos = nodePositions.get(targetAnswer.id);\n if (!targetPos) return null;\n\n return (\n \n );\n })}\n\n {/* Draw nodes */}\n {(() => {\n // Find the most recent vote for each agent (by timestamp)\n // Only the most recent vote per agent is valid; earlier ones are superseded\n const latestVoteByAgent = new Map();\n timelineData.nodes\n .filter(n => n.type === 'vote')\n .forEach(node => {\n const existing = latestVoteByAgent.get(node.agentId);\n if (!existing || node.timestamp > existing) {\n latestVoteByAgent.set(node.agentId, node.timestamp);\n }\n });\n\n return timelineData.nodes.map(node => {\n const pos = nodePositions.get(node.id);\n if (!pos) return null;\n\n // Final nodes are larger for emphasis\n const nodeSize = node.type === 'final' ? NODE_SIZE * 1.4 : NODE_SIZE;\n\n // Filter contextSources to only include sources that existed BEFORE this node\n const filteredContextSources = node.contextSources.filter(sourceLabel => {\n const sourceNode = timelineData.nodes.find(n => n.label === sourceLabel);\n // Only include if source existed before this node (by timestamp)\n return sourceNode && sourceNode.timestamp < node.timestamp;\n });\n\n // Create a modified node with filtered context sources for display\n const displayNode = {\n ...node,\n contextSources: filteredContextSources,\n };\n\n // Determine if this vote is superseded\n // A vote is superseded if it's not the most recent vote from that agent\n const isSuperseded = node.type === 'vote' &&\n node.timestamp !== latestVoteByAgent.get(node.agentId);\n\n return (\n onNodeClick?.(node)}\n />\n );\n });\n })()}\n \n
    \n
    \n );\n}\n\nexport default TimelineView;\n","/**\n * ProgressSummaryBar Component\n *\n * Displays a quick summary of the coordination session at the top of the Browser modal.\n * Shows agent count, answer count, vote progress, and winner information.\n */\n\nimport { Users, FileText, Vote, Trophy, Loader2 } from 'lucide-react';\nimport { getAgentColor } from '../utils/agentColors';\n\ninterface ProgressSummaryBarProps {\n agentCount: number;\n answerCount: number;\n voteCount: number;\n totalVotesExpected: number;\n winnerId?: string;\n winnerVotes?: number;\n isComplete: boolean;\n isVoting: boolean;\n agentOrder: string[];\n}\n\nexport function ProgressSummaryBar({\n agentCount,\n answerCount,\n voteCount,\n totalVotesExpected,\n winnerId,\n winnerVotes,\n isComplete,\n isVoting,\n agentOrder,\n}: ProgressSummaryBarProps) {\n // Get winner's display name and color\n const winnerIndex = winnerId ? agentOrder.indexOf(winnerId) : -1;\n const winnerDisplayName = winnerIndex !== -1 ? `Agent ${winnerIndex + 1}` : winnerId;\n const winnerColor = winnerId ? getAgentColor(winnerId, agentOrder) : null;\n\n return (\n
    \n {/* Agents */}\n
    \n \n \n {agentCount} agent{agentCount !== 1 ? 's' : ''}\n \n
    \n\n
    \n\n {/* Answers */}\n
    \n \n \n {answerCount} answer{answerCount !== 1 ? 's' : ''}\n \n
    \n\n
    \n\n {/* Votes / Winner */}\n {isComplete && winnerId ? (\n // Show winner\n
    \n \n \n \n {winnerDisplayName}\n \n {' '}won\n {winnerVotes !== undefined && (\n \n {' '}({winnerVotes} vote{winnerVotes !== 1 ? 's' : ''})\n \n )}\n \n
    \n ) : isVoting ? (\n // Show voting progress\n
    \n \n \n {voteCount}\n /{totalVotesExpected}\n {' '}votes cast\n \n
    \n ) : (\n // Show working status\n
    \n \n Coordinating...\n
    \n )}\n
    \n );\n}\n","/**\n * EmptyState Component\n *\n * Reusable component for displaying empty states with helpful messages and hints.\n * Used throughout the Browser modal for consistent empty state UX.\n */\n\nimport { motion } from 'framer-motion';\nimport { type LucideIcon } from 'lucide-react';\n\ninterface EmptyStateProps {\n /** Icon to display */\n icon: LucideIcon;\n /** Main title */\n title: string;\n /** Description text */\n description: string;\n /** Optional hint text (shown in slightly different style) */\n hint?: string;\n /** Optional action button */\n action?: {\n label: string;\n onClick: () => void;\n };\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n hint,\n action,\n size = 'md',\n}: EmptyStateProps) {\n const sizeClasses = {\n sm: {\n container: 'py-6',\n icon: 'w-10 h-10',\n title: 'text-sm',\n description: 'text-xs',\n hint: 'text-xs',\n },\n md: {\n container: 'py-12',\n icon: 'w-14 h-14',\n title: 'text-base',\n description: 'text-sm',\n hint: 'text-xs',\n },\n lg: {\n container: 'py-16',\n icon: 'w-20 h-20',\n title: 'text-lg',\n description: 'text-base',\n hint: 'text-sm',\n },\n };\n\n const classes = sizeClasses[size];\n\n return (\n \n {/* Icon with subtle background */}\n
    \n
    \n
    \n \n
    \n
    \n\n {/* Title */}\n

    \n {title}\n

    \n\n {/* Description */}\n

    \n {description}\n

    \n\n {/* Hint */}\n {hint && (\n

    \n {hint}\n

    \n )}\n\n {/* Action button */}\n {action && (\n \n {action.label}\n \n )}\n \n );\n}\n\n// Pre-configured empty states for common use cases\nexport const EMPTY_STATES = {\n noAnswers: {\n title: 'No answers yet',\n description: 'Answers will appear here as agents submit them during coordination.',\n hint: 'Press \"A\" to refresh the answer browser',\n },\n noVotes: {\n title: 'No votes cast yet',\n description: 'Votes are recorded after agents review each other\\'s answers.',\n hint: 'Voting begins once all agents have submitted answers',\n },\n noFiles: {\n title: 'No workspace files',\n description: 'Files created by agents will appear here.',\n hint: 'Select an agent above to browse their workspace',\n },\n noWorkspaces: {\n title: 'No workspaces found',\n description: 'The session may still be initializing.',\n hint: 'Workspaces appear once agents start working',\n },\n noTimeline: {\n title: 'No timeline data yet',\n description: 'The timeline will populate as coordination progresses.',\n hint: 'Check back after agents submit answers',\n },\n loading: {\n title: 'Loading...',\n description: 'Please wait while we fetch the data.',\n hint: undefined,\n },\n error: {\n title: 'Something went wrong',\n description: 'We couldn\\'t load this content. Please try again.',\n hint: 'If the problem persists, check your connection',\n },\n} as const;\n","/**\n * File Icons Utility\n *\n * Maps file extensions to lucide-react icons with appropriate colors.\n * Used in the workspace file tree for visual file type identification.\n */\n\nimport {\n Globe,\n Braces,\n FileCode,\n Palette,\n FileJson,\n FileText,\n Image,\n Film,\n FileSpreadsheet,\n Presentation,\n File,\n FileArchive,\n Database,\n Terminal,\n Settings,\n Lock,\n BookOpen,\n type LucideIcon,\n} from 'lucide-react';\n\nexport interface FileIconConfig {\n icon: LucideIcon;\n className: string; // Tailwind color class\n}\n\n// Extension to icon mapping\nconst FILE_ICON_MAP: Record = {\n // Web\n html: { icon: Globe, className: 'text-orange-400' },\n htm: { icon: Globe, className: 'text-orange-400' },\n\n // JavaScript\n js: { icon: Braces, className: 'text-yellow-400' },\n jsx: { icon: Braces, className: 'text-yellow-400' },\n mjs: { icon: Braces, className: 'text-yellow-400' },\n cjs: { icon: Braces, className: 'text-yellow-400' },\n\n // TypeScript\n ts: { icon: FileCode, className: 'text-blue-400' },\n tsx: { icon: FileCode, className: 'text-blue-400' },\n\n // Python\n py: { icon: FileCode, className: 'text-green-400' },\n pyw: { icon: FileCode, className: 'text-green-400' },\n pyx: { icon: FileCode, className: 'text-green-400' },\n ipynb: { icon: BookOpen, className: 'text-orange-400' },\n\n // Styles\n css: { icon: Palette, className: 'text-purple-400' },\n scss: { icon: Palette, className: 'text-pink-400' },\n sass: { icon: Palette, className: 'text-pink-400' },\n less: { icon: Palette, className: 'text-purple-400' },\n\n // Data formats\n json: { icon: FileJson, className: 'text-amber-400' },\n jsonc: { icon: FileJson, className: 'text-amber-400' },\n yaml: { icon: FileJson, className: 'text-red-400' },\n yml: { icon: FileJson, className: 'text-red-400' },\n xml: { icon: FileJson, className: 'text-orange-400' },\n toml: { icon: FileJson, className: 'text-gray-400' },\n\n // Markdown & Text\n md: { icon: FileText, className: 'text-gray-400' },\n mdx: { icon: FileText, className: 'text-gray-400' },\n txt: { icon: FileText, className: 'text-gray-500' },\n rst: { icon: FileText, className: 'text-gray-400' },\n\n // Images\n png: { icon: Image, className: 'text-pink-400' },\n jpg: { icon: Image, className: 'text-pink-400' },\n jpeg: { icon: Image, className: 'text-pink-400' },\n gif: { icon: Image, className: 'text-pink-400' },\n svg: { icon: Image, className: 'text-orange-400' },\n webp: { icon: Image, className: 'text-pink-400' },\n ico: { icon: Image, className: 'text-pink-400' },\n bmp: { icon: Image, className: 'text-pink-400' },\n\n // Video\n mp4: { icon: Film, className: 'text-red-400' },\n webm: { icon: Film, className: 'text-red-400' },\n mov: { icon: Film, className: 'text-red-400' },\n avi: { icon: Film, className: 'text-red-400' },\n mkv: { icon: Film, className: 'text-red-400' },\n\n // Office Documents\n pdf: { icon: FileText, className: 'text-red-500' },\n doc: { icon: FileText, className: 'text-blue-500' },\n docx: { icon: FileText, className: 'text-blue-500' },\n xls: { icon: FileSpreadsheet, className: 'text-green-500' },\n xlsx: { icon: FileSpreadsheet, className: 'text-green-500' },\n csv: { icon: FileSpreadsheet, className: 'text-green-400' },\n ppt: { icon: Presentation, className: 'text-orange-500' },\n pptx: { icon: Presentation, className: 'text-orange-500' },\n\n // Archives\n zip: { icon: FileArchive, className: 'text-amber-500' },\n tar: { icon: FileArchive, className: 'text-amber-500' },\n gz: { icon: FileArchive, className: 'text-amber-500' },\n rar: { icon: FileArchive, className: 'text-amber-500' },\n '7z': { icon: FileArchive, className: 'text-amber-500' },\n\n // Database\n sql: { icon: Database, className: 'text-blue-400' },\n db: { icon: Database, className: 'text-blue-400' },\n sqlite: { icon: Database, className: 'text-blue-400' },\n\n // Shell/Scripts\n sh: { icon: Terminal, className: 'text-green-400' },\n bash: { icon: Terminal, className: 'text-green-400' },\n zsh: { icon: Terminal, className: 'text-green-400' },\n fish: { icon: Terminal, className: 'text-green-400' },\n ps1: { icon: Terminal, className: 'text-blue-400' },\n bat: { icon: Terminal, className: 'text-gray-400' },\n cmd: { icon: Terminal, className: 'text-gray-400' },\n\n // Config\n ini: { icon: Settings, className: 'text-gray-400' },\n conf: { icon: Settings, className: 'text-gray-400' },\n config: { icon: Settings, className: 'text-gray-400' },\n env: { icon: Lock, className: 'text-yellow-500' },\n\n // Other languages\n java: { icon: FileCode, className: 'text-red-400' },\n kt: { icon: FileCode, className: 'text-purple-400' },\n go: { icon: FileCode, className: 'text-cyan-400' },\n rs: { icon: FileCode, className: 'text-orange-400' },\n rb: { icon: FileCode, className: 'text-red-500' },\n php: { icon: FileCode, className: 'text-indigo-400' },\n c: { icon: FileCode, className: 'text-blue-400' },\n cpp: { icon: FileCode, className: 'text-blue-500' },\n h: { icon: FileCode, className: 'text-purple-400' },\n hpp: { icon: FileCode, className: 'text-purple-400' },\n cs: { icon: FileCode, className: 'text-green-500' },\n swift: { icon: FileCode, className: 'text-orange-500' },\n r: { icon: FileCode, className: 'text-blue-400' },\n R: { icon: FileCode, className: 'text-blue-400' },\n lua: { icon: FileCode, className: 'text-blue-500' },\n pl: { icon: FileCode, className: 'text-purple-400' },\n scala: { icon: FileCode, className: 'text-red-400' },\n};\n\n// Special filenames that override extension-based icons\nconst SPECIAL_FILES: Record = {\n 'package.json': { icon: FileJson, className: 'text-green-400' },\n 'package-lock.json': { icon: Lock, className: 'text-amber-400' },\n 'tsconfig.json': { icon: Settings, className: 'text-blue-400' },\n 'vite.config.ts': { icon: Settings, className: 'text-purple-400' },\n 'vite.config.js': { icon: Settings, className: 'text-purple-400' },\n '.gitignore': { icon: Settings, className: 'text-orange-400' },\n '.env': { icon: Lock, className: 'text-yellow-500' },\n '.env.local': { icon: Lock, className: 'text-yellow-500' },\n '.env.example': { icon: Lock, className: 'text-yellow-400' },\n 'Dockerfile': { icon: FileCode, className: 'text-blue-400' },\n 'docker-compose.yml': { icon: Settings, className: 'text-blue-400' },\n 'Makefile': { icon: Terminal, className: 'text-gray-400' },\n 'README.md': { icon: BookOpen, className: 'text-blue-400' },\n 'LICENSE': { icon: FileText, className: 'text-gray-500' },\n 'requirements.txt': { icon: FileText, className: 'text-green-400' },\n 'pyproject.toml': { icon: Settings, className: 'text-blue-400' },\n};\n\n// Default icon for unknown file types\nconst DEFAULT_ICON: FileIconConfig = {\n icon: File,\n className: 'text-gray-400',\n};\n\n/**\n * Get the icon configuration for a file based on its name/extension\n */\nexport function getFileIcon(filename: string): FileIconConfig {\n // Check special filenames first\n const lowerFilename = filename.toLowerCase();\n if (SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename]) {\n return SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename];\n }\n\n // Extract extension\n const parts = filename.split('.');\n if (parts.length > 1) {\n const ext = parts[parts.length - 1].toLowerCase();\n if (FILE_ICON_MAP[ext]) {\n return FILE_ICON_MAP[ext];\n }\n }\n\n return DEFAULT_ICON;\n}\n\n/**\n * Check if a file extension is recognized\n */\nexport function isKnownFileType(filename: string): boolean {\n const lowerFilename = filename.toLowerCase();\n if (SPECIAL_FILES[filename] || SPECIAL_FILES[lowerFilename]) {\n return true;\n }\n\n const parts = filename.split('.');\n if (parts.length > 1) {\n const ext = parts[parts.length - 1].toLowerCase();\n return ext in FILE_ICON_MAP;\n }\n\n return false;\n}\n","/**\n * useModalKeyboardNavigation Hook\n *\n * Provides keyboard navigation within the Browser modal.\n * Supports tab switching, list navigation, and item selection.\n */\n\nimport { useEffect, useCallback, useState } from 'react';\n\nexport type TabType = 'answers' | 'votes' | 'workspace' | 'timeline';\n\nconst TAB_ORDER: TabType[] = ['answers', 'votes', 'workspace', 'timeline'];\n\ninterface UseModalKeyboardNavigationOptions {\n /** Whether the modal is open */\n isOpen: boolean;\n /** Current active tab */\n activeTab: TabType;\n /** Number of items in the current list */\n itemCount: number;\n /** Callback when tab changes */\n onTabChange: (tab: TabType) => void;\n /** Callback when selected item changes */\n onItemSelect: (index: number) => void;\n /** Callback when item is activated (Enter/Space) */\n onItemActivate?: (index: number) => void;\n /** Callback to close the modal */\n onClose: () => void;\n /** Whether to enable navigation (disabled when focused on input) */\n enabled?: boolean;\n}\n\ninterface ModalNavigationState {\n /** Currently selected item index (-1 = none) */\n selectedIndex: number;\n /** Whether keyboard navigation is actively being used */\n isNavigating: boolean;\n}\n\nexport interface ModalKeyboardShortcut {\n key: string;\n description: string;\n category: 'tabs' | 'navigation' | 'actions';\n}\n\n/** Shortcuts available within the modal */\nexport const MODAL_SHORTCUTS: ModalKeyboardShortcut[] = [\n { key: '1', description: 'Answers tab', category: 'tabs' },\n { key: '2', description: 'Votes tab', category: 'tabs' },\n { key: '3', description: 'Workspace tab', category: 'tabs' },\n { key: '4', description: 'Timeline tab', category: 'tabs' },\n { key: 'j / ↓', description: 'Move down', category: 'navigation' },\n { key: 'k / ↑', description: 'Move up', category: 'navigation' },\n { key: 'Enter', description: 'Expand / Select', category: 'actions' },\n { key: 'Esc', description: 'Close modal', category: 'actions' },\n];\n\nexport function useModalKeyboardNavigation(options: UseModalKeyboardNavigationOptions) {\n const {\n isOpen,\n activeTab,\n itemCount,\n onTabChange,\n onItemSelect,\n onItemActivate,\n onClose,\n enabled = true,\n } = options;\n\n const [state, setState] = useState({\n selectedIndex: -1,\n isNavigating: false,\n });\n\n // Reset selection when tab changes or modal closes\n useEffect(() => {\n setState({ selectedIndex: -1, isNavigating: false });\n }, [activeTab, isOpen]);\n\n // Notify parent of selection changes\n useEffect(() => {\n if (state.selectedIndex >= 0) {\n onItemSelect(state.selectedIndex);\n }\n }, [state.selectedIndex, onItemSelect]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!isOpen || !enabled) return;\n\n // Skip if focused on an input/textarea\n const target = event.target as HTMLElement;\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable\n ) {\n return;\n }\n\n // Don't interfere with modifier key combinations (except Shift for ?)\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return;\n }\n\n let handled = false;\n\n switch (event.key) {\n // Tab switching with number keys\n case '1':\n case '2':\n case '3':\n case '4': {\n const tabIndex = parseInt(event.key, 10) - 1;\n if (tabIndex >= 0 && tabIndex < TAB_ORDER.length) {\n onTabChange(TAB_ORDER[tabIndex]);\n handled = true;\n }\n break;\n }\n\n // Navigate down\n case 'j':\n case 'ArrowDown': {\n if (itemCount > 0) {\n setState((prev) => ({\n selectedIndex: Math.min(prev.selectedIndex + 1, itemCount - 1),\n isNavigating: true,\n }));\n handled = true;\n }\n break;\n }\n\n // Navigate up\n case 'k':\n case 'ArrowUp': {\n if (itemCount > 0) {\n setState((prev) => ({\n selectedIndex: Math.max(prev.selectedIndex - 1, 0),\n isNavigating: true,\n }));\n handled = true;\n }\n break;\n }\n\n // Jump to first item\n case 'Home': {\n if (itemCount > 0) {\n setState({ selectedIndex: 0, isNavigating: true });\n handled = true;\n }\n break;\n }\n\n // Jump to last item\n case 'End': {\n if (itemCount > 0) {\n setState({ selectedIndex: itemCount - 1, isNavigating: true });\n handled = true;\n }\n break;\n }\n\n // Activate selected item\n case 'Enter':\n case ' ': {\n if (state.selectedIndex >= 0 && onItemActivate) {\n onItemActivate(state.selectedIndex);\n handled = true;\n }\n break;\n }\n\n // Close modal\n case 'Escape': {\n onClose();\n handled = true;\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [isOpen, enabled, activeTab, itemCount, state.selectedIndex, onTabChange, onItemActivate, onClose]\n );\n\n // Register keyboard listener\n useEffect(() => {\n if (isOpen && enabled) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n }, [isOpen, enabled, handleKeyDown]);\n\n // Clear navigation state when clicking with mouse\n const clearNavigation = useCallback(() => {\n setState({ selectedIndex: -1, isNavigating: false });\n }, []);\n\n // Set specific selection (for mouse hover integration)\n const setSelectedIndex = useCallback((index: number) => {\n setState({ selectedIndex: index, isNavigating: false });\n }, []);\n\n return {\n /** Current selected index (-1 = none) */\n selectedIndex: state.selectedIndex,\n /** Whether user is actively navigating with keyboard */\n isNavigating: state.isNavigating,\n /** Clear the current selection */\n clearNavigation,\n /** Set selection to specific index */\n setSelectedIndex,\n /** Available shortcuts for display in help */\n shortcuts: MODAL_SHORTCUTS,\n };\n}\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","/**\n * FileDiffView Component\n *\n * Shows a git-style diff between two file contents.\n * Only used when comparing files with the same name.\n */\n\nimport { useMemo } from 'react';\nimport { diffLines, type Change } from 'diff';\nimport { GitCompare, Plus, Minus, Equal } from 'lucide-react';\n\ninterface FileDiffViewProps {\n /** Left file content */\n leftContent: string;\n /** Right file content */\n rightContent: string;\n /** Left label (e.g., \"Agent 1 - agent1.1\") */\n leftLabel: string;\n /** Right label (e.g., \"Agent 2 - agent2.1\") */\n rightLabel: string;\n /** File name being compared */\n fileName: string;\n}\n\nexport function FileDiffView({\n leftContent,\n rightContent,\n leftLabel,\n rightLabel,\n fileName,\n}: FileDiffViewProps) {\n // Compute the diff\n const diffResult = useMemo(() => {\n return diffLines(leftContent, rightContent);\n }, [leftContent, rightContent]);\n\n // Calculate statistics\n const stats = useMemo(() => {\n let additions = 0;\n let deletions = 0;\n let unchanged = 0;\n\n diffResult.forEach((part) => {\n const lines = part.value.split('\\n').filter((l) => l !== '').length;\n if (part.added) {\n additions += lines;\n } else if (part.removed) {\n deletions += lines;\n } else {\n unchanged += lines;\n }\n });\n\n return { additions, deletions, unchanged };\n }, [diffResult]);\n\n // Check if files are identical\n const isIdentical = stats.additions === 0 && stats.deletions === 0;\n\n return (\n
    \n {/* Header */}\n
    \n
    \n \n Diff: {fileName}\n
    \n
    \n {isIdentical ? (\n \n \n Files are identical\n \n ) : (\n <>\n \n \n {stats.additions} additions\n \n \n \n {stats.deletions} deletions\n \n \n )}\n
    \n
    \n\n {/* Labels */}\n
    \n
    \n \n {leftLabel}\n
    \n
    \n \n {rightLabel}\n
    \n
    \n\n {/* Diff content */}\n
    \n
    \n          {diffResult.map((part, index) => (\n            \n          ))}\n        
    \n
    \n
    \n );\n}\n\ninterface DiffBlockProps {\n part: Change;\n}\n\nfunction DiffBlock({ part }: DiffBlockProps) {\n const lines = part.value.split('\\n');\n // Remove trailing empty line from split\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n if (part.added) {\n return (\n <>\n {lines.map((line, i) => (\n \n +\n {line || ' '}\n
    \n ))}\n \n );\n }\n\n if (part.removed) {\n return (\n <>\n {lines.map((line, i) => (\n \n -\n {line || ' '}\n
    \n ))}\n \n );\n }\n\n // Unchanged lines\n return (\n <>\n {lines.map((line, i) => (\n
    \n \n {line || ' '}\n
    \n ))}\n \n );\n}\n\nexport default FileDiffView;\n","/**\n * ComparisonView Component\n *\n * Side-by-side comparison of files from different agents or answer versions.\n * Supports both visual comparison (for HTML, images) and diff view (for code).\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { X, Columns, GitCompare, ChevronDown, Loader2, Split } from 'lucide-react';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { FileDiffView } from './FileDiffView';\nimport { getAgentColor } from '../utils/agentColors';\nimport type { AnswerWorkspace } from '../types';\n\ninterface ComparisonSource {\n agentId: string;\n answerLabel: string;\n workspacePath: string;\n filePath: string;\n}\n\ninterface WorkspaceInfo {\n path: string;\n answerLabel?: string;\n name?: string;\n}\n\ninterface ComparisonViewProps {\n /** Whether the comparison view is open */\n isOpen: boolean;\n /** Close the comparison view */\n onClose: () => void;\n /** Available agents and their workspaces (current from filesystem) */\n agentWorkspaces: Record;\n /** Historical answer workspaces (from status.json) */\n answerWorkspaces: AnswerWorkspace[];\n /** Agent order for consistent coloring */\n agentOrder: string[];\n /** Session ID for live preview */\n sessionId?: string;\n /** Initial file to compare (optional) */\n initialFile?: string;\n}\n\nexport function ComparisonView({\n isOpen,\n onClose,\n agentWorkspaces,\n answerWorkspaces,\n agentOrder,\n sessionId,\n initialFile: _initialFile,\n}: ComparisonViewProps) {\n // Left and right panel selections\n const [leftSource, setLeftSource] = useState(null);\n const [rightSource, setRightSource] = useState(null);\n\n // File lists for each panel\n const [leftFiles, setLeftFiles] = useState([]);\n const [rightFiles, setRightFiles] = useState([]);\n const [isLoadingLeft, setIsLoadingLeft] = useState(false);\n const [isLoadingRight, setIsLoadingRight] = useState(false);\n\n // Diff mode state\n const [showDiff, setShowDiff] = useState(false);\n const [leftContent, setLeftContent] = useState(null);\n const [rightContent, setRightContent] = useState(null);\n const [isLoadingDiff, setIsLoadingDiff] = useState(false);\n const [diffError, setDiffError] = useState(null);\n\n // Helper to extract filename from path\n const getFileName = useCallback((path: string) => path.split('/').pop() || path, []);\n\n // Check if both files have the same name (enabling diff mode)\n const canShowDiff = useMemo(() => {\n if (!leftSource?.filePath || !rightSource?.filePath) return false;\n const leftName = getFileName(leftSource.filePath);\n const rightName = getFileName(rightSource.filePath);\n return leftName === rightName;\n }, [leftSource?.filePath, rightSource?.filePath, getFileName]);\n\n // Get labels for diff view\n const getSourceLabel = useCallback((source: ComparisonSource | null) => {\n if (!source) return '';\n const agentIdx = agentOrder.indexOf(source.agentId);\n const agentNum = agentIdx >= 0 ? agentIdx + 1 : 0;\n return agentNum > 0 ? `Agent ${agentNum} - ${source.answerLabel}` : source.answerLabel;\n }, [agentOrder]);\n\n // Fetch file content for diff - returns { content, error } to distinguish failure types\n const fetchFileContent = useCallback(async (workspacePath: string, filePath: string): Promise<{ content: string | null; error?: string }> => {\n try {\n console.log('[ComparisonView] Fetching file for diff:', { workspace: workspacePath, path: filePath });\n // API requires separate workspace and relative path parameters\n const response = await fetch(`/api/workspace/file?workspace=${encodeURIComponent(workspacePath)}&path=${encodeURIComponent(filePath)}`);\n\n if (!response.ok) {\n console.error('[ComparisonView] File fetch failed:', response.status, response.statusText);\n return { content: null, error: `Failed to load file (${response.status})` };\n }\n\n const data = await response.json();\n console.log('[ComparisonView] File data received:', { binary: data.binary, size: data.size, hasContent: !!data.content });\n\n // Check if content is binary\n if (data.binary) {\n return { content: null, error: 'Binary file cannot be diffed' };\n }\n\n return { content: data.content || '' };\n } catch (err) {\n console.error('[ComparisonView] Error fetching file for diff:', err);\n return { content: null, error: `Error loading file: ${err}` };\n }\n }, []);\n\n // Load both file contents when diff mode is enabled\n useEffect(() => {\n if (showDiff && canShowDiff && leftSource?.filePath && rightSource?.filePath) {\n setIsLoadingDiff(true);\n setDiffError(null);\n Promise.all([\n fetchFileContent(leftSource.workspacePath, leftSource.filePath),\n fetchFileContent(rightSource.workspacePath, rightSource.filePath),\n ]).then(([leftResult, rightResult]) => {\n // Check for errors\n if (leftResult.error || rightResult.error) {\n const errors = [leftResult.error, rightResult.error].filter(Boolean);\n setDiffError(errors.join(' | '));\n setLeftContent(null);\n setRightContent(null);\n } else {\n setLeftContent(leftResult.content);\n setRightContent(rightResult.content);\n }\n setIsLoadingDiff(false);\n });\n } else {\n setLeftContent(null);\n setRightContent(null);\n setDiffError(null);\n }\n }, [showDiff, canShowDiff, leftSource?.workspacePath, leftSource?.filePath, rightSource?.workspacePath, rightSource?.filePath, fetchFileContent]);\n\n // Reset diff mode when files change\n useEffect(() => {\n setShowDiff(false);\n }, [leftSource?.filePath, rightSource?.filePath]);\n\n // Build options for dropdowns - merge current workspaces + answer workspaces\n const sourceOptions = useMemo(() => {\n const options: Array<{ agentId: string; answerLabel: string; workspacePath: string; displayName: string }> = [];\n const seenPaths = new Set(); // Avoid duplicates\n\n // First add current workspaces\n agentOrder.forEach((agentId, index) => {\n const agentData = agentWorkspaces[agentId];\n if (!agentData) return;\n\n const agentNum = index + 1;\n\n // Current workspace\n if (agentData.current && !seenPaths.has(agentData.current.path)) {\n seenPaths.add(agentData.current.path);\n options.push({\n agentId,\n answerLabel: 'current',\n workspacePath: agentData.current.path,\n displayName: `Agent ${agentNum} - Current`,\n });\n }\n });\n\n // Then add all historical answer workspaces\n answerWorkspaces.forEach((aw) => {\n if (seenPaths.has(aw.workspacePath)) return;\n seenPaths.add(aw.workspacePath);\n\n const agentIdx = agentOrder.indexOf(aw.agentId);\n const agentNum = agentIdx >= 0 ? agentIdx + 1 : 0;\n const displayLabel = aw.answerLabel || `Answer ${aw.answerNumber}`;\n\n options.push({\n agentId: aw.agentId,\n answerLabel: displayLabel,\n workspacePath: aw.workspacePath,\n displayName: agentNum > 0 ? `Agent ${agentNum} - ${displayLabel}` : displayLabel,\n });\n });\n\n // Sort by agent number, then by answer label\n options.sort((a, b) => {\n const aIdx = agentOrder.indexOf(a.agentId);\n const bIdx = agentOrder.indexOf(b.agentId);\n if (aIdx !== bIdx) return aIdx - bIdx;\n // Put 'current' first\n if (a.answerLabel === 'current') return -1;\n if (b.answerLabel === 'current') return 1;\n return a.answerLabel.localeCompare(b.answerLabel);\n });\n\n console.log('[ComparisonView] Built sourceOptions:', options);\n console.log('[ComparisonView] agentWorkspaces:', agentWorkspaces);\n console.log('[ComparisonView] answerWorkspaces:', answerWorkspaces);\n return options;\n }, [agentWorkspaces, answerWorkspaces, agentOrder]);\n\n // Auto-select first two options when opening\n useEffect(() => {\n if (isOpen && sourceOptions.length >= 2 && !leftSource && !rightSource) {\n const first = sourceOptions[0];\n const second = sourceOptions[1];\n\n // Don't auto-set filePath - let user select after files load\n setLeftSource({\n agentId: first.agentId,\n answerLabel: first.answerLabel,\n workspacePath: first.workspacePath,\n filePath: '',\n });\n setRightSource({\n agentId: second.agentId,\n answerLabel: second.answerLabel,\n workspacePath: second.workspacePath,\n filePath: '',\n });\n }\n }, [isOpen, sourceOptions, leftSource, rightSource]);\n\n // Fetch files when workspace changes\n const fetchFiles = async (workspacePath: string, setSide: 'left' | 'right') => {\n const setLoading = setSide === 'left' ? setIsLoadingLeft : setIsLoadingRight;\n const setFiles = setSide === 'left' ? setLeftFiles : setRightFiles;\n\n if (!workspacePath) {\n console.warn(`[ComparisonView] ${setSide}: No workspace path provided`);\n setFiles([]);\n return;\n }\n\n console.log(`[ComparisonView] ${setSide}: Fetching files from:`, workspacePath);\n setLoading(true);\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`);\n console.log(`[ComparisonView] ${setSide}: Response status:`, response.status);\n\n if (response.ok) {\n const data = await response.json();\n console.log(`[ComparisonView] ${setSide}: Raw response:`, data);\n // API returns files with {path, size, modified} - no type field\n // All entries are files (directories are not returned by the API)\n const files = (data.files || []).map((f: { path: string }) => f.path);\n console.log(`[ComparisonView] ${setSide}: Found ${files.length} files:`, files);\n setFiles(files);\n } else {\n const errorText = await response.text();\n console.error(`[ComparisonView] ${setSide}: Failed to fetch files:`, response.status, errorText);\n setFiles([]);\n }\n } catch (err) {\n console.error(`[ComparisonView] ${setSide}: Error fetching files:`, err);\n setFiles([]);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (leftSource?.workspacePath) {\n fetchFiles(leftSource.workspacePath, 'left');\n }\n }, [leftSource?.workspacePath]);\n\n useEffect(() => {\n if (rightSource?.workspacePath) {\n fetchFiles(rightSource.workspacePath, 'right');\n }\n }, [rightSource?.workspacePath]);\n\n // Handle source selection\n const handleSourceChange = (side: 'left' | 'right', option: typeof sourceOptions[0]) => {\n const newSource: ComparisonSource = {\n agentId: option.agentId,\n answerLabel: option.answerLabel,\n workspacePath: option.workspacePath,\n filePath: '',\n };\n\n if (side === 'left') {\n setLeftSource(newSource);\n } else {\n setRightSource(newSource);\n }\n };\n\n // Handle file selection\n const handleFileSelect = (side: 'left' | 'right', filePath: string) => {\n if (side === 'left' && leftSource) {\n setLeftSource({ ...leftSource, filePath });\n } else if (side === 'right' && rightSource) {\n setRightSource({ ...rightSource, filePath });\n }\n };\n\n if (!isOpen) return null;\n\n return (\n \n e.stopPropagation()}\n >\n {/* Header */}\n
    \n
    \n \n

    Side-by-Side Comparison

    \n
    \n
    \n {/* Diff toggle - only shown when both files have the same name */}\n {canShowDiff && (\n setShowDiff(!showDiff)}\n className={`flex items-center gap-2 px-3 py-2 rounded-lg transition-colors ${\n showDiff\n ? 'bg-purple-600 text-white'\n : 'bg-gray-700 text-gray-300 hover:bg-gray-600'\n }`}\n title=\"Toggle diff view (available for same-name files)\"\n >\n \n \n {showDiff ? 'Diff View' : 'Show Diff'}\n \n \n )}\n \n \n \n
    \n
    \n\n {/* Main content - two panels or diff view */}\n {showDiff && canShowDiff ? (\n // Diff view mode\n
    \n {/* Source selectors row */}\n
    \n
    \n handleSourceChange('left', opt)}\n />\n
    \n handleFileSelect('left', e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {leftFiles.map((file) => (\n \n ))}\n \n
    \n
    \n
    \n
    \n handleSourceChange('right', opt)}\n />\n
    \n handleFileSelect('right', e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {rightFiles.map((file) => (\n \n ))}\n \n
    \n
    \n
    \n\n {/* Diff content */}\n
    \n {isLoadingDiff ? (\n
    \n \n Loading diff...\n
    \n ) : diffError ? (\n
    \n \n {diffError}\n Check console for details\n
    \n ) : leftContent === null || rightContent === null ? (\n
    \n \n Could not load file content\n Select files to compare\n
    \n ) : (\n \n )}\n
    \n
    \n ) : (\n // Side-by-side preview mode\n
    \n {/* Left Panel */}\n handleSourceChange('left', opt)}\n onFileSelect={(f) => handleFileSelect('left', f)}\n />\n\n {/* Divider */}\n
    \n\n {/* Right Panel */}\n handleSourceChange('right', opt)}\n onFileSelect={(f) => handleFileSelect('right', f)}\n />\n
    \n )}\n \n \n );\n}\n\ninterface SourceOption {\n agentId: string;\n answerLabel: string;\n workspacePath: string;\n displayName: string;\n}\n\n// Reusable source selector dropdown\ninterface SourceSelectorProps {\n source: ComparisonSource | null;\n sourceOptions: SourceOption[];\n agentOrder: string[];\n onSourceChange: (option: SourceOption) => void;\n}\n\nfunction SourceSelector({ source, sourceOptions, agentOrder, onSourceChange }: SourceSelectorProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const selectedOption = sourceOptions.find(\n (opt) => opt.workspacePath === source?.workspacePath\n );\n\n const agentColor = source ? getAgentColor(source.agentId, agentOrder) : null;\n\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n className={`w-full flex items-center justify-between px-4 py-2 rounded-lg border transition-colors ${\n agentColor\n ? `${agentColor.bgLight} ${agentColor.border} ${agentColor.text}`\n : 'bg-gray-700 border-gray-600 text-gray-300'\n }`}\n >\n \n {selectedOption?.displayName || 'Select source...'}\n \n \n \n\n {isDropdownOpen && (\n
    \n {sourceOptions.map((opt, idx) => {\n const optColor = getAgentColor(opt.agentId, agentOrder);\n return (\n {\n onSourceChange(opt);\n setIsDropdownOpen(false);\n }}\n className={`w-full px-4 py-2 text-left hover:bg-gray-700 transition-colors ${\n opt.workspacePath === source?.workspacePath ? optColor.bgLight : ''\n }`}\n >\n {opt.displayName}\n \n );\n })}\n
    \n )}\n
    \n );\n}\n\ninterface ComparisonPanelProps {\n side: 'left' | 'right';\n source: ComparisonSource | null;\n files: string[];\n isLoading: boolean;\n sourceOptions: SourceOption[];\n agentOrder: string[];\n sessionId?: string;\n onSourceChange: (option: SourceOption) => void;\n onFileSelect: (filePath: string) => void;\n}\n\nfunction ComparisonPanel({\n side: _side,\n source,\n files,\n isLoading,\n sourceOptions,\n agentOrder,\n sessionId,\n onSourceChange,\n onFileSelect,\n}: ComparisonPanelProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const selectedOption = sourceOptions.find(\n (opt) => opt.workspacePath === source?.workspacePath\n );\n\n const agentColor = source ? getAgentColor(source.agentId, agentOrder) : null;\n\n return (\n
    \n {/* Source selector */}\n
    \n
    \n setIsDropdownOpen(!isDropdownOpen)}\n className={`w-full flex items-center justify-between px-4 py-2 rounded-lg border transition-colors ${\n agentColor\n ? `${agentColor.bgLight} ${agentColor.border} ${agentColor.text}`\n : 'bg-gray-700 border-gray-600 text-gray-300'\n }`}\n >\n \n {selectedOption?.displayName || 'Select source...'}\n \n \n \n\n {isDropdownOpen && (\n
    \n {sourceOptions.map((opt, idx) => {\n const optColor = getAgentColor(opt.agentId, agentOrder);\n return (\n {\n onSourceChange(opt);\n setIsDropdownOpen(false);\n }}\n className={`w-full px-4 py-2 text-left hover:bg-gray-700 transition-colors ${\n opt.workspacePath === source?.workspacePath ? optColor.bgLight : ''\n }`}\n >\n {opt.displayName}\n \n );\n })}\n
    \n )}\n
    \n\n {/* File selector */}\n {source && (\n
    \n onFileSelect(e.target.value)}\n className=\"w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {files.map((file) => (\n \n ))}\n \n
    \n )}\n
    \n\n {/* Preview area */}\n
    \n {isLoading ? (\n
    \n \n Loading files...\n
    \n ) : !source ? (\n
    \n \n Select a source to compare\n
    \n ) : !source.filePath ? (\n
    \n \n Select a file to preview\n \n {files.length} files available\n \n
    \n ) : (\n \n )}\n
    \n
    \n );\n}\n\nexport default ComparisonView;\n","/**\n * ResizableSplitPane Component\n *\n * A horizontal split pane with a draggable divider.\n * Stores the split ratio in localStorage for persistence.\n */\n\nimport { useState, useRef, useCallback, useEffect, type ReactNode } from 'react';\nimport { GripVertical } from 'lucide-react';\n\ninterface ResizableSplitPaneProps {\n /** Left panel content */\n left: ReactNode;\n /** Right panel content */\n right: ReactNode;\n /** Unique key for localStorage persistence */\n storageKey?: string;\n /** Initial left panel width as percentage (0-100) */\n defaultLeftWidth?: number;\n /** Minimum left panel width as percentage */\n minLeftWidth?: number;\n /** Maximum left panel width as percentage */\n maxLeftWidth?: number;\n /** Additional className for the container */\n className?: string;\n}\n\nexport function ResizableSplitPane({\n left,\n right,\n storageKey = 'split-pane-width',\n defaultLeftWidth = 30,\n minLeftWidth = 15,\n maxLeftWidth = 60,\n className = '',\n}: ResizableSplitPaneProps) {\n // Load saved width or use default\n const [leftWidth, setLeftWidth] = useState(() => {\n if (typeof window === 'undefined') return defaultLeftWidth;\n const saved = localStorage.getItem(storageKey);\n if (saved) {\n const parsed = parseFloat(saved);\n if (!isNaN(parsed) && parsed >= minLeftWidth && parsed <= maxLeftWidth) {\n return parsed;\n }\n }\n return defaultLeftWidth;\n });\n\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef(null);\n\n // Save to localStorage when width changes\n useEffect(() => {\n localStorage.setItem(storageKey, String(leftWidth));\n }, [leftWidth, storageKey]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n }, []);\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || !containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const newWidth = (x / rect.width) * 100;\n\n // Clamp to min/max\n const clampedWidth = Math.max(minLeftWidth, Math.min(maxLeftWidth, newWidth));\n setLeftWidth(clampedWidth);\n },\n [isDragging, minLeftWidth, maxLeftWidth]\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // Add/remove global mouse listeners when dragging\n useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n // Prevent text selection while dragging\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'col-resize';\n } else {\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n return (\n
    \n {/* Left Panel */}\n \n {left}\n
    \n\n {/* Resizer */}\n \n \n
    \n\n {/* Right Panel */}\n
    \n {right}\n
    \n
    \n );\n}\n\nexport default ResizableSplitPane;\n","/**\n * Fetch Utilities with AbortController Support\n *\n * Provides utilities for making cancellable fetch requests, particularly\n * useful for workspace browser where rapid switching between workspaces\n * requires cancelling in-flight requests.\n *\n * @see specs/001-fix-workspace-browser/spec.md FR-008\n */\n\n/**\n * Options for fetch with abort support.\n */\nexport interface FetchWithAbortOptions extends Omit {\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n}\n\n/**\n * Result from createAbortableFetch.\n */\nexport interface AbortableFetchResult {\n /** Promise that resolves with the parsed response */\n promise: Promise;\n /** Function to abort the request */\n abort: () => void;\n /** The AbortController instance */\n controller: AbortController;\n}\n\n/**\n * Error thrown when a fetch request is aborted.\n */\nexport class FetchAbortError extends Error {\n constructor(message = 'Request was aborted') {\n super(message);\n this.name = 'FetchAbortError';\n }\n}\n\n/**\n * Error thrown when a fetch request times out.\n */\nexport class FetchTimeoutError extends Error {\n constructor(timeout: number) {\n super(`Request timed out after ${timeout}ms`);\n this.name = 'FetchTimeoutError';\n }\n}\n\n/**\n * Creates an abortable fetch request that returns JSON.\n *\n * @param url - The URL to fetch\n * @param options - Fetch options including timeout\n * @returns Object containing the promise, abort function, and controller\n *\n * @example\n * ```typescript\n * // Create the request\n * const { promise, abort, controller } = createAbortableFetch(\n * `/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`\n * );\n *\n * // Use the promise\n * try {\n * const data = await promise;\n * console.log('Files:', data.files);\n * } catch (err) {\n * if (err instanceof FetchAbortError) {\n * console.log('Request was cancelled');\n * } else {\n * console.error('Fetch failed:', err);\n * }\n * }\n *\n * // Cancel if needed (e.g., when workspace changes)\n * abort();\n * ```\n */\nexport function createAbortableFetch(\n url: string,\n options: FetchWithAbortOptions = {}\n): AbortableFetchResult {\n const controller = new AbortController();\n const { timeout = 30000, ...fetchOptions } = options;\n\n // Set up timeout\n let timeoutId: ReturnType | null = null;\n\n const promise = new Promise((resolve, reject) => {\n // Set timeout\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n controller.abort();\n reject(new FetchTimeoutError(timeout));\n }, timeout);\n }\n\n fetch(url, {\n ...fetchOptions,\n signal: controller.signal,\n })\n .then(async (response) => {\n // Clear timeout on response\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n return response.json();\n })\n .then(resolve)\n .catch((err) => {\n // Clear timeout on error\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n // Convert abort error to our custom error\n if (err.name === 'AbortError') {\n reject(new FetchAbortError());\n } else {\n reject(err);\n }\n });\n });\n\n const abort = () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n controller.abort();\n };\n\n return { promise, abort, controller };\n}\n\n/**\n * Simplified fetch with abort support - returns promise only.\n * Use createAbortableFetch if you need the abort function.\n *\n * @param url - The URL to fetch\n * @param signal - Optional AbortSignal for cancellation\n * @param options - Fetch options\n * @returns Promise that resolves with the parsed response\n *\n * @example\n * ```typescript\n * const controller = new AbortController();\n *\n * try {\n * const data = await fetchWithAbort(\n * `/api/workspace/browse?path=${path}`,\n * controller.signal\n * );\n * } catch (err) {\n * if (err instanceof FetchAbortError) {\n * // Cancelled - ignore\n * }\n * }\n *\n * // To cancel:\n * controller.abort();\n * ```\n */\nexport async function fetchWithAbort(\n url: string,\n signal?: AbortSignal,\n options: Omit = {}\n): Promise {\n try {\n const response = await fetch(url, {\n ...options,\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n return response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new FetchAbortError();\n }\n throw err;\n }\n}\n\n/**\n * Type guard for FetchAbortError.\n */\nexport function isAbortError(err: unknown): err is FetchAbortError {\n return err instanceof FetchAbortError;\n}\n\n/**\n * Type guard for FetchTimeoutError.\n */\nexport function isTimeoutError(err: unknown): err is FetchTimeoutError {\n return err instanceof FetchTimeoutError;\n}\n\n/**\n * Helper to check if error is either abort or timeout.\n */\nexport function isCancellationError(err: unknown): boolean {\n return isAbortError(err) || isTimeoutError(err);\n}\n","/**\n * AnswerBrowserModal Component\n *\n * Modal dialog for browsing all answers and workspace files from agents.\n * Includes tabs for Answers and Workspace views.\n */\n\nimport { useState, useMemo, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, FileText, User, Clock, ChevronDown, Trophy, Folder, ChevronRight, RefreshCw, History, Vote, ArrowRight, Eye, GitBranch, ExternalLink, Bell, Wifi, WifiOff, File, Columns } from 'lucide-react';\nimport { useAgentStore, selectAnswers, selectAgents, selectAgentOrder, selectSelectedAgent, selectFinalAnswer, selectVoteDistribution, selectVoteHistory, selectCurrentVotingRound, resolveAnswerContent } from '../stores/agentStore';\nimport { useWorkspaceStore, selectWsStatus, selectWsError } from '../stores/workspaceStore';\nimport type { Answer, AnswerWorkspace, TimelineNode as TimelineNodeType } from '../types';\nimport { ArtifactPreviewModal } from './ArtifactPreviewModal';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { TimelineView } from './timeline';\nimport { ProgressSummaryBar } from './ProgressSummaryBar';\nimport { EmptyState, EMPTY_STATES } from './EmptyState';\nimport { canPreviewFile } from '../utils/artifactTypes';\nimport { getFileIcon } from '../utils/fileIcons';\nimport { getAgentColor } from '../utils/agentColors';\nimport { clearFileCache } from '../hooks/useFileContent';\nimport { useModalKeyboardNavigation } from '../hooks/useModalKeyboardNavigation';\nimport { ComparisonView } from './ComparisonView';\nimport { ResizableSplitPane } from './ResizableSplitPane';\nimport { createAbortableFetch, isAbortError } from '../utils/fetchWithAbort';\nimport { debugLog } from '../utils/debugLogger';\n\n// Types for workspace API responses\ninterface WorkspaceInfo {\n name: string;\n path: string;\n type: 'current' | 'historical';\n date?: string;\n agentId?: string;\n}\n\ninterface WorkspacesResponse {\n current: WorkspaceInfo[];\n historical: WorkspaceInfo[];\n}\n\ninterface AnswerWorkspacesResponse {\n workspaces: AnswerWorkspace[];\n current: WorkspaceInfo[];\n sources?: string[];\n log_dir_used?: string;\n}\n\n// Map workspace name to agent ID (e.g., \"workspace1\" -> agent at index 0)\nfunction getAgentIdFromWorkspace(workspaceName: string, agentOrder: string[]): string | undefined {\n // Try agent_X pattern inside full path\n const agentMatch = workspaceName.match(/agent_([a-z0-9_]+)/i);\n if (agentMatch) {\n const candidate = `agent_${agentMatch[1].toLowerCase()}`;\n if (agentOrder.includes(candidate)) {\n return candidate;\n }\n }\n\n const match = workspaceName.match(/workspace(\\d+)/);\n if (match) {\n const index = parseInt(match[1], 10) - 1; // workspace1 = index 0\n return agentOrder[index];\n }\n return undefined;\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n modified: number;\n operation?: 'create' | 'modify' | 'delete';\n}\n\ninterface BrowseResponse {\n files: FileInfo[];\n workspace_path: string;\n workspace_mtime?: number;\n}\n\ninterface AnswerBrowserModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialTab?: TabType;\n}\n\ntype TabType = 'answers' | 'votes' | 'workspace' | 'timeline';\n\nfunction formatTimestamp(timestamp: number): string {\n const date = new Date(timestamp);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\n// ============================================================================\n// Workspace File Tree Components\n// ============================================================================\n\ninterface FileTreeNode {\n name: string;\n path: string;\n isDirectory: boolean;\n children: FileTreeNode[];\n size?: number;\n modified?: number;\n}\n\n// Patterns for files/directories to hide in the workspace browser\nconst HIDDEN_FILE_PATTERNS = [\n /^\\.mcp\\//, // MCP server config\n /^\\.mcp$/,\n /^server\\//, // Backend server code\n /^servers\\//, // MCP servers directory\n /^servers$/,\n /^custom_tools\\//, // Custom tools directory\n /^custom_tools$/,\n /^massgen\\//, // MassGen internal directory\n /^massgen$/,\n /^node_modules\\//, // Node dependencies\n /^__pycache__\\//, // Python cache\n /^\\.git\\//, // Git internals\n /^\\.venv\\//, // Python virtual env\n /^venv\\//,\n /^\\.env$/, // Environment files\n /^\\.env\\./,\n /\\.pyc$/, // Compiled Python\n /\\.tmp$/, // Temporary files\n /\\.tmp\\./, // Temp files with extensions\n];\n\n// Filter out hidden/internal files from workspace\nfunction filterHiddenFiles(files: FileInfo[]): FileInfo[] {\n return files.filter(file => {\n return !HIDDEN_FILE_PATTERNS.some(pattern => pattern.test(file.path));\n });\n}\n\nfunction buildFileTree(files: FileInfo[]): FileTreeNode[] {\n const root: FileTreeNode[] = [];\n\n files.forEach((file) => {\n const parts = file.path.split('/').filter(Boolean);\n let current = root;\n\n parts.forEach((part, idx) => {\n const isLast = idx === parts.length - 1;\n let node = current.find((n) => n.name === part);\n\n if (!node) {\n node = {\n name: part,\n path: parts.slice(0, idx + 1).join('/'),\n isDirectory: !isLast,\n children: [],\n size: isLast ? file.size : undefined,\n modified: isLast ? file.modified : undefined,\n };\n current.push(node);\n }\n\n if (!isLast) {\n node.isDirectory = true;\n current = node.children;\n }\n });\n });\n\n // Sort: directories first, then files alphabetically\n const sortNodes = (nodes: FileTreeNode[]): FileTreeNode[] => {\n return nodes.sort((a, b) => {\n if (a.isDirectory && !b.isDirectory) return -1;\n if (!a.isDirectory && b.isDirectory) return 1;\n return a.name.localeCompare(b.name);\n }).map(node => ({\n ...node,\n children: sortNodes(node.children),\n }));\n };\n\n return sortNodes(root);\n}\n\ninterface FileNodeProps {\n node: FileTreeNode;\n depth: number;\n onFileClick?: (filePath: string) => void;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction FileNode({ node, depth, onFileClick }: FileNodeProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const isPreviewable = !node.isDirectory && canPreviewFile(node.name);\n\n // Get file-type specific icon and color\n const fileIconConfig = !node.isDirectory ? getFileIcon(node.name) : null;\n const FileIcon = fileIconConfig?.icon;\n const fileIconClass = fileIconConfig?.className || 'text-gray-400';\n\n const handleClick = () => {\n if (node.isDirectory) {\n setIsExpanded(!isExpanded);\n } else if (onFileClick) {\n onFileClick(node.path);\n }\n };\n\n return (\n
    \n \n {node.isDirectory ? (\n isExpanded ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n\n {node.isDirectory ? (\n \n ) : FileIcon ? (\n \n ) : null}\n\n {node.name}\n\n {/* Preview icon for previewable files */}\n {isPreviewable && (\n \n \n \n )}\n\n {/* File size for non-directories */}\n {!node.isDirectory && node.size !== undefined && (\n \n {formatFileSize(node.size)}\n \n )}\n \n\n \n {node.isDirectory && isExpanded && (\n \n {node.children.map((child) => (\n \n ))}\n \n )}\n \n
    \n );\n}\n\n// ============================================================================\n// Main Modal Component\n// ============================================================================\n\nexport function AnswerBrowserModal({ isOpen, onClose, initialTab = 'answers' }: AnswerBrowserModalProps) {\n const answers = useAgentStore(selectAnswers);\n const agents = useAgentStore(selectAgents);\n const agentOrder = useAgentStore(selectAgentOrder);\n const selectedAgent = useAgentStore(selectSelectedAgent);\n const finalAnswer = useAgentStore(selectFinalAnswer);\n const voteDistribution = useAgentStore(selectVoteDistribution);\n const voteHistory = useAgentStore(selectVoteHistory);\n const currentVotingRound = useAgentStore(selectCurrentVotingRound);\n const sessionId = useAgentStore((s) => s.sessionId);\n\n // Workspace store - always-on WebSocket provides real-time file updates\n const wsStatus = useWorkspaceStore(selectWsStatus);\n const wsError = useWorkspaceStore(selectWsError);\n const wsReconnectAttempts = useWorkspaceStore((s) => s.reconnectAttempts);\n const allWorkspaces = useWorkspaceStore((s) => s.workspaces);\n const historicalSnapshots = useWorkspaceStore((s) => s.historicalSnapshots);\n const getWorkspaceFiles = useWorkspaceStore((s) => s.getWorkspaceFiles);\n const getHistoricalFiles = useWorkspaceStore((s) => s.getHistoricalFiles);\n const setSnapshotFiles = useWorkspaceStore((s) => s.setSnapshotFiles);\n const refreshSessionFn = useWorkspaceStore((s) => s.refreshSessionFn);\n\n const [activeTab, setActiveTab] = useState(initialTab);\n\n // Update active tab when initialTab changes (e.g., opening from notification)\n useEffect(() => {\n if (isOpen) {\n setActiveTab(initialTab);\n }\n }, [isOpen, initialTab]);\n const [filterAgent, setFilterAgent] = useState('all');\n const [expandedAnswerId, setExpandedAnswerId] = useState(null);\n\n // Auto-expand final answer when modal opens with answers tab\n useEffect(() => {\n if (isOpen && activeTab === 'answers' && !expandedAnswerId) {\n // Find the final answer (answerNumber === 0) and expand it\n const finalAnswerEntry = answers.find(a => a.answerNumber === 0);\n if (finalAnswerEntry) {\n setExpandedAnswerId(finalAnswerEntry.id);\n }\n }\n }, [isOpen, activeTab, answers, expandedAnswerId]);\n\n // Workspace state - API provides workspace info, store provides files\n const [workspaces, setWorkspaces] = useState({ current: [], historical: [] });\n const [isLoadingWorkspaces, setIsLoadingWorkspaces] = useState(false);\n const [isLoadingHistoricalFiles, setIsLoadingHistoricalFiles] = useState(false);\n const [workspaceError, setWorkspaceError] = useState(null);\n const [missingVersion, setMissingVersion] = useState(null);\n const [logDirOverride, setLogDirOverride] = useState(null);\n\n // Per-agent workspace selection state\n const [selectedAgentWorkspace, setSelectedAgentWorkspace] = useState(null);\n\n // Answer-linked workspace state\n const [answerWorkspaces, setAnswerWorkspaces] = useState([]);\n const [selectedAnswerLabel, setSelectedAnswerLabel] = useState('current');\n\n // File viewer modal state\n const [fileViewerOpen, setFileViewerOpen] = useState(false);\n const [selectedFilePath, setSelectedFilePath] = useState('');\n const [isPreviewFullscreen, setIsPreviewFullscreen] = useState(false);\n const [isComparisonOpen, setIsComparisonOpen] = useState(false);\n\n // Track if we've auto-previewed for the current workspace\n const hasAutoPreviewedRef = useRef(null);\n // Track previous workspace path to detect changes\n const prevWorkspacePathRef = useRef(null);\n\n // New answer notification state\n const [newAnswerNotification, setNewAnswerNotification] = useState<{\n answerLabel: string; // Selection label for dropdown (e.g., \"agent1.2\")\n displayLabel: string; // Human-readable label (e.g., \"Agent 1 Answer 2\")\n agentId: string;\n } | null>(null);\n // Track per-agent answer counts for new answer detection\n // Value of -1 means \"not yet initialized\" (different from 0 answers)\n const lastKnownAgentAnswerCountRef = useRef>({});\n // Track previous selected agent to detect agent switches\n const prevSelectedAgentRef = useRef(null);\n\n // AbortController ref for cancelling in-flight fetch requests (historical workspaces)\n const fetchAbortRef = useRef<(() => void) | null>(null);\n // Request ID to prevent stale finally blocks from clearing loading state\n const fetchRequestIdRef = useRef(0);\n // Debounce ref to coalesce rapid new_answer events into single fetch\n const debouncedNewAnswerFetchRef = useRef | null>(null);\n\n // Clear workspace/browser state when session changes to avoid stale paths/files\n // Note: workspaceStore is cleared by useWorkspaceConnection when session changes\n useEffect(() => {\n setWorkspaces({ current: [], historical: [] });\n setSelectedAgentWorkspace(null);\n setSelectedFilePath('');\n setSelectedAnswerLabel('current');\n setWorkspaceError(null);\n setIsLoadingHistoricalFiles(false);\n setIsLoadingWorkspaces(false);\n hasAutoPreviewedRef.current = null;\n prevWorkspacePathRef.current = null;\n clearFileCache();\n setMissingVersion(null);\n }, [sessionId]);\n\n // Auto-select the final answer's workspace version when viewing a completed session\n // This ensures that when a session has ended and final answer exists, we show\n // the workspace from the winning agent's final answer, not \"current\" which may be empty\n useEffect(() => {\n debugLog.info('[HistoricalLoad] Auto-select effect running', {\n hasFinalAnswer: !!finalAnswer,\n selectedAgentWorkspace,\n selectedAnswerLabel,\n answersCount: answers.length,\n });\n\n if (!finalAnswer || !selectedAgentWorkspace || selectedAnswerLabel !== 'current') {\n debugLog.info('[HistoricalLoad] Auto-select skipped', {\n reason: !finalAnswer ? 'no finalAnswer' : !selectedAgentWorkspace ? 'no selectedAgentWorkspace' : 'not current',\n });\n return;\n }\n\n // Find the highest answer number for the selected agent (their final answer)\n const agentAnswers = answers.filter(a => a.agentId === selectedAgentWorkspace && a.answerNumber > 0);\n debugLog.info('[HistoricalLoad] Agent answers for auto-select', {\n selectedAgentWorkspace,\n agentAnswersCount: agentAnswers.length,\n answerNumbers: agentAnswers.map(a => a.answerNumber),\n });\n\n if (agentAnswers.length === 0) return;\n\n const latestAnswer = agentAnswers.reduce((latest, current) =>\n current.answerNumber > latest.answerNumber ? current : latest\n );\n\n // Compute the answer label for this agent's final answer\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n const latestLabel = `agent${agentIdx}.${latestAnswer.answerNumber}`;\n\n debugLog.info('[HistoricalLoad] Auto-selecting final answer workspace', {\n selectedAgentWorkspace,\n latestAnswerNumber: latestAnswer.answerNumber,\n latestLabel,\n });\n\n setSelectedAnswerLabel(latestLabel);\n }, [finalAnswer, selectedAgentWorkspace, answers, agentOrder, selectedAnswerLabel]);\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debouncedNewAnswerFetchRef.current) {\n clearTimeout(debouncedNewAnswerFetchRef.current);\n }\n };\n }, []);\n\n // Read ?log_dir override from URL once\n useEffect(() => {\n const url = new URL(window.location.href);\n const logDir = url.searchParams.get('log_dir');\n if (logDir) {\n setLogDirOverride(logDir);\n }\n }, []);\n\n // Track new answers while on workspace tab - only for the agent being viewed\n // This effect detects new answers and sets a flag for workspace refresh\n // The actual fetch calls happen in a later effect after functions are defined\n const [pendingNewAnswerRefresh, setPendingNewAnswerRefresh] = useState(false);\n\n useEffect(() => {\n if (activeTab === 'workspace' && isOpen && selectedAgentWorkspace) {\n // Skip detection if this is a fresh agent selection (agent just changed)\n // The baseline will be set by the effect that runs right after, and we'll\n // start detecting from there. This prevents false notifications when switching agents.\n if (selectedAgentWorkspace !== prevSelectedAgentRef.current) {\n return;\n }\n\n // Filter answers to only the currently viewed agent\n const agentAnswers = answers.filter(a => a.agentId === selectedAgentWorkspace);\n const lastKnownCount = lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace];\n const hasBaseline = lastKnownCount !== undefined && lastKnownCount >= 0;\n\n // Check if this agent has NEW answers since we started viewing\n // A baseline count of >= 0 means we've been tracking, so we should notify on increase\n // This handles first answer (0 -> 1) as well as subsequent answers\n if (hasBaseline && agentAnswers.length > lastKnownCount) {\n // Set flag to trigger workspace refresh in later effect\n setPendingNewAnswerRefresh(true);\n\n // Show notification for ALL views (current AND historical) per FR-015\n // This ensures users are always aware of new answers and can navigate to them\n const newestAnswer = [...agentAnswers].sort((a, b) => b.timestamp - a.timestamp)[0];\n if (newestAnswer) {\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n // Store both display label and selection label (used by version dropdown)\n const displayLabel = newestAnswer.answerNumber === 0\n ? 'Final Answer'\n : `Agent ${agentIdx} Answer ${newestAnswer.answerNumber}`;\n const selectionLabel = `agent${agentIdx}.${newestAnswer.answerNumber}`;\n\n setNewAnswerNotification({\n answerLabel: selectionLabel,\n displayLabel,\n agentId: selectedAgentWorkspace,\n });\n }\n }\n\n // Update tracking for this agent\n lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace] = agentAnswers.length;\n }\n }, [answers, activeTab, isOpen, agentOrder, selectedAgentWorkspace, selectedAnswerLabel]);\n\n // Initialize answer count when agent selection changes\n // Reset baseline when switching to a different agent to prevent false notifications\n useEffect(() => {\n if (selectedAgentWorkspace && selectedAgentWorkspace !== prevSelectedAgentRef.current) {\n // Agent changed - establish a new baseline\n const currentCount = answers.filter(a => a.agentId === selectedAgentWorkspace).length;\n lastKnownAgentAnswerCountRef.current[selectedAgentWorkspace] = currentCount;\n prevSelectedAgentRef.current = selectedAgentWorkspace;\n }\n }, [selectedAgentWorkspace, answers]);\n\n // Clear notification when user manually changes agent or version selection\n useEffect(() => {\n setNewAnswerNotification(null);\n }, [selectedAgentWorkspace, selectedAnswerLabel]);\n\n // Handle notification actions - navigate to current workspace or stay in historical\n const handleMoveToCurrentWorkspace = useCallback(() => {\n if (newAnswerNotification) {\n // Navigate to the current workspace (where the new answer was produced)\n setSelectedAnswerLabel('current');\n // Clear file selection to trigger auto-preview of new content\n setSelectedFilePath('');\n // Dismiss the notification\n setNewAnswerNotification(null);\n }\n }, [newAnswerNotification]);\n\n const handleStayInHistorical = useCallback(() => {\n if (newAnswerNotification) {\n // Navigate to the new historical snapshot (what was \"current\" before the answer)\n // This is the workspace state we were viewing before it got cleared\n setSelectedAnswerLabel(newAnswerNotification.answerLabel);\n // Clear file selection since we're switching workspaces\n setSelectedFilePath('');\n }\n // Dismiss the notification\n setNewAnswerNotification(null);\n }, [newAnswerNotification]);\n\n // Handle file click from workspace browser - sets file for inline preview\n const handleFileClick = useCallback((filePath: string) => {\n setSelectedFilePath(filePath);\n // Don't open modal - use inline preview in workspace tab\n }, []);\n\n // Handle closing inline preview\n const handleInlinePreviewClose = useCallback(() => {\n setSelectedFilePath('');\n }, []);\n\n // Handle preview close for modal (used by other tabs)\n const handlePreviewClose = useCallback(() => {\n setFileViewerOpen(false);\n }, []);\n\n // Handle timeline node click - navigate to appropriate tab\n const handleTimelineNodeClick = useCallback((node: TimelineNodeType) => {\n if (node.type === 'answer' || node.type === 'final') {\n // Switch to answers tab and expand the matching answer\n setActiveTab('answers');\n // Find and expand the answer that matches this node's label\n const matchingAnswer = answers.find(a => {\n // Match by agent ID and answer number\n const agentIdx = agentOrder.indexOf(a.agentId) + 1;\n const expectedLabel = a.answerNumber === 0\n ? 'final'\n : `agent${agentIdx}.${a.answerNumber}`;\n return node.label === expectedLabel || node.label === `answer${agentIdx}.${a.answerNumber}`;\n });\n if (matchingAnswer) {\n setExpandedAnswerId(matchingAnswer.id);\n }\n } else if (node.type === 'vote') {\n // Switch to votes tab\n setActiveTab('votes');\n }\n }, [answers, agentOrder]);\n\n // Fetch available workspaces from API (reads status.json - should be instant)\n const fetchWorkspaces = useCallback(async () => {\n setIsLoadingWorkspaces(true);\n setWorkspaceError(null);\n\n try {\n // Pass session_id for fast lookup from status.json\n const url = sessionId\n ? `/api/workspaces?session_id=${encodeURIComponent(sessionId)}`\n : '/api/workspaces';\n const response = await fetch(url);\n\n if (!response.ok) {\n // Handle status.json unavailable specifically (FR-011, T021)\n if (response.status === 503) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Workspace info not yet available. Session may still be initializing.');\n }\n throw new Error(`Failed to fetch workspaces (${response.status})`);\n }\n const data: WorkspacesResponse = await response.json();\n setWorkspaces(data);\n\n // Auto-select first agent's workspace if available\n if (data.current.length > 0 && !selectedAgentWorkspace) {\n const firstWorkspace = data.current[0];\n // Use agentId from API response if available (fast path), otherwise fall back to heuristic\n const agentId = firstWorkspace.agentId || getAgentIdFromWorkspace(firstWorkspace.name, agentOrder);\n if (agentId) {\n setSelectedAgentWorkspace(agentId);\n }\n } else if (data.current.length === 0 && !selectedAgentWorkspace) {\n // No current workspaces - try to use historical workspaces for completed sessions\n if (data.historical.length > 0) {\n // For completed sessions, select the first agent with historical workspaces\n const firstHistorical = data.historical[0];\n const agentId = firstHistorical.agentId || getAgentIdFromWorkspace(firstHistorical.name, agentOrder);\n if (agentId) {\n setSelectedAgentWorkspace(agentId);\n }\n } else {\n // Clear selection only if no workspaces exist at all\n setSelectedFilePath('');\n hasAutoPreviewedRef.current = null;\n }\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load workspaces');\n } finally {\n setIsLoadingWorkspaces(false);\n }\n }, [selectedAgentWorkspace, agentOrder, sessionId]);\n\n // Fetch files for historical workspace (current workspaces use WebSocket via store)\n // Historical workspace files are static - fetch once and store in snapshot\n const fetchHistoricalFiles = useCallback(async (answerLabel: string, workspacePath: string) => {\n debugLog.info('[Modal] fetchHistoricalFiles called', { answerLabel, workspacePath });\n\n // Cancel any in-flight request before starting a new one\n if (fetchAbortRef.current) {\n fetchAbortRef.current();\n fetchAbortRef.current = null;\n }\n\n // Increment request ID to track this specific request\n const requestId = ++fetchRequestIdRef.current;\n\n setIsLoadingHistoricalFiles(true);\n setWorkspaceError(null);\n\n const { promise, abort } = createAbortableFetch(\n `/api/workspace/browse?path=${encodeURIComponent(workspacePath)}`,\n { timeout: 30000 }\n );\n\n fetchAbortRef.current = abort;\n\n try {\n const data = await promise;\n debugLog.info('[Modal] fetchHistoricalFiles response', {\n answerLabel,\n workspacePath,\n responseWorkspacePath: data.workspace_path,\n fileCount: data.files?.length ?? 0,\n });\n // Verify this response is for the currently requested workspace\n if (data.workspace_path !== workspacePath) {\n debugLog.warn('[Modal] fetchHistoricalFiles path mismatch', {\n expected: workspacePath,\n got: data.workspace_path,\n });\n return;\n }\n // Only update state if this is still the current request\n if (requestId === fetchRequestIdRef.current) {\n // Store files in the workspace store's historical snapshot\n setSnapshotFiles(answerLabel, data.files || []);\n debugLog.info('[Modal] fetchHistoricalFiles stored files', {\n answerLabel,\n fileCount: data.files?.length ?? 0,\n });\n }\n } catch (err) {\n if (isAbortError(err)) {\n debugLog.info('[Modal] fetchHistoricalFiles aborted', { answerLabel });\n return;\n }\n debugLog.error('[Modal] fetchHistoricalFiles error', {\n answerLabel,\n error: err instanceof Error ? err.message : String(err),\n });\n if (requestId === fetchRequestIdRef.current) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load files');\n }\n } finally {\n if (requestId === fetchRequestIdRef.current) {\n setIsLoadingHistoricalFiles(false);\n fetchAbortRef.current = null;\n }\n }\n }, [setSnapshotFiles]);\n\n // Fetch answer-linked workspaces from API\n const fetchAnswerWorkspaces = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n try {\n const params = new URLSearchParams();\n if (logDirOverride) {\n params.set('log_dir', logDirOverride);\n }\n const response = await fetch(`/api/sessions/${sessionId}/answer-workspaces?${params.toString()}`);\n if (response.ok) {\n const data: AnswerWorkspacesResponse = await response.json();\n setAnswerWorkspaces(data.workspaces || []);\n }\n } catch (err) {\n console.error('Failed to fetch answer workspaces:', err);\n }\n }, [logDirOverride]);\n\n // CRITICAL FIX: Handle pending new answer refresh with debouncing\n // This effect runs when a new answer is detected and triggers workspace sync\n // Debouncing coalesces rapid new_answer events into a single fetch to prevent cascade\n // NOTE: fetchAnswerWorkspaces removed - new answers now include workspace_path via WebSocket\n useEffect(() => {\n if (pendingNewAnswerRefresh) {\n // Reset the flag first to prevent loops\n setPendingNewAnswerRefresh(false);\n\n // Clear selected file to prevent showing stale \"file not found\" errors\n // The file list will update shortly and user can select a new file\n setSelectedFilePath('');\n\n // Debounce to coalesce rapid new_answer events into single fetch\n if (debouncedNewAnswerFetchRef.current) {\n clearTimeout(debouncedNewAnswerFetchRef.current);\n }\n debouncedNewAnswerFetchRef.current = setTimeout(() => {\n // Refresh the current workspaces in case they changed\n fetchWorkspaces();\n // Also refresh file list via WebSocket to get updated files immediately\n if (refreshSessionFn) {\n refreshSessionFn();\n }\n }, 100);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pendingNewAnswerRefresh]);\n\n // Open workspace in native file browser\n const openWorkspaceInFinder = useCallback(async (workspacePath: string) => {\n try {\n const response = await fetch('/api/workspace/open', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: workspacePath }),\n });\n if (!response.ok) {\n const data = await response.json();\n setWorkspaceError(data.error || 'Failed to open workspace');\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to open workspace');\n }\n }, []);\n\n // Map workspaces to agents\n const workspacesByAgent = useMemo(() => {\n const map: Record = {};\n\n // Initialize for all agents\n agentOrder.forEach((agentId) => {\n map[agentId] = { historical: [] };\n });\n\n // Map current workspaces - use agentId from API if available, otherwise fall back to heuristic\n workspaces.current.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].current = ws;\n }\n });\n\n // Map historical workspaces\n workspaces.historical.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].historical.push(ws);\n }\n });\n\n return map;\n }, [workspaces, agentOrder]);\n\n // Compute active workspace to display\n const activeWorkspace = useMemo(() => {\n if (!selectedAgentWorkspace) return null;\n\n // If a historical answer version is selected, get workspace path\n if (selectedAnswerLabel !== 'current') {\n // Check answerWorkspaces FIRST (from HTTP API via status.json, always has correct absolute paths)\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === selectedAgentWorkspace && w.answerLabel === selectedAnswerLabel\n );\n if (answerWs) {\n setMissingVersion(null);\n return {\n name: answerWs.answerLabel,\n path: answerWs.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Fallback to answers from agentStore (has workspace_path from new_answer WebSocket event)\n const agentIdx = agentOrder.indexOf(selectedAgentWorkspace) + 1;\n const matchingAnswer = answers.find(a => {\n const expectedLabel = `agent${agentIdx}.${a.answerNumber}`;\n return a.agentId === selectedAgentWorkspace && expectedLabel === selectedAnswerLabel;\n });\n\n if (matchingAnswer?.workspacePath) {\n setMissingVersion(null);\n return {\n name: selectedAnswerLabel,\n path: matchingAnswer.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Selected a version but no mapping yet; avoid falling back to current\n setMissingVersion(`Workspace for version \"${selectedAnswerLabel}\" not available yet`);\n return null;\n }\n setMissingVersion(null);\n\n // Fallback to current workspace for the agent\n return workspacesByAgent[selectedAgentWorkspace]?.current || null;\n }, [selectedAgentWorkspace, selectedAnswerLabel, answers, answerWorkspaces, workspacesByAgent, agentOrder]);\n\n // Fetch workspaces when modal opens or tab switches to workspace\n // Note: fetchWorkspaces excluded from deps to prevent refetch cascade\n // FIX: Also fetch answerWorkspaces eagerly - WebSocket new_answer events may not always include workspace_path\n // The HTTP API reads from status.json which always has correct absolute paths\n useEffect(() => {\n if (isOpen && activeTab === 'workspace') {\n fetchWorkspaces();\n fetchAnswerWorkspaces(); // Always fetch historical workspace mappings from status.json\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, activeTab, sessionId]);\n\n // Check if current workspace files are missing from store and trigger refresh ONCE\n // This handles the case where WebSocket connected before status.json was ready\n const hasRefreshedForMissingRef = useRef(false);\n useEffect(() => {\n // Reset the guard when modal closes\n if (!isOpen) {\n hasRefreshedForMissingRef.current = false;\n return;\n }\n\n if (activeTab !== 'workspace') {\n return;\n }\n\n // Only check once per modal open to prevent infinite loops\n if (hasRefreshedForMissingRef.current) {\n return;\n }\n\n // Check if any current workspace paths are missing from the store\n const missingPaths = workspaces.current.filter(\n (ws) => {\n const storeData = allWorkspaces[ws.path];\n return !storeData || storeData.files.length === 0;\n }\n );\n\n if (missingPaths.length > 0 && refreshSessionFn) {\n hasRefreshedForMissingRef.current = true;\n refreshSessionFn();\n }\n }, [isOpen, activeTab, workspaces.current, allWorkspaces, refreshSessionFn]);\n\n // Poll for file updates every 3 seconds when viewing CURRENT workspace\n // Historical workspaces are snapshots and don't need polling\n useEffect(() => {\n // Only poll when modal is open, workspace tab is active, and we have refresh function\n if (!isOpen || activeTab !== 'workspace' || !refreshSessionFn || !activeWorkspace) {\n return;\n }\n\n // Skip polling for historical workspaces - they don't change\n if (activeWorkspace.type === 'historical') {\n return;\n }\n\n const pollInterval = setInterval(() => {\n refreshSessionFn();\n }, 3000);\n\n return () => clearInterval(pollInterval);\n }, [isOpen, activeTab, refreshSessionFn, activeWorkspace]);\n\n // FIX: Removed hasFetchedAnswerWorkspacesRef guard - answerWorkspaces is now fetched eagerly on tab open\n // This fallback effect triggers refetch if a version is selected but not found in answerWorkspaces\n // This handles edge cases where the initial fetch didn't include this version (e.g., answer created after fetch)\n useEffect(() => {\n if (missingVersion && answerWorkspaces.length === 0) {\n fetchAnswerWorkspaces();\n }\n }, [missingVersion, answerWorkspaces.length, fetchAnswerWorkspaces]);\n\n\n // Track previous workspace path to detect actual changes\n // For historical workspaces, fetch files if not already cached in store\n useEffect(() => {\n const currentPath = activeWorkspace?.path || null;\n const pathChanged = prevWorkspacePathRef.current !== currentPath;\n\n if (activeWorkspace && pathChanged) {\n prevWorkspacePathRef.current = currentPath;\n // Clear the selected file path when workspace actually changes\n setSelectedFilePath('');\n // Reset auto-preview tracking for this new workspace\n hasAutoPreviewedRef.current = null;\n } else if (!activeWorkspace && prevWorkspacePathRef.current !== null) {\n prevWorkspacePathRef.current = null;\n setSelectedFilePath('');\n }\n\n // For historical workspaces, always check if we need to fetch files\n // This runs on every render where we have an activeWorkspace + historical label\n // because the answer label might change without the path changing\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n debugLog.info('[HistoricalLoad] Decision point in useEffect', {\n selectedAnswerLabel,\n historicalFilesIsNull: historicalFiles === null,\n willFetch: historicalFiles === null,\n });\n if (historicalFiles === null) {\n // Need to fetch - files not in store yet\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, fetchHistoricalFiles]);\n\n // FIX: Eagerly fetch historical files when answerWorkspaces arrives and we have a pending historical selection\n // This handles the race condition where the version dropdown is selected before answerWorkspaces is fetched\n useEffect(() => {\n if (selectedAnswerLabel === 'current' || !selectedAgentWorkspace) return;\n\n // Check if we can now find the workspace in answerWorkspaces\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === selectedAgentWorkspace && w.answerLabel === selectedAnswerLabel\n );\n\n if (answerWs) {\n // answerWorkspaces now has this version - fetch files if not already cached\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n if (historicalFiles === null) {\n fetchHistoricalFiles(selectedAnswerLabel, answerWs.workspacePath);\n }\n }\n }, [answerWorkspaces, selectedAnswerLabel, selectedAgentWorkspace, getHistoricalFiles, fetchHistoricalFiles]);\n\n // Compute workspace files from store (replaces local state)\n // - Current workspaces: files come from WebSocket via workspaceStore\n // - Historical workspaces: files come from HTTP fetch, stored in historicalSnapshots\n const workspaceFiles = useMemo((): FileInfo[] => {\n if (!activeWorkspace) return [];\n\n if (selectedAnswerLabel !== 'current') {\n // Historical workspace - get from snapshot store\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n return historicalFiles || [];\n } else {\n // Current workspace - get from live workspace store\n return getWorkspaceFiles(activeWorkspace.path);\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, getWorkspaceFiles, allWorkspaces, historicalSnapshots, wsStatus]);\n\n // Determine loading state\n const isLoadingFiles = useMemo(() => {\n if (!activeWorkspace) return false;\n\n if (selectedAnswerLabel !== 'current') {\n // Historical: loading if we're fetching OR if files are null (not yet loaded)\n const historicalFiles = getHistoricalFiles(selectedAnswerLabel);\n return isLoadingHistoricalFiles || historicalFiles === null;\n } else {\n // Current: WebSocket always provides files - check if workspace exists in store\n const wsData = allWorkspaces[activeWorkspace.path];\n // Loading if connected but no workspace data yet\n return wsStatus === 'connecting' || (wsStatus === 'connected' && !wsData);\n }\n }, [activeWorkspace, selectedAnswerLabel, getHistoricalFiles, isLoadingHistoricalFiles, allWorkspaces, wsStatus]);\n\n // NOTE: Polling removed - now using WebSocket for real-time updates (T030)\n // WebSocket provides <2s update latency vs 8s polling\n\n // Auto-preview: Select first previewable file when workspace files are loaded\n // Use filtered files to avoid selecting hidden/temp files\n useEffect(() => {\n // Only auto-preview when:\n // 1. We have files\n // 2. No file is already selected\n // 3. We haven't auto-previewed this workspace yet\n const workspaceKey = activeWorkspace?.path || '';\n const visibleFiles = filterHiddenFiles(workspaceFiles);\n\n if (\n visibleFiles.length > 0 &&\n !selectedFilePath &&\n activeTab === 'workspace' &&\n hasAutoPreviewedRef.current !== workspaceKey\n ) {\n // Find the \"main\" previewable file with priority:\n // 1. PDF (specialized document)\n // 2. PPTX (specialized document)\n // 3. DOCX (specialized document)\n // 4. index.html (web entry point)\n // 5. Any .html file\n // 6. Images\n // 7. Any other previewable file\n const findMainPreviewable = (): string | null => {\n const previewableFiles = visibleFiles.filter(f => canPreviewFile(f.path));\n if (previewableFiles.length === 0) return null;\n\n // Priority 1: PDF\n const pdf = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.pdf')\n );\n if (pdf) return pdf.path;\n\n // Priority 2: PPTX\n const pptx = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.pptx')\n );\n if (pptx) return pptx.path;\n\n // Priority 3: DOCX\n const docx = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.docx')\n );\n if (docx) return docx.path;\n\n // Priority 4: index.html\n const indexHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('index.html')\n );\n if (indexHtml) return indexHtml.path;\n\n // Priority 5: Any HTML file\n const anyHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.html') || f.path.toLowerCase().endsWith('.htm')\n );\n if (anyHtml) return anyHtml.path;\n\n // Priority 6: Images\n const image = previewableFiles.find(f => {\n const ext = f.path.toLowerCase();\n return ext.endsWith('.png') || ext.endsWith('.jpg') || ext.endsWith('.jpeg') ||\n ext.endsWith('.gif') || ext.endsWith('.svg') || ext.endsWith('.webp');\n });\n if (image) return image.path;\n\n // Priority 7: First previewable file\n return previewableFiles[0].path;\n };\n\n const mainFile = findMainPreviewable();\n if (mainFile) {\n hasAutoPreviewedRef.current = workspaceKey;\n setSelectedFilePath(mainFile);\n }\n }\n }, [workspaceFiles, selectedFilePath, activeTab, activeWorkspace]);\n\n // Filter answers based on selected agent\n const filteredAnswers = useMemo(() => {\n let result = [...answers];\n\n if (filterAgent !== 'all') {\n result = result.filter((a) => a.agentId === filterAgent);\n }\n\n return result.sort((a, b) => b.timestamp - a.timestamp);\n }, [answers, filterAgent]);\n\n // Group answers by agent for summary stats\n const answersByAgent = useMemo(() => {\n const grouped: Record = {};\n answers.forEach((answer) => {\n if (!grouped[answer.agentId]) {\n grouped[answer.agentId] = [];\n }\n grouped[answer.agentId].push(answer);\n });\n return grouped;\n }, [answers]);\n\n // Collect vote data from voteHistory - permanent record that survives round resets\n const votes = useMemo(() => {\n return voteHistory.map((record) => {\n const voterIdx = agentOrder.indexOf(record.voterId);\n const targetIdx = agentOrder.indexOf(record.targetId);\n const voterAgent = agents[record.voterId];\n const targetAgent = agents[record.targetId];\n\n // Find what answers were available to choose from at the time of this vote\n // This is approximate - we use the votedAnswerLabel's answer number as the baseline\n const voteAnswerNum = parseInt(record.votedAnswerLabel?.match(/\\.(\\d+)$/)?.[1] || '1', 10);\n const availableAnswers = agentOrder.map((_, idx) => `answer${idx + 1}.${voteAnswerNum}`);\n\n // Check if this vote is from the current voting round (valid) or a previous round (invalidated)\n const isValid = record.voteRound === currentVotingRound;\n\n return {\n voterId: record.voterId,\n voterIndex: voterIdx + 1,\n voterModel: voterAgent?.modelName,\n targetId: record.targetId,\n targetIndex: targetIdx + 1,\n targetModel: targetAgent?.modelName,\n votedAnswerLabel: record.votedAnswerLabel || `answer${targetIdx + 1}.1`,\n availableAnswers,\n reason: record.reason || 'No reason provided',\n isValid,\n voteRound: record.voteRound,\n timestamp: record.timestamp,\n };\n }).sort((a, b) => b.timestamp - a.timestamp); // Newest first (top-down chronological)\n }, [voteHistory, agents, agentOrder, currentVotingRound]);\n\n // Sort vote distribution by votes (highest first)\n const sortedDistribution = useMemo(() => {\n return Object.entries(voteDistribution)\n .sort(([, a], [, b]) => b - a)\n .map(([agentId, voteCount]) => {\n const idx = agentOrder.indexOf(agentId);\n return {\n agentId,\n agentIndex: idx + 1,\n modelName: agents[agentId]?.modelName,\n votes: voteCount,\n isWinner: agentId === selectedAgent,\n };\n });\n }, [voteDistribution, agents, agentOrder, selectedAgent]);\n\n // Filter out hidden/internal directories from workspace files\n const filteredWorkspaceFiles = useMemo(() => filterHiddenFiles(workspaceFiles), [workspaceFiles]);\n\n // Build file tree from filtered workspace files\n const fileTree = useMemo(() => buildFileTree(filteredWorkspaceFiles), [filteredWorkspaceFiles]);\n\n // Count total workspaces\n const totalWorkspaces = workspaces.current.length + answerWorkspaces.length;\n\n // Compute item counts for keyboard navigation\n const itemCountByTab = useMemo(() => ({\n answers: filteredAnswers.length,\n votes: votes.length,\n workspace: fileTree.length,\n timeline: 0, // Timeline uses its own navigation\n }), [filteredAnswers.length, votes.length, fileTree.length]);\n\n // Keyboard navigation within modal\n // Note: selectedIndex and isNavigating can be used for visual highlighting\n const {\n selectedIndex: _selectedIndex,\n isNavigating: _isNavigating,\n setSelectedIndex: _setSelectedIndex,\n } = useModalKeyboardNavigation({\n isOpen,\n activeTab,\n itemCount: itemCountByTab[activeTab],\n onTabChange: setActiveTab,\n onItemSelect: (index) => {\n // Handle item selection based on active tab\n if (activeTab === 'answers' && filteredAnswers[index]) {\n setExpandedAnswerId(filteredAnswers[index].id);\n }\n },\n onItemActivate: (index) => {\n // Handle Enter/Space on selected item\n if (activeTab === 'answers' && filteredAnswers[index]) {\n const answerId = filteredAnswers[index].id;\n setExpandedAnswerId(expandedAnswerId === answerId ? null : answerId);\n }\n },\n onClose,\n });\n\n // Compute progress summary values\n const isVoting = useMemo(() => {\n return votes.length > 0 && !selectedAgent;\n }, [votes.length, selectedAgent]);\n\n const isComplete = useMemo(() => {\n return !!selectedAgent || !!finalAnswer;\n }, [selectedAgent, finalAnswer]);\n\n const winnerVotes = useMemo(() => {\n if (!selectedAgent) return undefined;\n return voteDistribution[selectedAgent] || 0;\n }, [selectedAgent, voteDistribution]);\n\n if (!isOpen) return null;\n\n return (\n \n {isOpen && (\n <>\n {/* Backdrop */}\n \n\n {/* Modal */}\n \n {/* Header */}\n
    \n
    \n \n

    Browser

    \n
    \n \n \n \n
    \n\n {/* Tabs */}\n
    \n setActiveTab('answers')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'answers'\n ? 'border-blue-500 text-blue-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Answers\n \n {answers.length}\n \n \n setActiveTab('votes')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'votes'\n ? 'border-amber-500 text-amber-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Votes\n \n {votes.length}\n \n \n setActiveTab('workspace')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'workspace'\n ? 'border-blue-500 text-blue-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Workspace\n \n {totalWorkspaces}\n \n \n setActiveTab('timeline')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'timeline'\n ? 'border-green-500 text-green-400'\n : 'border-transparent text-gray-400 hover:text-gray-200'\n }`}\n >\n \n Timeline\n \n\n {/* Progress Summary Bar - right-aligned */}\n
    \n \n
    \n
    \n\n {/* Tab Content */}\n {activeTab === 'answers' ? (\n <>\n {/* Filter Bar */}\n
    \n Filter by agent:\n
    \n setFilterAgent(e.target.value)}\n className=\"appearance-none bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 pr-10 text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {agentOrder.map((agentId) => (\n \n ))}\n \n \n
    \n
    \n\n {/* Answer List */}\n
    \n {filteredAnswers.length === 0 ? (\n \n ) : (\n
    \n {filteredAnswers.map((answer) => {\n const isExpanded = expandedAnswerId === answer.id;\n const isWinner = answer.agentId === selectedAgent;\n\n return (\n setExpandedAnswerId(isExpanded ? null : answer.id)}\n >\n {/* Answer Header */}\n
    \n
    \n
    \n {isWinner ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n {answer.agentId}\n \n {answer.answerNumber === 0 ? 'Final Answer' : `Answer #${answer.answerNumber}`}\n \n {answer.answerNumber === 0 && (\n \n Final\n \n )}\n {isWinner && answer.answerNumber !== 0 && (\n \n Winner\n \n )}\n
    \n
    \n \n {formatTimestamp(answer.timestamp)}\n
    \n
    \n
    \n \n \n \n
    \n\n {/* Answer Content (Expandable) */}\n \n {isExpanded && (\n \n
    \n
    \n                                      {resolveAnswerContent(answer, agents, finalAnswer)}\n                                    
    \n
    \n \n )}\n
    \n \n );\n })}\n
    \n )}\n
    \n \n ) : activeTab === 'votes' ? (\n <>\n {/* Votes Tab Content */}\n
    \n {/* Vote Distribution Summary */}\n {sortedDistribution.length > 0 && (\n
    \n

    \n \n Vote Distribution\n

    \n
    \n {sortedDistribution.map(({ agentId, agentIndex, modelName, votes: voteCount, isWinner }) => (\n \n
    \n \n
    \n \n Agent {agentIndex}\n \n {modelName && (\n {modelName}\n )}\n
    \n {isWinner && 👑}\n
    \n \n {voteCount}\n \n
    \n ))}\n
    \n
    \n )}\n\n {/* Individual Votes */}\n
    \n

    \n \n Individual Votes\n

    \n\n {votes.length === 0 ? (\n \n ) : (\n
    \n {votes.map((vote) => (\n \n {/* Vote header */}\n
    \n
    \n \n Agent {vote.voterIndex}\n {vote.voterModel && (\n ({vote.voterModel})\n )}\n
    \n \n
    \n \n {vote.votedAnswerLabel}\n \n {vote.isValid && vote.targetId === selectedAgent && 👑}\n {!vote.isValid && (\n \n superseded\n \n )}\n
    \n
    \n\n {/* Vote details */}\n
    \n {/* Voted for */}\n
    \n Voted for: \n \n Agent {vote.targetIndex}\n {vote.targetModel && ` (${vote.targetModel})`}\n \n
    \n\n {/* Available choices */}\n
    \n From choices: \n \n {vote.availableAnswers.join(', ')}\n \n
    \n\n {/* Reason */}\n
    \n

    {vote.reason}

    \n
    \n
    \n \n ))}\n
    \n )}\n
    \n
    \n \n ) : activeTab === 'workspace' ? (\n <>\n {/* Per-Agent Workspace Selector Bar */}\n
    \n {/* Agent Buttons */}\n
    \n \n Agent:\n
    \n {agentOrder.map((agentId, index) => {\n const agentData = workspacesByAgent[agentId];\n const hasWorkspace = agentData?.current || agentData?.historical.length > 0;\n if (!hasWorkspace) return null;\n\n const agentColor = getAgentColor(agentId, agentOrder);\n const isSelected = selectedAgentWorkspace === agentId;\n\n return (\n {\n setSelectedAgentWorkspace(agentId);\n setSelectedAnswerLabel('current');\n setSelectedFilePath(''); // Clear selection for auto-preview\n fetchWorkspaces();\n }}\n className={`px-3 py-1 text-sm rounded transition-colors ${\n isSelected\n ? `${agentColor.bg} text-white`\n : `${agentColor.bgLight} ${agentColor.text} hover:opacity-80`\n }`}\n >\n Agent {index + 1}\n \n );\n })}\n
    \n
    \n\n {/* Answer Version Dropdown - uses answers from agentStore for immediate updates */}\n {selectedAgentWorkspace && (\n
    \n \n Version:\n
    \n {\n const label = e.target.value;\n // FIX: Clear file content caches when switching versions\n // This prevents stale 404s from persisting across version switches\n clearFileCache();\n setSelectedAnswerLabel(label);\n\n // Always clear file selection when switching versions\n setSelectedFilePath('');\n\n // When switching to \"current\", trigger a refresh to get latest files\n if (label === 'current' && refreshSessionFn) {\n refreshSessionFn();\n }\n }}\n className=\"appearance-none bg-gray-700 border border-gray-600 rounded-lg px-3 py-1 pr-8 text-sm text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n {/* Show versions from answers (instant via WebSocket), not answerWorkspaces (requires HTTP) */}\n {answers\n .filter(a => a.agentId === selectedAgentWorkspace && a.answerNumber > 0)\n .sort((a, b) => a.answerNumber - b.answerNumber)\n .map((answer) => {\n const agentIdx = agentOrder.indexOf(answer.agentId) + 1;\n const label = `agent${agentIdx}.${answer.answerNumber}`;\n return (\n \n );\n })}\n \n \n
    \n
    \n )}\n\n {/* Compare Button */}\n {totalWorkspaces >= 2 && (\n setIsComparisonOpen(true)}\n className=\"ml-auto flex items-center gap-2 px-3 py-1.5 bg-purple-600 hover:bg-purple-500 rounded-lg transition-colors text-white text-sm\"\n title=\"Compare workspaces side-by-side\"\n >\n \n Compare\n \n )}\n\n {/* Open Folder Button */}\n {activeWorkspace && (\n openWorkspaceInFinder(activeWorkspace.path)}\n className={`flex items-center gap-2 px-3 py-1.5 bg-blue-600 hover:bg-blue-500 rounded-lg transition-colors text-white text-sm ${totalWorkspaces < 2 ? 'ml-auto' : ''}`}\n title=\"Open workspace in file browser\"\n >\n \n Open Folder\n \n )}\n\n {/* WebSocket Connection Status (T016) */}\n \n {wsStatus === 'connected' ? (\n \n ) : (\n \n )}\n \n {wsStatus === 'connected'\n ? 'Live'\n : wsStatus === 'reconnecting'\n ? 'Reconnecting...'\n : wsStatus === 'connecting'\n ? 'Connecting...'\n : 'Offline'}\n \n
    \n\n {/* Refresh Button */}\n {\n fetchWorkspaces();\n // For historical workspaces, refetch files; current workspaces auto-update via WebSocket\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }}\n disabled={isLoadingWorkspaces || isLoadingFiles}\n className={`${!activeWorkspace ? 'ml-auto' : ''} p-2 hover:bg-gray-700 rounded-lg transition-colors text-gray-400 hover:text-gray-200`}\n title=\"Refresh workspaces\"\n >\n \n \n
    \n\n {/* Error Display with Retry Button (T019) */}\n {workspaceError && (\n
    \n {workspaceError}\n {\n fetchWorkspaces();\n if (activeWorkspace && selectedAnswerLabel !== 'current') {\n fetchHistoricalFiles(selectedAnswerLabel, activeWorkspace.path);\n }\n }}\n className=\"ml-4 px-3 py-1 bg-red-800/50 hover:bg-red-700/50 rounded text-red-200 text-xs transition-colors\"\n >\n Retry\n \n
    \n )}\n {missingVersion && (\n
    \n {missingVersion}\n
    \n )}\n\n {/* Split View: File Tree + Preview - wrapped in relative for overlay */}\n
    \n {/* New Answer Notification - Prominent Modal Overlay */}\n \n {newAnswerNotification && (\n \n \n
    \n {/* Icon with pulse animation */}\n \n \n \n\n {/* Title and description */}\n
    \n

    \n New Answer Available\n

    \n

    \n \n {newAnswerNotification.displayLabel}\n {' '}\n has been submitted for{' '}\n \n {newAnswerNotification.agentId}\n \n

    \n

    \n You are currently viewing a historical workspace version.\n

    \n
    \n\n {/* Action buttons */}\n
    \n \n \n Move to Current\n \n \n \n Stay Here\n \n
    \n
    \n \n \n )}\n
    \n\n {/* Resizable Split: File Tree + Preview */}\n \n {/* Only show full loading state on first load (no workspaces yet) */}\n {isLoadingWorkspaces && totalWorkspaces === 0 ? (\n
    \n \n

    Loading workspaces...

    \n
    \n ) : totalWorkspaces === 0 ? (\n \n ) : !activeWorkspace ? (\n \n ) : isLoadingFiles && filteredWorkspaceFiles.length === 0 ? (\n \n ) : filteredWorkspaceFiles.length === 0 ? (\n \n ) : (\n
    \n
    \n {filteredWorkspaceFiles.length} files\n {selectedAnswerLabel !== 'current' && (\n (historical)\n )}\n {isLoadingFiles && (\n \n )}\n
    \n {fileTree.map((node) => (\n \n ))}\n
    \n )}\n
    \n }\n right={\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n sessionId={sessionId}\n agentId={selectedAgentWorkspace || undefined}\n onFileNotFound={() => setSelectedFilePath('')}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n }\n />\n
    \n\n {/* Workspace Summary */}\n {activeWorkspace && filteredWorkspaceFiles.length > 0 && (\n
    \n \n {filteredWorkspaceFiles.length} files in {activeWorkspace.name}\n \n \n {activeWorkspace.path}\n \n
    \n )}\n \n ) : activeTab === 'timeline' ? (\n
    \n \n
    \n ) : null}\n \n \n )}\n\n {/* Artifact Preview Modal */}\n \n\n {/* Fullscreen Preview Modal */}\n {isPreviewFullscreen && selectedFilePath && activeWorkspace && (\n setIsPreviewFullscreen(false)}\n >\n e.stopPropagation()}\n >\n {/* Fullscreen header */}\n
    \n
    \n \n {selectedFilePath}\n
    \n setIsPreviewFullscreen(false)}\n className=\"p-2 hover:bg-gray-700 rounded-lg transition-colors text-gray-400 hover:text-white\"\n title=\"Close fullscreen\"\n >\n \n \n
    \n {/* Fullscreen preview content */}\n
    \n setIsPreviewFullscreen(false)}\n sessionId={sessionId}\n agentId={selectedAgentWorkspace || undefined}\n onFileNotFound={() => {\n setSelectedFilePath('');\n setIsPreviewFullscreen(false);\n }}\n />\n
    \n \n \n )}\n\n {/* Side-by-Side Comparison View */}\n setIsComparisonOpen(false)}\n agentWorkspaces={workspacesByAgent}\n answerWorkspaces={answerWorkspaces}\n agentOrder={agentOrder}\n sessionId={sessionId}\n initialFile={selectedFilePath}\n />\n \n );\n}\n\nexport default AnswerBrowserModal;\n","/**\n * ConversationHistory - Compact conversation history display\n *\n * Shows previous turns in a dropdown/popover format:\n * - Compact header that shows turn count\n * - Click to expand full chat history in a floating panel\n * - Does NOT take up vertical space in main layout\n */\n\nimport { useState, useMemo, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { User, Bot, ExternalLink, ChevronDown, ChevronUp, MessageSquare, X } from 'lucide-react';\nimport { useAgentStore } from '../stores/agentStore';\n\ninterface ConversationHistoryProps {\n /** Callback when user clicks to view full response in browser */\n onViewResponse?: (turn: number) => void;\n}\n\nexport function ConversationHistory({\n onViewResponse,\n}: ConversationHistoryProps) {\n const conversationHistory = useAgentStore((s) => s.conversationHistory);\n const [isOpen, setIsOpen] = useState(false);\n const [expandedMessages, setExpandedMessages] = useState>(new Set());\n const panelRef = useRef(null);\n\n // Close panel when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Parse conversation history into messages\n const messages = useMemo(() => {\n const result: Array<{\n role: 'user' | 'assistant';\n content: string;\n turn: number;\n }> = [];\n\n for (const msg of conversationHistory) {\n result.push({\n role: msg.role,\n content: msg.content,\n turn: msg.turn || 1,\n });\n }\n\n return result;\n }, [conversationHistory]);\n\n // Count unique turns (any turn that has at least one message)\n const uniqueTurns = useMemo(() => {\n const turns = new Set();\n for (const msg of messages) {\n turns.add(msg.turn);\n }\n return turns;\n }, [messages]);\n\n // Get completed turn pairs for \"View in browser\" functionality\n const completedTurns = useMemo(() => {\n const turns = new Set();\n for (let i = 0; i < messages.length - 1; i += 2) {\n if (messages[i]?.role === 'user' && messages[i + 1]?.role === 'assistant') {\n turns.add(messages[i].turn);\n }\n }\n return turns;\n }, [messages]);\n\n const turnCount = uniqueTurns.size;\n\n // Don't render if no history\n if (messages.length === 0) {\n return null;\n }\n\n // Check if message needs truncation\n const needsTruncation = (text: string) => {\n return text.split('\\n').length > 5 || text.length > 500;\n };\n\n // Truncate for display\n const truncateForDisplay = (text: string) => {\n const lines = text.split('\\n').slice(0, 5);\n const truncated = lines.join('\\n');\n if (truncated.length > 500) {\n return truncated.slice(0, 500) + '...';\n }\n return text.split('\\n').length > 5 ? truncated + '...' : truncated;\n };\n\n // Toggle individual message expansion\n const toggleMessageExpanded = (idx: number) => {\n setExpandedMessages(prev => {\n const next = new Set(prev);\n if (next.has(idx)) {\n next.delete(idx);\n } else {\n next.add(idx);\n }\n return next;\n });\n };\n\n return (\n
    \n {/* Compact toggle button */}\n setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-3 py-1.5 bg-gray-200/80 dark:bg-gray-700/80\n rounded-full hover:bg-gray-300 dark:hover:bg-gray-600 transition-colors text-sm\"\n >\n \n \n {turnCount} {turnCount === 1 ? 'turn' : 'turns'}\n \n {isOpen ? (\n \n ) : (\n \n )}\n \n\n {/* Floating panel */}\n \n {isOpen && (\n \n {/* Panel header */}\n
    \n \n Conversation History\n \n setIsOpen(false)}\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors\"\n >\n \n \n
    \n\n {/* Messages */}\n
    \n {messages.map((msg, idx) => {\n const isUser = msg.role === 'user';\n const isAssistant = msg.role === 'assistant';\n const isTruncatable = isAssistant && needsTruncation(msg.content);\n const isExpanded = expandedMessages.has(idx);\n const displayText = (isTruncatable && !isExpanded)\n ? truncateForDisplay(msg.content)\n : msg.content;\n\n return (\n \n \n {/* Header */}\n
    \n {isUser ? (\n <>\n \n You\n · Turn {msg.turn}\n \n ) : (\n <>\n Turn {msg.turn} ·\n MassGen\n \n \n )}\n
    \n\n {/* Content */}\n

    \n {displayText}\n

    \n\n {/* Actions for assistant messages */}\n {isAssistant && (\n
    \n {isTruncatable && (\n toggleMessageExpanded(idx)}\n className=\"text-xs text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition-colors\"\n >\n {isExpanded ? '▲ Show less' : '▼ Show more'}\n \n )}\n {onViewResponse && completedTurns.has(msg.turn) && (\n onViewResponse(msg.turn)}\n className=\"flex items-center gap-1 text-xs text-blue-500 hover:text-blue-400 transition-colors\"\n >\n \n Browser\n \n )}\n
    \n )}\n
    \n
    \n );\n })}\n
    \n \n )}\n \n
    \n );\n}\n","/**\n * FinalAnswerView Component\n *\n * Full-screen display of the completed final answer.\n * Features tabbed interface for Answer and Workspace views.\n */\n\nimport { useState, useMemo, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ArrowLeft, FileText, Folder, Trophy, ChevronDown, ChevronRight, File, RefreshCw, History, Copy, Check, Loader2, Send, Plus, ExternalLink, Share2, X, Eye, Columns } from 'lucide-react';\nimport { useAgentStore, selectSelectedAgent, selectAgents, selectResolvedFinalAnswer, selectAgentOrder } from '../stores/agentStore';\nimport type { AnswerWorkspace } from '../types';\nimport { InlineArtifactPreview } from './InlineArtifactPreview';\nimport { ConversationHistory } from './ConversationHistory';\nimport { ComparisonView } from './ComparisonView';\nimport { ResizableSplitPane } from './ResizableSplitPane';\nimport { canPreviewFile } from '../utils/artifactTypes';\nimport { clearFileCache } from '../hooks/useFileContent';\n\n// Types for workspace API responses\ninterface WorkspaceInfo {\n name: string;\n path: string;\n type: 'current' | 'historical';\n date?: string;\n agentId?: string;\n}\n\ninterface WorkspacesResponse {\n current: WorkspaceInfo[];\n historical: WorkspaceInfo[];\n}\n\ninterface AnswerWorkspacesResponse {\n workspaces: AnswerWorkspace[];\n current: WorkspaceInfo[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n modified: number;\n operation?: 'create' | 'modify' | 'delete';\n}\n\n// Map workspace name to agent ID (e.g., \"workspace1\" -> agent at index 0)\nfunction getAgentIdFromWorkspace(workspaceName: string, agentOrder: string[]): string | undefined {\n const agentMatch = workspaceName.match(/agent_([a-z0-9_]+)/i);\n if (agentMatch) {\n const candidate = `agent_${agentMatch[1].toLowerCase()}`;\n if (agentOrder.includes(candidate)) {\n return candidate;\n }\n }\n\n const match = workspaceName.match(/workspace(\\d+)/);\n if (match) {\n const index = parseInt(match[1], 10) - 1;\n return agentOrder[index];\n }\n return undefined;\n}\n\n// Format file size for display\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n// File tree types and helpers\ninterface FileTreeNode {\n name: string;\n path: string;\n isDirectory: boolean;\n children: FileTreeNode[];\n size?: number;\n modified?: number;\n}\n\nfunction buildFileTree(files: FileInfo[]): FileTreeNode[] {\n const root: FileTreeNode[] = [];\n\n files.forEach((file) => {\n const parts = file.path.split('/').filter(Boolean);\n let current = root;\n\n parts.forEach((part, idx) => {\n const isLast = idx === parts.length - 1;\n let node = current.find((n) => n.name === part);\n\n if (!node) {\n node = {\n name: part,\n path: parts.slice(0, idx + 1).join('/'),\n isDirectory: !isLast,\n children: [],\n size: isLast ? file.size : undefined,\n modified: isLast ? file.modified : undefined,\n };\n current.push(node);\n }\n\n if (!isLast) {\n node.isDirectory = true;\n current = node.children;\n }\n });\n });\n\n // Sort: directories first, then files alphabetically\n const sortNodes = (nodes: FileTreeNode[]): FileTreeNode[] => {\n return nodes.sort((a, b) => {\n if (a.isDirectory && !b.isDirectory) return -1;\n if (!a.isDirectory && b.isDirectory) return 1;\n return a.name.localeCompare(b.name);\n }).map(node => ({\n ...node,\n children: sortNodes(node.children),\n }));\n };\n\n return sortNodes(root);\n}\n\ninterface FileNodeProps {\n node: FileTreeNode;\n depth: number;\n onFileClick?: (filePath: string) => void;\n}\n\nfunction FileNode({ node, depth, onFileClick }: FileNodeProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const isPreviewable = !node.isDirectory && canPreviewFile(node.name);\n\n const handleClick = () => {\n if (node.isDirectory) {\n setIsExpanded(!isExpanded);\n } else if (onFileClick) {\n onFileClick(node.path);\n }\n };\n\n return (\n
    \n \n {node.isDirectory ? (\n isExpanded ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n\n {node.isDirectory ? (\n \n ) : (\n \n )}\n\n {node.name}\n\n {isPreviewable && (\n \n \n \n )}\n\n {!node.isDirectory && node.size !== undefined && (\n \n {formatFileSize(node.size)}\n \n )}\n \n\n \n {node.isDirectory && isExpanded && (\n \n {node.children.map((child) => (\n \n ))}\n \n )}\n \n
    \n );\n}\n\ntype TabType = 'answer' | 'workspace';\n\ninterface FinalAnswerViewProps {\n onBackToAgents: () => void;\n onFollowUp?: (question: string) => void;\n onNewSession?: () => void;\n isConnected?: boolean;\n}\n\nexport function FinalAnswerView({ onBackToAgents, onFollowUp, onNewSession, isConnected = true }: FinalAnswerViewProps) {\n const [activeTab, setActiveTab] = useState('answer');\n const [copied, setCopied] = useState(false);\n const [followUpQuestion, setFollowUpQuestion] = useState('');\n\n // Share modal state\n const [showShareModal, setShowShareModal] = useState(false);\n const [isSharing, setIsSharing] = useState(false);\n const [shareResult, setShareResult] = useState<{ url: string; message: string } | null>(null);\n const [shareError, setShareError] = useState(null);\n const [shareLinkCopied, setShareLinkCopied] = useState(false);\n\n const finalAnswer = useAgentStore(selectResolvedFinalAnswer);\n const selectedAgent = useAgentStore(selectSelectedAgent);\n const agents = useAgentStore(selectAgents);\n const agentOrder = useAgentStore(selectAgentOrder);\n const sessionId = useAgentStore((s) => s.sessionId);\n\n const winnerAgent = selectedAgent ? agents[selectedAgent] : null;\n const displayName = winnerAgent?.modelName\n ? `${selectedAgent} (${winnerAgent.modelName})`\n : selectedAgent;\n\n // Workspace state\n const [workspaces, setWorkspaces] = useState({ current: [], historical: [] });\n const [workspaceFiles, setWorkspaceFiles] = useState([]);\n const [isLoadingWorkspaces, setIsLoadingWorkspaces] = useState(false);\n const [isLoadingFiles, setIsLoadingFiles] = useState(false);\n const [workspaceError, setWorkspaceError] = useState(null);\n const [answerWorkspaces, setAnswerWorkspaces] = useState([]);\n const [selectedAnswerLabel, setSelectedAnswerLabel] = useState('current');\n // Track which agent's workspace we're viewing (defaults to winner)\n const [selectedAgentWorkspace, setSelectedAgentWorkspace] = useState(null);\n\n // File viewer state (inline preview, not modal)\n const [selectedFilePath, setSelectedFilePath] = useState('');\n const [isPreviewFullscreen, setIsPreviewFullscreen] = useState(false);\n\n // Comparison view state\n const [isComparisonOpen, setIsComparisonOpen] = useState(false);\n\n // Track auto-preview per workspace\n const hasAutoPreviewedRef = useRef(null);\n // Track previous workspace path for change detection\n const prevWorkspacePathRef = useRef(null);\n\n // Reset workspace-related state when session changes (new run)\n useEffect(() => {\n setWorkspaces({ current: [], historical: [] });\n setWorkspaceFiles([]);\n setSelectedFilePath('');\n setSelectedAnswerLabel('current');\n setSelectedAgentWorkspace(null);\n setWorkspaceError(null);\n setIsLoadingFiles(false);\n setIsLoadingWorkspaces(false);\n hasAutoPreviewedRef.current = null;\n prevWorkspacePathRef.current = null;\n clearFileCache();\n }, [sessionId]);\n\n // Initialize selectedAgentWorkspace to winner when available\n useEffect(() => {\n if (selectedAgent && !selectedAgentWorkspace) {\n setSelectedAgentWorkspace(selectedAgent);\n }\n }, [selectedAgent, selectedAgentWorkspace]);\n\n // Handle file click from workspace browser - sets file for inline preview\n const handleFileClick = useCallback((filePath: string) => {\n setSelectedFilePath(filePath);\n }, []);\n\n // Handle closing inline preview\n const handleInlinePreviewClose = useCallback(() => {\n setSelectedFilePath('');\n }, []);\n\n // Fetch workspaces\n const fetchWorkspaces = useCallback(async () => {\n setIsLoadingWorkspaces(true);\n setWorkspaceError(null);\n try {\n const url = sessionId\n ? `/api/workspaces?session_id=${encodeURIComponent(sessionId)}`\n : '/api/workspaces';\n const response = await fetch(url);\n if (!response.ok) throw new Error('Failed to fetch workspaces');\n const data: WorkspacesResponse = await response.json();\n setWorkspaces(data);\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load workspaces');\n } finally {\n setIsLoadingWorkspaces(false);\n }\n }, [sessionId]);\n\n // Fetch workspace files\n const fetchWorkspaceFiles = useCallback(async (workspace: WorkspaceInfo) => {\n setIsLoadingFiles(true);\n setWorkspaceError(null);\n try {\n const response = await fetch(`/api/workspace/browse?path=${encodeURIComponent(workspace.path)}`);\n if (!response.ok) throw new Error('Failed to fetch workspace files');\n const data = await response.json();\n setWorkspaceFiles(data.files || []);\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to load files');\n setWorkspaceFiles([]);\n } finally {\n setIsLoadingFiles(false);\n }\n }, []);\n\n // Fetch answer workspaces\n const fetchAnswerWorkspaces = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n try {\n const response = await fetch(`/api/sessions/${sessionId}/answer-workspaces`);\n if (response.ok) {\n const data: AnswerWorkspacesResponse = await response.json();\n setAnswerWorkspaces(data.workspaces || []);\n }\n } catch (err) {\n console.error('Failed to fetch answer workspaces:', err);\n }\n }, []);\n\n // Open workspace in native file browser\n const openWorkspaceInFinder = useCallback(async (workspacePath: string) => {\n try {\n const response = await fetch('/api/workspace/open', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: workspacePath }),\n });\n if (!response.ok) {\n const data = await response.json();\n setWorkspaceError(data.error || 'Failed to open workspace');\n }\n } catch (err) {\n setWorkspaceError(err instanceof Error ? err.message : 'Failed to open workspace');\n }\n }, []);\n\n // Map workspaces to selected agent (defaults to winner, but can switch)\n const activeWorkspace = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n if (!targetAgent) return null;\n\n // If viewing historical version, get path from answerWorkspaces\n if (selectedAnswerLabel !== 'current') {\n const answerWs = answerWorkspaces.find(\n (w) => w.agentId === targetAgent && w.answerLabel === selectedAnswerLabel\n );\n if (answerWs) {\n return {\n name: answerWs.answerLabel,\n path: answerWs.workspacePath,\n type: 'historical' as const,\n };\n }\n return null;\n }\n\n // For FinalAnswerView, prioritize final workspace from log directory\n // Look for workspace with /final/ in path from answerWorkspaces\n const finalWs = answerWorkspaces.find(\n (w) => w.agentId === targetAgent && w.workspacePath.includes('/final/')\n );\n if (finalWs) {\n return {\n name: 'Final',\n path: finalWs.workspacePath,\n type: 'historical' as const,\n };\n }\n\n // Fallback: Get current workspace for the agent\n const ws = workspaces.current.find((w) => {\n const agentId = getAgentIdFromWorkspace(w.name, agentOrder);\n return agentId === targetAgent;\n });\n return ws || null;\n }, [workspaces, selectedAgent, selectedAgentWorkspace, selectedAnswerLabel, answerWorkspaces, agentOrder]);\n\n // Check if current agent is the winner AND has a workspace\n // Only the winner agent should show \"Final\" option\n const hasFinalWorkspace = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n // Only show \"Final\" for the winner agent\n if (!targetAgent || targetAgent !== selectedAgent) return false;\n return workspaces.current.some((w) => {\n const agentId = getAgentIdFromWorkspace(w.name, agentOrder);\n return agentId === targetAgent;\n });\n }, [workspaces, selectedAgent, selectedAgentWorkspace, agentOrder]);\n\n // Get historical workspaces for current agent\n const agentHistoricalWorkspaces = useMemo(() => {\n const targetAgent = selectedAgentWorkspace || selectedAgent;\n return answerWorkspaces.filter(w => w.agentId === targetAgent);\n }, [answerWorkspaces, selectedAgentWorkspace, selectedAgent]);\n\n // Map workspaces by agent for ComparisonView\n const workspacesByAgent = useMemo(() => {\n const map: Record = {};\n\n // Initialize for all agents\n agentOrder.forEach((agentId) => {\n map[agentId] = { historical: [] };\n });\n\n // Map current workspaces\n workspaces.current.forEach((ws) => {\n const agentId = ws.agentId || getAgentIdFromWorkspace(ws.name, agentOrder);\n if (agentId && map[agentId]) {\n map[agentId].current = ws;\n }\n });\n\n // Map historical workspaces from answer workspaces\n answerWorkspaces.forEach((aw) => {\n if (map[aw.agentId]) {\n map[aw.agentId].historical.push({\n name: aw.answerLabel,\n path: aw.workspacePath,\n type: 'historical',\n agentId: aw.agentId,\n });\n }\n });\n\n return map;\n }, [workspaces, answerWorkspaces, agentOrder]);\n\n // Count total workspaces for compare button visibility\n const totalWorkspaces = useMemo(() => {\n let count = 0;\n Object.values(workspacesByAgent).forEach(({ current, historical }) => {\n if (current) count++;\n count += historical.length;\n });\n return count;\n }, [workspacesByAgent]);\n\n // Fetch workspaces when workspace tab is active\n useEffect(() => {\n if (activeTab === 'workspace') {\n fetchWorkspaces();\n fetchAnswerWorkspaces();\n }\n }, [activeTab, fetchWorkspaces, fetchAnswerWorkspaces, sessionId]);\n\n // Fetch files when workspace is available\n // Also clear selected file when workspace changes to avoid showing stale content\n useEffect(() => {\n const currentPath = activeWorkspace?.path || null;\n const pathChanged = prevWorkspacePathRef.current !== currentPath;\n\n if (activeWorkspace && activeTab === 'workspace' && pathChanged) {\n prevWorkspacePathRef.current = currentPath;\n // Clear the selected file path when workspace actually changes\n setSelectedFilePath('');\n // Reset auto-preview tracking for this new workspace\n hasAutoPreviewedRef.current = null;\n // Clear workspace files first to show loading state\n setWorkspaceFiles([]);\n fetchWorkspaceFiles(activeWorkspace);\n } else if (!activeWorkspace && workspaceFiles.length > 0) {\n setWorkspaceFiles([]);\n setSelectedFilePath('');\n }\n }, [activeWorkspace, activeTab, fetchWorkspaceFiles, workspaceFiles.length]);\n\n // Clear selected file when workspace files become empty (prevents stale preview)\n useEffect(() => {\n if (workspaceFiles.length === 0 && selectedFilePath && !isLoadingFiles) {\n setSelectedFilePath('');\n }\n }, [workspaceFiles.length, selectedFilePath, isLoadingFiles]);\n\n // Build file tree\n const fileTree = useMemo(() => buildFileTree(workspaceFiles), [workspaceFiles]);\n\n // Auto-preview: Select first previewable file when workspace files are loaded\n useEffect(() => {\n const workspaceKey = activeWorkspace?.path || '';\n if (\n workspaceFiles.length > 0 &&\n !selectedFilePath &&\n activeTab === 'workspace' &&\n hasAutoPreviewedRef.current !== workspaceKey\n ) {\n // Find main previewable file with priority: PDF > PPTX > DOCX > HTML > images > other\n const findMainPreviewable = (): string | null => {\n const previewableFiles = workspaceFiles.filter(f => canPreviewFile(f.path));\n if (previewableFiles.length === 0) return null;\n\n // Priority 1: PDF\n const pdf = previewableFiles.find(f => f.path.toLowerCase().endsWith('.pdf'));\n if (pdf) return pdf.path;\n\n // Priority 2: PPTX\n const pptx = previewableFiles.find(f => f.path.toLowerCase().endsWith('.pptx'));\n if (pptx) return pptx.path;\n\n // Priority 3: DOCX\n const docx = previewableFiles.find(f => f.path.toLowerCase().endsWith('.docx'));\n if (docx) return docx.path;\n\n // Priority 4: index.html\n const indexHtml = previewableFiles.find(f => f.path.toLowerCase().endsWith('index.html'));\n if (indexHtml) return indexHtml.path;\n\n // Priority 5: Any HTML file\n const anyHtml = previewableFiles.find(f =>\n f.path.toLowerCase().endsWith('.html') || f.path.toLowerCase().endsWith('.htm')\n );\n if (anyHtml) return anyHtml.path;\n\n // Priority 6: Images\n const image = previewableFiles.find(f => {\n const ext = f.path.toLowerCase();\n return ext.endsWith('.png') || ext.endsWith('.jpg') || ext.endsWith('.jpeg') ||\n ext.endsWith('.gif') || ext.endsWith('.svg') || ext.endsWith('.webp');\n });\n if (image) return image.path;\n\n // Priority 7: First previewable file\n return previewableFiles[0].path;\n };\n\n const mainFile = findMainPreviewable();\n if (mainFile) {\n hasAutoPreviewedRef.current = workspaceKey;\n setSelectedFilePath(mainFile);\n }\n }\n }, [workspaceFiles, selectedFilePath, activeTab, activeWorkspace]);\n\n // Copy to clipboard\n const handleCopy = useCallback(async () => {\n if (finalAnswer && finalAnswer !== '__PENDING__') {\n await navigator.clipboard.writeText(finalAnswer);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [finalAnswer]);\n\n // Handle follow-up question submission\n const handleFollowUpSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n if (followUpQuestion.trim() && onFollowUp) {\n onFollowUp(followUpQuestion.trim());\n setFollowUpQuestion('');\n }\n }, [followUpQuestion, onFollowUp]);\n\n // Share - create gist and show result\n const handleShare = useCallback(async () => {\n const sessionId = useAgentStore.getState().sessionId;\n if (!sessionId) return;\n setIsSharing(true);\n setShareError(null);\n setShareResult(null);\n setShowShareModal(true);\n try {\n const response = await fetch(`/api/sessions/${sessionId}/share`, { method: 'POST' });\n const data = await response.json();\n if (!response.ok) {\n setShareError(data.error || 'Failed to share session');\n return;\n }\n setShareResult({ url: data.viewer_url, message: data.message });\n } catch (err) {\n console.error('Share failed:', err);\n setShareError('Failed to share session. Check console for details.');\n } finally {\n setIsSharing(false);\n }\n }, []);\n\n // Copy share link to clipboard\n const handleCopyShareLink = useCallback(async () => {\n if (!shareResult?.url) return;\n await navigator.clipboard.writeText(shareResult.url);\n setShareLinkCopied(true);\n setTimeout(() => setShareLinkCopied(false), 2000);\n }, [shareResult]);\n\n return (\n \n {/* Header */}\n
    \n \n \n Back to Agents\n \n\n
    \n \n
    \n

    \n Final Answer\n

    \n

    \n from {displayName}\n

    \n
    \n
    \n\n
    \n \n {copied ? (\n <>\n \n Copied!\n \n ) : (\n <>\n \n Copy\n \n )}\n \n \n \n Share\n \n {onNewSession && (\n \n \n New Session\n \n )}\n
    \n
    \n\n {/* Tabs */}\n
    \n setActiveTab('answer')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'answer'\n ? 'border-blue-500 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-200'\n }`}\n >\n \n Answer\n \n setActiveTab('workspace')}\n className={`flex items-center gap-2 px-6 py-3 text-sm font-medium transition-colors border-b-2 ${\n activeTab === 'workspace'\n ? 'border-blue-500 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-200'\n }`}\n >\n \n Workspace\n \n
    \n\n {/* Tab Content */}\n
    \n \n {activeTab === 'answer' ? (\n \n
    \n {/* Conversation History - shown at top for context */}\n \n\n {/* Final Answer Content */}\n
    \n {!finalAnswer || finalAnswer === '__PENDING__' ? (\n
    \n \n

    Loading final answer...

    \n
    \n ) : (\n
    \n                      {finalAnswer}\n                    
    \n )}\n
    \n
    \n \n ) : (\n \n {/* Workspace toolbar */}\n
    \n {/* Agent selector */}\n
    \n \n Agent:\n
    \n {agentOrder.map((agentId) => {\n const isWinner = agentId === selectedAgent;\n const isSelected = agentId === (selectedAgentWorkspace || selectedAgent);\n return (\n {\n setSelectedAgentWorkspace(agentId);\n // For winner, default to 'current' (Final)\n // For non-winners, default to most recent (highest answerNumber) workspace\n if (agentId === selectedAgent) {\n setSelectedAnswerLabel('current');\n } else {\n const agentWs = answerWorkspaces\n .filter(w => w.agentId === agentId)\n .sort((a, b) => (b.answerNumber || 0) - (a.answerNumber || 0));\n if (agentWs.length > 0) {\n // Select the most recent answer (highest answerNumber)\n setSelectedAnswerLabel(agentWs[0].answerLabel);\n } else {\n setSelectedAnswerLabel('current'); // Will show empty state\n }\n }\n setSelectedFilePath('');\n }}\n className={`px-3 py-1 text-sm rounded transition-colors flex items-center gap-1 ${\n isSelected\n ? 'bg-blue-600 text-white'\n : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600'\n }`}\n >\n {agentId}\n {isWinner && }\n \n );\n })}\n
    \n
    \n\n {/* Version selector - only show if there are versions to select */}\n {(hasFinalWorkspace || agentHistoricalWorkspaces.length > 0) && (\n
    \n \n Version:\n
    \n {\n const label = e.target.value;\n setSelectedAnswerLabel(label);\n // Workspace will be automatically updated via activeWorkspace memo\n setSelectedFilePath('');\n }}\n className=\"appearance-none bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg px-3 py-1.5 pr-8 text-sm text-gray-700 dark:text-gray-200\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n {hasFinalWorkspace && }\n {agentHistoricalWorkspaces.map((ws) => (\n \n ))}\n \n \n
    \n
    \n )}\n\n {/* Compare button - show when there are 2+ workspaces */}\n {totalWorkspaces >= 2 && (\n setIsComparisonOpen(true)}\n className=\"ml-auto flex items-center gap-2 px-3 py-1.5 bg-purple-600 hover:bg-purple-500\n rounded-lg transition-colors text-white text-sm\"\n title=\"Compare workspaces side-by-side\"\n >\n \n Compare\n \n )}\n\n {/* Open Folder button */}\n {activeWorkspace && (\n openWorkspaceInFinder(activeWorkspace.path)}\n className={`${totalWorkspaces < 2 ? 'ml-auto' : ''} flex items-center gap-2 px-3 py-1.5 bg-blue-600 hover:bg-blue-500\n rounded-lg transition-colors text-white text-sm`}\n title=\"Open workspace in file browser\"\n >\n \n Open Folder\n \n )}\n\n {/* Refresh button */}\n { fetchWorkspaces(); fetchAnswerWorkspaces(); }}\n disabled={isLoadingWorkspaces}\n className={`${!activeWorkspace ? 'ml-auto' : ''} p-2 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors\n text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200`}\n title=\"Refresh workspaces\"\n >\n \n \n
    \n\n {/* Active workspace path display */}\n {activeWorkspace && (\n
    \n Path:\n \n {activeWorkspace.path}\n \n \n ({selectedAnswerLabel === 'current' ? 'final' : 'historical snapshot'})\n \n
    \n )}\n\n {/* Error display */}\n {workspaceError && (\n
    \n {workspaceError}\n
    \n )}\n\n {/* Split View: File Tree + Preview with draggable divider */}\n
    \n {isPreviewFullscreen ? (\n /* When fullscreen, show only the preview */\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n ) : (\n \n {isLoadingWorkspaces || isLoadingFiles ? (\n
    \n \n

    Loading...

    \n
    \n ) : !activeWorkspace ? (\n
    \n \n

    No workspace found

    \n {selectedAnswerLabel !== 'current' && (\n

    Historical snapshot not available

    \n )}\n
    \n ) : workspaceFiles.length === 0 ? (\n
    \n \n

    No files

    \n
    \n ) : (\n
    \n
    \n \n {workspaceFiles.length} files\n \n ({selectedAnswerLabel === 'current' ? 'final' : 'historical'})\n \n
    \n {fileTree.map((node) => (\n \n ))}\n
    \n )}\n
    \n }\n right={\n
    \n {selectedFilePath && activeWorkspace ? (\n setIsPreviewFullscreen(true)}\n />\n ) : (\n
    \n \n

    Select a file to preview

    \n

    Click any file in the tree

    \n
    \n )}\n
    \n }\n />\n )}\n \n \n )}\n
    \n\n {/* Fullscreen Preview Modal */}\n \n {isPreviewFullscreen && selectedFilePath && activeWorkspace && (\n setIsPreviewFullscreen(false)}\n >\n e.stopPropagation()}\n >\n {/* Fullscreen header */}\n
    \n
    \n \n {selectedFilePath}\n
    \n setIsPreviewFullscreen(false)}\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors text-gray-500 dark:text-gray-400\"\n title=\"Close fullscreen\"\n >\n \n \n
    \n {/* Fullscreen preview content */}\n
    \n setIsPreviewFullscreen(false)}\n />\n
    \n \n \n )}\n
    \n
    \n\n {/* Follow-up Input Footer */}\n {onFollowUp && (\n
    \n
    \n setFollowUpQuestion(e.target.value)}\n placeholder=\"Ask a follow-up question...\"\n disabled={!isConnected}\n className=\"flex-1 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg px-4 py-3\n text-gray-900 dark:text-gray-100 placeholder-gray-500\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n \n \n Continue\n \n \n
    \n )}\n\n {/* Share Modal */}\n \n {showShareModal && (\n setShowShareModal(false)}\n >\n e.stopPropagation()}\n >\n
    \n

    Share Session

    \n setShowShareModal(false)}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n >\n \n \n
    \n\n {isSharing && (\n
    \n \n

    Uploading to GitHub Gist...

    \n
    \n )}\n\n {shareError && !isSharing && (\n
    \n

    {shareError}

    \n

    \n Make sure GitHub CLI (gh) is installed and authenticated.\n

    \n
    \n )}\n\n {shareResult && !isSharing && (\n
    \n
    \n

    \n {shareResult.message}\n

    \n
    \n \n \n {shareLinkCopied ? (\n <>\n \n Copied!\n \n ) : (\n <>\n \n Copy\n \n )}\n \n
    \n
    \n \n Open in New Tab →\n \n
    \n )}\n \n \n )}\n
    \n\n {/* Comparison View Modal */}\n setIsComparisonOpen(false)}\n agentWorkspaces={workspacesByAgent}\n answerWorkspaces={answerWorkspaces}\n agentOrder={agentOrder}\n sessionId={sessionId}\n initialFile={selectedFilePath}\n />\n \n );\n}\n\nexport default FinalAnswerView;\n","/**\n * Context Paths Step Component\n *\n * Configure read/write paths for agents.\n * Uses backend API to open native file picker dialogs.\n */\n\nimport { motion } from 'framer-motion';\nimport { FolderOpen, File, Plus, Trash2, BookOpen, Edit3, Loader2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { useWizardStore, selectContextPaths } from '../../stores/wizardStore';\n\nexport function ContextPathsStep() {\n const contextPaths = useWizardStore(selectContextPaths);\n const addContextPath = useWizardStore((s) => s.addContextPath);\n const removeContextPath = useWizardStore((s) => s.removeContextPath);\n const updateContextPath = useWizardStore((s) => s.updateContextPath);\n\n const [newPath, setNewPath] = useState('');\n const [newType, setNewType] = useState<'read' | 'write'>('read');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const handleAddPath = () => {\n if (newPath.trim()) {\n addContextPath(newPath.trim(), newType);\n setNewPath('');\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n handleAddPath();\n }\n };\n\n const browseFiles = async (mode: 'files' | 'directory') => {\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await fetch('/api/browse/files', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n mode,\n multiple: mode === 'files',\n title: mode === 'files' ? 'Select Files' : 'Select Directory',\n }),\n });\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.error || 'Failed to open file picker');\n }\n\n const data = await response.json();\n const paths = data.paths || [];\n\n // Add each selected path\n for (const path of paths) {\n if (path) {\n addContextPath(path, newType);\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to open file picker');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n
    \n

    \n Context Paths\n

    \n

    \n Add files or directories that agents can access. Read paths are for reference,\n write paths allow agents to create and modify files.\n

    \n
    \n\n {/* Browse Buttons */}\n
    \n browseFiles('files')}\n disabled={isLoading}\n className=\"flex-1 flex items-center justify-center gap-2 p-4 border-2 border-dashed\n border-gray-300 dark:border-gray-600 rounded-lg\n hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20\n disabled:opacity-50 disabled:cursor-not-allowed transition-all\"\n >\n {isLoading ? (\n \n ) : (\n \n )}\n Browse Files\n \n\n browseFiles('directory')}\n disabled={isLoading}\n className=\"flex-1 flex items-center justify-center gap-2 p-4 border-2 border-dashed\n border-gray-300 dark:border-gray-600 rounded-lg\n hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20\n disabled:opacity-50 disabled:cursor-not-allowed transition-all\"\n >\n {isLoading ? (\n \n ) : (\n \n )}\n Browse Directory\n \n
    \n\n {error && (\n
    \n {error}\n
    \n )}\n\n {/* Manual Path Entry */}\n
    \n
    \n setNewPath(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter path (relative or absolute)\"\n className=\"w-full px-3 py-2 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg text-gray-800 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n
    \n setNewType(e.target.value as 'read' | 'write')}\n className=\"px-3 py-2 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600\n rounded-lg text-gray-800 dark:text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n \n \n \n \n \n \n
    \n\n {/* Path List */}\n {contextPaths.length > 0 && (\n
    \n

    \n Added Paths ({contextPaths.length})\n

    \n
    \n {contextPaths.map((cp, index) => (\n \n {/* Type Icon */}\n {cp.type === 'read' ? (\n \n ) : (\n \n )}\n\n {/* Path */}\n \n {cp.path}\n \n\n {/* Type Toggle */}\n updateContextPath(index, cp.path, cp.type === 'read' ? 'write' : 'read')}\n className={`\n px-2 py-1 text-xs rounded transition-colors\n ${cp.type === 'read'\n ? 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-900/50'\n : 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400 hover:bg-amber-200 dark:hover:bg-amber-900/50'\n }\n `}\n >\n {cp.type}\n \n\n {/* Remove Button */}\n removeContextPath(index)}\n className=\"p-1 text-gray-400 hover:text-red-500 transition-colors\"\n >\n \n \n \n ))}\n
    \n
    \n )}\n\n {contextPaths.length === 0 && (\n
    \n No paths added yet. This step is optional - you can proceed without adding any paths.\n
    \n )}\n\n
    \n Tip: Use relative paths from where MassGen is launched, or absolute paths for any location.\n
    \n \n );\n}\n","/**\n * Docker Step Component\n *\n * First step in the quickstart wizard - choose Docker or local mode.\n */\n\nimport { motion } from 'framer-motion';\nimport { Container, Monitor, AlertTriangle, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function DockerStep() {\n const useDocker = useWizardStore((s) => s.useDocker);\n const setUseDocker = useWizardStore((s) => s.setUseDocker);\n const setupStatus = useWizardStore((s) => s.setupStatus);\n\n const dockerAvailable = setupStatus?.docker_available ?? false;\n\n return (\n \n
    \n

    \n Execution Mode\n

    \n

    \n Choose how agents execute code and commands.\n

    \n
    \n\n
    \n {/* Docker Option */}\n dockerAvailable && setUseDocker(true)}\n disabled={!dockerAvailable}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n useDocker && dockerAvailable\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : dockerAvailable\n ? 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n : 'border-gray-200 dark:border-gray-700 opacity-50 cursor-not-allowed'\n }`}\n >\n
    \n \n
    \n \n Docker\n \n {dockerAvailable && (\n \n Recommended\n \n )}\n
    \n {useDocker && dockerAvailable && (\n \n )}\n
    \n

    \n Full code execution in isolated containers. Agents can run commands,\n install packages, and use tools safely.\n

    \n {!dockerAvailable && (\n
    \n \n Docker images not found. Run massgen --setup-docker\n
    \n )}\n \n\n {/* Local Option */}\n setUseDocker(false)}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n !useDocker\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Local\n \n {!useDocker && (\n \n )}\n
    \n

    \n File operations only. Agents can create and edit files but cannot\n execute commands or install packages.\n

    \n \n
    \n\n
    \n You can change this later in the config file.\n
    \n \n );\n}\n","/**\n * API Key Step Component\n *\n * Shows which providers have API keys configured and provides setup instructions.\n */\n\nimport { motion } from 'framer-motion';\nimport { Key, Check, AlertTriangle, RefreshCw, ExternalLink } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function ApiKeyStep() {\n const providers = useWizardStore((s) => s.providers);\n const isLoading = useWizardStore((s) => s.isLoading);\n const fetchProviders = useWizardStore((s) => s.fetchProviders);\n\n const availableProviders = providers.filter((p) => p.has_api_key);\n const unavailableProviders = providers.filter((p) => !p.has_api_key);\n\n const handleRefresh = () => {\n fetchProviders();\n };\n\n return (\n \n
    \n

    \n API Keys\n

    \n

    \n MassGen needs API keys to access LLM providers. Set up at least one provider to continue.\n

    \n
    \n\n {/* Available Providers */}\n {availableProviders.length > 0 && (\n
    \n

    \n Available Providers\n

    \n
    \n {availableProviders.map((provider) => (\n \n \n \n {provider.name}\n \n \n API key configured\n \n
    \n ))}\n
    \n \n )}\n\n {/* Unavailable Providers */}\n {unavailableProviders.length > 0 && (\n
    \n

    \n Not Configured\n

    \n
    \n {unavailableProviders.map((provider) => (\n \n \n \n {provider.name}\n \n {provider.env_var && (\n \n {provider.env_var}\n \n )}\n
    \n ))}\n
    \n \n )}\n\n {/* Setup Instructions */}\n
    \n
    \n \n

    \n How to Set API Keys\n

    \n
    \n
    \n

    In your terminal, set environment variables before running MassGen:

    \n
    \n
    # OpenAI
    \n
    export OPENAI_API_KEY=sk-your-key-here
    \n
    # Anthropic (Claude)
    \n
    export ANTHROPIC_API_KEY=sk-ant-your-key-here
    \n
    # Google (Gemini)
    \n
    export GOOGLE_API_KEY=your-key-here
    \n
    \n

    \n Then restart the MassGen server for changes to take effect.\n

    \n
    \n \n \n View full setup guide\n \n
    \n\n {/* Refresh Button */}\n
    \n \n \n Refresh\n \n {availableProviders.length === 0 && (\n \n Set at least one API key to continue\n \n )}\n
    \n \n );\n}\n","/**\n * Agent Count Step Component\n *\n * Second step - choose number of agents.\n */\n\nimport { motion } from 'framer-motion';\nimport { Users, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nconst agentOptions = [\n { count: 1, label: '1 agent', description: 'Single agent' },\n { count: 2, label: '2 agents', description: 'Basic collaboration' },\n { count: 3, label: '3 agents', description: 'Recommended for most tasks', recommended: true },\n { count: 4, label: '4 agents', description: 'More diverse perspectives' },\n { count: 5, label: '5 agents', description: 'Maximum collaboration' },\n];\n\nexport function AgentCountStep() {\n const agentCount = useWizardStore((s) => s.agentCount);\n const setAgentCount = useWizardStore((s) => s.setAgentCount);\n\n return (\n \n
    \n

    \n How many agents?\n

    \n

    \n More agents provide diverse perspectives but use more API credits.\n

    \n
    \n\n
    \n {agentOptions.map((option) => (\n setAgentCount(option.count)}\n className={`p-4 rounded-lg border-2 text-left transition-all ${\n agentCount === option.count\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n
    \n \n \n {option.label}\n \n
    \n {agentCount === option.count && (\n \n )}\n
    \n

    \n {option.description}\n

    \n {option.recommended && (\n \n Recommended\n \n )}\n \n ))}\n
    \n \n );\n}\n","/**\n * Setup Mode Step Component\n *\n * Third step (for 2+ agents) - choose same or different providers.\n */\n\nimport { motion } from 'framer-motion';\nimport { Copy, Shuffle, Check } from 'lucide-react';\nimport { useWizardStore } from '../../stores/wizardStore';\n\nexport function SetupModeStep() {\n const setupMode = useWizardStore((s) => s.setupMode);\n const setSetupMode = useWizardStore((s) => s.setSetupMode);\n const agentCount = useWizardStore((s) => s.agentCount);\n\n return (\n \n
    \n

    \n Setup Mode\n

    \n

    \n Configure how your {agentCount} agents will be set up.\n

    \n
    \n\n
    \n {/* Same Config Option */}\n setSetupMode('same')}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n setupMode === 'same'\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Same for all\n \n {setupMode === 'same' && (\n \n )}\n
    \n

    \n Use the same provider and model for all agents. Quick setup for\n comparing agent responses.\n

    \n \n\n {/* Different Config Option */}\n setSetupMode('different')}\n className={`p-6 rounded-lg border-2 text-left transition-all ${\n setupMode === 'different'\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'\n : 'border-gray-300 dark:border-gray-600 hover:border-blue-300 dark:hover:border-blue-600'\n }`}\n >\n
    \n \n \n Different per agent\n \n {setupMode === 'different' && (\n \n )}\n
    \n

    \n Configure each agent with a different provider and model.\n Great for diverse perspectives.\n

    \n \n
    \n \n );\n}\n","/**\n * Agent Config Step Component\n *\n * Fourth step - configure provider and model for each agent.\n * Full-page scrollable layout with large, visible cards for easy selection.\n */\n\nimport { useEffect, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { Bot, AlertCircle, Check, Search, Sparkles, X, Globe, Code, MessageSquare } from 'lucide-react';\nimport { useWizardStore, ProviderInfo, ProviderCapabilities } from '../../stores/wizardStore';\n\ninterface ProviderCardProps {\n provider: ProviderInfo;\n isSelected: boolean;\n onSelect: () => void;\n disabled?: boolean;\n}\n\nfunction ProviderCard({ provider, isSelected, onSelect, disabled }: ProviderCardProps) {\n return (\n \n
    \n
    \n {provider.name}\n
    \n {isSelected && (\n
    \n \n
    \n )}\n
    \n\n {disabled && (\n
    \n Needs {provider.env_var}\n
    \n )}\n \n );\n}\n\ninterface ModelCardProps {\n model: string;\n isSelected: boolean;\n isDefault: boolean;\n onSelect: () => void;\n}\n\nfunction ModelCard({ model, isSelected, isDefault, onSelect }: ModelCardProps) {\n return (\n \n
    \n
    \n \n {model}\n \n {isDefault && (\n \n \n Recommended\n \n )}\n
    \n {isSelected && (\n
    \n \n
    \n )}\n
    \n \n );\n}\n\n// Per-agent option toggle component\ninterface OptionToggleProps {\n enabled: boolean;\n onChange: (enabled: boolean) => void;\n icon: React.ReactNode;\n label: string;\n description?: string;\n}\n\nfunction OptionToggle({ enabled, onChange, icon, label, description }: OptionToggleProps) {\n return (\n